#328 by GitHub stars

aldegad/sprite-gen

Generates images and game sprites through GPT or Grok with guided provider choices, separate saved defaults, automatic cleanup and optional curation. Handles sprite requests, ordinary image generation/editing, typography logos (로고, 타이포그래피, 타이틀 글자, 타이틀 로고, wordmark, logo, title lettering: a title scr

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +13 / −7 lines

Before Network or broad shell → After Network or broad shell

419f02cd54b4 → 4f5ccd55c7cf

- 3 version: 3.5.0
+ 3 version: 3.15.0
- 17       why: "video-loop jump repair and video-cycle-align (RIFE v4.6 in-betweens with the -x -z test-time augmentation, release 20221029). Install once with `sprite-gen rife install` (sha256-checked, into the user data directory); SPRITE_GEN_RIFE or PATH override it; Linux without a GPU also needs libvulkan1 mesa-vulkan-drivers. Without it, walk and run loops are cut as filmed with a warning. SPRITE_GEN_RIFE_BACKEND=torch runs the same model in PyTorch instead, for a GPU with no Vulkan (`pip install \"sprite-gen[torch]\"`, then `sprite-gen rife install --backend torch`; SPRITE_GEN_RIFE_DEVICE=cuda or cpu; SPRITE_GEN_RIFE_EXECUTOR=module:attr sends its frames to a GPU elsewhere, rife_torch.serve there)"
+ 17       why: "video-loop jump repair, held-cell fill and video-cycle-align (RIFE v4.25 in-betweens, no test-time augmentation, each image padded to 128; TNTwise's rife-ncnn-vulkan release 20250112). Install once with `sprite-gen rife install` (an 830 MB zip, 45 MB kept, sha256-checked, into the user data directory); SPRITE_GEN_RIFE or PATH override it (nihui's 20221029 on PATH has no rife-v4.25: install, or set SPRITE_GEN_RIFE); SPRITE_GEN_RIFE_MODEL_NAME=rife-v4.6 runs the old model with -x -z, its frames 3.14.0's; Linux without a GPU also needs libvulkan1 mesa-vulkan-drivers. Without it, walk and run loops are cut as filmed with a warning. SPRITE_GEN_RIFE_BACKEND=torch runs the same model in PyTorch instead, for a GPU with no Vulkan (`pip install \"sprite-gen[torch]\"`, then `sprite-gen rife install --backend torch`; SPRITE_GEN_RIFE_DEVICE=cuda or cpu; SPRITE_GEN_RIFE_EXECUTOR=module:attr sends its frames to a GPU elsewhere, rife_torch.serve there)"
- 115 | Idle breathing as a post-processing layer (the Breathe layer): pixel (default, pixel art) or smooth (large illustrations, video frames: head fixed, chest breathes, shoulders follow; facing values for a turned body); smooth can choose a beat that misses the hands with `--avoid-region`, and a way in or out of a loop carries on its breath with `--loop-cells`, `--start-cell` and `--reference` | curation sidecar, baked by compose; or `sprite-gen breathe <frames> <out>` on a folder of loop frames | [breathing](docs/breathing.md) |
+ 115 | Idle breathing as a post-processing layer (the Breathe layer): pixel (default, pixel art) or smooth (large illustrations, video frames: head fixed, chest breathes, shoulders follow; facing values for a turned body); smooth can choose a beat that misses the hands with `--avoid-region`, and a way in or out of a loop carries on its breath with `--loop-cells`, `--start-cell` and `--reference`; pixel can breathe round from the chest with the arms moving sideways (`--chest-round`, `--arms-x`), cells held still (`--hold-mask`), what the arms hold moving whole with them (`--props-mask`), what the arms hold behind the body (a shield hung at the back) moves the same way with the body staying in front (`--props-behind-mask`), and pieces painted one colour move together (`--props-groups colour`, so a sword's reflection follows the sword) | curation sidecar, baked by compose; or `sprite-gen breathe <frames> <out>` on a folder of loop frames | [breathing](docs/breathing.md) |
- 118 | Ground tile that repeats both ways | `gen` (opaque), then `background-tile --axis xy` | [asset-tools](docs/asset-tools.md#both-axes-a-ground-tile) |
- 119 | Game UI kit: panel, buttons, card, HP/XP bar frames and fills, timer badge, item slot, counter plate, on/off dots, joystick base and knob as sliced elements | `gen --transparent --aspect-ratio 2:3 --layout-guide ui-kit` (`1:1`: the seven frames alone), then `ui-kit`; the seven frames are required, and a band element whose box is empty is left out and named under `missing` | [ui-kit](docs/ui-kit.md#missing-elements) |
- 121 | Painted props, a ground tile and a UI kit in a game pack | `game-pack` request version 2 (`images`, `tiles`, `ui`) | [game-pack](docs/game-pack.md#version-2-images-tiles-and-ui) |
+ 122 | What the engine can do, for an agent or a tool to read once: every verb and argument, the providers each may call and be billed by (one JSON line, a quarter of every `--help`); a sandbox that reaches the providers through a relay: `SPRITE_GEN_<PROVIDER>_BASE_URL` (`OPENAI`, `XAI`, `ANTHROPIC`) moves a provider's calls and the files it hands back, `SPRITE_GEN_LOGINS=off` runs every call on its API key | `capabilities` | [capabilities](docs/capabilities.md), [provider addresses](docs/gen.md#provider-addresses) |
+ 130 
+ 131 Every cut is read for held cells (neighbour cells showing the same picture), and by default they are filled with RIFE's frames between and the cut read again (`video-loop --fill-held auto`; `off` cuts as filmed). Tell the user each motion's poses over cells in one line from `held_fill` (`poses/cells`, before and after, e.g. `24/27` to `27/27`). A run whose frames between were all refused stays as filmed and is named in a `warning:` line: say so with its poses over cells. A cut wanted above its clip's rate is given with `--out-fps`, frames between, never repeats. Details in [loop repair](docs/loop-repair.md#7-held-cells-a-picture-shown-again-and-a-cut-at-a-higher-rate).
+ 132 
+ 133 A move played once (a jump, a vault: `once`, `once-return`, `one-shot`) carries its root motion in the strip sidecar by default, the cells unchanged: `root_motion` gives each cell's root (the body's mass centre, cell px), what it stands on, and each air's take-off, landing, seconds and apex; a game reads `root` to place each cell and moves the body on its own physics. A move cut out of a longer motion is named with `video-loop --cycle once --start S --length L`, a hand on something the clip does not draw with `--contact hand=A:B`, metres with `--meters-per-px`; a jump whose body crosses the canvas is named the same way, because it never comes back to a pose it left: the one-shot cut refuses it and its line names the closest return (`the closest return, frames A-B, is R of its departure away`), whose frames are where to start the range. To give the air its own length, gravity and speed, `--air-retime gravity=G,air=T,speed=V` redraws it on that parabola with RIFE's frames between; contacts and the take-off and landing stay as filmed. Tell the user each air in one line, its seconds and its apex (the summary's `air`, e.g. `air 0.42 s, apex 0.21 m`). Details in [video-pipeline](docs/video-pipeline.md#root-motion--a-cut-played-once-where-the-body-is-what-it-stands-on-its-air).
+ 134 
+ 135 For a move over an obstacle that clears a low wall (such as a vault or a jump), paint a flat magenta plate on the green key with `video-canvas --prop-plate` (which requires `--report`), then pass that canvas report to `video-frames --prop-plate <canvas report json>` to erase the plate from keyed frames. The plate box lives in the canvas report, which `video-frames` reads directly to scale and position the erase box; there is no second copy. If the video model drew the plate off its place by even a single pixel, grey blend lines remain down its sides: tell the user if any keyed frame kept lines of the plate. Details in [video-pipeline](docs/video-pipeline.md#prop-plate---prop-plate).
- 143 Without RIFE, tell the user which loops went unrepaired and offer the install; after it, cut those loops again and run `video-cycle-align`. [loop-repair](docs/loop-repair.md).
+ 147 RIFE is rife-v4.25 with no augmentation by default. `SPRITE_GEN_RIFE_MODEL_NAME=rife-v4.6` runs the model of 3.14.0 and before, with `-x -z`, to make a cut again as it was made then; a `--between-cache` never hands one model's frames to the other.
+ 148 
+ 149 Without RIFE, tell the user which loops went unrepaired, which motions' held cells were not filled (`held_fill.unmade`, or `--out-fps` not met) and which airs were not retimed (`air_retime.why`), and offer the install; after it, cut those loops again and run `video-cycle-align`. [loop-repair](docs/loop-repair.md).

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 419f02cd54b4

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 4f5ccd55c7cf06685a41f954acc1e476b7772ece

3.9kGitHub stars
725stars in 7 days
1skill in this repository
785commits in 30 days

Heat

8.7
  • Star growth, last 7 daysAhead of 99% of tracked repositories
  • Star growth, last 24 hoursAhead of 100% of tracked repositories
  • Rank movement, last 7 daysAhead of 98% of tracked repositories
  • Commits, last 30 daysAhead of 99% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 7, 20263,850

Individual skills in this repository

How it works

sprite-gen

When your agent uses it

Generates images and game sprites through GPT or Grok with guided provider choices, separate saved defaults, automatic cleanup and optional curation. Handles sprite requests, ordinary image generation/editing, typography logos (로고, 타이포그래피, 타이틀 글자, 타이틀 로고, wordmark, logo, title lettering: a title screen drawn with the title in it, its lettering lifted out transparent), standalone image-to-video clips (i2v, animate this still, 그록 영상, 이매진 비디오, 스틸 움직여줘, first/last frame, reference-to-video, 영상 이어붙이기, 영상 편집, extend/edit a clip), clips from a video MCP on the agent (ZCRE, 지크 MCP), chroma removal, animation atlases, video loops, 큐레이션뷰, image candidates, 팔레트 스왑, palette swap, recolor, engine exports, repeating backgrounds, projected shadows, talking face layers over body motions (말하는 얼굴, 입 맞추기, 얼굴 층, lip sync, face pack), motion/contact inspection and optional scene composition from existing assets.

What it loads into context

Frontmatter

867 tokens

Always available to the agent

SKILL.md

5,172 tokens

When the skill is activated

Reference documents

504,191 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Start every generation request here
  2. When codex cannot run — exit 75
  3. Side-view facing
  4. Execution routes
  5. 실행 인터프리터
  6. RIFE for walk and run loops
  7. Contracts and advanced tools

Scripts executed separately

  • .githooks/pre-commit
  • scripts/compose_selected_cycle.py
  • scripts/compose_sprite_atlas.py
  • scripts/compose_sprite_gif.py
  • scripts/curation.py
  • scripts/dev/breathe_mutation_battery.py
  • scripts/dev/check_visible_magenta.py
  • scripts/dev/measure_align_sigma.py
  • scripts/dev/source_restoration_demo.py
  • scripts/diagnose_video_loop.py
  • scripts/export_aseprite.py
  • scripts/export_curated_pngs.py
  • scripts/extract_sprite_row_frames.py
  • scripts/gen_set.py
  • scripts/generate_sprite_image.py
  • scripts/generate_sprite_video.py
  • scripts/inspect_sprite_run.py
  • scripts/interpolate_frames.py
  • scripts/linux_lane.sh
  • scripts/prepare_sprite_run.py
  • scripts/preview_animation.py
  • scripts/recolor.py
  • scripts/release_notes.py
  • scripts/release_publish.py
  • scripts/run_correction_loop.py
  • scripts/score_sprite_run.py
  • scripts/serve_curation.py
  • scripts/slice_sheet_cells.py
  • scripts/t4_lane.py
  • scripts/unpack_atlas_run.py
  • scripts/video_canvas.py
  • scripts/video_frames.py
  • scripts/video_loop.py
  • scripts/video_set.py
  • sprite_gen/__init__.py
  • sprite_gen/_deps.py
  • sprite_gen/_modules.py
  • sprite_gen/background/__init__.py
  • sprite_gen/background/tile.py
  • sprite_gen/cli.py
  • sprite_gen/compose/__init__.py
  • sprite_gen/compose/compose_atlas.py
  • sprite_gen/compose/compose_cycle.py
  • sprite_gen/compose/compose_gif.py
  • sprite_gen/compose/export_aseprite.py
  • sprite_gen/compose/export_pngs.py
  • sprite_gen/curate/__init__.py
  • sprite_gen/curate/anchor.py
  • sprite_gen/curate/curation.py
  • sprite_gen/effects/__init__.py
  • sprite_gen/effects/anatomy.py
  • sprite_gen/effects/breath_beat.py
  • sprite_gen/effects/breathe.py
  • sprite_gen/effects/interpolate.py
  • sprite_gen/effects/recolor.py
  • sprite_gen/effects/reroll.py
  • sprite_gen/effects/shadow.py
  • sprite_gen/frames/__init__.py
  • sprite_gen/frames/alpha_floor.py
  • sprite_gen/frames/check_visible_magenta.py
  • sprite_gen/frames/cutout.py
  • sprite_gen/frames/decontam.py
  • sprite_gen/frames/extract.py
  • sprite_gen/frames/folder.py
  • sprite_gen/frames/logo_matte.py
  • sprite_gen/frames/measured_matte.py
  • sprite_gen/frames/segment.py
  • sprite_gen/frames/slice_sheet.py
  • sprite_gen/frames/unpack_atlas.py
  • sprite_gen/gen/__init__.py
  • sprite_gen/gen/address.py
  • sprite_gen/gen/anthropic_api.py
  • sprite_gen/gen/base.py
  • sprite_gen/gen/chroma.py
  • sprite_gen/gen/claude_login.py
  • sprite_gen/gen/codex_provider.py
  • sprite_gen/gen/facing.py
  • sprite_gen/gen/facing_vision.py
  • sprite_gen/gen/gen_set.py
  • sprite_gen/gen/grok_provider.py
  • sprite_gen/gen/handedness.py
  • sprite_gen/gen/logo.py
  • sprite_gen/gen/openai_provider.py
  • sprite_gen/gen/pixel_draw.py
  • sprite_gen/gen/pixel_gates.py
  • sprite_gen/gen/pixel_grid.py
  • sprite_gen/gen/prepare.py
  • sprite_gen/gen/prompt_parts.py
  • sprite_gen/gen/refusal.py
  • sprite_gen/gen/retry.py
  • sprite_gen/gen/video.py
  • sprite_gen/gen/xai.py
  • sprite_gen/qa/__init__.py
  • sprite_gen/qa/correction_loop.py
  • sprite_gen/qa/handed.py
  • sprite_gen/qa/inspect.py
  • sprite_gen/qa/motion.py
  • sprite_gen/qa/preview.py
  • sprite_gen/qa/score.py
  • sprite_gen/scene/__init__.py
  • sprite_gen/scene/inspect_scene.py
  • sprite_gen/scene/model.py
  • sprite_gen/scene/render.py
  • sprite_gen/serve/__init__.py
  • sprite_gen/serve/composer/src/api.js
  • sprite_gen/serve/composer/src/boot.js
  • sprite_gen/serve/composer/src/canvas.js
  • sprite_gen/serve/composer/src/controls.js
  • sprite_gen/serve/composer/src/i18n.js
  • sprite_gen/serve/composer/src/library.js
  • sprite_gen/serve/composer/src/session.js
  • sprite_gen/serve/composer/src/ui.js
  • sprite_gen/serve/curator/src/atlas.js
  • sprite_gen/serve/curator/src/base-editor.js
  • sprite_gen/serve/curator/src/boot.js
  • sprite_gen/serve/curator/src/breathe.js
  • sprite_gen/serve/curator/src/cards.js
  • sprite_gen/serve/curator/src/chrome.js
  • sprite_gen/serve/curator/src/compare.js
  • sprite_gen/serve/curator/src/display.js
  • sprite_gen/serve/curator/src/gen-trigger.js
  • sprite_gen/serve/curator/src/i18n.js
  • sprite_gen/serve/curator/src/lasso-select.js
  • sprite_gen/serve/curator/src/persistence.js
  • sprite_gen/serve/curator/src/pipeline-tree.js
  • sprite_gen/serve/curator/src/progress.js
  • sprite_gen/serve/curator/src/recolor.js
  • sprite_gen/serve/curator/src/region-transform.js
  • sprite_gen/serve/curator/src/row-controls.js
  • sprite_gen/serve/curator/src/row-export.js
  • sprite_gen/serve/curator/src/status.js
  • sprite_gen/serve/curator/src/store.js
  • sprite_gen/serve/curator/src/tooltip.js
  • sprite_gen/serve/curator/src/transform-provider.js
  • sprite_gen/serve/curator/src/transforms.js
  • sprite_gen/serve/curator/src/tween.js
  • sprite_gen/serve/curator/src/util.js
  • sprite_gen/serve/curator/src/view-nav.js
  • sprite_gen/serve/curator/src/zones.js
  • sprite_gen/serve/curator/src/zoom-editor.js
  • sprite_gen/serve/serve_compose.py
  • sprite_gen/serve/serve_curation.py
  • sprite_gen/spec/__init__.py
  • sprite_gen/spec/assets.py
  • sprite_gen/spec/layout.py
  • sprite_gen/spec/migrate_breathe.py
  • sprite_gen/spec/migrate_request.py
  • sprite_gen/spec/runio.py
  • sprite_gen/spec/subject.py
  • sprite_gen/util/__init__.py
  • sprite_gen/util/cli_kwargs.py
  • sprite_gen/util/console.py
  • sprite_gen/util/gif_utils.py
  • sprite_gen/util/hexcolor.py
  • sprite_gen/util/lsq.py
  • sprite_gen/util/resample.py
  • sprite_gen/video/__init__.py
  • sprite_gen/video/align.py
  • sprite_gen/video/auto_motion.py
  • sprite_gen/video/batch.py
  • sprite_gen/video/body_plan.py
  • sprite_gen/video/body_turn.py
  • sprite_gen/video/cadence.py
  • sprite_gen/video/canvas.py
  • sprite_gen/video/clip_prompt.py
  • sprite_gen/video/compare.py
  • sprite_gen/video/crossings.py
  • sprite_gen/video/effect.py
  • sprite_gen/video/evidence.py
  • sprite_gen/video/face_bake.py
  • sprite_gen/video/face_layer.py
  • sprite_gen/video/face_pack.py
  • sprite_gen/video/face_plan.mjs
  • sprite_gen/video/facing.py
  • sprite_gen/video/follow.py
  • sprite_gen/video/follow_inspect.py
  • sprite_gen/video/frames.py
  • sprite_gen/video/gait_fallback.py
  • sprite_gen/video/held.py
  • sprite_gen/video/held_fill.py
  • sprite_gen/video/interpolation_quality.py
  • sprite_gen/video/legs.py
  • sprite_gen/video/local_cycle.py
  • sprite_gen/video/loop.py
  • sprite_gen/video/motion_anchor.py
  • sprite_gen/video/nonloop.py
  • sprite_gen/video/part_pop.py
  • sprite_gen/video/parts.py
  • sprite_gen/video/period.py
  • sprite_gen/video/play.py
  • sprite_gen/video/playback.py
  • sprite_gen/video/prop_plate.py
  • sprite_gen/video/repair.py
  • sprite_gen/video/restoration.py
  • sprite_gen/video/rife.py
  • sprite_gen/video/rife_install.py
  • sprite_gen/video/rife_torch.py
  • sprite_gen/video/root_motion.py
  • sprite_gen/video/set_sheet.py
  • sprite_gen/video/source.py
  • sprite_gen/video/sprite-gen-face-v1.mjs
  • sprite_gen/video/stop.py
  • sprite_gen/video/sway.py
  • sprite_gen/video/sway_inspect.py
  • sprite_gen/video/wrap_blend.py
  • sprite_gen/workflow/__init__.py
  • sprite_gen/workflow/access.py
  • sprite_gen/workflow/capabilities.py
  • sprite_gen/workflow/catalog.py
  • sprite_gen/workflow/guide.py
  • sprite_gen/workflow/preferences.py
  • tests/background/test_tile.py
  • tests/background/test_tile_cli.py
  • tests/compose/test_export_aseprite.py
  • tests/conftest.py
  • tests/curate/test_anchor_selection.py
  • tests/curate/test_curation_salvage_and_clones.py
  • tests/curate/test_directions.py
  • tests/curate/test_frame_variant.py
  • tests/curate/test_logical_height_contract.py
  • tests/curate/test_pixel_snap.py
  • tests/curate/test_pixel_unfake_migration.py
  • tests/curate/test_snap_phase_policy.py
  • tests/curate/test_transform_resample.py
  • tests/docs/test_docs_index.py
  • tests/docs/test_hero_assets.py
  • tests/effects/test_breath_beat.py
  • tests/effects/test_breathe.py
  • tests/effects/test_breathe_anatomy_route.py
  • tests/effects/test_breathe_js_mirror.py
  • tests/effects/test_breathe_min_max.py
  • tests/effects/test_breathe_off_state.py
  • tests/effects/test_breathe_publish.py
  • tests/effects/test_breathe_reference_key.py
  • tests/effects/test_breathe_round.py
  • tests/effects/test_breathe_round_curator.py
  • tests/effects/test_breathe_sidecar_roundtrip.py
  • tests/effects/test_breathe_smooth.py
  • tests/effects/test_breathe_smooth_curator.py
  • tests/effects/test_frame_interpolation.py
  • tests/effects/test_palette_post_only.py
  • tests/effects/test_recolor_bake.py
  • tests/effects/test_recolor_docs.py
  • tests/effects/test_shadow.py
  • tests/fixtures/generate_fixtures.py
  • tests/frames/test_alpha_centroid_align.py
  • tests/frames/test_alpha_floor.py
  • tests/frames/test_chroma_decontam.py
  • tests/frames/test_chroma_key_relative.py
  • tests/frames/test_cutout.py
  • tests/frames/test_decontam_gold.py
  • tests/frames/test_despill_full_tint_bar.py
  • tests/frames/test_extract_perf_equivalence.py
  • tests/frames/test_extraction_golden.py
  • tests/frames/test_grid_record_exactness.py
  • tests/frames/test_heal_async.py
  • tests/frames/test_isolated_dots.py
  • tests/frames/test_key_detect_banded.py
  • tests/frames/test_keyed_resample.py
  • tests/frames/test_logo_matte.py
  • tests/frames/test_measured_matte.py
  • tests/frames/test_pitch_ground_truth.py
  • tests/frames/test_pitch_runlen_crosscheck.py
  • tests/frames/test_posix_manifest_paths.py
  • tests/frames/test_row_placement_align_y.py
  • tests/frames/test_row_scale.py
  • tests/frames/test_safe_area_fit.py
  • tests/frames/test_segment_projection.py
  • tests/frames/test_slice_sheet.py
  • tests/frames/test_slice_sheet_scale.py
  • tests/frames/test_slice_sheet_transparent.py
  • tests/frames/test_sliver_guard.py
  • tests/frames/test_takes_heal.py
  • tests/frames/test_taxonomy_layout.py
  • tests/frames/test_unpack_atlas_publish.py
  • tests/gen/prepare_freeze_table.py
  • tests/gen/prompt_freeze_table.py
  • tests/gen/test_alpha_verdict.py
  • tests/gen/test_anthropic_api.py
  • tests/gen/test_body_plan_sheets.py
  • tests/gen/test_chroma_extraction.py
  • tests/gen/test_chroma_key_auto.py
  • tests/gen/test_chroma_rcb_byte_identity.py
  • tests/gen/test_chroma_soft_alpha.py
  • tests/gen/test_chroma_ycbcr.py
  • tests/gen/test_claude_login.py
  • tests/gen/test_codex_login.py
  • tests/gen/test_codex_rollout_resolution.py
  • tests/gen/test_codex_unavailable.py
  • tests/gen/test_facing.py
  • tests/gen/test_flags_over_spec.py
  • tests/gen/test_gen.py
  • tests/gen/test_gen_set.py
  • tests/gen/test_grok_provider.py
  • tests/gen/test_handedness.py
  • tests/gen/test_layout_guide.py
  • tests/gen/test_logins_off.py
  • tests/gen/test_logo.py
  • tests/gen/test_openai_provider.py
  • tests/gen/test_painted_checkerboard.py
  • tests/gen/test_pixel_draw.py
  • tests/gen/test_pixel_draw_frames.py
  • tests/gen/test_pixel_effect.py
  • tests/gen/test_pixel_gates.py
  • tests/gen/test_pixel_grid.py
  • tests/gen/test_prompt_assembly.py
  • tests/gen/test_prompt_freeze.py
  • tests/gen/test_provider_address.py
  • tests/gen/test_refusal.py
  • tests/gen/test_retry.py
  • tests/gen/test_trim_alpha.py
  • tests/gen/test_video.py
  • tests/gen/test_video_facing.py
  • tests/gen/test_video_modes.py
  • tests/gen/test_vision_read.py
  • tests/http_answer.py
  • tests/keyed_figure.py
  • tests/logo_lettering.py
  • tests/packaging/test_cli_taxonomy.py
  • tests/packaging/test_curation_asset_packaging.py
  • tests/packaging/test_curation_cli_entrypoint.py
  • tests/packaging/test_entrypoint_interpreter.py
  • tests/packaging/test_numpy_dependency_gate.py
  • tests/packaging/test_package_surface.py
  • tests/packaging/test_pipeline_smoke.py
  • tests/packaging/test_project_metadata.py
  • tests/packaging/test_recolor_cli_entrypoint.py
  • tests/packaging/test_version_ssot.py
  • tests/picture_digest.py
  • tests/qa/test_correction_loop_inputs_kept.py
  • tests/qa/test_handed_check.py
  • tests/qa/test_inspect_score_loop.py
  • tests/qa/test_motion.py
  • tests/release/test_fast_bundle.py
  • tests/release/test_lane_rife_collection.py
  • tests/release/test_release_notes.py
  • tests/release/test_release_publish.py
  • tests/release/test_rife_pins.py
  • tests/release/test_t4_lane.py
  • tests/scene/test_inspect_scene.py
  • tests/scene/test_layer_resample.py
  • tests/scene/test_model.py
  • tests/scene/test_render.py
  • tests/serve/test_curation_view_contract.py
  • tests/serve/test_curator_pixel_scaling_ssot.py
  • tests/serve/test_curator_single_display_pipeline.py
  • tests/serve/test_curator_wire_keys.py
  • tests/serve/test_pixel_grid_always_available.py
  • tests/serve/test_recolor_curation_view.py
  • tests/spec/test_assets.py
  • tests/spec/test_migrate_breathe.py
  • tests/spec/test_publish_rwlock_cross_process.py
  • tests/spec/test_request_read_no_mutation.py
  • tests/spec/test_request_retired_rig_keys.py
  • tests/spec/test_request_write_isolation.py
  • tests/spec/test_run_dir_lock.py
  • tests/spec/test_runio_publish_set.py
  • tests/talking_face.py
  • tests/test_cli_kwargs.py
  • tests/test_gif_report.py
  • tests/test_hexcolor.py
  • tests/test_lsq.py
  • tests/test_prepare_layout_guides.py
  • tests/test_subject_profile.py
  • tests/util/test_console.py
  • tests/util/test_gif_utils.py
  • tests/video/held_fill_inputs.py
  • tests/video/jump_inputs.py
  • tests/video/test_attack_headroom.py
  • tests/video/test_attack_motion.py
  • tests/video/test_attack_return.py
  • tests/video/test_auto_motion.py
  • tests/video/test_auto_motion_opening.py
  • tests/video/test_auto_motion_uncorrected.py
  • tests/video/test_batch_bases.py
  • tests/video/test_batch_facing.py
  • tests/video/test_batch_handed.py
  • tests/video/test_between_cache.py
  • tests/video/test_body_anchor.py
  • tests/video/test_body_anchor_gate.py
  • tests/video/test_body_plan.py
  • tests/video/test_canvas_key_normalize.py
  • tests/video/test_canvas_trail.py
  • tests/video/test_clip_prompt.py
  • tests/video/test_crossfade.py
  • tests/video/test_crossings.py
  • tests/video/test_cycle_align.py
  • tests/video/test_cycle_align_beat.py
  • tests/video/test_cycle_align_foot.py
  • tests/video/test_cycle_align_foot_margin.py
  • tests/video/test_cycle_suspects.py
  • tests/video/test_duration_window_oneshot.py
  • tests/video/test_edge_border.py
  • tests/video/test_edge_speck_lead_in.py
  • tests/video/test_effect.py
  • tests/video/test_explicit_window.py
  • tests/video/test_face_layer.py
  • tests/video/test_fit_tight.py
  • tests/video/test_follow.py
  • tests/video/test_follow_inspect.py
  • tests/video/test_follow_read_on.py
  • tests/video/test_follow_stretch_floor.py
  • tests/video/test_frames_inputs_kept.py
  • tests/video/test_gait_fallback.py
  • tests/video/test_gait_fallback_resample.py
  • tests/video/test_gait_guard_anchor_wide.py
  • tests/video/test_gait_harmonic_ambiguity.py
  • tests/video/test_gait_window_context.py
  • tests/video/test_ghost_given_way.py
  • tests/video/test_ghost_retake.py
  • tests/video/test_ghost_screen.py
  • tests/video/test_held_cut_restoration.py
  • tests/video/test_held_drawings.py
  • tests/video/test_held_fill.py
  • tests/video/test_held_walk_seam.py
  • tests/video/test_idle_still.py
  • tests/video/test_inbetween_doubled.py
  • tests/video/test_inbetween_hole.py
  • tests/video/test_inbetween_seen_through.py
  • tests/video/test_loop_body_turn.py
  • tests/video/test_loop_compare.py
  • tests/video/test_loop_ease.py
  • tests/video/test_loop_flow.py
  • tests/video/test_loop_half_step.py
  • tests/video/test_loop_inputs_kept.py
  • tests/video/test_loop_overlap.py
  • tests/video/test_loop_part_pop.py
  • tests/video/test_loop_prop_seam.py
  • tests/video/test_loop_prop_seam_held.py
  • tests/video/test_loop_repair.py
  • tests/video/test_loop_sampling_and_wrap.py
  • tests/video/test_loop_silent_pass.py
  • tests/video/test_loop_two_lengths.py
  • tests/video/test_motion_anchor.py
  • tests/video/test_once.py
  • tests/video/test_one_shot_moved.py
  • tests/video/test_one_shot_refusal.py
  • tests/video/test_one_step_cut.py
  • tests/video/test_outline_shift.py
  • tests/video/test_parts.py
  • tests/video/test_play.py
  • tests/video/test_prop_plate.py
  • tests/video/test_rife.py
  • tests/video/test_rife_cuts.py
  • tests/video/test_rife_executor.py
  • tests/video/test_rife_install.py
  • tests/video/test_rife_models.py
  • tests/video/test_rife_torch.py
  • tests/video/test_rife_torch_v425.py
  • tests/video/test_root_motion.py
  • tests/video/test_screen_jump.py
  • tests/video/test_seam_bridge.py
  • tests/video/test_seam_pop_gate.py
  • tests/video/test_set_sheet.py
  • tests/video/test_source_restoration.py
  • tests/video/test_spill_hue_evidence.py
  • tests/video/test_spill_reference_window.py
  • tests/video/test_stop.py
  • tests/video/test_strip_resample.py
  • tests/video/test_sway_band.py
  • tests/video/test_sway_breath.py
  • tests/video/test_sway_flat_across.py
  • tests/video/test_sway_frames.py
  • tests/video/test_sway_hold.py
  • tests/video/test_sway_names.py
  • tests/video/test_sway_read_on_recut.py
  • tests/video/test_sway_region.py
  • tests/video/test_sway_region_over.py
  • tests/video/test_sway_seams.py
  • tests/video/test_video_pipeline.py
  • tests/video/test_video_spill.py
  • tests/video/test_walk_canvas_room.py
  • tests/video/test_walk_defaults.py
  • tests/video/test_walk_steps.py
  • tests/video/test_wrap_blend.py
  • tests/workflow/test_capabilities.py
  • tests/workflow/test_workflow.py

Files

  • .githooks/pre-commitruns3,353 bytes
  • .github/FUNDING.ymlasset16 bytes
  • .gitignoreasset606 bytes
  • .gitleaks.tomlasset1,740 bytes
  • CHANGELOG.mddoc752,495 bytes
  • CONTRIBUTORS.mddoc2,808 bytes
  • LICENSEasset10,776 bytes
  • NOTICEasset3,155 bytes
  • README.es.mddoc13,784 bytes
  • README.fr.mddoc14,145 bytes
  • README.ja.mddoc15,720 bytes
  • README.ko.mddoc15,342 bytes
  • README.mddoc15,410 bytes
  • README.zh-Hans.mddoc12,474 bytes
  • SECURITY.mddoc3,118 bytes
  • SKILL.mdcore20,937 bytes
  • SKILL.mdcore20,937 bytes
  • SKILL.mdcore20,937 bytes
  • SKILL.mdcore20,937 bytes
  • SKILL.mdcore20,937 bytes
  • SKILL.mdcore20,937 bytes
  • docs/README.mddoc9,846 bytes
  • docs/architecture.mddoc27,189 bytes
  • docs/asset-tools.mddoc8,809 bytes
  • docs/assets/attack-claudecy-samurai-onehand.gifasset954,034 bytes
  • docs/assets/attack-claudecy-samurai.gifasset1,134,272 bytes
  • docs/assets/attack-fox-hood.gifasset1,025,913 bytes
  • docs/assets/attack-paladin.gifasset884,976 bytes
  • docs/assets/attack-slime.gifasset736,876 bytes
  • docs/assets/breathe-editor.pngasset117,094 bytes
  • docs/assets/chroma-fullbody-illustration-green.pngasset179,797 bytes
  • docs/assets/chroma-fullbody-illustration-magenta.pngasset198,516 bytes
  • docs/assets/chroma-fullbody-pixelart-green.pngasset222,591 bytes
  • docs/assets/chroma-fullbody-pixelart-magenta.pngasset196,098 bytes
  • docs/assets/chroma-peel-illustration-before-after.pngasset27,150 bytes
  • docs/assets/chroma-peel-pixelart-before-after.pngasset21,036 bytes
  • docs/assets/curator-drag-update.gifasset3,342,069 bytes
  • docs/assets/curator-iso.pngasset299,115 bytes
  • docs/assets/cutout-demo.pngasset196,341 bytes
  • docs/assets/demo-character.gifasset2,669,159 bytes
  • docs/assets/demo-furniture.gifasset410,842 bytes
  • docs/assets/hero-v2-party.gifasset7,599,496 bytes
  • docs/assets/subject-effect-ember.gifasset7,154 bytes
  • docs/assets/subject-effect-sigil.gifasset6,455 bytes
  • docs/assets/subject-effect-venom.gifasset8,397 bytes
  • docs/assets/subject-effect-wisp.gifasset9,724 bytes
  • docs/assets/subject-effects-gallery.pngasset114,069 bytes
  • docs/assets/village-scene.gifasset28,196,903 bytes
  • docs/atlas-workflow.mddoc3,783 bytes
  • docs/breathing.mddoc53,396 bytes
  • docs/capabilities.mddoc4,057 bytes
  • docs/chroma-alpha.mddoc46,071 bytes
  • docs/curation.mddoc14,447 bytes
  • docs/directional-anchor-workflow.mddoc23,243 bytes
  • docs/effects.mddoc5,129 bytes
  • docs/engine-export.mddoc3,634 bytes
  • docs/face-parts.mddoc25,253 bytes
  • docs/frame-interpolation.mddoc5,131 bytes
  • docs/gen.mddoc27,550 bytes
  • docs/interpreter.mddoc4,537 bytes
  • docs/locomotion-curation.mddoc3,676 bytes
  • docs/logo.mddoc22,856 bytes
  • docs/loop-comparison.mddoc33,109 bytes
  • docs/loop-repair.mddoc360,553 bytes
  • docs/loop-review.mddoc26,946 bytes
  • docs/pixel-draw.mddoc38,463 bytes
  • docs/pixel-unfake.mddoc23,838 bytes
  • docs/prompt-assembly.mddoc8,492 bytes
  • docs/qa-motion.mddoc3,596 bytes
  • docs/recolor.mddoc10,190 bytes
  • docs/release.mddoc18,204 bytes
  • docs/rename-gate.mddoc2,454 bytes
  • docs/run-contract.mddoc57,918 bytes
  • docs/scene.mddoc8,691 bytes
  • docs/seamless-video-loop.mddoc5,630 bytes
  • docs/sheet-slicing.mddoc12,649 bytes
  • docs/states-and-frames.mddoc6,578 bytes
  • docs/subject-profiles.mddoc3,341 bytes
  • docs/troubleshooting.mddoc6,224 bytes
  • docs/user-workflow.mddoc6,410 bytes
  • docs/video-pipeline.mddoc177,321 bytes
  • docs/video.mddoc12,086 bytes
  • pyproject.tomlasset6,951 bytes
  • scripts/compose_selected_cycle.pyruns481 bytes
  • scripts/compose_sprite_atlas.pyruns481 bytes
  • scripts/compose_sprite_gif.pyruns477 bytes
  • scripts/curation.pyruns411 bytes
  • scripts/dev/README.mddoc1,186 bytes
  • scripts/dev/breathe_mutation_battery.pyruns15,591 bytes
  • scripts/dev/check_visible_magenta.pyruns495 bytes
  • scripts/dev/measure_align_sigma.pyruns4,788 bytes
  • scripts/dev/source_restoration_demo.pyruns23,413 bytes
  • scripts/diagnose_video_loop.pyruns8,014 bytes
  • scripts/export_aseprite.pyruns484 bytes
  • scripts/export_curated_pngs.pyruns477 bytes
  • scripts/extract_sprite_row_frames.pyruns467 bytes
  • scripts/gen_set.pyruns461 bytes
  • scripts/generate_sprite_image.pyruns445 bytes
  • scripts/generate_sprite_video.pyruns455 bytes
  • scripts/inspect_sprite_run.pyruns459 bytes
  • scripts/interpolate_frames.pyruns483 bytes
  • scripts/linux_lane.shruns10,755 bytes
  • scripts/prepare_sprite_run.pyruns461 bytes
  • scripts/preview_animation.pyruns459 bytes
  • scripts/recolor.pyruns469 bytes
  • scripts/release_notes.pyruns9,567 bytes
  • scripts/release_publish.pyruns10,381 bytes
  • scripts/run_correction_loop.pyruns475 bytes
  • scripts/score_sprite_run.pyruns455 bytes
  • scripts/serve_curation.pyruns479 bytes
  • scripts/slice_sheet_cells.pyruns475 bytes
  • scripts/t4_lane.pyruns8,614 bytes
  • scripts/unpack_atlas_run.pyruns477 bytes
  • scripts/video_canvas.pyruns468 bytes
  • scripts/video_frames.pyruns468 bytes
  • scripts/video_loop.pyruns462 bytes
  • scripts/video_set.pyruns463 bytes
  • sprite_gen/__init__.pyruns1,072 bytes
  • sprite_gen/_deps.pyruns2,797 bytes
  • sprite_gen/_modules.pyruns6,556 bytes
  • sprite_gen/background/__init__.pyruns100 bytes
  • sprite_gen/background/tile.pyruns15,896 bytes
  • sprite_gen/cli.pyruns26,266 bytes
  • sprite_gen/compose/__init__.pyruns38 bytes
  • sprite_gen/compose/compose_atlas.pyruns14,375 bytes
  • sprite_gen/compose/compose_cycle.pyruns8,162 bytes
  • sprite_gen/compose/compose_gif.pyruns12,854 bytes
  • sprite_gen/compose/export_aseprite.pyruns9,748 bytes
  • sprite_gen/compose/export_pngs.pyruns6,062 bytes
  • sprite_gen/curate/__init__.pyruns38 bytes
  • sprite_gen/curate/anchor.pyruns29,297 bytes
  • sprite_gen/curate/curation.pyruns81,966 bytes
  • sprite_gen/effects/__init__.pyruns38 bytes
  • sprite_gen/effects/anatomy.pyruns19,489 bytes
  • sprite_gen/effects/breath_beat.pyruns9,443 bytes
  • sprite_gen/effects/breathe.pyruns148,528 bytes
  • sprite_gen/effects/interpolate.pyruns15,094 bytes
  • sprite_gen/effects/recolor.pyruns19,367 bytes
  • sprite_gen/effects/reroll.pyruns7,313 bytes
  • sprite_gen/effects/shadow.pyruns11,852 bytes
  • sprite_gen/frames/__init__.pyruns38 bytes
  • sprite_gen/frames/alpha_floor.pyruns3,089 bytes
  • sprite_gen/frames/check_visible_magenta.pyruns2,873 bytes
  • sprite_gen/frames/cutout.pyruns26,699 bytes
  • sprite_gen/frames/decontam.pyruns51,452 bytes
  • sprite_gen/frames/extract.pyruns214,026 bytes
  • sprite_gen/frames/folder.pyruns6,882 bytes
  • sprite_gen/frames/logo_matte.pyruns32,749 bytes
  • sprite_gen/frames/measured_matte.pyruns14,400 bytes
  • sprite_gen/frames/segment.pyruns16,436 bytes
  • sprite_gen/frames/slice_sheet.pyruns20,985 bytes
  • sprite_gen/frames/unpack_atlas.pyruns34,502 bytes
  • sprite_gen/gen/__init__.pyruns44,855 bytes
  • sprite_gen/gen/address.pyruns4,298 bytes
  • sprite_gen/gen/anthropic_api.pyruns20,530 bytes
  • sprite_gen/gen/base.pyruns19,542 bytes
  • sprite_gen/gen/chroma.pyruns16,069 bytes
  • sprite_gen/gen/claude_login.pyruns12,947 bytes
  • sprite_gen/gen/codex_provider.pyruns23,585 bytes
  • sprite_gen/gen/facing.pyruns7,720 bytes
  • sprite_gen/gen/facing_vision.pyruns5,332 bytes
  • sprite_gen/gen/gen_set.pyruns15,166 bytes
  • sprite_gen/gen/grok_provider.pyruns9,855 bytes
  • sprite_gen/gen/handedness.pyruns13,785 bytes
  • sprite_gen/gen/logo.pyruns36,110 bytes
  • sprite_gen/gen/openai_provider.pyruns16,803 bytes
  • sprite_gen/gen/pixel_draw.pyruns76,877 bytes
  • sprite_gen/gen/pixel_gates.pyruns19,701 bytes
  • sprite_gen/gen/pixel_grid.pyruns28,308 bytes
  • sprite_gen/gen/prepare.pyruns61,693 bytes
  • sprite_gen/gen/prompt_parts.pyruns8,277 bytes
  • sprite_gen/gen/refusal.pyruns7,156 bytes
  • sprite_gen/gen/retry.pyruns10,769 bytes
  • sprite_gen/gen/video.pyruns57,353 bytes
  • sprite_gen/gen/xai.pyruns13,677 bytes
  • sprite_gen/qa/__init__.pyruns38 bytes
  • sprite_gen/qa/correction_loop.pyruns11,349 bytes
  • sprite_gen/qa/handed.pyruns26,127 bytes
  • sprite_gen/qa/inspect.pyruns17,172 bytes
  • sprite_gen/qa/motion.pyruns24,519 bytes
  • sprite_gen/qa/preview.pyruns5,963 bytes
  • sprite_gen/qa/score.pyruns6,593 bytes
  • sprite_gen/scene/__init__.pyruns124 bytes
  • sprite_gen/scene/inspect_scene.pyruns7,836 bytes
  • sprite_gen/scene/model.pyruns11,438 bytes
  • sprite_gen/scene/render.pyruns18,121 bytes
  • sprite_gen/serve/__init__.pyruns38 bytes
  • sprite_gen/serve/composer/composer.cssasset8,438 bytes
  • sprite_gen/serve/composer/index.htmlasset2,396 bytes
  • sprite_gen/serve/composer/src/api.jsruns2,377 bytes
  • sprite_gen/serve/composer/src/boot.jsruns1,351 bytes
  • sprite_gen/serve/composer/src/canvas.jsruns4,129 bytes
  • sprite_gen/serve/composer/src/controls.jsruns5,513 bytes
  • sprite_gen/serve/composer/src/i18n.jsruns2,973 bytes
  • sprite_gen/serve/composer/src/library.jsruns2,697 bytes
  • sprite_gen/serve/composer/src/session.jsruns1,786 bytes
  • sprite_gen/serve/composer/src/ui.jsruns2,114 bytes
  • sprite_gen/serve/curator/curator.cssasset61,584 bytes
  • sprite_gen/serve/curator/index.htmlasset3,268 bytes
  • sprite_gen/serve/curator/src/atlas.jsruns7,428 bytes
  • sprite_gen/serve/curator/src/base-editor.jsruns4,322 bytes
  • sprite_gen/serve/curator/src/boot.jsruns10,808 bytes
  • sprite_gen/serve/curator/src/breathe.jsruns38,095 bytes
  • sprite_gen/serve/curator/src/cards.jsruns29,543 bytes
  • sprite_gen/serve/curator/src/chrome.jsruns2,553 bytes
  • sprite_gen/serve/curator/src/compare.jsruns28,238 bytes
  • sprite_gen/serve/curator/src/display.jsruns24,872 bytes
  • sprite_gen/serve/curator/src/gen-trigger.jsruns2,700 bytes
  • sprite_gen/serve/curator/src/i18n.jsruns38,380 bytes
  • sprite_gen/serve/curator/src/lasso-select.jsruns6,716 bytes
  • sprite_gen/serve/curator/src/persistence.jsruns9,057 bytes
  • sprite_gen/serve/curator/src/pipeline-tree.jsruns17,457 bytes
  • sprite_gen/serve/curator/src/progress.jsruns3,477 bytes
  • sprite_gen/serve/curator/src/recolor.jsruns7,665 bytes
  • sprite_gen/serve/curator/src/region-transform.jsruns11,480 bytes
  • sprite_gen/serve/curator/src/row-controls.jsruns5,474 bytes
  • sprite_gen/serve/curator/src/row-export.jsruns5,722 bytes
  • sprite_gen/serve/curator/src/status.jsruns361 bytes
  • sprite_gen/serve/curator/src/store.jsruns42,443 bytes
  • sprite_gen/serve/curator/src/tooltip.jsruns3,611 bytes
  • sprite_gen/serve/curator/src/transform-provider.jsruns6,160 bytes
  • sprite_gen/serve/curator/src/transforms.jsruns15,622 bytes
  • sprite_gen/serve/curator/src/tween.jsruns4,460 bytes
  • sprite_gen/serve/curator/src/util.jsruns1,500 bytes
  • sprite_gen/serve/curator/src/view-nav.jsruns6,877 bytes
  • sprite_gen/serve/curator/src/zones.jsruns18,927 bytes
  • sprite_gen/serve/curator/src/zoom-editor.jsruns76,575 bytes
  • sprite_gen/serve/serve_compose.pyruns21,134 bytes
  • sprite_gen/serve/serve_curation.pyruns94,771 bytes
  • sprite_gen/spec/__init__.pyruns38 bytes
  • sprite_gen/spec/assets.pyruns16,878 bytes
  • sprite_gen/spec/layout.pyruns4,805 bytes
  • sprite_gen/spec/migrate_breathe.pyruns8,056 bytes
  • sprite_gen/spec/migrate_request.pyruns4,347 bytes
  • sprite_gen/spec/runio.pyruns63,134 bytes
  • sprite_gen/spec/subject.pyruns3,482 bytes
  • sprite_gen/util/__init__.pyruns38 bytes
  • sprite_gen/util/cli_kwargs.pyruns1,491 bytes
  • sprite_gen/util/console.pyruns1,306 bytes
  • sprite_gen/util/gif_utils.pyruns4,587 bytes
  • sprite_gen/util/hexcolor.pyruns1,425 bytes
  • sprite_gen/util/lsq.pyruns1,247 bytes
  • sprite_gen/util/resample.pyruns7,006 bytes
  • sprite_gen/video/__init__.pyruns828 bytes
  • sprite_gen/video/align.pyruns111,271 bytes
  • sprite_gen/video/auto_motion.pyruns15,755 bytes
  • sprite_gen/video/batch.pyruns104,012 bytes
  • sprite_gen/video/body_plan.pyruns6,128 bytes
  • sprite_gen/video/body_turn.pyruns32,071 bytes
  • sprite_gen/video/cadence.pyruns21,275 bytes
  • sprite_gen/video/canvas.pyruns28,248 bytes
  • sprite_gen/video/clip_prompt.pyruns12,428 bytes
  • sprite_gen/video/compare.pyruns18,178 bytes
  • sprite_gen/video/crossings.pyruns26,648 bytes
  • sprite_gen/video/effect.pyruns5,105 bytes
  • sprite_gen/video/evidence.pyruns2,305 bytes
  • sprite_gen/video/face_bake.pyruns16,085 bytes
  • sprite_gen/video/face_layer.pyruns42,156 bytes
  • sprite_gen/video/face_pack.pyruns28,376 bytes
  • sprite_gen/video/face_plan.mjsruns1,078 bytes
  • sprite_gen/video/facing.pyruns2,252 bytes
  • sprite_gen/video/follow.pyruns1,600 bytes
  • sprite_gen/video/follow_inspect.pyruns1,113 bytes
  • sprite_gen/video/frames.pyruns48,961 bytes
  • sprite_gen/video/gait_fallback.pyruns27,609 bytes
  • sprite_gen/video/held.pyruns8,233 bytes
  • sprite_gen/video/held_fill.pyruns22,303 bytes
  • sprite_gen/video/interpolation_quality.pyruns8,322 bytes
  • sprite_gen/video/legs.pyruns19,798 bytes
  • sprite_gen/video/local_cycle.pyruns105,914 bytes
  • sprite_gen/video/loop.pyruns246,080 bytes
  • sprite_gen/video/motion_anchor.pyruns12,016 bytes
  • sprite_gen/video/nonloop.pyruns13,595 bytes
  • sprite_gen/video/part_pop.pyruns20,487 bytes
  • sprite_gen/video/parts.pyruns28,943 bytes
  • sprite_gen/video/period.pyruns16,218 bytes
  • sprite_gen/video/play.pyruns2,982 bytes
  • sprite_gen/video/playback.pyruns4,480 bytes
  • sprite_gen/video/prop_plate.pyruns6,574 bytes
  • sprite_gen/video/repair.pyruns109,907 bytes
  • sprite_gen/video/restoration.pyruns38,972 bytes
  • sprite_gen/video/rife.pyruns104,556 bytes
  • sprite_gen/video/rife_install.pyruns14,415 bytes
  • sprite_gen/video/rife_torch.pyruns29,756 bytes
  • sprite_gen/video/root_motion.pyruns19,464 bytes
  • sprite_gen/video/set_sheet.pyruns15,586 bytes
  • sprite_gen/video/source.pyruns17,731 bytes
  • sprite_gen/video/sprite-gen-face-v1.mjsruns18,232 bytes
  • sprite_gen/video/stop.pyruns34,043 bytes
  • sprite_gen/video/sway.pyruns272,343 bytes
  • sprite_gen/video/sway_inspect.pyruns26,483 bytes
  • sprite_gen/video/wrap_blend.pyruns18,471 bytes
  • sprite_gen/workflow/__init__.pyruns122 bytes
  • sprite_gen/workflow/access.pyruns3,161 bytes
  • sprite_gen/workflow/capabilities.pyruns6,957 bytes
  • sprite_gen/workflow/catalog.pyruns4,714 bytes
  • sprite_gen/workflow/guide.pyruns7,079 bytes
  • sprite_gen/workflow/preferences.pyruns5,441 bytes
  • tests/background/test_tile.pyruns9,596 bytes
  • tests/background/test_tile_cli.pyruns6,395 bytes
  • tests/compose/test_export_aseprite.pyruns5,049 bytes
  • tests/conftest.pyruns15,204 bytes
  • tests/curate/test_anchor_selection.pyruns36,693 bytes
  • tests/curate/test_curation_salvage_and_clones.pyruns10,040 bytes
  • tests/curate/test_directions.pyruns5,512 bytes
  • tests/curate/test_frame_variant.pyruns4,224 bytes
  • tests/curate/test_logical_height_contract.pyruns8,748 bytes
  • tests/curate/test_pixel_snap.pyruns16,255 bytes
  • tests/curate/test_pixel_unfake_migration.pyruns16,038 bytes
  • tests/curate/test_snap_phase_policy.pyruns4,761 bytes
  • tests/curate/test_transform_resample.pyruns2,492 bytes
  • tests/docs/test_docs_index.pyruns2,376 bytes
  • tests/docs/test_hero_assets.pyruns1,037 bytes
  • tests/effects/test_breath_beat.pyruns8,734 bytes
  • tests/effects/test_breathe.pyruns52,162 bytes
  • tests/effects/test_breathe_anatomy_route.pyruns18,127 bytes
  • tests/effects/test_breathe_js_mirror.pyruns31,067 bytes
  • tests/effects/test_breathe_min_max.pyruns19,463 bytes
  • tests/effects/test_breathe_off_state.pyruns47,945 bytes
  • tests/effects/test_breathe_publish.pyruns7,698 bytes
  • tests/effects/test_breathe_reference_key.pyruns35,487 bytes
  • tests/effects/test_breathe_round.pyruns45,293 bytes
  • tests/effects/test_breathe_round_curator.pyruns5,823 bytes
  • tests/effects/test_breathe_sidecar_roundtrip.pyruns17,722 bytes
  • tests/effects/test_breathe_smooth.pyruns49,710 bytes
  • tests/effects/test_breathe_smooth_curator.pyruns6,858 bytes
  • tests/effects/test_frame_interpolation.pyruns6,550 bytes
  • tests/effects/test_palette_post_only.pyruns4,482 bytes
  • tests/effects/test_recolor_bake.pyruns7,291 bytes
  • tests/effects/test_recolor_docs.pyruns3,202 bytes
  • tests/effects/test_shadow.pyruns16,834 bytes
  • tests/fixtures/expected-frames-manifest.jsonasset2,689 bytes
  • tests/fixtures/expected-fused-frames-manifest.jsonasset2,127 bytes
  • tests/fixtures/facing/front.pngasset284 bytes
  • tests/fixtures/facing/left.pngasset293 bytes
  • tests/fixtures/facing/right.pngasset290 bytes
  • tests/fixtures/generate_fixtures.pyruns4,004 bytes
  • tests/fixtures/moe/moe_green.pngasset31,791 bytes
  • tests/fixtures/moe/moe_heart.pngasset30,170 bytes
  • tests/fixtures/moe/moe_mirror.pngasset29,903 bytes
  • tests/fixtures/moe/moe_red.pngasset32,336 bytes
  • tests/fixtures/pixel_draw/attack-32-margin-detail.txtdoc4,469 bytes
  • tests/fixtures/pixel_draw/attack-32-safe-area-pass.txtdoc4,459 bytes
  • tests/fixtures/pixel_draw/fourdir-16-pass.txtdoc1,290 bytes
  • tests/fixtures/pixel_draw/fourdir-16-unknown-symbol.repair.txtdoc26 bytes
  • tests/fixtures/pixel_draw/fourdir-16-unknown-symbol.txtdoc1,311 bytes
  • tests/fixtures/pixel_draw/icon-16-json-pass.txtdoc750 bytes
  • tests/fixtures/pixel_draw/icon-32-pass.txtdoc1,226 bytes
  • tests/fixtures/pixel_draw/icon-32-row-width.repair.txtdoc45 bytes
  • tests/fixtures/pixel_draw/icon-32-row-width.txtdoc1,217 bytes
  • tests/fixtures/pixel_draw/icon-32-space-in-row.repair.txtdoc413 bytes
  • tests/fixtures/pixel_draw/icon-32-space-in-row.txtdoc2,453 bytes
  • tests/fixtures/pixel_draw/pick-verdict.jsonasset513 bytes
  • tests/fixtures/pixel_draw/sprite-16-pass.txtdoc453 bytes
  • tests/fixtures/pixel_draw/sprite-16-safe-area-pass.txtdoc474 bytes
  • tests/fixtures/pixel_draw/sprite-32-frame-header-missing.txtdoc1,235 bytes
  • tests/fixtures/pixel_draw/tile-16-pass.txtdoc362 bytes
  • tests/fixtures/pixel_draw/tile-32-truncated.repair.txtdoc782 bytes
  • tests/fixtures/pixel_draw/tile-32-truncated.txtdoc621 bytes
  • tests/fixtures/pixel_draw/walk-16-pass.txtdoc1,295 bytes
  • tests/fixtures/pixel_draw/walk-32-safe-area-pass.txtdoc4,441 bytes
  • tests/fixtures/prepare-rows-v2.32.0.json.gzasset7,953 bytes
  • tests/fixtures/prompts-v2.22.0.json.gzasset103,720 bytes
  • tests/fixtures/rife-cuts/cuts.jsonasset21,200 bytes
  • tests/fixtures/rife-cuts/knight-walk/00.webpasset161,784 bytes
  • tests/fixtures/rife-cuts/knight-walk/01.webpasset178,596 bytes
  • tests/fixtures/rife-cuts/knight-walk/02.webpasset176,568 bytes
  • tests/fixtures/rife-cuts/knight-walk/03.webpasset182,656 bytes
  • tests/fixtures/rife-cuts/knight-walk/04.webpasset179,162 bytes
  • tests/fixtures/rife-cuts/knight-walk/05.webpasset193,976 bytes
  • tests/fixtures/rife-cuts/knight-walk/06.webpasset191,226 bytes
  • tests/fixtures/rife-cuts/knight-walk/07.webpasset188,144 bytes
  • tests/fixtures/rife-cuts/knight-walk/08.webpasset186,274 bytes
  • tests/fixtures/rife-cuts/knight-walk/09.webpasset184,168 bytes
  • tests/fixtures/rife-cuts/knight-walk/10.webpasset181,666 bytes
  • tests/fixtures/rife-cuts/knight-walk/11.webpasset165,430 bytes
  • tests/fixtures/rife-cuts/knight-walk/12.webpasset162,884 bytes
  • tests/fixtures/rife-cuts/knight-walk/13.webpasset169,042 bytes
  • tests/fixtures/rife-cuts/knight-walk/14.webpasset167,430 bytes
  • tests/fixtures/rife-cuts/knight-walk/15.webpasset168,048 bytes
  • tests/fixtures/rife-cuts/knight-walk/16.webpasset166,800 bytes
  • tests/fixtures/rife-cuts/knight-walk/17.webpasset176,238 bytes
  • tests/fixtures/rife-cuts/knight-walk/18.webpasset175,732 bytes
  • tests/fixtures/rife-cuts/knight-walk/19.webpasset174,526 bytes
  • tests/fixtures/rife-cuts/knight-walk/20.webpasset174,474 bytes
  • tests/fixtures/rife-cuts/knight-walk/21.webpasset174,762 bytes
  • tests/fixtures/rife-cuts/knight-walk/22.webpasset174,182 bytes
  • tests/fixtures/rife-cuts/knight-walk/23.webpasset165,572 bytes
  • tests/fixtures/rife-cuts/knight-walk/24.webpasset165,904 bytes
  • tests/fixtures/rife-cuts/knight-walk/25.webpasset164,196 bytes
  • tests/fixtures/rife-cuts/pip-jump/00.webpasset100,776 bytes
  • tests/fixtures/rife-cuts/pip-jump/01.webpasset99,934 bytes
  • tests/fixtures/rife-cuts/pip-jump/02.webpasset110,336 bytes
  • tests/fixtures/rife-cuts/pip-jump/03.webpasset112,750 bytes
  • tests/fixtures/rife-cuts/pip-jump/04.webpasset114,674 bytes
  • tests/fixtures/rife-cuts/pip-jump/05.webpasset113,162 bytes
  • tests/fixtures/rife-cuts/pip-jump/06.webpasset122,160 bytes
  • tests/fixtures/rife-cuts/pip-jump/07.webpasset122,184 bytes
  • tests/fixtures/rife-cuts/pip-jump/08.webpasset116,634 bytes
  • tests/fixtures/rife-cuts/pip-jump/09.webpasset122,292 bytes
  • tests/fixtures/rife-cuts/pip-jump/10.webpasset116,106 bytes
  • tests/fixtures/rife-cuts/pip-jump/11.webpasset117,016 bytes
  • tests/fixtures/rife-cuts/pip-jump/12.webpasset110,950 bytes
  • tests/fixtures/rife-cuts/pip-jump/13.webpasset107,430 bytes
  • tests/fixtures/rife-cuts/pip-jump/14.webpasset98,540 bytes
  • tests/fixtures/rife-cuts/pip-jump/15.webpasset99,744 bytes
  • tests/fixtures/rife-cuts/pip-jump/16.webpasset97,426 bytes
  • tests/fixtures/rife-cuts/pip-jump/17.webpasset97,284 bytes
  • tests/fixtures/rife-cuts/pip-jump/18.webpasset97,728 bytes
  • tests/fixtures/rife-cuts/pip-jump/19.webpasset102,808 bytes
  • tests/fixtures/rife-cuts/pip-jump/20.webpasset103,580 bytes
  • tests/fixtures/rife-cuts/pip-jump/21.webpasset105,240 bytes
  • tests/fixtures/rife-cuts/pip-jump/22.webpasset108,832 bytes
  • tests/fixtures/rife-cuts/pip-jump/23.webpasset106,252 bytes
  • tests/fixtures/rife-cuts/pip-jump/24.webpasset109,288 bytes
  • tests/fixtures/rife-cuts/pip-jump/25.webpasset100,404 bytes
  • tests/fixtures/rife-cuts/pip-jump/26.webpasset99,596 bytes
  • tests/fixtures/rife-cuts/pip-jump/27.webpasset92,630 bytes
  • tests/fixtures/rife-cuts/pip-jump/28.webpasset94,778 bytes
  • tests/fixtures/rife-cuts/pip-run/00.webpasset156,012 bytes
  • tests/fixtures/rife-cuts/pip-run/01.webpasset155,024 bytes
  • tests/fixtures/rife-cuts/pip-run/02.webpasset169,242 bytes
  • tests/fixtures/rife-cuts/pip-run/03.webpasset174,196 bytes
  • tests/fixtures/rife-cuts/pip-run/04.webpasset171,908 bytes
  • tests/fixtures/rife-cuts/pip-run/05.webpasset180,470 bytes
  • tests/fixtures/rife-cuts/pip-run/06.webpasset186,796 bytes
  • tests/fixtures/rife-cuts/pip-run/07.webpasset192,878 bytes
  • tests/fixtures/rife-cuts/pip-run/08.webpasset185,832 bytes
  • tests/fixtures/rife-cuts/pip-run/09.webpasset190,168 bytes
  • tests/fixtures/rife-cuts/pip-run/10.webpasset183,946 bytes
  • tests/fixtures/rife-cuts/pip-run/11.webpasset171,820 bytes
  • tests/fixtures/rife-cuts/pip-run/12.webpasset158,644 bytes
  • tests/fixtures/rife-cuts/pip-run/13.webpasset149,126 bytes
  • tests/fixtures/rife-cuts/pip-run/14.webpasset153,530 bytes
  • tests/fixtures/rife-cuts/pip-run/15.webpasset163,514 bytes
  • tests/fixtures/rife-cuts/pip-run/16.webpasset159,786 bytes
  • tests/fixtures/rife-cuts/pip-run/17.webpasset174,568 bytes
  • tests/fixtures/rife-cuts/pip-run/18.webpasset178,278 bytes
  • tests/fixtures/rife-cuts/pip-run/19.webpasset185,658 bytes
  • tests/fixtures/rife-cuts/pip-run/20.webpasset179,756 bytes
  • tests/fixtures/rife-cuts/pip-run/21.webpasset190,342 bytes
  • tests/fixtures/rife-cuts/pip-run/22.webpasset181,454 bytes
  • tests/fixtures/rife-cuts/pip-run/23.webpasset178,002 bytes
  • tests/fixtures/rife-cuts/pip-run/24.webpasset170,092 bytes
  • tests/fixtures/rife-cuts/pip-run/25.webpasset159,726 bytes
  • tests/fixtures/rife-walkers/bfar33.a.pngasset2,752 bytes
  • tests/fixtures/rife-walkers/bfar33.b.pngasset2,194 bytes
  • tests/fixtures/rife-walkers/bfar33.ncnn.pngasset21,182 bytes
  • tests/fixtures/rife-walkers/bfar50.a.pngasset2,752 bytes
  • tests/fixtures/rife-walkers/bfar50.b.pngasset2,194 bytes
  • tests/fixtures/rife-walkers/bfar50.ncnn.pngasset22,769 bytes
  • tests/fixtures/rife-walkers/bnear50.a.pngasset2,326 bytes
  • tests/fixtures/rife-walkers/bnear50.b.pngasset2,150 bytes
  • tests/fixtures/rife-walkers/bnear50.ncnn.pngasset11,349 bytes
  • tests/fixtures/rife-walkers/cross50.a.pngasset974 bytes
  • tests/fixtures/rife-walkers/cross50.b.pngasset920 bytes
  • tests/fixtures/rife-walkers/cross50.ncnn.pngasset5,262 bytes
  • tests/fixtures/rife-walkers/far50.a.pngasset1,131 bytes
  • tests/fixtures/rife-walkers/far50.b.pngasset920 bytes
  • tests/fixtures/rife-walkers/far50.ncnn.pngasset6,996 bytes
  • tests/fixtures/rife-walkers/mid50.a.pngasset1,131 bytes
  • tests/fixtures/rife-walkers/mid50.b.pngasset974 bytes
  • tests/fixtures/rife-walkers/mid50.ncnn.pngasset6,024 bytes
  • tests/fixtures/rife-walkers/near25.a.pngasset995 bytes
  • tests/fixtures/rife-walkers/near25.b.pngasset925 bytes
  • tests/fixtures/rife-walkers/near25.ncnn.pngasset4,333 bytes
  • tests/fixtures/rife-walkers/walkers.jsonasset6,845 bytes
  • tests/fixtures/run-fused/raw/kick.pngasset518 bytes
  • tests/fixtures/run-fused/raw/pair.pngasset358 bytes
  • tests/fixtures/run-fused/sprite-request.jsonasset992 bytes
  • tests/fixtures/run/raw/idle.pngasset706 bytes
  • tests/fixtures/run/raw/walk.pngasset453 bytes
  • tests/fixtures/run/sprite-request.jsonasset847 bytes
  • tests/frames/test_alpha_centroid_align.pyruns3,962 bytes
  • tests/frames/test_alpha_floor.pyruns4,976 bytes
  • tests/frames/test_chroma_decontam.pyruns53,370 bytes
  • tests/frames/test_chroma_key_relative.pyruns50,094 bytes
  • tests/frames/test_cutout.pyruns7,277 bytes
  • tests/frames/test_decontam_gold.pyruns7,638 bytes
  • tests/frames/test_despill_full_tint_bar.pyruns3,452 bytes
  • tests/frames/test_extract_perf_equivalence.pyruns13,693 bytes
  • tests/frames/test_extraction_golden.pyruns2,470 bytes
  • tests/frames/test_grid_record_exactness.pyruns7,163 bytes
  • tests/frames/test_heal_async.pyruns6,006 bytes
  • tests/frames/test_isolated_dots.pyruns4,088 bytes
  • tests/frames/test_key_detect_banded.pyruns7,730 bytes
  • tests/frames/test_keyed_resample.pyruns5,151 bytes
  • tests/frames/test_logo_matte.pyruns16,935 bytes
  • tests/frames/test_measured_matte.pyruns7,314 bytes
  • tests/frames/test_pitch_ground_truth.pyruns12,713 bytes
  • tests/frames/test_pitch_runlen_crosscheck.pyruns9,103 bytes
  • tests/frames/test_posix_manifest_paths.pyruns1,068 bytes
  • tests/frames/test_row_placement_align_y.pyruns2,179 bytes
  • tests/frames/test_row_scale.pyruns3,670 bytes
  • tests/frames/test_safe_area_fit.pyruns6,848 bytes
  • tests/frames/test_segment_projection.pyruns7,401 bytes
  • tests/frames/test_slice_sheet.pyruns3,569 bytes
  • tests/frames/test_slice_sheet_scale.pyruns8,887 bytes
  • tests/frames/test_slice_sheet_transparent.pyruns2,982 bytes
  • tests/frames/test_sliver_guard.pyruns3,865 bytes
  • tests/frames/test_takes_heal.pyruns12,368 bytes
  • tests/frames/test_taxonomy_layout.pyruns3,992 bytes
  • tests/frames/test_unpack_atlas_publish.pyruns30,691 bytes
  • tests/gen/prepare_freeze_table.pyruns4,163 bytes
  • tests/gen/prompt_freeze_table.pyruns12,278 bytes
  • tests/gen/test_alpha_verdict.pyruns4,095 bytes
  • tests/gen/test_anthropic_api.pyruns15,518 bytes
  • tests/gen/test_body_plan_sheets.pyruns9,957 bytes
  • tests/gen/test_chroma_extraction.pyruns12,444 bytes
  • tests/gen/test_chroma_key_auto.pyruns8,775 bytes
  • tests/gen/test_chroma_rcb_byte_identity.pyruns75,211 bytes
  • tests/gen/test_chroma_soft_alpha.pyruns9,019 bytes
  • tests/gen/test_chroma_ycbcr.pyruns8,770 bytes
  • tests/gen/test_claude_login.pyruns11,556 bytes
  • tests/gen/test_codex_login.pyruns6,085 bytes
  • tests/gen/test_codex_rollout_resolution.pyruns6,361 bytes
  • tests/gen/test_codex_unavailable.pyruns22,481 bytes
  • tests/gen/test_facing.pyruns16,417 bytes
  • tests/gen/test_flags_over_spec.pyruns7,394 bytes
  • tests/gen/test_gen.pyruns46,555 bytes
  • tests/gen/test_gen_set.pyruns11,615 bytes
  • tests/gen/test_grok_provider.pyruns21,490 bytes
  • tests/gen/test_handedness.pyruns17,330 bytes
  • tests/gen/test_layout_guide.pyruns5,701 bytes
  • tests/gen/test_logins_off.pyruns7,612 bytes
  • tests/gen/test_logo.pyruns30,281 bytes
  • tests/gen/test_openai_provider.pyruns29,350 bytes
  • tests/gen/test_painted_checkerboard.pyruns6,348 bytes
  • tests/gen/test_pixel_draw.pyruns43,123 bytes
  • tests/gen/test_pixel_draw_frames.pyruns23,221 bytes
  • tests/gen/test_pixel_effect.pyruns3,007 bytes
  • tests/gen/test_pixel_gates.pyruns19,230 bytes
  • tests/gen/test_pixel_grid.pyruns16,176 bytes
  • tests/gen/test_prompt_assembly.pyruns16,862 bytes
  • tests/gen/test_prompt_freeze.pyruns8,653 bytes
  • tests/gen/test_provider_address.pyruns16,839 bytes
  • tests/gen/test_refusal.pyruns6,510 bytes
  • tests/gen/test_retry.pyruns18,605 bytes
  • tests/gen/test_trim_alpha.pyruns1,437 bytes
  • tests/gen/test_video.pyruns88,442 bytes
  • tests/gen/test_video_facing.pyruns6,095 bytes
  • tests/gen/test_video_modes.pyruns22,349 bytes
  • tests/gen/test_vision_read.pyruns5,634 bytes
  • tests/http_answer.pyruns1,463 bytes
  • tests/keyed_figure.pyruns5,643 bytes
  • tests/logo_lettering.pyruns10,350 bytes
  • tests/packaging/test_cli_taxonomy.pyruns3,342 bytes
  • tests/packaging/test_curation_asset_packaging.pyruns8,449 bytes
  • tests/packaging/test_curation_cli_entrypoint.pyruns2,871 bytes
  • tests/packaging/test_entrypoint_interpreter.pyruns4,147 bytes
  • tests/packaging/test_numpy_dependency_gate.pyruns9,481 bytes
  • tests/packaging/test_package_surface.pyruns6,058 bytes
  • tests/packaging/test_pipeline_smoke.pyruns27,276 bytes
  • tests/packaging/test_project_metadata.pyruns2,013 bytes
  • tests/packaging/test_recolor_cli_entrypoint.pyruns1,712 bytes
  • tests/packaging/test_version_ssot.pyruns840 bytes
  • tests/picture_digest.pyruns1,358 bytes
  • tests/qa/test_correction_loop_inputs_kept.pyruns11,050 bytes
  • tests/qa/test_handed_check.pyruns13,485 bytes
  • tests/qa/test_inspect_score_loop.pyruns5,498 bytes
  • tests/qa/test_motion.pyruns16,998 bytes
  • tests/release/test_fast_bundle.pyruns2,572 bytes
  • tests/release/test_lane_rife_collection.pyruns8,034 bytes
  • tests/release/test_release_notes.pyruns10,730 bytes
  • tests/release/test_release_publish.pyruns10,123 bytes
  • tests/release/test_rife_pins.pyruns1,894 bytes
  • tests/release/test_t4_lane.pyruns1,153 bytes
  • tests/scene/test_inspect_scene.pyruns11,062 bytes
  • tests/scene/test_layer_resample.pyruns1,714 bytes
  • tests/scene/test_model.pyruns15,289 bytes
  • tests/scene/test_render.pyruns16,940 bytes
  • tests/serve/test_curation_view_contract.pyruns34,376 bytes
  • tests/serve/test_curator_pixel_scaling_ssot.pyruns14,195 bytes
  • tests/serve/test_curator_single_display_pipeline.pyruns7,159 bytes
  • tests/serve/test_curator_wire_keys.pyruns18,504 bytes
  • tests/serve/test_pixel_grid_always_available.pyruns5,582 bytes
  • tests/serve/test_recolor_curation_view.pyruns11,531 bytes
  • tests/spec/test_assets.pyruns16,344 bytes
  • tests/spec/test_migrate_breathe.pyruns5,641 bytes
  • tests/spec/test_publish_rwlock_cross_process.pyruns3,546 bytes
  • tests/spec/test_request_read_no_mutation.pyruns8,348 bytes
  • tests/spec/test_request_retired_rig_keys.pyruns5,019 bytes
  • tests/spec/test_request_write_isolation.pyruns11,907 bytes
  • tests/spec/test_run_dir_lock.pyruns63,320 bytes
  • tests/spec/test_runio_publish_set.pyruns2,293 bytes
  • tests/talking_face.pyruns11,361 bytes
  • tests/test_cli_kwargs.pyruns5,772 bytes
  • tests/test_gif_report.pyruns1,030 bytes
  • tests/test_hexcolor.pyruns3,616 bytes
  • tests/test_lsq.pyruns1,164 bytes
  • tests/test_prepare_layout_guides.pyruns2,719 bytes
  • tests/test_subject_profile.pyruns8,965 bytes
  • tests/util/test_console.pyruns2,631 bytes
  • tests/util/test_gif_utils.pyruns3,065 bytes
  • tests/video/held_fill_inputs.pyruns5,694 bytes
  • tests/video/jump_inputs.pyruns3,908 bytes
  • tests/video/test_attack_headroom.pyruns4,778 bytes
  • tests/video/test_attack_motion.pyruns7,914 bytes
  • tests/video/test_attack_return.pyruns4,676 bytes
  • tests/video/test_auto_motion.pyruns9,917 bytes
  • tests/video/test_auto_motion_opening.pyruns4,422 bytes
  • tests/video/test_auto_motion_uncorrected.pyruns4,301 bytes
  • tests/video/test_batch_bases.pyruns1,082 bytes
  • tests/video/test_batch_facing.pyruns6,406 bytes
  • tests/video/test_batch_handed.pyruns8,259 bytes
  • tests/video/test_between_cache.pyruns20,991 bytes
  • tests/video/test_body_anchor.pyruns3,494 bytes
  • tests/video/test_body_anchor_gate.pyruns11,788 bytes
  • tests/video/test_body_plan.pyruns22,381 bytes
  • tests/video/test_canvas_key_normalize.pyruns9,127 bytes
  • tests/video/test_canvas_trail.pyruns2,304 bytes
  • tests/video/test_clip_prompt.pyruns13,049 bytes
  • tests/video/test_crossfade.pyruns13,310 bytes
  • tests/video/test_crossings.pyruns13,393 bytes
  • tests/video/test_cycle_align.pyruns34,278 bytes
  • tests/video/test_cycle_align_beat.pyruns25,626 bytes
  • tests/video/test_cycle_align_foot.pyruns12,231 bytes
  • tests/video/test_cycle_align_foot_margin.pyruns3,230 bytes
  • tests/video/test_cycle_suspects.pyruns25,601 bytes
  • tests/video/test_duration_window_oneshot.pyruns6,589 bytes
  • tests/video/test_edge_border.pyruns20,742 bytes
  • tests/video/test_edge_speck_lead_in.pyruns22,294 bytes
  • tests/video/test_effect.pyruns10,664 bytes
  • tests/video/test_explicit_window.pyruns7,713 bytes
  • tests/video/test_face_layer.pyruns32,861 bytes
  • tests/video/test_fit_tight.pyruns12,240 bytes
  • tests/video/test_follow.pyruns31,760 bytes
  • tests/video/test_follow_inspect.pyruns31,417 bytes
  • tests/video/test_follow_read_on.pyruns22,738 bytes
  • tests/video/test_follow_stretch_floor.pyruns11,969 bytes
  • tests/video/test_frames_inputs_kept.pyruns5,838 bytes
  • tests/video/test_gait_fallback.pyruns32,856 bytes
  • tests/video/test_gait_fallback_resample.pyruns1,898 bytes
  • tests/video/test_gait_guard_anchor_wide.pyruns18,581 bytes
  • tests/video/test_gait_harmonic_ambiguity.pyruns2,288 bytes
  • tests/video/test_gait_window_context.pyruns2,899 bytes
  • tests/video/test_ghost_given_way.pyruns28,132 bytes
  • tests/video/test_ghost_retake.pyruns13,376 bytes
  • tests/video/test_ghost_screen.pyruns11,610 bytes
  • tests/video/test_held_cut_restoration.pyruns12,281 bytes
  • tests/video/test_held_drawings.pyruns18,329 bytes
  • tests/video/test_held_fill.pyruns39,936 bytes
  • tests/video/test_held_walk_seam.pyruns10,681 bytes
  • tests/video/test_idle_still.pyruns5,166 bytes
  • tests/video/test_inbetween_doubled.pyruns17,403 bytes
  • tests/video/test_inbetween_hole.pyruns46,260 bytes
  • tests/video/test_inbetween_seen_through.pyruns4,208 bytes
  • tests/video/test_loop_body_turn.pyruns68,932 bytes
  • tests/video/test_loop_compare.pyruns8,786 bytes
  • tests/video/test_loop_ease.pyruns29,173 bytes
  • tests/video/test_loop_flow.pyruns14,803 bytes
  • tests/video/test_loop_half_step.pyruns5,479 bytes
  • tests/video/test_loop_inputs_kept.pyruns10,911 bytes
  • tests/video/test_loop_overlap.pyruns31,220 bytes
  • tests/video/test_loop_part_pop.pyruns20,447 bytes
  • tests/video/test_loop_prop_seam.pyruns15,183 bytes
  • tests/video/test_loop_prop_seam_held.pyruns26,969 bytes
  • tests/video/test_loop_repair.pyruns20,349 bytes
  • tests/video/test_loop_sampling_and_wrap.pyruns3,228 bytes
  • tests/video/test_loop_silent_pass.pyruns18,210 bytes
  • tests/video/test_loop_two_lengths.pyruns4,994 bytes
  • tests/video/test_motion_anchor.pyruns13,734 bytes
  • tests/video/test_once.pyruns9,506 bytes
  • tests/video/test_one_shot_moved.pyruns4,070 bytes
  • tests/video/test_one_shot_refusal.pyruns9,044 bytes
  • tests/video/test_one_step_cut.pyruns18,648 bytes
  • tests/video/test_outline_shift.pyruns11,788 bytes
  • tests/video/test_parts.pyruns25,036 bytes
  • tests/video/test_play.pyruns18,394 bytes
  • tests/video/test_prop_plate.pyruns15,884 bytes
  • tests/video/test_rife.pyruns20,192 bytes
  • tests/video/test_rife_cuts.pyruns9,630 bytes
  • tests/video/test_rife_executor.pyruns39,859 bytes
  • tests/video/test_rife_install.pyruns12,335 bytes
  • tests/video/test_rife_models.pyruns11,161 bytes
  • tests/video/test_rife_torch.pyruns31,724 bytes
  • tests/video/test_rife_torch_v425.pyruns6,027 bytes
  • tests/video/test_root_motion.pyruns21,725 bytes
  • tests/video/test_screen_jump.pyruns7,846 bytes
  • tests/video/test_seam_bridge.pyruns18,793 bytes
  • tests/video/test_seam_pop_gate.pyruns18,325 bytes
  • tests/video/test_set_sheet.pyruns16,407 bytes
  • tests/video/test_source_restoration.pyruns57,685 bytes
  • tests/video/test_spill_hue_evidence.pyruns4,698 bytes
  • tests/video/test_spill_reference_window.pyruns9,802 bytes
  • tests/video/test_stop.pyruns18,627 bytes
  • tests/video/test_strip_resample.pyruns6,526 bytes
  • tests/video/test_sway_band.pyruns27,171 bytes
  • tests/video/test_sway_breath.pyruns21,648 bytes
  • tests/video/test_sway_flat_across.pyruns6,118 bytes
  • tests/video/test_sway_frames.pyruns8,671 bytes
  • tests/video/test_sway_hold.pyruns20,885 bytes
  • tests/video/test_sway_names.pyruns6,011 bytes
  • tests/video/test_sway_read_on_recut.pyruns53,198 bytes
  • tests/video/test_sway_region.pyruns35,684 bytes
  • tests/video/test_sway_region_over.pyruns57,578 bytes
  • tests/video/test_sway_seams.pyruns2,737 bytes
  • tests/video/test_video_pipeline.pyruns25,944 bytes
  • tests/video/test_video_spill.pyruns5,530 bytes
  • tests/video/test_walk_canvas_room.pyruns11,061 bytes
  • tests/video/test_walk_defaults.pyruns4,740 bytes
  • tests/video/test_walk_steps.pyruns152,928 bytes
  • tests/video/test_wrap_blend.pyruns31,582 bytes
  • tests/workflow/test_capabilities.pyruns9,351 bytes
  • tests/workflow/test_workflow.pyruns12,756 bytes
Read SKILL.md

# Sprite Gen

Generation entry points: **make sprites**, **make an image**, or **animate a still into a video**. Existing generation, extraction and export tools do the work; the user chooses the result and provider. For **repeat a background**, **project a shadow**, **inspect motion** or **compose a scene**, use the independent routes below directly with existing assets.

## Start every generation request here

For a standalone video clip, read [video](docs/video.md) and use `sprite-gen video`.
This route works from any agent engine and delivers a verified MP4 plus report.
For sprites or ordinary images, use the guides below.

Read [user-workflow](docs/user-workflow.md), then run the appropriate read-only guide:

```bash
$SPRITE_GEN_ROOT/.venv/bin/sprite-gen workflow --kind sprite
View the complete source on GitHub

Skills included

  • sprite-gen

Repository facts

License
Apache-2.0
Created
May 12, 2026
Last pushed
Nov 2, 2026
Forks
379
Open issues
1
Project activity
Active

Rank over the last 12 weeks

Now #328 · best #328 · up 50 in 30 days

  1. #384 on Oct 29
  2. #385 on Oct 30
  3. #384 from Oct 31 to Nov 3
  4. #382 on Nov 4
  5. #356 on Nov 5
  6. #328 since Nov 6
77 earlier periods
  1. #755 on Aug 2
  2. #721 from Aug 7 to Aug 8
  3. #719 on Aug 9
  4. #743 on Aug 10
  5. #739 on Aug 11
  6. #740 on Aug 12
  7. #731 on Aug 13
  8. #723 on Aug 14
  9. #694 on Aug 15
  10. #718 on Aug 16
  11. #723 on Aug 17
  12. #731 on Aug 18
  13. #712 on Aug 19
  14. #709 on Aug 20
  15. #682 on Aug 22
  16. #714 on Aug 23
  17. #736 on Aug 24
  18. #745 on Aug 25
  19. #724 on Aug 26
  20. #735 on Aug 27
  21. #756 on Aug 28
  22. #693 on Aug 29
  23. #694 on Aug 30
  24. #731 on Aug 31
  25. #743 on Sep 1
  26. #730 on Sep 2
  27. #733 on Sep 3
  28. #708 on Sep 4
  29. #694 on Sep 5
  30. #722 on Sep 6
  31. #730 on Sep 7
  32. #751 on Sep 8
  33. #684 on Sep 9
  34. #561 on Sep 10
  35. #526 on Sep 11
  36. #507 on Sep 12
  37. #498 on Sep 13
  38. #507 on Sep 14
  39. #494 on Sep 15
  40. #498 on Sep 16
  41. #492 on Sep 17
  42. #495 on Sep 18
  43. #476 on Sep 19
  44. #477 on Sep 20
  45. #471 on Sep 21
  46. #472 on Sep 22
  47. #464 on Sep 23
  48. #448 on Sep 24
  49. #444 on Sep 25
  50. #423 on Sep 26
  51. #429 on Sep 27
  52. #432 on Sep 28
  53. #440 on Sep 29
  54. #433 on Sep 30
  55. #429 on Oct 1
  56. #413 on Oct 2
  57. #391 on Oct 3
  58. #379 on Oct 4
  59. #380 on Oct 5
  60. #378 from Oct 6 to Oct 8
  61. #386 on Oct 9
  62. #370 on Oct 10
  63. #376 on Oct 11
  64. #379 from Oct 12 to Oct 13
  65. #381 on Oct 14
  66. #375 on Oct 15
  67. #379 on Oct 16
  68. #371 on Oct 17
  69. #377 on Oct 18
  70. #375 on Oct 19
  71. #378 on Oct 20
  72. #374 on Oct 21
  73. #372 on Oct 22
  74. #369 on Oct 23
  75. #364 on Oct 24
  76. #379 on Oct 25
  77. #383 on Oct 28

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 95 notes
  • CHANGELOG.md:39 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:37 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:49 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:50 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:64 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:67 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:68 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:69 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:74 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:175 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:176 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:177 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:179 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:292 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:290 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:291 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:293 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:294 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:295 Analysis incomplete: physical or joined line exceeds character limit
  • CHANGELOG.md:296 Analysis incomplete: physical or joined line exceeds character limit
Show all 1,363 signals by file

.githooks/pre-commit

  • Executable scriptline 1
    #!/bin/bash
  • Access to secretsline 6
    [Credential-related source omitted]

.gitleaks.toml

  • Network accessline 6
    # overwrite it on a re-run, so your edits are safe. # # gitleaks config reference: https://github.com/gitleaks/gitleaks#configuration
  • Network accessline 8
    # gitleaks config reference: https://github.com/gitleaks/gitleaks#configuration
  • Access to secretsline 23
    [Credential-related source omitted]

CHANGELOG.md

  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 142
    [Credential-related source omitted]
  • Network accessline 255
    - **New: provider addresses.** Each of the four providers sprite-gen calls over HTTP has a variable that replaces its documented address (the API root with its version path, `https://api.openai.com/v1`, `https://api.x.ai/v1`, `https://api.a
  • Access to secretsline 257
    [Credential-related source omitted]
  • Network accessline 567
    - **New: RIFE's torch backend runs rife-v4.6 in PyTorch for compute GPUs without Vulkan.** `SPRITE_GEN_RIFE_BACKEND=torch` runs the same rife-v4.6 in PyTorch (`sprite_gen/video/rife_torch.py`). It serves a GPU the binary cannot run on: rife
  • Access to secretsline 1182
    [Credential-related source omitted]
  • Network accessline 1187
    - **Behavior change: a refused provider request is sent again only within the time limit of its call, and the waits count in that limit.** Previously a request its provider documents as not taken (a 429, an overload) was sent again after 8 
  • Network accessline 1188
    - **Tests** — `tests/gen/test_retry.py` (a request sent again only while its wait ends before the time limit; the answer's `retry-after` counted the same; a wait that ends at the limit not waited; a wait that woke at the limit or past it se
  • Network accessline 1189
    - **Behavior change: requests can pack sound without images.** Previously, a version 1 request required a nonempty `assets` list (refused with "assets must be a nonempty list"), and version 2 required at least one asset, image, tile, UI kit
  • Network accessline 1193
    - **Tests** — `tests/video/test_play.py` (every named state given no mode is pinned, prompted and cut as before, and the same when its preset is named, save that a loop asked for is never failed over; a mode a state cannot play is refused; 
  • Network accessline 1194
    - **Behavior change: the UI kit cut reads the drawing with one exact judgment instead of a centring heuristic.** Previously, each part went to the box that holds its centroid, with every box widened by half the gap. When that left a box emp
  • Access to secretsline 1203
    [Credential-related source omitted]
  • Access to secretsline 1204
    [Credential-related source omitted]
  • Access to secretsline 1205
    [Credential-related source omitted]
  • Network accessline 1215
    - **Tests** — `tests/gen/test_pixel_grid.py` (several blocks read from the last whole one, or the last with rows to repair; one block as before) and an answer of two blocks drawn once in `tests/gen/test_pixel_draw.py`. - **New: alpha haze c
  • Network accessline 1216
    - **New: alpha haze cleanup for transparent sheets (`frames.alpha_floor.clear_haze`).** Pixels at or above a floor, and faint pixels within a few pixels of them (an object's anti-aliased edge), are kept byte for byte; every other faint pixe
  • Network accessline 1217
    - **New verb: `ui-kit` splits a game UI kit sheet into nine-slice elements.** `gen --layout-guide ui-kit` attaches a fixed square layout (panel, button, pressed button, card frame, HP and XP bar frames, timer badge) and asks for each elemen
  • Network accessline 1218
    - **New: `game-pack` request and manifest version 2 with `images`, `tiles` and `ui`.** Single images (props) are atlas frames with an anchor and an optional footprint (`"base"` measures where the image meets the ground); tiles are their own
  • Network accessline 1219
    - **New: `slice-sheet --scale sheet` keeps the sizes a sheet was drawn at, and `--fit contain` keeps every cut whole.** The default gives each cell's main subject the target height on its own, so the props of one sheet came out the same hei
  • Network accessline 1220
    - **New: `slice-sheet` writes `<prefix>slice-sheet.json`.** It names the scale and fit, the sheet's factor and where it came from, and per cell the factor, the main subject's size on the sheet and on the canvas, the cut's box on the canvas,
  • Network accessline 1221
    - **New: a 2:3 UI kit sheet holds the whole kit: bar fills, an item slot, a counter plate, on and off dots and a joystick.** `gen --layout-guide ui-kit --aspect-ratio 2:3` draws the square layout's seven frames at the same places and, in a 
  • Network accessline 1222
    - **Behavior change: a 2:3 UI kit sheet that leaves a band element out still makes a kit, without it.** The seven frames (`panel`, `button`, `button_pressed`, `card`, `hp_bar_frame`, `xp_bar_frame`, `timer_badge`) are required: an empty fra
  • Network accessline 1223
    - **Behavior change: `ui-kit` writes a kit whole into a new directory and refuses one that holds anything.** `--out-dir` must not exist yet or be an empty directory. One that holds an earlier kit or any other file is refused with its name a
  • Network accessline 1224
    - **Fix: a UI kit sheet drawn a few percent shorter than its guide is cut instead of refused.** An image model may draw the layout a few percent shorter than the guide; the lower an element, the farther it sits above its box, until its cent
  • Access to secretsline 1254
    [Credential-related source omitted]
  • Access to secretsline 1255
    [Credential-related source omitted]
  • Network accessline 1256
    - **Output change: the unfinished line names the command that asks again; reports count the polls that got no answer.** The line reads ``ask for request_id=<id> again with `sprite-gen video-resume --request-id <id> --out <out>` instead of s
  • Network accessline 1257
    - **`tests/gen/test_video.py`** asks again by id and loses polls: `xai.http_json` raises `xai.TransportError` with the old line for a DNS failure, a timeout and a reset; lost, pending, refused, lost, done is asked on the one request with wa
  • Network accessline 1258
    - **Fix: a poll whose answer is cut short, garbled or not JSON is asked again on the same request — the run no longer ends with no `request_id`.** A poll answer that broke after it began — a body that closed before its `Content-Length` (`ht
  • Network accessline 1259
    - **`tests/gen/test_video.py`** answers over a real socket from a local server: `xai.http_json` raises `xai.TransportError` for a body closed 10 bytes into its 200, a 503 body cut the same way, a garbage status line (the transport's line) a
  • Network accessline 1260
    - **Fix: a clip that is done and whose download fails leaves the run unfinished on its `request_id` — never a second purchase.** Once the poll said done the clip is made and may be billed, yet a failed download ended `video`, `video-extend`
  • Network accessline 1329
    | As delivered: cells 4 and 9 are melted in-betweens | After two `video-loop-repair` requests, each compared `improved` | |---|---| | ![A synthetic walker as delivered, two cells melted](https://github.com/aldegad/sprite-gen/releases/downlo
  • Network accessline 1331
    | ![A synthetic walker as delivered, two cells melted](https://github.com/aldegad/sprite-gen/releases/download/v2.39.0/source-restoration-before-x3.gif) | ![The same walker with both cells restored from their source frames](https://github.c
  • Network accessline 1340
    v2.36.0 was cut but not published on its own: its release was held for a cut that differed by machine, fixed here. This release is the first to carry its changes too — see `v2.36.0` in [CHANGELOG.md](https://github.com/aldegad/sprite-gen/bl
  • Network accessline 1465
    | Before / after | | |---|---| | A back walk going away, scaled back up: 2.23.0 cut the crown at the cell's top (red line); 2.24.0 widens the frames first | ![crown kept](https://github.com/aldegad/sprite-gen/releases/download/v2.24.0/back-
  • Network accessline 1466
    |---|---| | A back walk going away, scaled back up: 2.23.0 cut the crown at the cell's top (red line); 2.24.0 widens the frames first | ![crown kept](https://github.com/aldegad/sprite-gen/releases/download/v2.24.0/back-crown-before-after.gi
  • Network accessline 1467
    | A back walk going away, scaled back up: 2.23.0 cut the crown at the cell's top (red line); 2.24.0 widens the frames first | ![crown kept](https://github.com/aldegad/sprite-gen/releases/download/v2.24.0/back-crown-before-after.gif) |
  • Network accessline 1468
    | `video-follow` on a hip pouch (zoomed): as cut, and following the walk's bob as a damped mass | ![pouch follows](https://github.com/aldegad/sprite-gen/releases/download/v2.24.0/follow-pouch-before-after.gif) |
  • Network accessline 1590
    ![Gold drops and strokes before and after](https://github.com/aldegad/sprite-gen/releases/download/v2.10.2/decontam-gold.gif)
  • Network accessline 1610
    ![Nine idle loops before and after](https://github.com/aldegad/sprite-gen/releases/download/v2.9.0/idle-nine.gif)
  • Network accessline 1642
    | Humans | Animals | |---|---| | ![Nine human walk loops](https://github.com/aldegad/sprite-gen/releases/download/v2.6.0/human-nine.gif) | ![Nine animal walk loops](https://github.com/aldegad/sprite-gen/releases/download/v2.6.0/animal-nine.
  • Network accessline 1644
    | ![Nine human walk loops](https://github.com/aldegad/sprite-gen/releases/download/v2.6.0/human-nine.gif) | ![Nine animal walk loops](https://github.com/aldegad/sprite-gen/releases/download/v2.6.0/animal-nine.gif) |
  • Access to secretsline 1691
    [Credential-related source omitted]
  • Access to secretsline 1692
    [Credential-related source omitted]
  • Access to secretsline 1694
    [Credential-related source omitted]
  • Access to secretsline 1747
    [Credential-related source omitted]
  • Access to secretsline 1828
    [Credential-related source omitted]
  • Access to secretsline 1829
    [Credential-related source omitted]
  • Network accessline 1842
    This release incorporates accepted work from eight community pull requests. Thanks to [@devswha](https://github.com/devswha) for chroma color preservation, [@bokjk](https://github.com/bokjk) for portable manifest paths, [@Dongkyu-ES](https:

CONTRIBUTORS.md

  • Network accessline 5
    ## [@devswha](https://github.com/devswha)
  • Network accessline 7
    - [PR #1](https://github.com/aldegad/sprite-gen/pull/1): protected subject colors during chroma cleanup and improved automatic key selection.
  • Network accessline 9
    ## [@bokjk](https://github.com/bokjk)
  • Network accessline 11
    - [PR #2](https://github.com/aldegad/sprite-gen/pull/2): made machine-readable manifest paths use portable POSIX separators. The accepted change was ported into the reorganized package implementation.
  • Network accessline 13
    ## [@Dongkyu-ES](https://github.com/Dongkyu-ES)
  • Network accessline 15
    - [PR #4](https://github.com/aldegad/sprite-gen/pull/4): made CLI help tests deterministic in colored shell environments.
  • Network accessline 16
    - [PR #5](https://github.com/aldegad/sprite-gen/pull/5): added Aseprite JSON, Phaser-compatible, and Flame-compatible exports.
  • Network accessline 17
    - [PR #6](https://github.com/aldegad/sprite-gen/pull/6): introduced character and effect subject profiles. The accepted implementation uses resolution-aware sparse-frame floors.
  • Network accessline 19
    ## [@napkn34](https://github.com/napkn34)
  • Network accessline 21
    - [PR #7](https://github.com/aldegad/sprite-gen/pull/7): fixed Windows provider CLI resolution and UTF-8 subprocess I/O.
  • Network accessline 22
    - [PR #9](https://github.com/aldegad/sprite-gen/pull/9): added the Windows `LockFileEx` backend for shared readers and exclusive publishers.
  • Network accessline 24
    ## [@monibu1548](https://github.com/monibu1548)
  • Network accessline 26
    - [PR #11](https://github.com/aldegad/sprite-gen/pull/11): made vertical centering work in the pixel-unfake row-placement path and exposed per-frame vertical grounding through the CLI.
  • Network accessline 28
    ## [@seunghan91](https://github.com/seunghan91)
  • Network accessline 30
    - [PR #3](https://github.com/aldegad/sprite-gen/pull/3): proposed lowering the default chroma key threshold from `96` to `80` after a 705-case offline sweep. The PR was not merged, but its benchmark prompted a real-pipeline comparison that 
  • Network accessline 32
    ## [@smnchoi](https://github.com/smnchoi)
  • Network accessline 34
    - [Issue #15](https://github.com/aldegad/sprite-gen/issues/15): reproduced the root-skill installer failure and identified the explicit `--name sprite-gen` argument required for the documented Codex installation command.
  • Network accessline 36
    ## [@StreetJammer](https://github.com/StreetJammer)
  • Network accessline 38
    - [PR #16](https://github.com/aldegad/sprite-gen/pull/16): added support for Codex `image_gen.generation` Extension result records while preserving the existing inline PNG verification path.
  • Network accessline 40
    ## [@Chang-Jin-Lee](https://github.com/Chang-Jin-Lee)
  • Network accessline 42
    - [PR #28](https://github.com/aldegad/sprite-gen/pull/28): made explicit character-height targets scale smaller video sprites up while preserving the cell-height cap.

LICENSE

  • Network accessline 1
    Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
  • Network accessline 3
    http://www.apache.org/licenses/
  • Network accessline 195
    http://www.apache.org/licenses/LICENSE-2.0

NOTICE

  • Network accessline 8
    The `align_x: "alpha-centroid"` frame alignment (sprite_gen/extract.py) is a port of the alpha-weighted mass-centroid alignment from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/extract.go),
  • Network accessline 9
    port of the alpha-weighted mass-centroid alignment from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/extract.go), Copyright Andrew Kim (gykim80), MIT License.
  • Network accessline 10
    (https://github.com/gykim80/perfectpixel-studio, internal/sprite/extract.go),
  • Network accessline 13
    The `segmentation: "projection"` frame separation (sprite_gen/segment.py) is a port of the projection-profile + DP optimal-cut segmentation from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio,
  • Network accessline 14
    port of the projection-profile + DP optimal-cut segmentation from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/segment.go), Copyright Andrew Kim (gykim80), MIT License.
  • Network accessline 15
    perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio,
  • Network accessline 20
    Hermite soft matte, key-direction despill, border flood fill and the pure-key rematte self-diagnostic — from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/chroma.go),
  • Network accessline 21
    rematte self-diagnostic — from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/chroma.go), Copyright Andrew Kim (gykim80), MIT License.
  • Network accessline 22
    (https://github.com/gykim80/perfectpixel-studio, internal/sprite/chroma.go),
  • Network accessline 26
    (sprite_gen/extract.py) is a port of the unfake same-color run-length mode block-size estimation from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/pixelize.go),
  • Network accessline 27
    block-size estimation from perfectpixel-studio (https://github.com/gykim80/perfectpixel-studio, internal/sprite/pixelize.go), Copyright Andrew Kim (gykim80), MIT License.
  • Network accessline 28
    (https://github.com/gykim80/perfectpixel-studio, internal/sprite/pixelize.go),
  • Network accessline 31
    RIFE's torch backend (sprite_gen/video/rife_torch.py) writes again the IFNet of rife-v4.6 — its structure and parameter names, and its warp — from Practical-RIFE (https://github.com/hzwer/Practical-RIFE, commit f6b5132, train_log/IFNet_HDv3
  • Network accessline 32
    rife-v4.6 — its structure and parameter names, and its warp — from Practical-RIFE (https://github.com/hzwer/Practical-RIFE, commit f6b5132, train_log/IFNet_HDv3.py and model/warplayer.py), Copyright (c) 2021 hzwer, MIT License.
  • Network accessline 33
    (https://github.com/hzwer/Practical-RIFE, commit f6b5132, train_log/IFNet_HDv3.py
  • Network accessline 36
    It writes again the IFNet of rife-v4.25 — its encoder and five blocks, their structure and parameter names — from Practical-RIFE's 4.25 model (https://github.com/hzwer/Practical-RIFE, the v4.25 train_log of 2024-09-19,
  • Network accessline 37
    structure and parameter names — from Practical-RIFE's 4.25 model (https://github.com/hzwer/Practical-RIFE, the v4.25 train_log of 2024-09-19, train_log/IFNet_HDv3.py), Copyright (c) 2021 hzwer, MIT License. Practical-RIFE's
  • Network accessline 38
    (https://github.com/hzwer/Practical-RIFE, the v4.25 train_log of 2024-09-19,
  • Network accessline 45
    Its test-time augmentation — the pair turned eight ways and run both ways in time, the flows averaged at every level — follows rife-ncnn-vulkan 20221029 (https://github.com/nihui/rife-ncnn-vulkan, src/rife.cpp RIFE::process_v4 and its
  • Network accessline 46
    the flows averaged at every level — follows rife-ncnn-vulkan 20221029 (https://github.com/nihui/rife-ncnn-vulkan, src/rife.cpp RIFE::process_v4 and its rife_*_tta shaders), Copyright (c) 2020 nihui, MIT License.
  • Network accessline 47
    (https://github.com/nihui/rife-ncnn-vulkan, src/rife.cpp RIFE::process_v4 and its
  • Network accessline 50
    `sprite-gen rife install` downloads TNTwise's fork of rife-ncnn-vulkan, release 20250112 (https://github.com/TNTwise/rife-ncnn-vulkan), Copyright (c) 2020 nihui,
  • Network accessline 51
    20250112 (https://github.com/TNTwise/rife-ncnn-vulkan), Copyright (c) 2020 nihui,

README.es.md

  • Network accessline 11
    <p align="center"><sub>Añade a tu lista de deseados de Steam <a href="https://store.steampowered.com/app/5045950/">Dungeon Sookuma</a>, un juego en desarrollo por el creador de sprite-gen con parte de su arte hecho con esta herramienta.</su
  • Network accessline 13
    <p align="center">   <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Muestra animada de sprite-gen v2: paladín, lobo y slime" /></a>
  • Network accessline 14
    <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Muestra animada de sprite-gen v2: paladín, lobo y slime" /></a>
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 163
    [Credential-related source omitted]

README.fr.md

  • Network accessline 11
    <p align="center"><sub>Ajoutez à votre liste de souhaits Steam <a href="https://store.steampowered.com/app/5045950/">Dungeon Sookuma</a>, un jeu en cours de développement par le créateur de sprite-gen avec une partie de ses graphismes conçu
  • Network accessline 13
    <p align="center">   <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Démonstration animée de sprite-gen v2 : paladin, loup et slime" /></a>
  • Network accessline 14
    <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Démonstration animée de sprite-gen v2 : paladin, loup et slime" /></a>
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 163
    [Credential-related source omitted]

README.ja.md

  • Network accessline 11
    <p align="center"><sub>sprite-genの制作者がゲームアートの一部を本ツールで制作しながら開発している<a href="https://store.steampowered.com/app/5045950/">Dungeon Sookuma</a>を、Steamのウィッシュリストに追加してください。</sub></p>
  • Network accessline 13
    <p align="center">   <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Animated sprite-gen v2 showcase: paladin, wolf and slime" /></a>
  • Network accessline 14
    <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Animated sprite-gen v2 showcase: paladin, wolf and slime" /></a>
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 163
    [Credential-related source omitted]

README.ko.md

  • Network accessline 11
    <p align="center"><sub>개발에 필요한 모델 API 비용을 <a href="https://github.com/sponsors/aldegad">GitHub 후원</a>으로 보탤 수 있어요. 원하시는 금액으로 일회성 또는 월간 후원을 선택할 수 있어요.</sub></p>
  • Network accessline 13
    <p align="center"><sub>sprite-gen 제작자가 게임 아트 일부를 이 도구로 만들며 개발 중인 <a href="https://store.steampowered.com/app/5045950/">Dungeon Sookuma</a>를 Steam에서 찜해 주세요.</sub></p>
  • Network accessline 15
    <p align="center">   <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="움직이는 sprite-gen v2 쇼케이스: 팔라딘, 늑대, 슬라임" /></a>
  • Network accessline 16
    <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="움직이는 sprite-gen v2 쇼케이스: 팔라딘, 늑대, 슬라임" /></a>
  • Access to secretsline 116
    [Credential-related source omitted]
  • Access to secretsline 169
    [Credential-related source omitted]

README.md

  • Network accessline 11
    <p align="center"><sub>Help cover the model API costs of developing sprite-gen with an optional <a href="https://github.com/sponsors/aldegad">GitHub sponsorship</a>. Choose your amount and a one-time or monthly contribution.</sub></p>
  • Network accessline 13
    <p align="center"><sub>Please wishlist <a href="https://store.steampowered.com/app/5045950/">Dungeon Sookuma on Steam</a>, a game in development by the creator of sprite-gen with part of the game art made using this tool.</sub></p>
  • Network accessline 15
    <p align="center">   <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Animated sprite-gen v2 showcase: paladin, wolf and slime" /></a>
  • Network accessline 16
    <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="Animated sprite-gen v2 showcase: paladin, wolf and slime" /></a>
  • Access to secretsline 123
    [Credential-related source omitted]
  • Access to secretsline 183
    [Credential-related source omitted]
  • Access to secretsline 184
    [Credential-related source omitted]
  • Access to secretsline 185
    [Credential-related source omitted]

README.zh-Hans.md

  • Network accessline 11
    <p align="center"><sub>请将 <a href="https://store.steampowered.com/app/5045950/">Dungeon Sookuma</a> 添加至 Steam 愿望单,这是 sprite-gen 开发者正在开发的游戏,部分游戏美术由本工具制作。</sub></p>
  • Network accessline 13
    <p align="center">   <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="sprite-gen v2 动画展示:圣骑士、狼与史莱姆" /></a>
  • Network accessline 14
    <a href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif" width="960" alt="sprite-gen v2 动画展示:圣骑士、狼与史莱姆" /></a>
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 163
    [Credential-related source omitted]

SECURITY.md

  • Network accessline 41
    Pillow requires `>=12.3.0,<13`, which excludes versions affected by the security issues fixed in the [Pillow 12.3.0 release](https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html).
  • Network accessline 42
    security issues fixed in the [Pillow 12.3.0 release](https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html).

SKILL.md

  • Access to secretsline 108
    [Credential-related source omitted]
  • Access to secretsline 109
    [Credential-related source omitted]
  • Access to secretsline 110
    [Credential-related source omitted]

docs/curation.md

  • Network accessline 25
    sleep 2 PORT=$(lsof -nP -a -p $! -iTCP -sTCP:LISTEN | awk 'END{sub(".*:","",$9); print $9}')   # stdout 버퍼링 때문에 log 대신 lsof 로 포트 확보 curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:$PORT/"   # 200 = positive proof, 그 후 URL 보고
  • Network accessline 27
    curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:$PORT/"   # 200 = positive proof, 그 후 URL 보고

docs/effects.md

  • Network accessline 62
    Additive output is calculated as $\min(255, B + a \cdot U)$ against background $B$. Pure white additive output saturates cleanly to white. Dark smoke becomes faint and black cannot occlude; use chroma keying when rendering opaque smoke. Whi

docs/engine-export.md

  • Network accessline 37
    Phaser's official API documents `load.aseprite` and `createFromAseprite`; its implementation looks up each tagged frame by the stringified numeric index and reads each frame's duration. Sources: [Phaser AnimationManager](https://docs.phaser
  • Network accessline 47
    This writes `exports/aseprite/idle.json`, `walk.json`, and so on. Every file uses local indices beginning at `0`, points to the same atlas PNG, and preserves millisecond frame durations. The relevant behavior is visible in Flame's official 

docs/frame-interpolation.md

  • Access to secretsline 39
    [Credential-related source omitted]

docs/gen.md

  • Network accessline 10
    OpenRouter, fal, BytePlus, …) are absent because nobody here uses them, not because of a design objection; a contributed provider is welcome when its author will keep maintaining it ([#37](https://github.com/aldegad/sprite-gen/issues/37)). 
  • Network accessline 11
    of a design objection; a contributed provider is welcome when its author will keep maintaining it ([#37](https://github.com/aldegad/sprite-gen/issues/37)). A backend whose terms forbid reaching a subscription login from third-party software
  • Network accessline 12
    maintaining it ([#37](https://github.com/aldegad/sprite-gen/issues/37)). A backend
  • Network accessline 13
    whose terms forbid reaching a subscription login from third-party software is not added, however it is invoked ([#36](https://github.com/aldegad/sprite-gen/pull/36), Antigravity).
  • Network accessline 15
    ([#36](https://github.com/aldegad/sprite-gen/pull/36), Antigravity).
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 21
    [Credential-related source omitted]
  • Access to secretsline 42
    [Credential-related source omitted]
  • Network accessline 121
    API contracts: [image generation](https://docs.x.ai/developers/model-capabilities/images/generation),
  • Network accessline 122
    [image editing](https://docs.x.ai/developers/model-capabilities/images/editing),
  • Network accessline 123
    [multi-image editing](https://docs.x.ai/developers/model-capabilities/images/multi-image-editing).
  • Access to secretsline 129
    [Credential-related source omitted]
  • Network accessline 144
    API contract: [OpenAI Images](https://developers.openai.com/api/images/).
  • Network accessline 150
    when each request is made, not at import, so a process that sets or changes it after importing the engine is followed. Unset, empty or blank is the documented address, as before. Any other value must be an `http://` or `https://` address wi
  • Network accessline 151
    importing the engine is followed. Unset, empty or blank is the documented address, as before. Any other value must be an `http://` or `https://` address with no query or fragment, or the call stops naming the variable.
  • Network accessline 152
    before. Any other value must be an `http://` or `https://` address with no query or
  • Network accessline 155
    | Provider | Variable | Default | Calls | |---|---|---|---| | OpenAI | `SPRITE_GEN_OPENAI_BASE_URL` | `https://api.openai.com/v1` | `gen --provider openai` images and edits, its vision checks (facing, the logo's text) |
  • Network accessline 156
    |---|---|---|---| | OpenAI | `SPRITE_GEN_OPENAI_BASE_URL` | `https://api.openai.com/v1` | `gen --provider openai` images and edits, its vision checks (facing, the logo's text) | | xAI | `SPRITE_GEN_XAI_BASE_URL` | `https://api.x.ai/v1` | `g
  • Network accessline 157
    | OpenAI | `SPRITE_GEN_OPENAI_BASE_URL` | `https://api.openai.com/v1` | `gen --provider openai` images and edits, its vision checks (facing, the logo's text) | | xAI | `SPRITE_GEN_XAI_BASE_URL` | `https://api.x.ai/v1` | `gen --provider grok
  • Network accessline 158
    | xAI | `SPRITE_GEN_XAI_BASE_URL` | `https://api.x.ai/v1` | `gen --provider grok` images and edits, its vision checks, the video facing check, `video` / `video-extend` / `video-edit` requests and polls, `video-resume` polls, the clip's down
  • Network accessline 159
    | Anthropic | `SPRITE_GEN_ANTHROPIC_BASE_URL` | `https://api.anthropic.com/v1` | `pixel-draw` messages, Message Batches, a batch's results file |
  • Access to secretsline 193
    [Credential-related source omitted]
  • Access to secretsline 194
    [Credential-related source omitted]

docs/logo.md

  • Access to secretsline 91
    [Credential-related source omitted]

docs/loop-repair.md

  • Network accessline 20
    [rife-ncnn-vulkan](https://github.com/TNTwise/rife-ncnn-vulkan), TNTwise's fork of nihui's, release
  • Network accessline 40
    | Release zip, [TNTwise 20250112](https://github.com/TNTwise/rife-ncnn-vulkan/releases/tag/20250112) | Size | SHA-256 (measured 2026-11-01) |
  • Network accessline 221
    beside a binary on `PATH`. PyPI's Linux wheel of PyTorch is its CUDA build (527 MB, and its CUDA libraries); a host that runs the backend on the CPU only installs PyTorch's CPU build first (192 MB): `pip install torch==2.13.0 --index-url ht
  • Network accessline 223
    `pip install torch==2.13.0 --index-url https://download.pytorch.org/whl/cpu`.
  • Network accessline 294
    | Source | Newest | What it offers | |---|---|---| | [nihui/rife-ncnn-vulkan](https://github.com/nihui/rife-ncnn-vulkan/releases) | release 20221029, 3.14.0's and before | models up to `rife-v4.6`; `-x`, spatial test-time augmentation (the 
  • Network accessline 295
    |---|---|---| | [nihui/rife-ncnn-vulkan](https://github.com/nihui/rife-ncnn-vulkan/releases) | release 20221029, 3.14.0's and before | models up to `rife-v4.6`; `-x`, spatial test-time augmentation (the pair run as its eight flips and trans
  • Network accessline 296
    | [nihui/rife-ncnn-vulkan](https://github.com/nihui/rife-ncnn-vulkan/releases) | release 20221029, 3.14.0's and before | models up to `rife-v4.6`; `-x`, spatial test-time augmentation (the pair run as its eight flips and transposes, the res
  • Network accessline 297
    | [TNTwise/rife-ncnn-vulkan](https://github.com/TNTwise/rife-ncnn-vulkan/releases) (a fork) | release 20250112 (an 830 MB zip), the one above since 2026-11-01 | adds `rife-v4.25`, `rife-v4.25-lite` and `rife-v4.26` (and `-v4.25-heavy`, `-v4
  • Network accessline 298
    | [hzwer/Practical-RIFE](https://github.com/hzwer/Practical-RIFE) (the weights) | 4.26 (2024-09-21) and 4.25.lite (2024-10-20); no model since | "recommended to choose 4.25 by default for most scenes" |
  • Network accessline 408
    apt_install("libvulkan1", "mesa-vulkan-drivers")    # the Vulkan loader + llvmpipe curl -fsSL -o /tmp/rife.zip https://github.com/TNTwise/rife-ncnn-vulkan/releases/download/20250112/ubuntu.zip
  • Network accessline 409
    curl -fsSL -o /tmp/rife.zip https://github.com/TNTwise/rife-ncnn-vulkan/releases/download/20250112/ubuntu.zip

docs/pixel-draw.md

  • Access to secretsline 38
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 109
    [Credential-related source omitted]
  • Network accessline 256
    The previews and the pick sheet put the frames in rows of eight. Claude 4.7 and later models read an image unscaled up to 2576 px on its long edge and 4784 patches of 28×28 px; a larger one is scaled down, which blurs pixel art ([vision](ht
  • Network accessline 257
    image unscaled up to 2576 px on its long edge and 4784 patches of 28×28 px; a larger one is scaled down, which blurs pixel art ([vision](https://platform.claude.com/docs/en/build-with-claude/vision), "Resolution and token cost", read 2026-1
  • Network accessline 258
    down, which blurs pixel art ([vision](https://platform.claude.com/docs/en/build-with-claude/vision),
  • Access to secretsline 299
    [Credential-related source omitted]
  • Access to secretsline 350
    [Credential-related source omitted]
  • Access to secretsline 422
    [Credential-related source omitted]
  • Access to secretsline 432
    [Credential-related source omitted]
  • Network accessline 448
    own plan. Anthropic permits an end user signing in to the unmodified Claude Code binary with their own subscription, and does not permit routing other people's requests through one ([legal and compliance](https://code.claude.com/docs/en/leg
  • Network accessline 449
    own subscription, and does not permit routing other people's requests through one ([legal and compliance](https://code.claude.com/docs/en/legal-and-compliance.md)): a service that draws for other people runs on `ANTHROPIC_API_KEY` — no logi
  • Network accessline 450
    ([legal and compliance](https://code.claude.com/docs/en/legal-and-compliance.md)): a service that
  • Access to secretsline 451
    [Credential-related source omitted]

docs/release.md

  • Network accessline 156
    본문에서 그 클립을 보여주려면 릴리즈 다운로드 URL (`https://github.com/aldegad/sprite-gen/releases/download/vX.Y.Z/<clip>.gif`)로 임베드하고,
  • Network accessline 157
    (`https://github.com/aldegad/sprite-gen/releases/download/vX.Y.Z/<clip>.gif`)로 임베드하고,

docs/video-pipeline.md

  • Network accessline 173
    sprite-gen never calls a video MCP. When your own agent (Claude, Codex) has one connected — ZCRE's remote MCP (`https://mcp.zcre.ai/mcp`, signed in with your own ZCRE account, paid from your own
  • Network accessline 174
    remote MCP (`https://mcp.zcre.ai/mcp`, signed in with your own ZCRE account, paid from your own

docs/video.md

  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]

pyproject.toml

  • Network accessline 49
    # GPU host the binary cannot run on (Vulkan-less CUDA). 2.13.0 is the release it was measured on. PyPI's Linux x86-64 # wheel is the CUDA 13 build; a host that runs it on the CPU only takes PyTorch's CPU index # (`pip install torch==2.13.0 
  • Network accessline 50
    # wheel is the CUDA 13 build; a host that runs it on the CPU only takes PyTorch's CPU index # (`pip install torch==2.13.0 --index-url https://download.pytorch.org/whl/cpu`) before the extra. torch = ["torch>=2.13.0,<3"]
  • Network accessline 51
    # (`pip install torch==2.13.0 --index-url https://download.pytorch.org/whl/cpu`) before the extra.
  • Network accessline 62
    [project.urls] Repository = "https://github.com/aldegad/sprite-gen"
  • Network accessline 63
    Repository = "https://github.com/aldegad/sprite-gen"

scripts/compose_selected_cycle.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/compose_sprite_atlas.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/compose_sprite_gif.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/curation.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/dev/breathe_mutation_battery.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 24
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Network accessline 142
    "const IDENTITY = () => ({ rotate: 0, scale: 1, dx: 0, dy: 0, shx: 0, shy: 0, flipX: 0 });\n"          "const snapshotPng = (c) => c.toDataURL(\"image/png\");\n"          "const postFramesForAssembly = (body) => fetch(\"/api/compare-gif\", 
  • Network accessline 143
    "const snapshotPng = (c) => c.toDataURL(\"image/png\");\n"          "const postFramesForAssembly = (body) => fetch(\"/api/compare-gif\", "          "{ method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, "
  • Network accessline 144
    "const postFramesForAssembly = (body) => fetch(\"/api/compare-gif\", "
  • Network accessline 149
    "        frames.push(snapshotPng(canvas));"),         ("sprite_gen/serve/curator/src/compare.js",          '      const res = await fetch("/api/compare-gif", {\n'
  • Network accessline 150
    ("sprite_gen/serve/curator/src/compare.js",          '      const res = await fetch("/api/compare-gif", {\n'          "        method: \"POST\",\n"
  • Network accessline 151
    '      const res = await fetch("/api/compare-gif", {\n'

scripts/dev/check_visible_magenta.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/dev/measure_align_sigma.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/dev/source_restoration_demo.py

  • Executable scriptline 1
    Executable file

scripts/diagnose_video_loop.py

  • Executable scriptline 1
    Executable file

scripts/export_aseprite.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/export_curated_pngs.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/extract_sprite_row_frames.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/gen_set.py

  • Executable scriptline 1
    Executable file

scripts/generate_sprite_image.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/generate_sprite_video.py

  • Executable scriptline 1
    Executable file

scripts/inspect_sprite_run.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/interpolate_frames.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/linux_lane.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Network accessline 79
    TORCH_VERSION=2.13.0 TORCH_CPU_INDEX=https://download.pytorch.org/whl/cpu
  • Network accessline 80
    TORCH_CPU_INDEX=https://download.pytorch.org/whl/cpu
  • Network accessline 91
    torch_gates() {   step "RIFE torch backend (PyTorch $TORCH_VERSION, CPU)"   .venv/bin/pip install --quiet --index-url "$TORCH_CPU_INDEX" "torch==$TORCH_VERSION"
  • Network accessline 92
    step "RIFE torch backend (PyTorch $TORCH_VERSION, CPU)"   .venv/bin/pip install --quiet --index-url "$TORCH_CPU_INDEX" "torch==$TORCH_VERSION"   .venv/bin/python -c 'import torch; print("torch", torch.__version__, "cuda", torch.version.cuda
  • Network accessline 93
    .venv/bin/pip install --quiet --index-url "$TORCH_CPU_INDEX" "torch==$TORCH_VERSION"
  • Dangerous shell operationline 102
    rm -f "$torch_log"
  • Dangerous shell operationline 150
    trap 'rm -f "$rife_log"' EXIT
  • Dangerous shell operationline 175
    trap 'rm -rf "$smoke" "${no_rife_data:-}"' EXIT
  • Dangerous shell operationline 205
    trap 'rm -rf "$smoke" "$pkg" "${no_rife_data:-}"' EXIT

scripts/prepare_sprite_run.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/preview_animation.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/recolor.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/release_notes.py

  • Executable scriptline 1
    Executable file
  • Network accessline 134
    base = f"https://raw.githubusercontent.com/{repo}/{branch}/"
  • Network accessline 148
    "\n"         "```sh\n"         f'pip install --upgrade "sprite-gen @ git+https://github.com/{repo}.git@{tag}"\n'
  • Network accessline 149
    "```sh\n"         f'pip install --upgrade "sprite-gen @ git+https://github.com/{repo}.git@{tag}"\n'         "```\n"
  • Network accessline 150
    f'pip install --upgrade "sprite-gen @ git+https://github.com/{repo}.git@{tag}"\n'
  • Network accessline 152
    "\n"         "The wheel, the source archive and `SHA256SUMS` are attached. Full notes in "         f"[CHANGELOG.md](https://github.com/{repo}/blob/{branch}/CHANGELOG.md#{changelog_anchor(heading)})."
  • Network accessline 153
    "The wheel, the source archive and `SHA256SUMS` are attached. Full notes in "         f"[CHANGELOG.md](https://github.com/{repo}/blob/{branch}/CHANGELOG.md#{changelog_anchor(heading)})."     )
  • Network accessline 154
    f"[CHANGELOG.md](https://github.com/{repo}/blob/{branch}/CHANGELOG.md#{changelog_anchor(heading)})."

scripts/release_publish.py

  • Executable scriptline 1
    Executable file

scripts/run_correction_loop.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/score_sprite_run.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/serve_curation.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/slice_sheet_cells.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/t4_lane.py

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 82
    f"mkdir -p {SRC} && tar -xzf /lane/source.tar.gz -C {SRC} && rm /lane/source.tar.gz",
  • Access to secretsline 112
    [Credential-related source omitted]

scripts/unpack_atlas_run.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/video_canvas.py

  • Executable scriptline 1
    Executable file

scripts/video_frames.py

  • Executable scriptline 1
    Executable file

scripts/video_loop.py

  • Executable scriptline 1
    Executable file

scripts/video_set.py

  • Executable scriptline 1
    Executable file

sprite_gen/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/_deps.py

  • Executable scriptline 1
    Executable file

sprite_gen/_modules.py

  • Executable scriptline 1
    Executable file

sprite_gen/background/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/background/tile.py

  • Executable scriptline 1
    Executable file

sprite_gen/cli.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 303
    [Credential-related source omitted]
  • Access to secretsline 308
    [Credential-related source omitted]

sprite_gen/compose/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/compose/compose_atlas.py

  • Executable scriptline 1
    Executable file

sprite_gen/compose/compose_cycle.py

  • Executable scriptline 1
    Executable file

sprite_gen/compose/compose_gif.py

  • Executable scriptline 1
    Executable file

sprite_gen/compose/export_aseprite.py

  • Executable scriptline 1
    Executable file

sprite_gen/compose/export_pngs.py

  • Executable scriptline 1
    Executable file

sprite_gen/curate/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/curate/anchor.py

  • Executable scriptline 1
    Executable file

sprite_gen/curate/curation.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/anatomy.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/breath_beat.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/breathe.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/interpolate.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/recolor.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/reroll.py

  • Executable scriptline 1
    Executable file

sprite_gen/effects/shadow.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/alpha_floor.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/check_visible_magenta.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/cutout.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/decontam.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/extract.py

  • Executable scriptline 1
    Executable file
  • Network accessline 863
    # --- YCbCr chrominance matting (opt-in) -------------------------------------- # Port of the chrominance-plane matting from perfectpixel-studio # (https://github.com/gykim80/perfectpixel-studio, internal/sprite/chroma.go),
  • Network accessline 864
    # Port of the chrominance-plane matting from perfectpixel-studio # (https://github.com/gykim80/perfectpixel-studio, internal/sprite/chroma.go), # Copyright Andrew Kim (gykim80), MIT License. See NOTICE.
  • Network accessline 865
    # (https://github.com/gykim80/perfectpixel-studio, internal/sprite/chroma.go),
  • Access to secretsline 3907
    [Credential-related source omitted]

sprite_gen/frames/folder.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/logo_matte.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/measured_matte.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/segment.py

  • Executable scriptline 1
    Executable file
  • Network accessline 4
    Ported from perfectpixel-studio `internal/sprite/segment.go` (https://github.com/gykim80/perfectpixel-studio, Copyright (c) gykim80,
  • Network accessline 5
    (https://github.com/gykim80/perfectpixel-studio, Copyright (c) gykim80,

sprite_gen/frames/slice_sheet.py

  • Executable scriptline 1
    Executable file

sprite_gen/frames/unpack_atlas.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/__init__.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 6
    [Credential-related source omitted]
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 289
    [Credential-related source omitted]
  • Access to secretsline 299
    [Credential-related source omitted]
  • Access to secretsline 330
    [Credential-related source omitted]
  • Access to secretsline 382
    [Credential-related source omitted]
  • Access to secretsline 750
    [Credential-related source omitted]

sprite_gen/gen/address.py

  • Executable scriptline 1
    Executable file
  • Network accessline 42
    PROVIDERS = {provider.name: provider for provider in (     Provider(OPENAI, "SPRITE_GEN_OPENAI_BASE_URL", "https://api.openai.com/v1"),
  • Network accessline 43
    Provider(OPENAI, "SPRITE_GEN_OPENAI_BASE_URL", "https://api.openai.com/v1"),
  • Network accessline 44
    Provider(XAI, "SPRITE_GEN_XAI_BASE_URL", "https://api.x.ai/v1"),
  • Network accessline 45
    Provider(ANTHROPIC, "SPRITE_GEN_ANTHROPIC_BASE_URL", "https://api.anthropic.com/v1"), )} FETCH_PATH = "/sprite-gen/fetch"
  • Access to secretsline 53
    [Credential-related source omitted]

sprite_gen/gen/anthropic_api.py

  • Executable scriptline 1
    Executable file
  • Network accessline 37
    import http.client
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 64
    [Credential-related source omitted]
  • Network accessline 145
    [Credential-related source omitted]
  • Network accessline 146
    request = urllib.request.Request(url, data=data, method=method)
  • Network accessline 175
    [Credential-related source omitted]
  • Network accessline 176
    label: str, method: str = "POST", deadline: float | None = None) -> http.client.HTTPResponse:
  • Network accessline 179
    def send() -> tuple[int, Any, Any]:         try:             response = urllib.request.urlopen(request_for(), timeout=timeout)
  • Network accessline 180
    try:             response = urllib.request.urlopen(request_for(), timeout=timeout)         except urllib.error.HTTPError as exc:
  • Network accessline 181
    response = urllib.request.urlopen(request_for(), timeout=timeout)

sprite_gen/gen/base.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 82
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 106
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Access to secretsline 112
    [Credential-related source omitted]
  • Access to secretsline 130
    [Credential-related source omitted]
  • Access to secretsline 131
    [Credential-related source omitted]

sprite_gen/gen/chroma.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/claude_login.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 62
    [Credential-related source omitted]
  • Access to secretsline 69
    [Credential-related source omitted]
  • Access to secretsline 83
    [Credential-related source omitted]
  • Access to secretsline 122
    [Credential-related source omitted]
  • Access to secretsline 130
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]

sprite_gen/gen/codex_provider.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 53
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 122
    [Credential-related source omitted]
  • Access to secretsline 127
    [Credential-related source omitted]
  • Access to secretsline 236
    [Credential-related source omitted]
  • Possible obfuscationline 333
    raw = base64.b64decode(b64)
  • Access to secretsline 450
    [Credential-related source omitted]

sprite_gen/gen/facing.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/facing_vision.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 90
    [Credential-related source omitted]

sprite_gen/gen/gen_set.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 273
    [Credential-related source omitted]

sprite_gen/gen/grok_provider.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 115
    data = base64.b64decode(encoded, validate=True)
  • Access to secretsline 144
    [Credential-related source omitted]

sprite_gen/gen/handedness.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/logo.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 59
    [Credential-related source omitted]

sprite_gen/gen/openai_provider.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]
  • Access to secretsline 109
    [Credential-related source omitted]
  • Access to secretsline 112
    [Credential-related source omitted]
  • Network accessline 229
    request = urllib.request.Request(url, data=data, method="POST")
  • Network accessline 232
    request.add_header("Content-Type", content_type)     try:         with urllib.request.urlopen(request, timeout=time_left(timeout, deadline)) as response:
  • Network accessline 233
    try:         with urllib.request.urlopen(request, timeout=time_left(timeout, deadline)) as response:             raw = read_whole(response, timeout, deadline).decode("utf-8")
  • Network accessline 234
    with urllib.request.urlopen(request, timeout=time_left(timeout, deadline)) as response:
  • Possible obfuscationline 278
    data = base64.b64decode(encoded, validate=True)
  • Access to secretsline 304
    [Credential-related source omitted]
  • Access to secretsline 329
    [Credential-related source omitted]
  • Access to secretsline 347
    [Credential-related source omitted]

sprite_gen/gen/pixel_draw.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 1282
    [Credential-related source omitted]

sprite_gen/gen/pixel_gates.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/pixel_grid.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/prepare.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/prompt_parts.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/refusal.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/retry.py

  • Executable scriptline 1
    Executable file

sprite_gen/gen/video.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 69
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Network accessline 203
    request = urllib.request.Request(address.fetched(address.XAI, url))
  • Network accessline 204
    try:         try:             with urllib.request.urlopen(request, timeout=time_left(HTTP_TIMEOUT_SECONDS, deadline)) as response:
  • Network accessline 205
    try:             with urllib.request.urlopen(request, timeout=time_left(HTTP_TIMEOUT_SECONDS, deadline)) as response:                 return read_whole(response, HTTP_TIMEOUT_SECONDS, deadline)
  • Network accessline 206
    with urllib.request.urlopen(request, timeout=time_left(HTTP_TIMEOUT_SECONDS, deadline)) as response:
  • Network accessline 211
    request.add_header("Authorization", f"Bearer {token}")             try:                 with urllib.request.urlopen(request, timeout=time_left(HTTP_TIMEOUT_SECONDS, deadline)) as response:
  • Network accessline 212
    try:                 with urllib.request.urlopen(request, timeout=time_left(HTTP_TIMEOUT_SECONDS, deadline)) as response:                     return read_whole(response, HTTP_TIMEOUT_SECONDS, deadline)
  • Network accessline 213
    with urllib.request.urlopen(request, timeout=time_left(HTTP_TIMEOUT_SECONDS, deadline)) as response:
  • Access to secretsline 520
    [Credential-related source omitted]

sprite_gen/gen/xai.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 4
    [Credential-related source omitted]
  • Network accessline 12
    import http.client
  • Access to secretsline 24
    [Credential-related source omitted]
  • Access to secretsline 26
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 57
    [Credential-related source omitted]
  • Access to secretsline 111
    [Credential-related source omitted]
  • Access to secretsline 114
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Access to secretsline 116
    [Credential-related source omitted]
  • Access to secretsline 130
    [Credential-related source omitted]
  • Access to secretsline 131
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]
  • Network accessline 178
    # Everything that ends a request before its answer is read whole. http.client raises its own
  • Network accessline 181
    NO_ANSWER = (OSError, http.client.HTTPException)
  • Network accessline 192
    # An http.client exception carries what the server sent (BadStatusLine its line, CRLF included);
  • Network accessline 194
    if isinstance(said, http.client.HTTPException) and not isinstance(said, OSError):
  • Network accessline 213
    def read_whole(response: http.client.HTTPResponse, timeout: float, deadline: float | None) -> bytes:
  • Network accessline 224
    # http.client keeps no public handle on the connection once its answer began; the socket under
  • Network accessline 231
    data = b"".join(chunks)     if response.length:  # read1 stops where the connection closed, short of the Content-Length, without a word         raise http.client.IncompleteRead(data, response.length)
  • Network accessline 232
    if response.length:  # read1 stops where the connection closed, short of the Content-Length, without a word         raise http.client.IncompleteRead(data, response.length)     return data
  • Network accessline 233
    raise http.client.IncompleteRead(data, response.length)
  • Network accessline 254
    data = None if body is None else json.dumps(body).encode("utf-8")     request = urllib.request.Request(url, data=data, method=method)
  • Network accessline 255
    request = urllib.request.Request(url, data=data, method=method)
  • Network accessline 259
    request.add_header("Content-Type", "application/json")     try:         with urllib.request.urlopen(request, timeout=time_left(timeout, deadline)) as response:
  • Network accessline 260
    try:         with urllib.request.urlopen(request, timeout=time_left(timeout, deadline)) as response:             raw = read_whole(response, timeout, deadline).decode("utf-8")
  • Network accessline 261
    with urllib.request.urlopen(request, timeout=time_left(timeout, deadline)) as response:

sprite_gen/qa/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/qa/correction_loop.py

  • Executable scriptline 1
    Executable file

sprite_gen/qa/handed.py

  • Executable scriptline 1
    Executable file

sprite_gen/qa/inspect.py

  • Executable scriptline 1
    Executable file

sprite_gen/qa/motion.py

  • Executable scriptline 1
    Executable file

sprite_gen/qa/preview.py

  • Executable scriptline 1
    Executable file

sprite_gen/qa/score.py

  • Executable scriptline 1
    Executable file

sprite_gen/scene/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/scene/inspect_scene.py

  • Executable scriptline 1
    Executable file

sprite_gen/scene/model.py

  • Executable scriptline 1
    Executable file

sprite_gen/scene/render.py

  • Executable scriptline 1
    Executable file

sprite_gen/serve/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/api.js

  • Executable scriptline 1
    Executable file
  • Network accessline 5
    async function apiGetState() {   const res = await fetch("/api/state");
  • Network accessline 6
    const res = await fetch("/api/state");
  • Network accessline 10
    async function apiMount(dir) {   const res = await fetch("/api/mount", {
  • Network accessline 11
    const res = await fetch("/api/mount", {
  • Network accessline 24
    async function apiPick(kind) {   const res = await fetch(`/api/pick?kind=${encodeURIComponent(kind)}`, { method: "POST" });
  • Network accessline 25
    const res = await fetch(`/api/pick?kind=${encodeURIComponent(kind)}`, { method: "POST" });
  • Network accessline 36
    async function apiBrowse(dir) {   const url = dir ? `/api/browse?dir=${encodeURIComponent(dir)}` : "/api/browse";   const res = await fetch(url);
  • Network accessline 37
    const url = dir ? `/api/browse?dir=${encodeURIComponent(dir)}` : "/api/browse";   const res = await fetch(url);   const data = await res.json();
  • Network accessline 38
    const res = await fetch(url);
  • Network accessline 48
    async function apiBuild(outDir, rows) {   const res = await fetch("/api/build", {
  • Network accessline 49
    const res = await fetch("/api/build", {
  • Network accessline 59
    async function apiOpenCuration(runDir) {   const res = await fetch("/api/open-curation", {
  • Network accessline 60
    const res = await fetch("/api/open-curation", {

sprite_gen/serve/composer/src/boot.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/canvas.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/controls.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/i18n.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/library.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/session.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/composer/src/ui.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/atlas.js

  • Executable scriptline 1
    Executable file
  • Network accessline 23
    if (info.manifestUrl) {     try {       const res = await fetch(info.manifestUrl);
  • Network accessline 24
    try {       const res = await fetch(info.manifestUrl);       const doc = await res.json();
  • Network accessline 25
    const res = await fetch(info.manifestUrl);
  • Network accessline 50
    try {       await flushSave(); // 서버는 디스크 truth 를 굽는다 — 대기 중 편집 저장부터       const res = await fetch("/api/compose", { method: "POST" });
  • Network accessline 51
    await flushSave(); // 서버는 디스크 truth 를 굽는다 — 대기 중 편집 저장부터       const res = await fetch("/api/compose", { method: "POST" });       const data = await res.json();
  • Network accessline 52
    const res = await fetch("/api/compose", { method: "POST" });
  • Network accessline 122
    try {     const t0 = performance.now();     const res = await fetch("/api/compose", { method: "POST" });
  • Network accessline 123
    const t0 = performance.now();     const res = await fetch("/api/compose", { method: "POST" });     lastBakeMs = performance.now() - t0;
  • Network accessline 124
    const res = await fetch("/api/compose", { method: "POST" });

sprite_gen/serve/curator/src/base-editor.js

  • Executable scriptline 1
    Executable file
  • Network accessline 36
    let grid = null;   try {     grid = (await (await fetch("/api/base-grid")).json()).grid || null;
  • Network accessline 37
    try {     grid = (await (await fetch("/api/base-grid")).json()).grid || null;   } catch { grid = null; }
  • Network accessline 38
    grid = (await (await fetch("/api/base-grid")).json()).grid || null;

sprite_gen/serve/curator/src/boot.js

  • Executable scriptline 1
    Executable file
  • Network accessline 5
    async function boot() {   try {     const res = await fetch("/api/run");
  • Network accessline 6
    try {     const res = await fetch("/api/run");     run = await res.json();
  • Network accessline 7
    const res = await fetch("/api/run");

sprite_gen/serve/curator/src/breathe.js

  • Executable scriptline 1
    Executable file
  • Network accessline 606
    if (axisX != null) q.set("axis_x", String(axisX));   if (torsoHalf != null) q.set("torso_half", String(torsoHalf));   const res = await fetch(`/api/breathe-anatomy?${q}`);
  • Network accessline 607
    if (torsoHalf != null) q.set("torso_half", String(torsoHalf));   const res = await fetch(`/api/breathe-anatomy?${q}`);   const body = await res.json();
  • Network accessline 608
    const res = await fetch(`/api/breathe-anatomy?${q}`);

sprite_gen/serve/curator/src/cards.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/chrome.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/compare.js

  • Executable scriptline 1
    Executable file
  • Network accessline 570
    anim.playing = wasPlaying;       render();       const res = await fetch("/api/compare-gif", {
  • Network accessline 571
    render();       const res = await fetch("/api/compare-gif", {         method: "POST",
  • Network accessline 572
    const res = await fetch("/api/compare-gif", {

sprite_gen/serve/curator/src/display.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/gen-trigger.js

  • Executable scriptline 1
    Executable file
  • Network accessline 38
    try {     startOpProgressWatch(); // 생성 후 전체 배치 재추출 — 진행도 퍼센트 표시     const res = await fetch(url, {
  • Network accessline 39
    startOpProgressWatch(); // 생성 후 전체 배치 재추출 — 진행도 퍼센트 표시     const res = await fetch(url, {       method: "POST",
  • Network accessline 40
    const res = await fetch(url, {

sprite_gen/serve/curator/src/i18n.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/lasso-select.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/persistence.js

  • Executable scriptline 1
    Executable file
  • Network accessline 103
    async function save() {   try {     const res = await fetch("/api/curation", {
  • Network accessline 104
    try {     const res = await fetch("/api/curation", {       method: "POST",
  • Network accessline 105
    const res = await fetch("/api/curation", {
  • Network accessline 147
    await save();   setStatus(t("baking"));   const res = await fetch(`/download/${kind}`);
  • Network accessline 148
    setStatus(t("baking"));   const res = await fetch(`/download/${kind}`);   if (!res.ok) {
  • Network accessline 149
    const res = await fetch(`/download/${kind}`);

sprite_gen/serve/curator/src/pipeline-tree.js

  • Executable scriptline 1
    Executable file
  • Network accessline 54
    try {     const res = await fetch("/api/progress");
  • Network accessline 55
    const res = await fetch("/api/progress");
  • Network accessline 246
    const SVG_NS = "http://www.w3.org/2000/svg";
  • Network accessline 317
    async function pollTreeProgress() {   try {     const res = await fetch("/api/progress");
  • Network accessline 318
    try {     const res = await fetch("/api/progress");     if (!res.ok) return;
  • Network accessline 319
    const res = await fetch("/api/progress");

sprite_gen/serve/curator/src/progress.js

  • Executable scriptline 1
    Executable file
  • Network accessline 53
    let data = null;     try {       const res = await fetch("/api/op-progress");
  • Network accessline 54
    try {       const res = await fetch("/api/op-progress");       data = await res.json();
  • Network accessline 55
    const res = await fetch("/api/op-progress");

sprite_gen/serve/curator/src/recolor.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/region-transform.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/row-controls.js

  • Executable scriptline 1
    Executable file
  • Network accessline 104
    minus.disabled = plus.disabled = true;     try {       const res = await fetch("/api/state-fps", {
  • Network accessline 105
    try {       const res = await fetch("/api/state-fps", {         method: "POST",
  • Network accessline 106
    const res = await fetch("/api/state-fps", {

sprite_gen/serve/curator/src/row-export.js

  • Executable scriptline 1
    Executable file
  • Network accessline 104
    frames.push(out.toDataURL("image/png"));   }   const res = await fetch("/api/compare-gif", {
  • Network accessline 105
    }   const res = await fetch("/api/compare-gif", {     method: "POST",
  • Network accessline 106
    const res = await fetch("/api/compare-gif", {

sprite_gen/serve/curator/src/status.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/store.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/tooltip.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/transform-provider.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/transforms.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/tween.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/util.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/view-nav.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/zones.js

  • Executable scriptline 1
    Executable file

sprite_gen/serve/curator/src/zoom-editor.js

  • Executable scriptline 1
    Executable file
  • Network accessline 229
    saveBtn.disabled = true;       try {         const res = await fetch("/api/base-edit", {
  • Network accessline 230
    try {         const res = await fetch("/api/base-edit", {           method: "POST",
  • Network accessline 231
    const res = await fetch("/api/base-edit", {

sprite_gen/serve/serve_compose.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 220
    def _free_port() -> int:     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • Network accessline 221
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • Network accessline 230
    while time.time() < deadline:         try:             with urllib.request.urlopen(f"http://127.0.0.1:{port}/", timeout=1) as r:
  • Network accessline 231
    try:             with urllib.request.urlopen(f"http://127.0.0.1:{port}/", timeout=1) as r:                 if r.status == 200:
  • Network accessline 232
    with urllib.request.urlopen(f"http://127.0.0.1:{port}/", timeout=1) as r:
  • Network accessline 423
    self._send_json({Wire.ERROR: "curation server did not become ready"}, 504)                 return             self._send_json({Wire.URL: f"http://127.0.0.1:{port}/"})
  • Network accessline 424
    return             self._send_json({Wire.URL: f"http://127.0.0.1:{port}/"})             return
  • Network accessline 425
    self._send_json({Wire.URL: f"http://127.0.0.1:{port}/"})
  • Network accessline 454
    server = ThreadingHTTPServer((host, port), handler)     host, port = server.server_address     url = f"http://{host}:{port}/"
  • Network accessline 455
    host, port = server.server_address     url = f"http://{host}:{port}/"     print(f"sprite-gen composition canvas: {url}")
  • Network accessline 456
    url = f"http://{host}:{port}/"

sprite_gen/serve/serve_curation.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Possible obfuscationline 1469
    images.append(Image.open(io.BytesIO(base64.b64decode(b64))).convert("RGBA"))
  • Network accessline 1719
    server = ThreadingHTTPServer((host, port), handler)     host, port = server.server_address     url = f"http://{host}:{port}/"
  • Network accessline 1720
    host, port = server.server_address     url = f"http://{host}:{port}/"     print(f"sprite-gen curation webview: {url}")
  • Network accessline 1721
    url = f"http://{host}:{port}/"

sprite_gen/spec/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/spec/assets.py

  • Executable scriptline 1
    Executable file

sprite_gen/spec/layout.py

  • Executable scriptline 1
    Executable file

sprite_gen/spec/migrate_breathe.py

  • Executable scriptline 1
    Executable file

sprite_gen/spec/migrate_request.py

  • Executable scriptline 1
    Executable file

sprite_gen/spec/runio.py

  • Executable scriptline 1
    Executable file

sprite_gen/spec/subject.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/cli_kwargs.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/console.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/gif_utils.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/hexcolor.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/lsq.py

  • Executable scriptline 1
    Executable file

sprite_gen/util/resample.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/align.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/auto_motion.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/batch.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 858
    [Credential-related source omitted]

sprite_gen/video/body_plan.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/body_turn.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/cadence.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/canvas.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/clip_prompt.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/compare.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/crossings.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/effect.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/evidence.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/face_bake.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/face_layer.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/face_pack.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/face_plan.mjs

  • Executable scriptline 1
    Executable file

sprite_gen/video/facing.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/follow.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/follow_inspect.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/frames.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/gait_fallback.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/held.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/held_fill.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/interpolation_quality.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/legs.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/local_cycle.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/loop.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/motion_anchor.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/nonloop.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/part_pop.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/parts.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/period.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/play.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/playback.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/prop_plate.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/repair.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/restoration.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/rife.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 297
    [Credential-related source omitted]
  • Access to secretsline 300
    [Credential-related source omitted]
  • Access to secretsline 301
    [Credential-related source omitted]
  • Access to secretsline 302
    [Credential-related source omitted]
  • Access to secretsline 321
    [Credential-related source omitted]
  • Access to secretsline 325
    [Credential-related source omitted]
  • Access to secretsline 349
    [Credential-related source omitted]
  • Access to secretsline 359
    [Credential-related source omitted]
  • Access to secretsline 371
    [Credential-related source omitted]
  • Access to secretsline 386
    [Credential-related source omitted]
  • Access to secretsline 397
    [Credential-related source omitted]
  • Access to secretsline 411
    [Credential-related source omitted]
  • Access to secretsline 417
    [Credential-related source omitted]
  • Access to secretsline 456
    [Credential-related source omitted]

sprite_gen/video/rife_install.py

  • Executable scriptline 1
    Executable file
  • Network accessline 55
    ZIP_MACHINES = {"macos": None, "ubuntu": {"x86_64", "amd64"}, "windows": {"amd64", "x86_64"}} SOURCE = "github.com/TNTwise/rife-ncnn-vulkan" URL = "https://github.com/TNTwise/rife-ncnn-vulkan/releases/download/{release}/{name}"
  • Network accessline 56
    SOURCE = "github.com/TNTwise/rife-ncnn-vulkan" URL = "https://github.com/TNTwise/rife-ncnn-vulkan/releases/download/{release}/{name}" MARKER = ".sprite-gen-install.json"
  • Network accessline 57
    URL = "https://github.com/TNTwise/rife-ncnn-vulkan/releases/download/{release}/{name}"
  • Network accessline 91
    request = urllib.request.Request(url, headers={"User-Agent": "sprite-gen"})
  • Network accessline 92
    with urllib.request.urlopen(request, timeout=TIMEOUT_SECONDS) as response, dest.open("wb") as out:

sprite_gen/video/rife_torch.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/root_motion.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/set_sheet.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/source.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/sprite-gen-face-v1.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 210
    export async function loadFacePack(url) {   const at = (p) => new URL(p, new URL(url, globalThis.location?.href)).href;   const pack = await (await fetch(url)).json();
  • Network accessline 211
    const at = (p) => new URL(p, new URL(url, globalThis.location?.href)).href;   const pack = await (await fetch(url)).json();   if (pack.kind !== "sprite-gen-face-pack" || pack.version !== 1) throw new RangeError("not a sprite-gen-face-pack v
  • Network accessline 212
    const pack = await (await fetch(url)).json();
  • Network accessline 353
    async function decode(voice) {     if (voice instanceof AudioBuffer) return voice;     const bytes = typeof voice === "string" ? await (await fetch(voice)).arrayBuffer() : voice;
  • Network accessline 354
    if (voice instanceof AudioBuffer) return voice;     const bytes = typeof voice === "string" ? await (await fetch(voice)).arrayBuffer() : voice;     return audio.decodeAudioData(bytes);
  • Network accessline 355
    const bytes = typeof voice === "string" ? await (await fetch(voice)).arrayBuffer() : voice;

sprite_gen/video/stop.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/sway.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/sway_inspect.py

  • Executable scriptline 1
    Executable file

sprite_gen/video/wrap_blend.py

  • Executable scriptline 1
    Executable file

sprite_gen/workflow/__init__.py

  • Executable scriptline 1
    Executable file

sprite_gen/workflow/access.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 9
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]

sprite_gen/workflow/capabilities.py

  • Executable scriptline 1
    Executable file

sprite_gen/workflow/catalog.py

  • Executable scriptline 1
    Executable file

sprite_gen/workflow/guide.py

  • Executable scriptline 1
    Executable file

sprite_gen/workflow/preferences.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 22
    [Credential-related source omitted]

tests/background/test_tile.py

  • Executable scriptline 1
    Executable file

tests/background/test_tile_cli.py

  • Executable scriptline 1
    Executable file

tests/compose/test_export_aseprite.py

  • Executable scriptline 1
    Executable file

tests/conftest.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 25
    [Credential-related source omitted]

tests/curate/test_anchor_selection.py

  • Executable scriptline 1
    Executable file
  • Network accessline 399
    port = srv.server_address[1]     try:         snapshot = _json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())
  • Network accessline 400
    try:         snapshot = _json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())         payload = {"version": 1, "kind": "sprite-gen-curation",
  • Network accessline 401
    snapshot = _json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())
  • Network accessline 402
    payload = {"version": 1, "kind": "sprite-gen-curation",                    "runRevision": snapshot["runRevision"], **body}         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 403
    "runRevision": snapshot["runRevision"], **body}         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",                                      data=_json.dumps(payload).encode(), method="POST")
  • Network accessline 404
    req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 405
    data=_json.dumps(payload).encode(), method="POST")         with urllib.request.urlopen(req) as res:             return res.status
  • Network accessline 406
    with urllib.request.urlopen(req) as res:
  • Network accessline 651
    threading.Thread(target=srv.serve_forever, daemon=True).start()     try:         with urllib.request.urlopen(
  • Network accessline 652
    try:         with urllib.request.urlopen(                 f"http://127.0.0.1:{srv.server_address[1]}/api/anchor?direction=down") as res:
  • Network accessline 653
    with urllib.request.urlopen(
  • Network accessline 654
    f"http://127.0.0.1:{srv.server_address[1]}/api/anchor?direction=down") as res:
  • Network accessline 682
    def post(body: dict) -> int:         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 683
    req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 684
    data=_json.dumps(body).encode(), method="POST")         with urllib.request.urlopen(req) as res:             return res.status
  • Network accessline 685
    with urllib.request.urlopen(req) as res:
  • Network accessline 688
    try:         revision = _json.loads(             urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 690
    urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 696
    revision = _json.loads(             urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 697
    urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]

tests/curate/test_curation_salvage_and_clones.py

  • Executable scriptline 1
    Executable file

tests/curate/test_directions.py

  • Executable scriptline 1
    Executable file

tests/curate/test_frame_variant.py

  • Executable scriptline 1
    Executable file

tests/curate/test_logical_height_contract.py

  • Executable scriptline 1
    Executable file

tests/curate/test_pixel_snap.py

  • Executable scriptline 1
    Executable file

tests/curate/test_pixel_unfake_migration.py

  • Executable scriptline 1
    Executable file

tests/curate/test_snap_phase_policy.py

  • Executable scriptline 1
    Executable file

tests/curate/test_transform_resample.py

  • Executable scriptline 1
    Executable file

tests/docs/test_docs_index.py

  • Executable scriptline 1
    Executable file

tests/docs/test_hero_assets.py

  • Executable scriptline 1
    Executable file
  • Network accessline 21
    text = (ROOT / name).read_text(encoding="utf-8")         assert text.count('src="docs/assets/hero-v2-party.gif"') == 1         assert 'href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif"' in text
  • Network accessline 23
    assert 'href="https://youtu.be/zVu9YlbPtog"><img src="docs/assets/hero-v2-party.gif"' in text

tests/effects/test_breath_beat.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe.py

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 249
    rm = next((x for x in range(w - 1, -1, -1) if px[x, y][3] >= 128), None)
  • Dangerous shell operationline 250
    if rm is not None and not dark(px[rm, y]):

tests/effects/test_breathe_anatomy_route.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_js_mirror.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_min_max.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_off_state.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_publish.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_reference_key.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_round.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_round_curator.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_sidecar_roundtrip.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_smooth.py

  • Executable scriptline 1
    Executable file

tests/effects/test_breathe_smooth_curator.py

  • Executable scriptline 1
    Executable file

tests/effects/test_frame_interpolation.py

  • Executable scriptline 1
    Executable file

tests/effects/test_palette_post_only.py

  • Executable scriptline 1
    Executable file

tests/effects/test_recolor_bake.py

  • Executable scriptline 1
    Executable file

tests/effects/test_recolor_docs.py

  • Executable scriptline 1
    Executable file

tests/effects/test_shadow.py

  • Executable scriptline 1
    Executable file

tests/fixtures/generate_fixtures.py

  • Executable scriptline 1
    #!/usr/bin/env python3

tests/frames/test_alpha_centroid_align.py

  • Executable scriptline 1
    Executable file

tests/frames/test_alpha_floor.py

  • Executable scriptline 1
    Executable file

tests/frames/test_chroma_decontam.py

  • Executable scriptline 1
    Executable file

tests/frames/test_chroma_key_relative.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 858
    [Credential-related source omitted]

tests/frames/test_cutout.py

  • Executable scriptline 1
    Executable file

tests/frames/test_decontam_gold.py

  • Executable scriptline 1
    Executable file

tests/frames/test_despill_full_tint_bar.py

  • Executable scriptline 1
    Executable file

tests/frames/test_extract_perf_equivalence.py

  • Executable scriptline 1
    Executable file

tests/frames/test_extraction_golden.py

  • Executable scriptline 1
    Executable file

tests/frames/test_grid_record_exactness.py

  • Executable scriptline 1
    Executable file

tests/frames/test_heal_async.py

  • Executable scriptline 1
    Executable file

tests/frames/test_isolated_dots.py

  • Executable scriptline 1
    Executable file

tests/frames/test_key_detect_banded.py

  • Executable scriptline 1
    Executable file

tests/frames/test_keyed_resample.py

  • Executable scriptline 1
    Executable file

tests/frames/test_logo_matte.py

  • Executable scriptline 1
    Executable file

tests/frames/test_measured_matte.py

  • Executable scriptline 1
    Executable file

tests/frames/test_pitch_ground_truth.py

  • Executable scriptline 1
    Executable file

tests/frames/test_pitch_runlen_crosscheck.py

  • Executable scriptline 1
    Executable file

tests/frames/test_posix_manifest_paths.py

  • Executable scriptline 1
    Executable file

tests/frames/test_row_placement_align_y.py

  • Executable scriptline 1
    Executable file

tests/frames/test_row_scale.py

  • Executable scriptline 1
    Executable file

tests/frames/test_safe_area_fit.py

  • Executable scriptline 1
    Executable file

tests/frames/test_segment_projection.py

  • Executable scriptline 1
    Executable file

tests/frames/test_slice_sheet.py

  • Executable scriptline 1
    Executable file

tests/frames/test_slice_sheet_scale.py

  • Executable scriptline 1
    Executable file

tests/frames/test_slice_sheet_transparent.py

  • Executable scriptline 1
    Executable file

tests/frames/test_sliver_guard.py

  • Executable scriptline 1
    Executable file

tests/frames/test_takes_heal.py

  • Executable scriptline 1
    Executable file

tests/frames/test_taxonomy_layout.py

  • Executable scriptline 1
    Executable file

tests/frames/test_unpack_atlas_publish.py

  • Executable scriptline 1
    Executable file

tests/gen/prepare_freeze_table.py

  • Executable scriptline 1
    Executable file

tests/gen/prompt_freeze_table.py

  • Executable scriptline 1
    Executable file

tests/gen/test_alpha_verdict.py

  • Executable scriptline 1
    Executable file

tests/gen/test_anthropic_api.py

  • Executable scriptline 1
    Executable file
  • Network accessline 54
    thread = threading.Thread(target=srv.serve_forever, daemon=True)     thread.start()     monkeypatch.setenv("SPRITE_GEN_ANTHROPIC_BASE_URL", f"http://127.0.0.1:{srv.server_address[1]}/v1")
  • Network accessline 55
    thread.start()     monkeypatch.setenv("SPRITE_GEN_ANTHROPIC_BASE_URL", f"http://127.0.0.1:{srv.server_address[1]}/v1")     yield srv
  • Network accessline 56
    monkeypatch.setenv("SPRITE_GEN_ANTHROPIC_BASE_URL", f"http://127.0.0.1:{srv.server_address[1]}/v1")
  • Access to secretsline 159
    [Credential-related source omitted]
  • Network accessline 195
    results_url = "https://api.anthropic.com/v1/messages/batches/msgbatch_01/results"

tests/gen/test_body_plan_sheets.py

  • Executable scriptline 1
    Executable file

tests/gen/test_chroma_extraction.py

  • Executable scriptline 1
    Executable file

tests/gen/test_chroma_key_auto.py

  • Executable scriptline 1
    Executable file

tests/gen/test_chroma_rcb_byte_identity.py

  • Executable scriptline 1
    Executable file

tests/gen/test_chroma_soft_alpha.py

  • Executable scriptline 1
    Executable file

tests/gen/test_chroma_ycbcr.py

  • Executable scriptline 1
    Executable file

tests/gen/test_claude_login.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 45
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Access to secretsline 65
    [Credential-related source omitted]
  • Access to secretsline 68
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Access to secretsline 87
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Access to secretsline 95
    [Credential-related source omitted]
  • Access to secretsline 97
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Access to secretsline 104
    [Credential-related source omitted]
  • Access to secretsline 128
    [Credential-related source omitted]
  • Access to secretsline 145
    [Credential-related source omitted]

tests/gen/test_codex_login.py

  • Executable scriptline 1
    Executable file

tests/gen/test_codex_rollout_resolution.py

  • Executable scriptline 1
    Executable file

tests/gen/test_codex_unavailable.py

  • Executable scriptline 1
    Executable file
  • Network accessline 39
    "You’ve hit your usage limit. Upgrade to Pro (https://chatgpt.com/explore/pro), visit "
  • Network accessline 40
    "https://chatgpt.com/codex/settings/usage to purchase more credits or try again later.",
  • Network accessline 44
    "You hit your spend cap set in your workspace. Increase your spend cap to continue.",     "Quota exceeded. Check your plan and billing details.",     "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",
  • Network accessline 45
    "Quota exceeded. Check your plan and billing details.",     "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.", ]
  • Network accessline 46
    "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",
  • Access to secretsline 61
    [Credential-related source omitted]
  • Access to secretsline 122
    [Credential-related source omitted]
  • Access to secretsline 125
    [Credential-related source omitted]
  • Network accessline 126
    png = io.BytesIO()     Image.new("RGB", (8, 8), (30, 90, 200)).save(png, format="PNG")     calls: list[urllib.request.Request] = []
  • Network accessline 128
    calls: list[urllib.request.Request] = []
  • Access to secretsline 223
    [Credential-related source omitted]
  • Access to secretsline 332
    [Credential-related source omitted]

tests/gen/test_facing.py

  • Executable scriptline 1
    Executable file
  • Network accessline 206
    report = facing.inspect(backend, FIXTURES / "left.png", tmp_path)     assert len(seen) == 1 and seen[0][1] == "synthetic"     assert seen[0][0] == ("https://api.openai.com/v1/responses" if provider == "openai" else "https://api.x.ai/v1/resp
  • Network accessline 207
    assert len(seen) == 1 and seen[0][1] == "synthetic"     assert seen[0][0] == ("https://api.openai.com/v1/responses" if provider == "openai" else "https://api.x.ai/v1/responses")     body = seen[0][2]
  • Network accessline 208
    assert seen[0][0] == ("https://api.openai.com/v1/responses" if provider == "openai" else "https://api.x.ai/v1/responses")
  • Access to secretsline 213
    [Credential-related source omitted]

tests/gen/test_flags_over_spec.py

  • Executable scriptline 1
    Executable file

tests/gen/test_gen.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 74
    [Credential-related source omitted]
  • Access to secretsline 75
    [Credential-related source omitted]
  • Access to secretsline 76
    [Credential-related source omitted]
  • Access to secretsline 80
    [Credential-related source omitted]
  • Network accessline 379
    def generate(self, request: GenRequest, workdir: Path):         self.calls += 1         self.requests.append(request)
  • Network accessline 380
    self.calls += 1         self.requests.append(request)         Image.new("RGBA", self.size, (255, 0, 255, 255)).save(request.raw)
  • Network accessline 381
    self.requests.append(request)
  • Network accessline 406
    def generate(self, request: GenRequest, workdir: Path):         self.calls += 1         self.requests.append(request)
  • Network accessline 407
    self.calls += 1         self.requests.append(request)         self.image.save(request.raw)
  • Network accessline 408
    self.requests.append(request)

tests/gen/test_gen_set.py

  • Executable scriptline 1
    Executable file

tests/gen/test_grok_provider.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 33
    [Credential-related source omitted]
  • Network accessline 51
    request, timeout = api["calls"][0]     body = json.loads(request.data)     assert request.full_url == "https://api.x.ai/v1/images/generations"
  • Network accessline 52
    body = json.loads(request.data)     assert request.full_url == "https://api.x.ai/v1/images/generations"     assert request.get_header("Authorization") == "Bearer synthetic-secret"
  • Network accessline 53
    assert request.full_url == "https://api.x.ai/v1/images/generations"
  • Possible obfuscationline 58
    with Image.open(result.out) as image, Image.open(io.BytesIO(base64.b64decode(encoded_image()))) as original:
  • Access to secretsline 62
    [Credential-related source omitted]
  • Possible obfuscationline 85
    assert base64.b64decode(entry["url"].split(",", 1)[1]) == ref.read_bytes()
  • Network accessline 100
    @pytest.mark.parametrize("status", [401, 503]) def test_api_failure_keeps_existing_output_and_does_not_retry(tmp_path, api, status):     api.update(status=status, body={"error": "synthetic-secret https://signed.invalid/private?sig=abc"})
  • Network accessline 101
    def test_api_failure_keeps_existing_output_and_does_not_retry(tmp_path, api, status):     api.update(status=status, body={"error": "synthetic-secret https://signed.invalid/private?sig=abc"})     out = tmp_path / "existing.png"
  • Network accessline 102
    api.update(status=status, body={"error": "synthetic-secret https://signed.invalid/private?sig=abc"})
  • Network accessline 108
    assert "synthetic-secret" not in str(error.value) and "sig=abc" not in str(error.value)     assert '"error": "[redacted] https://signed.invalid/private?[redacted]"' in str(error.value)
  • Network accessline 109
    assert '"error": "[redacted] https://signed.invalid/private?[redacted]"' in str(error.value)
  • Network accessline 182
    {"data": [{"b64_json": "???"}]},                                   {"data": [{"b64_json": base64.b64encode(b"invalid image").decode()}]},                                   {"data": [{"url": "https://signed.invalid/private"}]}])
  • Network accessline 183
    {"data": [{"b64_json": base64.b64encode(b"invalid image").decode()}]},                                   {"data": [{"url": "https://signed.invalid/private"}]}]) def test_invalid_response_never_reuses_stale_raw(tmp_path, api, body):
  • Network accessline 184
    {"data": [{"url": "https://signed.invalid/private"}]}])
  • Access to secretsline 206
    [Credential-related source omitted]
  • Access to secretsline 252
    [Credential-related source omitted]
  • Access to secretsline 335
    [Credential-related source omitted]
  • Network accessline 352
    api.update(status=400, body={"error": "synthetic-secret https://signed.invalid/private"})
  • Access to secretsline 402
    [Credential-related source omitted]
  • Access to secretsline 403
    [Credential-related source omitted]
  • Network accessline 407
    [Credential-related source omitted]
  • Network accessline 408
    [Credential-related source omitted]
  • Network accessline 409
    [Credential-related source omitted]
  • Network accessline 412
    assert str(error.value) == (         "grok-gen: image request failed (HTTP 400) code=invalid-argument; no retry or provider fallback: "         '{"code": "invalid-argument", "error": "bad key xai-[redacted] at https://x.invalid/v?[redacted]
  • Network accessline 413
    "grok-gen: image request failed (HTTP 400) code=invalid-argument; no retry or provider fallback: "         '{"code": "invalid-argument", "error": "bad key xai-[redacted] at https://x.invalid/v?[redacted] '         'and (HTTP 999) code=decoy
  • Network accessline 414
    '{"code": "invalid-argument", "error": "bad key xai-[redacted] at https://x.invalid/v?[redacted] '

tests/gen/test_handedness.py

  • Executable scriptline 1
    Executable file

tests/gen/test_layout_guide.py

  • Executable scriptline 1
    Executable file
  • Network accessline 35
    def generate(self, request: GenRequest, workdir: Path):         self.requests.append(request)
  • Network accessline 36
    self.requests.append(request)

tests/gen/test_logins_off.py

  • Executable scriptline 1
    Executable file
  • Network accessline 24
    home.mkdir()     entry = {"key": "login-token", "expires_at": "2026-09-08T18:00:00Z"}     (home / "auth.json").write_text(json.dumps({"https://auth.x.ai::client": entry}), encoding="utf-8")
  • Network accessline 25
    entry = {"key": "login-token", "expires_at": "2026-09-08T18:00:00Z"}     (home / "auth.json").write_text(json.dumps({"https://auth.x.ai::client": entry}), encoding="utf-8")     return home
  • Network accessline 26
    (home / "auth.json").write_text(json.dumps({"https://auth.x.ai::client": entry}), encoding="utf-8")
  • Access to secretsline 40
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]
  • Access to secretsline 67
    [Credential-related source omitted]
  • Access to secretsline 74
    [Credential-related source omitted]
  • Access to secretsline 80
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 97
    [Credential-related source omitted]
  • Access to secretsline 99
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 111
    [Credential-related source omitted]
  • Access to secretsline 118
    [Credential-related source omitted]
  • Access to secretsline 154
    [Credential-related source omitted]

tests/gen/test_logo.py

  • Executable scriptline 1
    Executable file
  • Network accessline 51
    def generate(self, request: gen_base.GenRequest, workdir: Path) -> gen_base.ProviderRun:         self.requests.append(request)
  • Network accessline 52
    self.requests.append(request)

tests/gen/test_openai_provider.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 74
    result = gen.generate_image("openai", "a blue square", tmp_path / "out.png")     request, timeout = api["calls"][0]     assert request.full_url == "https://api.openai.com/v1/images/generations"
  • Network accessline 75
    request, timeout = api["calls"][0]     assert request.full_url == "https://api.openai.com/v1/images/generations"     assert request.get_header("Authorization") == f"Bearer {KEY}"
  • Network accessline 76
    assert request.full_url == "https://api.openai.com/v1/images/generations"
  • Access to secretsline 90
    [Credential-related source omitted]
  • Network accessline 149
    gen.generate_image("openai", "combine these", tmp_path / "edit.png", refs=refs, quality="high")     request, _ = api["calls"][0]     assert request.full_url == "https://api.openai.com/v1/images/edits"
  • Network accessline 150
    request, _ = api["calls"][0]     assert request.full_url == "https://api.openai.com/v1/images/edits"     content_type = request.get_header("Content-type")
  • Network accessline 151
    assert request.full_url == "https://api.openai.com/v1/images/edits"
  • Network accessline 163
    @pytest.mark.parametrize("status", [401, 500]) def test_api_failure_keeps_existing_output_and_does_not_retry(tmp_path, api, status):     api.update(status=status, body={"error": {"message": f"{KEY} https://signed.invalid/private?sig=abc"}})
  • Network accessline 164
    def test_api_failure_keeps_existing_output_and_does_not_retry(tmp_path, api, status):     api.update(status=status, body={"error": {"message": f"{KEY} https://signed.invalid/private?sig=abc"}})     out = tmp_path / "existing.png"
  • Network accessline 165
    api.update(status=status, body={"error": {"message": f"{KEY} https://signed.invalid/private?sig=abc"}})
  • Network accessline 171
    assert KEY not in str(error.value) and "sig=abc" not in str(error.value)     assert "https://signed.invalid/private?[redacted]" in str(error.value)
  • Network accessline 172
    assert "https://signed.invalid/private?[redacted]" in str(error.value)
  • Network accessline 267
    {"data": [{"b64_json": "???"}]},                                   {"data": [{"b64_json": base64.b64encode(b"invalid image").decode()}]},                                   {"data": [{"url": "https://signed.invalid/private"}]}])
  • Network accessline 268
    {"data": [{"b64_json": base64.b64encode(b"invalid image").decode()}]},                                   {"data": [{"url": "https://signed.invalid/private"}]}]) def test_invalid_response_never_reuses_stale_raw(tmp_path, api, body):
  • Network accessline 269
    {"data": [{"url": "https://signed.invalid/private"}]}])
  • Access to secretsline 284
    [Credential-related source omitted]
  • Access to secretsline 286
    [Credential-related source omitted]
  • Access to secretsline 287
    [Credential-related source omitted]
  • Access to secretsline 340
    [Credential-related source omitted]
  • Access to secretsline 350
    [Credential-related source omitted]
  • Access to secretsline 376
    [Credential-related source omitted]
  • Access to secretsline 396
    [Credential-related source omitted]
  • Access to secretsline 473
    [Credential-related source omitted]
  • Access to secretsline 474
    [Credential-related source omitted]
  • Network accessline 484
    MASKED_KEY = "sk-proj-" + "*" * 20 + "ab12" BEARER = "Bearer " + "synthetic.token.value-0123456789" SIGNED = "https://files.example.invalid/img/out.png?X-Signature=0a1b2c&Expires=1"
  • Network accessline 486
    SIGNED = "https://files.example.invalid/img/out.png?X-Signature=0a1b2c&Expires=1"
  • Network accessline 506
    def test_keys_and_url_query_strings_are_masked_and_nothing_else(tmp_path, api):     said = (f"key {PROJECT_KEY} or {XAI_KEY}; masked {MASKED_KEY}; sent {KEY}; header {BEARER}; "             f"url {SIGNED} then https://example.invalid/docs/e
  • Network accessline 507
    said = (f"key {PROJECT_KEY} or {XAI_KEY}; masked {MASKED_KEY}; sent {KEY}; header {BEARER}; "             f"url {SIGNED} then https://example.invalid/docs/errors and sk-short")     message = _line(tmp_path, api, 401, {"error": {"message": s
  • Network accessline 508
    f"url {SIGNED} then https://example.invalid/docs/errors and sk-short")
  • Access to secretsline 509
    [Credential-related source omitted]
  • Access to secretsline 513
    [Credential-related source omitted]
  • Network accessline 515
    '{"error": {"message": "key sk-[redacted] or xai-[redacted]; '         f"masked {MASKED_KEY}; sent [redacted]; header Bearer [redacted]; "         'url https://files.example.invalid/img/out.png?[redacted] then https://example.invalid/docs/e
  • Network accessline 516
    f"masked {MASKED_KEY}; sent [redacted]; header Bearer [redacted]; "         'url https://files.example.invalid/img/out.png?[redacted] then https://example.invalid/docs/errors '         'and sk-short", "code": "invalid_api_key"}}'
  • Network accessline 517
    'url https://files.example.invalid/img/out.png?[redacted] then https://example.invalid/docs/errors '
  • Access to secretsline 518
    [Credential-related source omitted]

tests/gen/test_painted_checkerboard.py

  • Executable scriptline 1
    Executable file

tests/gen/test_pixel_draw.py

  • Executable scriptline 1
    Executable file
  • Network accessline 86
    states = self.polls.setdefault(batch_id, ["ended"])         state = states.pop(0) if len(states) > 1 else states[0]         return {"id": batch_id, "processing_status": state, "results_url": f"https://results.invalid/{batch_id}",
  • Network accessline 87
    state = states.pop(0) if len(states) > 1 else states[0]         return {"id": batch_id, "processing_status": state, "results_url": f"https://results.invalid/{batch_id}",                 "ended_at": "2026-10-12T00:00:00Z" if state == "ended"
  • Network accessline 88
    return {"id": batch_id, "processing_status": state, "results_url": f"https://results.invalid/{batch_id}",
  • Access to secretsline 99
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 138
    [Credential-related source omitted]
  • Access to secretsline 540
    [Credential-related source omitted]
  • Access to secretsline 561
    [Credential-related source omitted]
  • Access to secretsline 564
    [Credential-related source omitted]
  • Access to secretsline 587
    [Credential-related source omitted]
  • Access to secretsline 606
    [Credential-related source omitted]
  • Access to secretsline 608
    [Credential-related source omitted]
  • Access to secretsline 729
    [Credential-related source omitted]
  • Access to secretsline 752
    [Credential-related source omitted]
  • Access to secretsline 753
    [Credential-related source omitted]
  • Access to secretsline 757
    [Credential-related source omitted]
  • Access to secretsline 759
    [Credential-related source omitted]
  • Access to secretsline 760
    [Credential-related source omitted]

tests/gen/test_pixel_draw_frames.py

  • Executable scriptline 1
    Executable file
  • Network accessline 328
    body = "".join(f"FRAME s{i:02d}\n" + "\n".join(frame(i)) + "\n" for i in range(1, count + 1))     return "PALETTE\n. transparent\na #3a2f4e\nb #e8b890\nc #d8a880\nd #c0c8d8\n" + body + "END\n"
  • Network accessline 329
    return "PALETTE\n. transparent\na #3a2f4e\nb #e8b890\nc #d8a880\nd #c0c8d8\n" + body + "END\n"

tests/gen/test_pixel_effect.py

  • Executable scriptline 1
    Executable file

tests/gen/test_pixel_gates.py

  • Executable scriptline 1
    Executable file

tests/gen/test_pixel_grid.py

  • Executable scriptline 1
    Executable file
  • Network accessline 284
    held = {".": None, "a": "#2a1f2e", "b": "#c8a040"}     rows = ["........", ".aaaaaa.", ".abbbba.", ".acccca.", ".aaaaaa.", ".aaaaaa.", ".aaaaaa.", "........"]     text = _block(". transparent\na #2a1f2e\nb #ffffff\nc #ff0000", {"f5": rows})
  • Network accessline 285
    rows = ["........", ".aaaaaa.", ".abbbba.", ".acccca.", ".aaaaaa.", ".aaaaaa.", ".aaaaaa.", "........"]     text = _block(". transparent\na #2a1f2e\nb #ffffff\nc #ff0000", {"f5": rows})     grid, issues = pg.parse_answer(text, "chargrid", 8
  • Network accessline 286
    text = _block(". transparent\na #2a1f2e\nb #ffffff\nc #ff0000", {"f5": rows})

tests/gen/test_prompt_assembly.py

  • Executable scriptline 1
    Executable file

tests/gen/test_prompt_freeze.py

  • Executable scriptline 1
    Executable file

tests/gen/test_provider_address.py

  • Executable scriptline 1
    Executable file
  • Network accessline 29
    ROOT = Path(__file__).resolve().parents[2] URLOPEN = urllib.request.urlopen
  • Network accessline 30
    URLOPEN = urllib.request.urlopen
  • Network accessline 31
    KEY = "door-token" MP4 = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64 CLIP = "https://vidgen.x.ai/v/1.mp4?sig=abc"
  • Network accessline 32
    MP4 = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64 CLIP = "https://vidgen.x.ai/v/1.mp4?sig=abc" PRIVATE_CLIP = "https://vidgen.x.ai/v/2.mp4"  # answered only with the bearer token
  • Possible obfuscationline 32
    MP4 = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64
  • Network accessline 33
    CLIP = "https://vidgen.x.ai/v/1.mp4?sig=abc"
  • Network accessline 34
    PRIVATE_CLIP = "https://vidgen.x.ai/v/2.mp4"  # answered only with the bearer token
  • Network accessline 35
    RESULTS = "https://api.anthropic.com/v1/messages/batches/msgbatch_01/results"
  • Network accessline 36
    DEFAULTS = {     "openai": ("SPRITE_GEN_OPENAI_BASE_URL", "https://api.openai.com/v1"),     "xai": ("SPRITE_GEN_XAI_BASE_URL", "https://api.x.ai/v1"),
  • Network accessline 37
    "openai": ("SPRITE_GEN_OPENAI_BASE_URL", "https://api.openai.com/v1"),
  • Network accessline 38
    "xai": ("SPRITE_GEN_XAI_BASE_URL", "https://api.x.ai/v1"),
  • Network accessline 39
    "anthropic": ("SPRITE_GEN_ANTHROPIC_BASE_URL", "https://api.anthropic.com/v1"),
  • Network accessline 135
    server = http.server.ThreadingHTTPServer(("127.0.0.1", 0), _Relay)     server.seen = []     server.root = f"http://127.0.0.1:{server.server_address[1]}"
  • Network accessline 136
    server.seen = []     server.root = f"http://127.0.0.1:{server.server_address[1]}"     thread = threading.Thread(target=server.serve_forever, daemon=True)
  • Network accessline 137
    server.root = f"http://127.0.0.1:{server.server_address[1]}"
  • Access to secretsline 169
    [Credential-related source omitted]
  • Access to secretsline 174
    [Credential-related source omitted]
  • Network accessline 273
    _capture(monkeypatch, sent)     _video(tmp_path, "first.mp4")     assert sent == ["https://api.x.ai/v1/videos/generations", "https://api.x.ai/v1/videos/req-1", CLIP]
  • Network accessline 274
    _video(tmp_path, "first.mp4")     assert sent == ["https://api.x.ai/v1/videos/generations", "https://api.x.ai/v1/videos/req-1", CLIP]     monkeypatch.setattr(urllib.request, "urlopen", URLOPEN)
  • Network accessline 275
    assert sent == ["https://api.x.ai/v1/videos/generations", "https://api.x.ai/v1/videos/req-1", CLIP]     monkeypatch.setattr(urllib.request, "urlopen", URLOPEN)     _point(monkeypatch, relay, "xai")
  • Network accessline 290
    direct: list[urllib.request.Request] = []
  • Network accessline 301
    (method, path, headers, body), = relay.seen     before = direct[0]     assert before.full_url == "https://api.openai.com/v1/images/generations"
  • Network accessline 302
    before = direct[0]     assert before.full_url == "https://api.openai.com/v1/images/generations"     assert (method, path, body) == (before.get_method(), "/openai/images/generations", before.data)
  • Network accessline 303
    assert before.full_url == "https://api.openai.com/v1/images/generations"
  • Network accessline 320
    @pytest.mark.parametrize("value", ["127.0.0.1:8080/v1", "ftp://relay/v1", "http:///v1", "http://relay/v1?x=1",
  • Network accessline 321
    "http://relay/v1#frag"])
  • Network accessline 329
    def test_a_trailing_slash_is_the_same_base() -> None:     from sprite_gen.gen import address     env = {"SPRITE_GEN_XAI_BASE_URL": "http://127.0.0.1:9/xai/"}
  • Network accessline 330
    from sprite_gen.gen import address     env = {"SPRITE_GEN_XAI_BASE_URL": "http://127.0.0.1:9/xai/"}     assert address.url("xai", "/videos/req-1", env=env) == "http://127.0.0.1:9/xai/videos/req-1"
  • Network accessline 331
    env = {"SPRITE_GEN_XAI_BASE_URL": "http://127.0.0.1:9/xai/"}
  • Network accessline 332
    assert address.url("xai", "/videos/req-1", env=env) == "http://127.0.0.1:9/xai/videos/req-1"

tests/gen/test_refusal.py

  • Executable scriptline 1
    Executable file
  • Network accessline 20
    "xai": ("xai-" + "Synthetic0Key1For2Tests" * 2, "Synthetic0Key1For2Tests"),     "bearer": ("Bearer synthetic.token.value-0123456789", "synthetic.token.value-0123456789"),     "url": ("https://files.example.invalid/o.png?X-Signature=0a1b2c3d
  • Network accessline 21
    [Credential-related source omitted]
  • Network accessline 22
    "url": ("https://files.example.invalid/o.png?X-Signature=0a1b2c3d&Expires=1", "X-Signature=0a1b2c3d"),
  • Network accessline 75
    assert (refusal.said({"error": {"message": "seehttps://files.example.invalid/o.png?X-Signature=0a1b"}})
  • Network accessline 76
    == ': {"error": {"message": "seehttps://files.example.invalid/o.png?[redacted]"}}')

tests/gen/test_retry.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 219
    [Credential-related source omitted]
  • Access to secretsline 228
    [Credential-related source omitted]
  • Network accessline 243
    calls.append(method)         return (200, {"request_id": "r"}) if method == "POST" else (             200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4"}})
  • Network accessline 245
    200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4"}})
  • Possible obfuscationline 249
    download=lambda url, token, **_: b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64,
  • Network accessline 313
    def readinto(self, buffer):         import http.client
  • Network accessline 314
    import http.client
  • Network accessline 316
    raise http.client.IncompleteRead(b'{"error": ', 40)
  • Network accessline 326
    monkeypatch.setattr(xai.urllib.request, "urlopen", _refused_cut)     with pytest.raises(xai.TransportError):         xai.http_json("POST", "https://api.x.ai/v1/images/generations", "t", {})
  • Network accessline 327
    with pytest.raises(xai.TransportError):         xai.http_json("POST", "https://api.x.ai/v1/images/generations", "t", {})     monkeypatch.setattr(openai_provider.urllib.request, "urlopen", _refused_cut)
  • Network accessline 328
    xai.http_json("POST", "https://api.x.ai/v1/images/generations", "t", {})     monkeypatch.setattr(openai_provider.urllib.request, "urlopen", _refused_cut)     with pytest.raises(SystemExit, match="request failed or timed out; no automatic re
  • Network accessline 329
    monkeypatch.setattr(openai_provider.urllib.request, "urlopen", _refused_cut)     with pytest.raises(SystemExit, match="request failed or timed out; no automatic retry"):         openai_provider.http_image("https://api.openai.com/v1/images/g
  • Network accessline 330
    with pytest.raises(SystemExit, match="request failed or timed out; no automatic retry"):         openai_provider.http_image("https://api.openai.com/v1/images/generations", "t", b"{}", "application/json", timeout=5)     monkeypatch.setattr(a
  • Network accessline 331
    openai_provider.http_image("https://api.openai.com/v1/images/generations", "t", b"{}", "application/json", timeout=5)     monkeypatch.setattr(anthropic_api.urllib.request, "urlopen", _refused_cut)     with pytest.raises(anthropic_api.ApiErr
  • Network accessline 350
    monkeypatch.setattr(module, "error_body", recording)         monkeypatch.setattr(module.urllib.request, "urlopen", refused)     assert xai.http_json("POST", "https://api.x.ai/v1/x", "t", {}) == (400, {"error": "no"})
  • Network accessline 351
    monkeypatch.setattr(module.urllib.request, "urlopen", refused)     assert xai.http_json("POST", "https://api.x.ai/v1/x", "t", {}) == (400, {"error": "no"})     assert openai_provider.http_image("https://api.openai.com/v1/x", "t", b"{}", "ap
  • Network accessline 352
    assert xai.http_json("POST", "https://api.x.ai/v1/x", "t", {}) == (400, {"error": "no"})
  • Network accessline 353
    assert openai_provider.http_image("https://api.openai.com/v1/x", "t", b"{}", "application/json", timeout=5)[:2] == (400, {"error": "no"})

tests/gen/test_trim_alpha.py

  • Executable scriptline 1
    Executable file

tests/gen/test_video.py

  • Executable scriptline 1
    Executable file
  • Network accessline 7
    import errno import http.client
  • Network accessline 8
    import http.client
  • Possible obfuscationline 25
    MP4 = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64
  • Network accessline 38
    if expires_at is not None:         entry["expires_at"] = expires_at     (home / "auth.json").write_text(json.dumps({"https://auth.x.ai::client": entry}), encoding="utf-8")
  • Network accessline 39
    entry["expires_at"] = expires_at     (home / "auth.json").write_text(json.dumps({"https://auth.x.ai::client": entry}), encoding="utf-8")     return home
  • Network accessline 40
    (home / "auth.json").write_text(json.dumps({"https://auth.x.ai::client": entry}), encoding="utf-8")
  • Network accessline 47
    def __init__(self, post=(200, {"request_id": "req-1"}), polls=None):         self.post = post         self.polls = list(polls or [(200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 6.0}, "model": "grok-imag
  • Network accessline 48
    self.post = post         self.polls = list(polls or [(200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 6.0}, "model": "grok-imagine-video-1.5"})])         self.calls: list[tuple[str, str, str, dict | None]
  • Network accessline 49
    self.polls = list(polls or [(200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 6.0}, "model": "grok-imagine-video-1.5"})])
  • Access to secretsline 108
    [Credential-related source omitted]
  • Access to secretsline 109
    [Credential-related source omitted]
  • Access to secretsline 111
    [Credential-related source omitted]
  • Access to secretsline 118
    [Credential-related source omitted]
  • Access to secretsline 119
    [Credential-related source omitted]
  • Access to secretsline 126
    [Credential-related source omitted]
  • Access to secretsline 131
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]
  • Network accessline 143
    def test_generate_video_posts_data_url_polls_and_publishes_verified_mp4(tmp_path: Path) -> None:     api = _FakeApi(polls=[(200, {"status": "pending", "progress": 10}), (200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4"
  • Network accessline 144
    api = _FakeApi(polls=[(200, {"status": "pending", "progress": 10}), (200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 6.0}, "model": "grok-imagine-video-1.5"})])
  • Network accessline 153
    method, url, token, body = api.calls[0]     assert (method, url, token) == ("POST", "https://api.x.ai/v1/videos/generations", "tok")
  • Network accessline 154
    assert (method, url, token) == ("POST", "https://api.x.ai/v1/videos/generations", "tok")
  • Network accessline 158
    assert body["image"]["url"].startswith("data:image/png;base64,")     assert "output" not in body  # no upload_url: the direct call is what works on ZDR teams     assert api.calls[1][:2] == ("GET", "https://api.x.ai/v1/videos/req-1")
  • Network accessline 159
    assert "output" not in body  # no upload_url: the direct call is what works on ZDR teams     assert api.calls[1][:2] == ("GET", "https://api.x.ai/v1/videos/req-1")     assert slept == [video.POLL_INTERVAL_SECONDS]
  • Network accessline 160
    assert api.calls[1][:2] == ("GET", "https://api.x.ai/v1/videos/req-1")
  • Network accessline 161
    assert slept == [video.POLL_INTERVAL_SECONDS]     assert api.downloads == ["https://vidgen.x.ai/v/1.mp4"]     assert result.out.read_bytes() == MP4
  • Network accessline 162
    assert api.downloads == ["https://vidgen.x.ai/v/1.mp4"]
  • Access to secretsline 199
    [Credential-related source omitted]
  • Access to secretsline 200
    [Credential-related source omitted]
  • Access to secretsline 216
    [Credential-related source omitted]
  • Access to secretsline 223
    [Credential-related source omitted]
  • Access to secretsline 232
    [Credential-related source omitted]
  • Access to secretsline 243
    [Credential-related source omitted]
  • Access to secretsline 276
    [Credential-related source omitted]
  • Access to secretsline 284
    [Credential-related source omitted]
  • Access to secretsline 296
    [Credential-related source omitted]
  • Access to secretsline 303
    [Credential-related source omitted]
  • Access to secretsline 356
    [Credential-related source omitted]
  • Access to secretsline 367
    [Credential-related source omitted]
  • Access to secretsline 380
    [Credential-related source omitted]
  • Access to secretsline 392
    [Credential-related source omitted]
  • Access to secretsline 404
    [Credential-related source omitted]
  • Access to secretsline 416
    [Credential-related source omitted]
  • Network accessline 453
    [Credential-related source omitted]
  • Network accessline 454
    said = (f"echo {token}, key xai-{'Synthetic0Key1For2Tests3Only4' * 3}, "             "url https://vidgen.x.ai/v/1.mp4?sig=abc, (HTTP 999) code=decoy")     error = {"code": "invalid_argument", "message": said}
  • Network accessline 455
    "url https://vidgen.x.ai/v/1.mp4?sig=abc, (HTTP 999) code=decoy")
  • Network accessline 466
    assert message == front + ("error={'code': 'invalid_argument', 'message': 'echo [redacted], key xai-[redacted], "                                "url https://vidgen.x.ai/v/1.mp4?[redacted] (HTTP 999) code=decoy'}"
  • Network accessline 467
    "url https://vidgen.x.ai/v/1.mp4?[redacted] (HTTP 999) code=decoy'}"
  • Network accessline 509
    DONE = (200, {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 6.0}, "model": "grok-imagine-video-1.5"})
  • Network accessline 519
    call=api.call, download=api.download, sleep=slept.append)     assert [call[0] for call in api.calls] == ["POST", "GET", "GET", "GET", "GET"]     assert {call[1] for call in api.calls[1:]} == {"https://api.x.ai/v1/videos/req-1"}
  • Network accessline 521
    assert {call[1] for call in api.calls[1:]} == {"https://api.x.ai/v1/videos/req-1"}
  • Access to secretsline 531
    [Credential-related source omitted]
  • Network accessline 544
    assert isinstance(unfinished.value, SystemExit)     assert [call[0] for call in api.calls].count("POST") == 1     assert {call[1] for call in api.calls[1:]} == {"https://api.x.ai/v1/videos/req-1"}
  • Network accessline 546
    assert {call[1] for call in api.calls[1:]} == {"https://api.x.ai/v1/videos/req-1"}
  • Access to secretsline 566
    [Credential-related source omitted]
  • Network accessline 724
    monkeypatch.setattr(xai.urllib.request, "urlopen", urlopen)     with pytest.raises(xai.TransportError) as lost:         xai.http_json("GET", "https://api.x.ai/v1/videos/req-1", "t")
  • Network accessline 725
    with pytest.raises(xai.TransportError) as lost:         xai.http_json("GET", "https://api.x.ai/v1/videos/req-1", "t")     assert isinstance(lost.value, SystemExit) and video.TransportError is xai.TransportError
  • Network accessline 726
    xai.http_json("GET", "https://api.x.ai/v1/videos/req-1", "t")
  • Network accessline 736
    call=api.call, download=api.download, sleep=slept.append)     assert [call[0] for call in api.calls] == ["POST", "GET", "GET", "GET", "GET", "GET"]     assert {call[1] for call in api.calls[1:]} == {"https://api.x.ai/v1/videos/req-1"}
  • Network accessline 738
    assert {call[1] for call in api.calls[1:]} == {"https://api.x.ai/v1/videos/req-1"}
  • Access to secretsline 786
    [Credential-related source omitted]
  • Network accessline 820
    [Credential-related source omitted]
  • Access to secretsline 820
    [Credential-related source omitted]
  • Network accessline 821
    assert [call[0] for call in api.calls] == ["GET", "GET", "GET"]     assert {call[1] for call in api.calls} == {"https://api.x.ai/v1/videos/req-7"}     assert result.out == (tmp_path / "clip.mp4").resolve() and result.out.read_bytes() == MP4
  • Network accessline 822
    assert {call[1] for call in api.calls} == {"https://api.x.ai/v1/videos/req-7"}
  • Access to secretsline 828
    [Credential-related source omitted]
  • Network accessline 920
    # --- an answer cut short, garbled or not JSON, read by http.client -------------------
  • Network accessline 922
    # not one) or came whole but is not JSON gave the run nothing to read: it is asked again on the same # request like a lost one, and at the poll timeout the run is unfinished on that id — never an # exception that leaves no id behind. The an
  • Network accessline 923
    # request like a lost one, and at the poll timeout the run is unfinished on that id — never an # exception that leaves no id behind. The answers reach the run through urllib and http.client, and # only the socket under them is scripted (`_W
  • Network accessline 924
    # exception that leaves no id behind. The answers reach the run through urllib and http.client, and
  • Network accessline 925
    # only the socket under them is scripted (`_Wire`), so http.client raises what it raises on the wire
  • Network accessline 962
    """A scripted xAI at `root`: http.client's connect to it opens a `_Connection`, and each request sent on one
  • Network accessline 967
    host, port = "wire.test", 80     root = f"http://{host}"
  • Network accessline 968
    root = f"http://{host}"
  • Network accessline 976
    def connect(self, connection: http.client.HTTPConnection) -> None:
  • Network accessline 991
    """A connection to the wire, as http.client uses a socket. What is sent is kept; the first read takes the
  • Network accessline 1048
    def serve(*answers: bytes | _Hold | _Trickle) -> _Wire:         server = _Wire(clock, list(answers))         monkeypatch.setattr(http.client.HTTPConnection, "connect", lambda connection: server.connect(connection))
  • Network accessline 1049
    server = _Wire(clock, list(answers))         monkeypatch.setattr(http.client.HTTPConnection, "connect", lambda connection: server.connect(connection))         monkeypatch.delenv("SPRITE_GEN_XAI_BASE_URL", raising=False)
  • Network accessline 1050
    monkeypatch.setattr(http.client.HTTPConnection, "connect", lambda connection: server.connect(connection))
  • Network accessline 1143
    # --- a clip that is done and could not be downloaded, read by http.client ---------------
  • Network accessline 1157
    NOT_A_CLIP = _answer("200 OK", NOT_A_CLIP_BODY, content_type="text/html")  # whole, and not an mp4 CLIP_CUT_SAID = f"IncompleteRead(10 bytes read, {len(MP4) - 10} more expected)" REFUSED_URL = "http://refused.test/clips/1.mp4"  # a clip on 
  • Network accessline 1158
    CLIP_CUT_SAID = f"IncompleteRead(10 bytes read, {len(MP4) - 10} more expected)" REFUSED_URL = "http://refused.test/clips/1.mp4"  # a clip on an address the wire is not: its connect is refused REFUSED_SAID = f"[Errno {errno.ECONNREFUSED}] {o
  • Network accessline 1159
    REFUSED_URL = "http://refused.test/clips/1.mp4"  # a clip on an address the wire is not: its connect is refused

tests/gen/test_video_facing.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 14
    MP4 = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64
  • Network accessline 29
    if method == "POST":             return 200, {"request_id": "test-id"}         return 200, {"status": "done", "video": {"url": "https://vidgen.x.ai/test.mp4", "duration": 3}}
  • Network accessline 31
    return 200, {"status": "done", "video": {"url": "https://vidgen.x.ai/test.mp4", "duration": 3}}
  • Possible obfuscationline 58
    uploaded = Image.open(io.BytesIO(base64.b64decode(url.split(",", 1)[1])))
  • Possible obfuscationline 101
    uploaded = base64.b64decode(api.calls[1][3]["image"]["url"].split(",", 1)[1])
  • Possible obfuscationline 111
    uploaded = base64.b64decode(api.calls[1][3]["image"]["url"].split(",", 1)[1])

tests/gen/test_video_modes.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 17
    MP4 = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64
  • Network accessline 34
    def __init__(self, post=(200, {"request_id": "req-1"}), done=None):         self.post = post         self.done = done or {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 5.04}, "model": "grok-imagine-video-1.5"
  • Network accessline 35
    self.post = post         self.done = done or {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 5.04}, "model": "grok-imagine-video-1.5"}         self.calls: list[tuple[str, str, str, dict | None]] = []
  • Network accessline 36
    self.done = done or {"status": "done", "video": {"url": "https://vidgen.x.ai/v/1.mp4", "duration": 5.04}, "model": "grok-imagine-video-1.5"}
  • Network accessline 69
    api = _FakeApi()     result = video.generate_video(_gen(tmp_path, image=still, duration=6, resolution="720p"), **api.kw())     assert api.endpoint == "https://api.x.ai/v1/videos/generations"
  • Network accessline 70
    result = video.generate_video(_gen(tmp_path, image=still, duration=6, resolution="720p"), **api.kw())     assert api.endpoint == "https://api.x.ai/v1/videos/generations"     assert list(api.body) == ["model", "prompt", "duration", "resoluti
  • Network accessline 71
    assert api.endpoint == "https://api.x.ai/v1/videos/generations"
  • Network accessline 196
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/2.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 197
    result = video.extend_video(_ext(tmp_path, duration=5), probe=_probe(15.04, 20.04), **api.kw())     assert api.endpoint == "https://api.x.ai/v1/videos/extensions"     assert list(api.body) == ["model", "prompt", "duration", "video"]
  • Network accessline 198
    assert api.endpoint == "https://api.x.ai/v1/videos/extensions"
  • Network accessline 212
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/2.mp4", "duration": 17.0}, "model": "grok-imagine-video"})
  • Network accessline 249
    def test_edit_posts_classic_model_to_edits_without_duration(tmp_path: Path) -> None:     api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/3.mp4", "duration": 7.71}, "model": "grok-imagine-video"})
  • Network accessline 250
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/3.mp4", "duration": 7.71}, "model": "grok-imagine-video"})
  • Network accessline 251
    result = video.edit_video(_edit(tmp_path), probe=_probe(8.0, 7.71), **api.kw())     assert api.endpoint == "https://api.x.ai/v1/videos/edits"     assert list(api.body) == ["model", "prompt", "video"]
  • Network accessline 252
    assert api.endpoint == "https://api.x.ai/v1/videos/edits"
  • Network accessline 281
    given = MP4 + b"the input clip"     api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/4.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 282
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/4.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 304
    given = MP4 + b"the input clip"     api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/5.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 305
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/5.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 325
    given = MP4 + b"the input clip"     api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/6.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 326
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/6.mp4", "duration": 5}, "model": "grok-imagine-video"})
  • Network accessline 413
    def test_run_extend_kwargs_writes_report(tmp_path: Path, monkeypatch) -> None:     api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/2.mp4", "duration": 11.0}, "model": "grok-imagine-video"})
  • Network accessline 414
    api = _FakeApi(done={"status": "done", "video": {"url": "https://vidgen.x.ai/v/2.mp4", "duration": 11.0}, "model": "grok-imagine-video"})

tests/gen/test_vision_read.py

  • Executable scriptline 1
    Executable file

tests/http_answer.py

  • Network accessline 1
    # SPDX-License-Identifier: Apache-2.0 """One HTTP answer as `urllib.request.urlopen` hands it to a direct provider transport, for the offline
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    """One HTTP answer as `urllib.request.urlopen` hands it to a direct provider transport, for the offline
  • Network accessline 17
    self.headers = {} if headers is None else headers         self._body = io.BytesIO(body if isinstance(body, bytes) else json.dumps(body).encode())         self.length = None  # what http.client keeps of a Content-Length still to come: none w
  • Network accessline 18
    self._body = io.BytesIO(body if isinstance(body, bytes) else json.dumps(body).encode())         self.length = None  # what http.client keeps of a Content-Length still to come: none was sent         self.waits: list[float] = []
  • Network accessline 19
    self.length = None  # what http.client keeps of a Content-Length still to come: none was sent

tests/keyed_figure.py

  • Executable scriptline 1
    Executable file

tests/logo_lettering.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_cli_taxonomy.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_curation_asset_packaging.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_curation_cli_entrypoint.py

  • Executable scriptline 1
    Executable file
  • Network accessline 64
    assert serve_curation.CurationHandler.lang == "ko"     assert serve_curation.CurationHandler.run_dir == fixture_run_dir.resolve()     assert "http://127.0.0.1:8797/" in capsys.readouterr().out
  • Network accessline 66
    assert "http://127.0.0.1:8797/" in capsys.readouterr().out

tests/packaging/test_entrypoint_interpreter.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_numpy_dependency_gate.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 153
    [Credential-related source omitted]

tests/packaging/test_package_surface.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_pipeline_smoke.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_project_metadata.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_recolor_cli_entrypoint.py

  • Executable scriptline 1
    Executable file

tests/packaging/test_version_ssot.py

  • Executable scriptline 1
    Executable file

tests/picture_digest.py

  • Executable scriptline 1
    Executable file

tests/qa/test_correction_loop_inputs_kept.py

  • Executable scriptline 1
    Executable file

tests/qa/test_handed_check.py

  • Executable scriptline 1
    Executable file

tests/qa/test_inspect_score_loop.py

  • Executable scriptline 1
    Executable file

tests/qa/test_motion.py

  • Executable scriptline 1
    Executable file

tests/release/test_fast_bundle.py

  • Executable scriptline 1
    Executable file

tests/release/test_lane_rife_collection.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 40
    [Credential-related source omitted]
  • Access to secretsline 77
    [Credential-related source omitted]

tests/release/test_release_notes.py

  • Executable scriptline 1
    Executable file
  • Network accessline 178
    page = _render(tmp_path, "v1.3.0", section, gifs=("wave-cube.gif", "hop-cube.gif"),                    repo="example/example", branch="main", with_footer=False)     raw = "https://raw.githubusercontent.com/example/example/main/docs/assets/"
  • Network accessline 179
    repo="example/example", branch="main", with_footer=False)     raw = "https://raw.githubusercontent.com/example/example/main/docs/assets/"     body = str(page["body"])
  • Network accessline 180
    raw = "https://raw.githubusercontent.com/example/example/main/docs/assets/"
  • Network accessline 190
    page = _render(tmp_path, "v1.2.0", repo="example/example")     body = str(page["body"])     assert 'pip install --upgrade "sprite-gen @ git+https://github.com/example/example.git@v1.2.0"' in body
  • Network accessline 191
    body = str(page["body"])     assert 'pip install --upgrade "sprite-gen @ git+https://github.com/example/example.git@v1.2.0"' in body     assert "CHANGELOG.md#v120---middle)" in body, "GitHub drops the dots and joins on hyphens"
  • Network accessline 192
    assert 'pip install --upgrade "sprite-gen @ git+https://github.com/example/example.git@v1.2.0"' in body

tests/release/test_release_publish.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 36
    [Credential-related source omitted]
  • Access to secretsline 37
    [Credential-related source omitted]
  • Access to secretsline 41
    [Credential-related source omitted]
  • Network accessline 50
    if verb == ["release", "create"]:     state.write_text("published", encoding="utf-8")     print("https://github.com/example/example/releases/tag/" + sys.argv[3])
  • Network accessline 51
    state.write_text("published", encoding="utf-8")     print("https://github.com/example/example/releases/tag/" + sys.argv[3])     sys.exit(0)
  • Network accessline 52
    print("https://github.com/example/example/releases/tag/" + sys.argv[3])
  • Access to secretsline 74
    [Credential-related source omitted]
  • Access to secretsline 154
    [Credential-related source omitted]
  • Access to secretsline 196
    [Credential-related source omitted]

tests/release/test_rife_pins.py

  • Executable scriptline 1
    Executable file

tests/release/test_t4_lane.py

  • Executable scriptline 1
    Executable file

tests/scene/test_inspect_scene.py

  • Executable scriptline 1
    Executable file

tests/scene/test_layer_resample.py

  • Executable scriptline 1
    Executable file

tests/scene/test_model.py

  • Executable scriptline 1
    Executable file

tests/scene/test_render.py

  • Executable scriptline 1
    Executable file

tests/serve/test_curation_view_contract.py

  • Executable scriptline 1
    Executable file
  • Network accessline 60
    threading.Thread(target=srv.serve_forever, daemon=True).start()     try:         return urllib.request.urlopen(f"http://127.0.0.1:{srv.server_address[1]}{url}").status
  • Network accessline 61
    try:         return urllib.request.urlopen(f"http://127.0.0.1:{srv.server_address[1]}{url}").status     finally:
  • Network accessline 62
    return urllib.request.urlopen(f"http://127.0.0.1:{srv.server_address[1]}{url}").status
  • Network accessline 473
    def get_revision():         return _json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 474
    return _json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 477
    body = _json.dumps({"version": 1, "kind": "sprite-gen-curation", "runRevision": revision,                             "states": {"items": {"selected": [1], "transforms": {"1": {"dx": 9}}}}}).encode()         req = urllib.request.Request(f"h
  • Network accessline 478
    "states": {"items": {"selected": [1], "transforms": {"1": {"dx": 9}}}}}).encode()         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation", data=body, method="POST")         try:
  • Network accessline 479
    req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation", data=body, method="POST")
  • Network accessline 480
    try:             return urllib.request.urlopen(req).status         except urllib.error.HTTPError as exc:
  • Network accessline 481
    return urllib.request.urlopen(req).status
  • Network accessline 646
    try:         revision = json.loads(             urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 648
    urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())["runRevision"]
  • Network accessline 650
    body = json.dumps({"version": 1, "kind": "sprite-gen-curation", "runRevision": revision,                            "states": {"items": {"selected": [0, 1]}}}).encode()         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/cura
  • Network accessline 651
    "states": {"items": {"selected": [0, 1]}}}).encode()         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",                                      data=body, method="POST")
  • Network accessline 652
    req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 653
    data=body, method="POST")         assert urllib.request.urlopen(req).status == 200     finally:
  • Network accessline 654
    assert urllib.request.urlopen(req).status == 200
  • Network accessline 673
    req = urllib.request.Request(f"http://127.0.0.1:{port}{path}", data=json.dumps(body).encode(), method="POST")
  • Network accessline 674
    try:         with urllib.request.urlopen(req) as answer:             return answer.status, json.loads(answer.read())
  • Network accessline 675
    with urllib.request.urlopen(req) as answer:

tests/serve/test_curator_pixel_scaling_ssot.py

  • Executable scriptline 1
    Executable file

tests/serve/test_curator_single_display_pipeline.py

  • Executable scriptline 1
    Executable file

tests/serve/test_curator_wire_keys.py

  • Executable scriptline 1
    Executable file

tests/serve/test_pixel_grid_always_available.py

  • Executable scriptline 1
    Executable file

tests/serve/test_recolor_curation_view.py

  • Executable scriptline 1
    Executable file
  • Network accessline 96
    port = srv.server_address[1]     try:         snapshot = json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())
  • Network accessline 97
    try:         snapshot = json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())         payload = {"version": 1, "kind": "sprite-gen-curation",
  • Network accessline 98
    snapshot = json.loads(urllib.request.urlopen(f"http://127.0.0.1:{port}/api/run").read())
  • Network accessline 99
    payload = {"version": 1, "kind": "sprite-gen-curation",                    "runRevision": snapshot["runRevision"], "states": {}, **body}         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 100
    "runRevision": snapshot["runRevision"], "states": {}, **body}         req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",                                      data=json.dumps(payload).encode(), method="POST")
  • Network accessline 101
    req = urllib.request.Request(f"http://127.0.0.1:{port}/api/curation",
  • Network accessline 102
    data=json.dumps(payload).encode(), method="POST")         with urllib.request.urlopen(req) as res:             return res.status
  • Network accessline 103
    with urllib.request.urlopen(req) as res:
  • Network accessline 136
    for entry in [view["base"], *view["variants"]]:             assert re.search(r"\?v=\d+$", entry["url"]), entry["url"]             res = urllib.request.urlopen(f"http://127.0.0.1:{port}{entry['url']}")
  • Network accessline 137
    assert re.search(r"\?v=\d+$", entry["url"]), entry["url"]             res = urllib.request.urlopen(f"http://127.0.0.1:{port}{entry['url']}")             assert res.status == 200
  • Network accessline 138
    res = urllib.request.urlopen(f"http://127.0.0.1:{port}{entry['url']}")

tests/spec/test_assets.py

  • Executable scriptline 1
    Executable file

tests/spec/test_migrate_breathe.py

  • Executable scriptline 1
    Executable file

tests/spec/test_publish_rwlock_cross_process.py

  • Executable scriptline 1
    Executable file

tests/spec/test_request_read_no_mutation.py

  • Executable scriptline 1
    Executable file

tests/spec/test_request_retired_rig_keys.py

  • Executable scriptline 1
    Executable file

tests/spec/test_request_write_isolation.py

  • Executable scriptline 1
    Executable file

tests/spec/test_run_dir_lock.py

  • Executable scriptline 1
    Executable file

tests/spec/test_runio_publish_set.py

  • Executable scriptline 1
    Executable file

tests/talking_face.py

  • Executable scriptline 1
    Executable file

tests/test_cli_kwargs.py

  • Executable scriptline 1
    Executable file

tests/test_gif_report.py

  • Executable scriptline 1
    Executable file

tests/test_hexcolor.py

  • Executable scriptline 1
    Executable file

tests/test_lsq.py

  • Executable scriptline 1
    Executable file

tests/test_prepare_layout_guides.py

  • Executable scriptline 1
    Executable file

tests/test_subject_profile.py

  • Executable scriptline 1
    Executable file

tests/util/test_console.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 26
    [Credential-related source omitted]

tests/util/test_gif_utils.py

  • Executable scriptline 1
    Executable file

tests/video/held_fill_inputs.py

  • Executable scriptline 1
    Executable file

tests/video/jump_inputs.py

  • Executable scriptline 1
    Executable file

tests/video/test_attack_headroom.py

  • Executable scriptline 1
    Executable file

tests/video/test_attack_motion.py

  • Executable scriptline 1
    Executable file

tests/video/test_attack_return.py

  • Executable scriptline 1
    Executable file

tests/video/test_auto_motion.py

  • Executable scriptline 1
    Executable file

tests/video/test_auto_motion_opening.py

  • Executable scriptline 1
    Executable file

tests/video/test_auto_motion_uncorrected.py

  • Executable scriptline 1
    Executable file

tests/video/test_batch_bases.py

  • Executable scriptline 1
    Executable file

tests/video/test_batch_facing.py

  • Executable scriptline 1
    Executable file

tests/video/test_batch_handed.py

  • Executable scriptline 1
    Executable file

tests/video/test_between_cache.py

  • Executable scriptline 1
    Executable file

tests/video/test_body_anchor.py

  • Executable scriptline 1
    Executable file

tests/video/test_body_anchor_gate.py

  • Executable scriptline 1
    Executable file

tests/video/test_body_plan.py

  • Executable scriptline 1
    Executable file

tests/video/test_canvas_key_normalize.py

  • Executable scriptline 1
    Executable file

tests/video/test_canvas_trail.py

  • Executable scriptline 1
    Executable file

tests/video/test_clip_prompt.py

  • Executable scriptline 1
    Executable file

tests/video/test_crossfade.py

  • Executable scriptline 1
    Executable file

tests/video/test_crossings.py

  • Executable scriptline 1
    Executable file

tests/video/test_cycle_align.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 456
    [Credential-related source omitted]

tests/video/test_cycle_align_beat.py

  • Executable scriptline 1
    Executable file

tests/video/test_cycle_align_foot.py

  • Executable scriptline 1
    Executable file

tests/video/test_cycle_align_foot_margin.py

  • Executable scriptline 1
    Executable file

tests/video/test_cycle_suspects.py

  • Executable scriptline 1
    Executable file

tests/video/test_duration_window_oneshot.py

  • Executable scriptline 1
    Executable file

tests/video/test_edge_border.py

  • Executable scriptline 1
    Executable file

tests/video/test_edge_speck_lead_in.py

  • Executable scriptline 1
    Executable file

tests/video/test_effect.py

  • Executable scriptline 1
    Executable file

tests/video/test_explicit_window.py

  • Executable scriptline 1
    Executable file

tests/video/test_face_layer.py

  • Executable scriptline 1
    Executable file
  • Network accessline 475
    for (; frame < job.frames; frame++) {   audio.currentTime = (frame + 0.5) / fps;   for (const r of job.requests.filter((r) => r.frame === frame)) {
  • Network accessline 476
    audio.currentTime = (frame + 0.5) / fps;   for (const r of job.requests.filter((r) => r.frame === frame)) {     const id = r.play ?? r.say;
  • Network accessline 477
    for (const r of job.requests.filter((r) => r.frame === frame)) {

tests/video/test_fit_tight.py

  • Executable scriptline 1
    Executable file

tests/video/test_follow.py

  • Executable scriptline 1
    Executable file

tests/video/test_follow_inspect.py

  • Executable scriptline 1
    Executable file

tests/video/test_follow_read_on.py

  • Executable scriptline 1
    Executable file

tests/video/test_follow_stretch_floor.py

  • Executable scriptline 1
    Executable file

tests/video/test_frames_inputs_kept.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 26
    JUNK = b"\x00\x00\x00\x18ftypisom" + b"\x00" * 64  # 클립 이름의 파일 — 거절이 먼저라 ffmpeg 가 읽지 않는다

tests/video/test_gait_fallback.py

  • Executable scriptline 1
    Executable file

tests/video/test_gait_fallback_resample.py

  • Executable scriptline 1
    Executable file

tests/video/test_gait_guard_anchor_wide.py

  • Executable scriptline 1
    Executable file

tests/video/test_gait_harmonic_ambiguity.py

  • Executable scriptline 1
    Executable file

tests/video/test_gait_window_context.py

  • Executable scriptline 1
    Executable file

tests/video/test_ghost_given_way.py

  • Executable scriptline 1
    Executable file

tests/video/test_ghost_retake.py

  • Executable scriptline 1
    Executable file

tests/video/test_ghost_screen.py

  • Executable scriptline 1
    Executable file

tests/video/test_held_cut_restoration.py

  • Executable scriptline 1
    Executable file

tests/video/test_held_drawings.py

  • Executable scriptline 1
    Executable file

tests/video/test_held_fill.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 38
    [Credential-related source omitted]

tests/video/test_held_walk_seam.py

  • Executable scriptline 1
    Executable file

tests/video/test_idle_still.py

  • Executable scriptline 1
    Executable file

tests/video/test_inbetween_doubled.py

  • Executable scriptline 1
    Executable file

tests/video/test_inbetween_hole.py

  • Executable scriptline 1
    Executable file

tests/video/test_inbetween_seen_through.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_body_turn.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_compare.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_ease.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_flow.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_half_step.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_inputs_kept.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_overlap.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_part_pop.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_prop_seam.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_prop_seam_held.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_repair.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 264
    [Credential-related source omitted]

tests/video/test_loop_sampling_and_wrap.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_silent_pass.py

  • Executable scriptline 1
    Executable file

tests/video/test_loop_two_lengths.py

  • Executable scriptline 1
    Executable file

tests/video/test_motion_anchor.py

  • Executable scriptline 1
    Executable file

tests/video/test_once.py

  • Executable scriptline 1
    Executable file

tests/video/test_one_shot_moved.py

  • Executable scriptline 1
    Executable file

tests/video/test_one_shot_refusal.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 87
    [Credential-related source omitted]

tests/video/test_one_step_cut.py

  • Executable scriptline 1
    Executable file

tests/video/test_outline_shift.py

  • Executable scriptline 1
    Executable file

tests/video/test_parts.py

  • Executable scriptline 1
    Executable file

tests/video/test_play.py

  • Executable scriptline 1
    Executable file

tests/video/test_prop_plate.py

  • Executable scriptline 1
    Executable file

tests/video/test_rife.py

  • Executable scriptline 1
    Executable file

tests/video/test_rife_cuts.py

  • Executable scriptline 1
    Executable file

tests/video/test_rife_executor.py

  • Executable scriptline 1
    Executable file

tests/video/test_rife_install.py

  • Executable scriptline 1
    Executable file
  • Network accessline 56
    assert rife.RELEASE == "20250112" and rife_install.URL.startswith("https://github.com/TNTwise/rife-ncnn-vulkan/")

tests/video/test_rife_models.py

  • Executable scriptline 1
    Executable file

tests/video/test_rife_torch.py

  • Executable scriptline 1
    Executable file

tests/video/test_rife_torch_v425.py

  • Executable scriptline 1
    Executable file

tests/video/test_root_motion.py

  • Executable scriptline 1
    Executable file

tests/video/test_screen_jump.py

  • Executable scriptline 1
    Executable file

tests/video/test_seam_bridge.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 248
    [Credential-related source omitted]

tests/video/test_seam_pop_gate.py

  • Executable scriptline 1
    Executable file

tests/video/test_set_sheet.py

  • Executable scriptline 1
    Executable file

tests/video/test_source_restoration.py

  • Executable scriptline 1
    Executable file

tests/video/test_spill_hue_evidence.py

  • Executable scriptline 1
    Executable file

tests/video/test_spill_reference_window.py

  • Executable scriptline 1
    Executable file

tests/video/test_stop.py

  • Executable scriptline 1
    Executable file

tests/video/test_strip_resample.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_band.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_breath.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_flat_across.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_frames.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_hold.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_names.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_read_on_recut.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_region.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_region_over.py

  • Executable scriptline 1
    Executable file

tests/video/test_sway_seams.py

  • Executable scriptline 1
    Executable file

tests/video/test_video_pipeline.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 438
    out.write_bytes(b"\x00\x00\x00\x18ftypisom")

tests/video/test_video_spill.py

  • Executable scriptline 1
    Executable file

tests/video/test_walk_canvas_room.py

  • Executable scriptline 1
    Executable file

tests/video/test_walk_defaults.py

  • Executable scriptline 1
    Executable file

tests/video/test_walk_steps.py

  • Executable scriptline 1
    Executable file

tests/video/test_wrap_blend.py

  • Executable scriptline 1
    Executable file

tests/workflow/test_capabilities.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 40
    [Credential-related source omitted]
  • Network accessline 147
    assert document["logins_env"] == "SPRITE_GEN_LOGINS"     assert document["providers"] == {         "openai": {"base_url_env": "SPRITE_GEN_OPENAI_BASE_URL", "base_url": "https://api.openai.com/v1",
  • Network accessline 148
    assert document["providers"] == {         "openai": {"base_url_env": "SPRITE_GEN_OPENAI_BASE_URL", "base_url": "https://api.openai.com/v1",                    "key_env": "OPENAI_API_KEY"},
  • Network accessline 149
    "openai": {"base_url_env": "SPRITE_GEN_OPENAI_BASE_URL", "base_url": "https://api.openai.com/v1",
  • Network accessline 150
    [Credential-related source omitted]
  • Access to secretsline 150
    [Credential-related source omitted]
  • Network accessline 151
    [Credential-related source omitted]
  • Access to secretsline 151
    [Credential-related source omitted]
  • Network accessline 152
    "anthropic": {"base_url_env": "SPRITE_GEN_ANTHROPIC_BASE_URL", "base_url": "https://api.anthropic.com/v1",
  • Access to secretsline 153
    [Credential-related source omitted]
  • Network accessline 159
    plain = _document()     monkeypatch.setenv("SPRITE_GEN_XAI_BASE_URL", "http://127.0.0.1:9/xai")
  • Network accessline 160
    monkeypatch.setenv("SPRITE_GEN_XAI_BASE_URL", "http://127.0.0.1:9/xai")

tests/workflow/test_workflow.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 80
    [Credential-related source omitted]
  • Access to secretsline 185
    [Credential-related source omitted]

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 6 facts
Signal confidence: 494 facts

and 444 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

aldegad/sprite-gen: #328 on hotskills, 3.9k stars

[![aldegad/sprite-gen on hotskills](https://hotskills.dev/badge/aldegad-sprite-gen.svg)](https://hotskills.dev/skill/aldegad-sprite-gen/)