#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).
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.
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
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 tokensAlways available to the agent
SKILL.md
5,172 tokensWhen the skill is activated
Reference documents
504,191 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Start every generation request here
- When codex cannot run — exit 75
- Side-view facing
- Execution routes
- 실행 인터프리터
- RIFE for walk and run loops
- Contracts and advanced tools
Scripts executed separately
.githooks/pre-commitscripts/compose_selected_cycle.pyscripts/compose_sprite_atlas.pyscripts/compose_sprite_gif.pyscripts/curation.pyscripts/dev/breathe_mutation_battery.pyscripts/dev/check_visible_magenta.pyscripts/dev/measure_align_sigma.pyscripts/dev/source_restoration_demo.pyscripts/diagnose_video_loop.pyscripts/export_aseprite.pyscripts/export_curated_pngs.pyscripts/extract_sprite_row_frames.pyscripts/gen_set.pyscripts/generate_sprite_image.pyscripts/generate_sprite_video.pyscripts/inspect_sprite_run.pyscripts/interpolate_frames.pyscripts/linux_lane.shscripts/prepare_sprite_run.pyscripts/preview_animation.pyscripts/recolor.pyscripts/release_notes.pyscripts/release_publish.pyscripts/run_correction_loop.pyscripts/score_sprite_run.pyscripts/serve_curation.pyscripts/slice_sheet_cells.pyscripts/t4_lane.pyscripts/unpack_atlas_run.pyscripts/video_canvas.pyscripts/video_frames.pyscripts/video_loop.pyscripts/video_set.pysprite_gen/__init__.pysprite_gen/_deps.pysprite_gen/_modules.pysprite_gen/background/__init__.pysprite_gen/background/tile.pysprite_gen/cli.pysprite_gen/compose/__init__.pysprite_gen/compose/compose_atlas.pysprite_gen/compose/compose_cycle.pysprite_gen/compose/compose_gif.pysprite_gen/compose/export_aseprite.pysprite_gen/compose/export_pngs.pysprite_gen/curate/__init__.pysprite_gen/curate/anchor.pysprite_gen/curate/curation.pysprite_gen/effects/__init__.pysprite_gen/effects/anatomy.pysprite_gen/effects/breath_beat.pysprite_gen/effects/breathe.pysprite_gen/effects/interpolate.pysprite_gen/effects/recolor.pysprite_gen/effects/reroll.pysprite_gen/effects/shadow.pysprite_gen/frames/__init__.pysprite_gen/frames/alpha_floor.pysprite_gen/frames/check_visible_magenta.pysprite_gen/frames/cutout.pysprite_gen/frames/decontam.pysprite_gen/frames/extract.pysprite_gen/frames/folder.pysprite_gen/frames/logo_matte.pysprite_gen/frames/measured_matte.pysprite_gen/frames/segment.pysprite_gen/frames/slice_sheet.pysprite_gen/frames/unpack_atlas.pysprite_gen/gen/__init__.pysprite_gen/gen/address.pysprite_gen/gen/anthropic_api.pysprite_gen/gen/base.pysprite_gen/gen/chroma.pysprite_gen/gen/claude_login.pysprite_gen/gen/codex_provider.pysprite_gen/gen/facing.pysprite_gen/gen/facing_vision.pysprite_gen/gen/gen_set.pysprite_gen/gen/grok_provider.pysprite_gen/gen/handedness.pysprite_gen/gen/logo.pysprite_gen/gen/openai_provider.pysprite_gen/gen/pixel_draw.pysprite_gen/gen/pixel_gates.pysprite_gen/gen/pixel_grid.pysprite_gen/gen/prepare.pysprite_gen/gen/prompt_parts.pysprite_gen/gen/refusal.pysprite_gen/gen/retry.pysprite_gen/gen/video.pysprite_gen/gen/xai.pysprite_gen/qa/__init__.pysprite_gen/qa/correction_loop.pysprite_gen/qa/handed.pysprite_gen/qa/inspect.pysprite_gen/qa/motion.pysprite_gen/qa/preview.pysprite_gen/qa/score.pysprite_gen/scene/__init__.pysprite_gen/scene/inspect_scene.pysprite_gen/scene/model.pysprite_gen/scene/render.pysprite_gen/serve/__init__.pysprite_gen/serve/composer/src/api.jssprite_gen/serve/composer/src/boot.jssprite_gen/serve/composer/src/canvas.jssprite_gen/serve/composer/src/controls.jssprite_gen/serve/composer/src/i18n.jssprite_gen/serve/composer/src/library.jssprite_gen/serve/composer/src/session.jssprite_gen/serve/composer/src/ui.jssprite_gen/serve/curator/src/atlas.jssprite_gen/serve/curator/src/base-editor.jssprite_gen/serve/curator/src/boot.jssprite_gen/serve/curator/src/breathe.jssprite_gen/serve/curator/src/cards.jssprite_gen/serve/curator/src/chrome.jssprite_gen/serve/curator/src/compare.jssprite_gen/serve/curator/src/display.jssprite_gen/serve/curator/src/gen-trigger.jssprite_gen/serve/curator/src/i18n.jssprite_gen/serve/curator/src/lasso-select.jssprite_gen/serve/curator/src/persistence.jssprite_gen/serve/curator/src/pipeline-tree.jssprite_gen/serve/curator/src/progress.jssprite_gen/serve/curator/src/recolor.jssprite_gen/serve/curator/src/region-transform.jssprite_gen/serve/curator/src/row-controls.jssprite_gen/serve/curator/src/row-export.jssprite_gen/serve/curator/src/status.jssprite_gen/serve/curator/src/store.jssprite_gen/serve/curator/src/tooltip.jssprite_gen/serve/curator/src/transform-provider.jssprite_gen/serve/curator/src/transforms.jssprite_gen/serve/curator/src/tween.jssprite_gen/serve/curator/src/util.jssprite_gen/serve/curator/src/view-nav.jssprite_gen/serve/curator/src/zones.jssprite_gen/serve/curator/src/zoom-editor.jssprite_gen/serve/serve_compose.pysprite_gen/serve/serve_curation.pysprite_gen/spec/__init__.pysprite_gen/spec/assets.pysprite_gen/spec/layout.pysprite_gen/spec/migrate_breathe.pysprite_gen/spec/migrate_request.pysprite_gen/spec/runio.pysprite_gen/spec/subject.pysprite_gen/util/__init__.pysprite_gen/util/cli_kwargs.pysprite_gen/util/console.pysprite_gen/util/gif_utils.pysprite_gen/util/hexcolor.pysprite_gen/util/lsq.pysprite_gen/util/resample.pysprite_gen/video/__init__.pysprite_gen/video/align.pysprite_gen/video/auto_motion.pysprite_gen/video/batch.pysprite_gen/video/body_plan.pysprite_gen/video/body_turn.pysprite_gen/video/cadence.pysprite_gen/video/canvas.pysprite_gen/video/clip_prompt.pysprite_gen/video/compare.pysprite_gen/video/crossings.pysprite_gen/video/effect.pysprite_gen/video/evidence.pysprite_gen/video/face_bake.pysprite_gen/video/face_layer.pysprite_gen/video/face_pack.pysprite_gen/video/face_plan.mjssprite_gen/video/facing.pysprite_gen/video/follow.pysprite_gen/video/follow_inspect.pysprite_gen/video/frames.pysprite_gen/video/gait_fallback.pysprite_gen/video/held.pysprite_gen/video/held_fill.pysprite_gen/video/interpolation_quality.pysprite_gen/video/legs.pysprite_gen/video/local_cycle.pysprite_gen/video/loop.pysprite_gen/video/motion_anchor.pysprite_gen/video/nonloop.pysprite_gen/video/part_pop.pysprite_gen/video/parts.pysprite_gen/video/period.pysprite_gen/video/play.pysprite_gen/video/playback.pysprite_gen/video/prop_plate.pysprite_gen/video/repair.pysprite_gen/video/restoration.pysprite_gen/video/rife.pysprite_gen/video/rife_install.pysprite_gen/video/rife_torch.pysprite_gen/video/root_motion.pysprite_gen/video/set_sheet.pysprite_gen/video/source.pysprite_gen/video/sprite-gen-face-v1.mjssprite_gen/video/stop.pysprite_gen/video/sway.pysprite_gen/video/sway_inspect.pysprite_gen/video/wrap_blend.pysprite_gen/workflow/__init__.pysprite_gen/workflow/access.pysprite_gen/workflow/capabilities.pysprite_gen/workflow/catalog.pysprite_gen/workflow/guide.pysprite_gen/workflow/preferences.pytests/background/test_tile.pytests/background/test_tile_cli.pytests/compose/test_export_aseprite.pytests/conftest.pytests/curate/test_anchor_selection.pytests/curate/test_curation_salvage_and_clones.pytests/curate/test_directions.pytests/curate/test_frame_variant.pytests/curate/test_logical_height_contract.pytests/curate/test_pixel_snap.pytests/curate/test_pixel_unfake_migration.pytests/curate/test_snap_phase_policy.pytests/curate/test_transform_resample.pytests/docs/test_docs_index.pytests/docs/test_hero_assets.pytests/effects/test_breath_beat.pytests/effects/test_breathe.pytests/effects/test_breathe_anatomy_route.pytests/effects/test_breathe_js_mirror.pytests/effects/test_breathe_min_max.pytests/effects/test_breathe_off_state.pytests/effects/test_breathe_publish.pytests/effects/test_breathe_reference_key.pytests/effects/test_breathe_round.pytests/effects/test_breathe_round_curator.pytests/effects/test_breathe_sidecar_roundtrip.pytests/effects/test_breathe_smooth.pytests/effects/test_breathe_smooth_curator.pytests/effects/test_frame_interpolation.pytests/effects/test_palette_post_only.pytests/effects/test_recolor_bake.pytests/effects/test_recolor_docs.pytests/effects/test_shadow.pytests/fixtures/generate_fixtures.pytests/frames/test_alpha_centroid_align.pytests/frames/test_alpha_floor.pytests/frames/test_chroma_decontam.pytests/frames/test_chroma_key_relative.pytests/frames/test_cutout.pytests/frames/test_decontam_gold.pytests/frames/test_despill_full_tint_bar.pytests/frames/test_extract_perf_equivalence.pytests/frames/test_extraction_golden.pytests/frames/test_grid_record_exactness.pytests/frames/test_heal_async.pytests/frames/test_isolated_dots.pytests/frames/test_key_detect_banded.pytests/frames/test_keyed_resample.pytests/frames/test_logo_matte.pytests/frames/test_measured_matte.pytests/frames/test_pitch_ground_truth.pytests/frames/test_pitch_runlen_crosscheck.pytests/frames/test_posix_manifest_paths.pytests/frames/test_row_placement_align_y.pytests/frames/test_row_scale.pytests/frames/test_safe_area_fit.pytests/frames/test_segment_projection.pytests/frames/test_slice_sheet.pytests/frames/test_slice_sheet_scale.pytests/frames/test_slice_sheet_transparent.pytests/frames/test_sliver_guard.pytests/frames/test_takes_heal.pytests/frames/test_taxonomy_layout.pytests/frames/test_unpack_atlas_publish.pytests/gen/prepare_freeze_table.pytests/gen/prompt_freeze_table.pytests/gen/test_alpha_verdict.pytests/gen/test_anthropic_api.pytests/gen/test_body_plan_sheets.pytests/gen/test_chroma_extraction.pytests/gen/test_chroma_key_auto.pytests/gen/test_chroma_rcb_byte_identity.pytests/gen/test_chroma_soft_alpha.pytests/gen/test_chroma_ycbcr.pytests/gen/test_claude_login.pytests/gen/test_codex_login.pytests/gen/test_codex_rollout_resolution.pytests/gen/test_codex_unavailable.pytests/gen/test_facing.pytests/gen/test_flags_over_spec.pytests/gen/test_gen.pytests/gen/test_gen_set.pytests/gen/test_grok_provider.pytests/gen/test_handedness.pytests/gen/test_layout_guide.pytests/gen/test_logins_off.pytests/gen/test_logo.pytests/gen/test_openai_provider.pytests/gen/test_painted_checkerboard.pytests/gen/test_pixel_draw.pytests/gen/test_pixel_draw_frames.pytests/gen/test_pixel_effect.pytests/gen/test_pixel_gates.pytests/gen/test_pixel_grid.pytests/gen/test_prompt_assembly.pytests/gen/test_prompt_freeze.pytests/gen/test_provider_address.pytests/gen/test_refusal.pytests/gen/test_retry.pytests/gen/test_trim_alpha.pytests/gen/test_video.pytests/gen/test_video_facing.pytests/gen/test_video_modes.pytests/gen/test_vision_read.pytests/http_answer.pytests/keyed_figure.pytests/logo_lettering.pytests/packaging/test_cli_taxonomy.pytests/packaging/test_curation_asset_packaging.pytests/packaging/test_curation_cli_entrypoint.pytests/packaging/test_entrypoint_interpreter.pytests/packaging/test_numpy_dependency_gate.pytests/packaging/test_package_surface.pytests/packaging/test_pipeline_smoke.pytests/packaging/test_project_metadata.pytests/packaging/test_recolor_cli_entrypoint.pytests/packaging/test_version_ssot.pytests/picture_digest.pytests/qa/test_correction_loop_inputs_kept.pytests/qa/test_handed_check.pytests/qa/test_inspect_score_loop.pytests/qa/test_motion.pytests/release/test_fast_bundle.pytests/release/test_lane_rife_collection.pytests/release/test_release_notes.pytests/release/test_release_publish.pytests/release/test_rife_pins.pytests/release/test_t4_lane.pytests/scene/test_inspect_scene.pytests/scene/test_layer_resample.pytests/scene/test_model.pytests/scene/test_render.pytests/serve/test_curation_view_contract.pytests/serve/test_curator_pixel_scaling_ssot.pytests/serve/test_curator_single_display_pipeline.pytests/serve/test_curator_wire_keys.pytests/serve/test_pixel_grid_always_available.pytests/serve/test_recolor_curation_view.pytests/spec/test_assets.pytests/spec/test_migrate_breathe.pytests/spec/test_publish_rwlock_cross_process.pytests/spec/test_request_read_no_mutation.pytests/spec/test_request_retired_rig_keys.pytests/spec/test_request_write_isolation.pytests/spec/test_run_dir_lock.pytests/spec/test_runio_publish_set.pytests/talking_face.pytests/test_cli_kwargs.pytests/test_gif_report.pytests/test_hexcolor.pytests/test_lsq.pytests/test_prepare_layout_guides.pytests/test_subject_profile.pytests/util/test_console.pytests/util/test_gif_utils.pytests/video/held_fill_inputs.pytests/video/jump_inputs.pytests/video/test_attack_headroom.pytests/video/test_attack_motion.pytests/video/test_attack_return.pytests/video/test_auto_motion.pytests/video/test_auto_motion_opening.pytests/video/test_auto_motion_uncorrected.pytests/video/test_batch_bases.pytests/video/test_batch_facing.pytests/video/test_batch_handed.pytests/video/test_between_cache.pytests/video/test_body_anchor.pytests/video/test_body_anchor_gate.pytests/video/test_body_plan.pytests/video/test_canvas_key_normalize.pytests/video/test_canvas_trail.pytests/video/test_clip_prompt.pytests/video/test_crossfade.pytests/video/test_crossings.pytests/video/test_cycle_align.pytests/video/test_cycle_align_beat.pytests/video/test_cycle_align_foot.pytests/video/test_cycle_align_foot_margin.pytests/video/test_cycle_suspects.pytests/video/test_duration_window_oneshot.pytests/video/test_edge_border.pytests/video/test_edge_speck_lead_in.pytests/video/test_effect.pytests/video/test_explicit_window.pytests/video/test_face_layer.pytests/video/test_fit_tight.pytests/video/test_follow.pytests/video/test_follow_inspect.pytests/video/test_follow_read_on.pytests/video/test_follow_stretch_floor.pytests/video/test_frames_inputs_kept.pytests/video/test_gait_fallback.pytests/video/test_gait_fallback_resample.pytests/video/test_gait_guard_anchor_wide.pytests/video/test_gait_harmonic_ambiguity.pytests/video/test_gait_window_context.pytests/video/test_ghost_given_way.pytests/video/test_ghost_retake.pytests/video/test_ghost_screen.pytests/video/test_held_cut_restoration.pytests/video/test_held_drawings.pytests/video/test_held_fill.pytests/video/test_held_walk_seam.pytests/video/test_idle_still.pytests/video/test_inbetween_doubled.pytests/video/test_inbetween_hole.pytests/video/test_inbetween_seen_through.pytests/video/test_loop_body_turn.pytests/video/test_loop_compare.pytests/video/test_loop_ease.pytests/video/test_loop_flow.pytests/video/test_loop_half_step.pytests/video/test_loop_inputs_kept.pytests/video/test_loop_overlap.pytests/video/test_loop_part_pop.pytests/video/test_loop_prop_seam.pytests/video/test_loop_prop_seam_held.pytests/video/test_loop_repair.pytests/video/test_loop_sampling_and_wrap.pytests/video/test_loop_silent_pass.pytests/video/test_loop_two_lengths.pytests/video/test_motion_anchor.pytests/video/test_once.pytests/video/test_one_shot_moved.pytests/video/test_one_shot_refusal.pytests/video/test_one_step_cut.pytests/video/test_outline_shift.pytests/video/test_parts.pytests/video/test_play.pytests/video/test_prop_plate.pytests/video/test_rife.pytests/video/test_rife_cuts.pytests/video/test_rife_executor.pytests/video/test_rife_install.pytests/video/test_rife_models.pytests/video/test_rife_torch.pytests/video/test_rife_torch_v425.pytests/video/test_root_motion.pytests/video/test_screen_jump.pytests/video/test_seam_bridge.pytests/video/test_seam_pop_gate.pytests/video/test_set_sheet.pytests/video/test_source_restoration.pytests/video/test_spill_hue_evidence.pytests/video/test_spill_reference_window.pytests/video/test_stop.pytests/video/test_strip_resample.pytests/video/test_sway_band.pytests/video/test_sway_breath.pytests/video/test_sway_flat_across.pytests/video/test_sway_frames.pytests/video/test_sway_hold.pytests/video/test_sway_names.pytests/video/test_sway_read_on_recut.pytests/video/test_sway_region.pytests/video/test_sway_region_over.pytests/video/test_sway_seams.pytests/video/test_video_pipeline.pytests/video/test_video_spill.pytests/video/test_walk_canvas_room.pytests/video/test_walk_defaults.pytests/video/test_walk_steps.pytests/video/test_wrap_blend.pytests/workflow/test_capabilities.pytests/workflow/test_workflow.py
Files
.githooks/pre-commitruns3,353 bytes.github/FUNDING.ymlasset16 bytes.gitignoreasset606 bytes.gitleaks.tomlasset1,740 bytesCHANGELOG.mddoc752,495 bytesCONTRIBUTORS.mddoc2,808 bytesLICENSEasset10,776 bytesNOTICEasset3,155 bytesREADME.es.mddoc13,784 bytesREADME.fr.mddoc14,145 bytesREADME.ja.mddoc15,720 bytesREADME.ko.mddoc15,342 bytesREADME.mddoc15,410 bytesREADME.zh-Hans.mddoc12,474 bytesSECURITY.mddoc3,118 bytesSKILL.mdcore20,937 bytesSKILL.mdcore20,937 bytesSKILL.mdcore20,937 bytesSKILL.mdcore20,937 bytesSKILL.mdcore20,937 bytesSKILL.mdcore20,937 bytesdocs/README.mddoc9,846 bytesdocs/architecture.mddoc27,189 bytesdocs/asset-tools.mddoc8,809 bytesdocs/assets/attack-claudecy-samurai-onehand.gifasset954,034 bytesdocs/assets/attack-claudecy-samurai.gifasset1,134,272 bytesdocs/assets/attack-fox-hood.gifasset1,025,913 bytesdocs/assets/attack-paladin.gifasset884,976 bytesdocs/assets/attack-slime.gifasset736,876 bytesdocs/assets/breathe-editor.pngasset117,094 bytesdocs/assets/chroma-fullbody-illustration-green.pngasset179,797 bytesdocs/assets/chroma-fullbody-illustration-magenta.pngasset198,516 bytesdocs/assets/chroma-fullbody-pixelart-green.pngasset222,591 bytesdocs/assets/chroma-fullbody-pixelart-magenta.pngasset196,098 bytesdocs/assets/chroma-peel-illustration-before-after.pngasset27,150 bytesdocs/assets/chroma-peel-pixelart-before-after.pngasset21,036 bytesdocs/assets/curator-drag-update.gifasset3,342,069 bytesdocs/assets/curator-iso.pngasset299,115 bytesdocs/assets/cutout-demo.pngasset196,341 bytesdocs/assets/demo-character.gifasset2,669,159 bytesdocs/assets/demo-furniture.gifasset410,842 bytesdocs/assets/hero-v2-party.gifasset7,599,496 bytesdocs/assets/subject-effect-ember.gifasset7,154 bytesdocs/assets/subject-effect-sigil.gifasset6,455 bytesdocs/assets/subject-effect-venom.gifasset8,397 bytesdocs/assets/subject-effect-wisp.gifasset9,724 bytesdocs/assets/subject-effects-gallery.pngasset114,069 bytesdocs/assets/village-scene.gifasset28,196,903 bytesdocs/atlas-workflow.mddoc3,783 bytesdocs/breathing.mddoc53,396 bytesdocs/capabilities.mddoc4,057 bytesdocs/chroma-alpha.mddoc46,071 bytesdocs/curation.mddoc14,447 bytesdocs/directional-anchor-workflow.mddoc23,243 bytesdocs/effects.mddoc5,129 bytesdocs/engine-export.mddoc3,634 bytesdocs/face-parts.mddoc25,253 bytesdocs/frame-interpolation.mddoc5,131 bytesdocs/gen.mddoc27,550 bytesdocs/interpreter.mddoc4,537 bytesdocs/locomotion-curation.mddoc3,676 bytesdocs/logo.mddoc22,856 bytesdocs/loop-comparison.mddoc33,109 bytesdocs/loop-repair.mddoc360,553 bytesdocs/loop-review.mddoc26,946 bytesdocs/pixel-draw.mddoc38,463 bytesdocs/pixel-unfake.mddoc23,838 bytesdocs/prompt-assembly.mddoc8,492 bytesdocs/qa-motion.mddoc3,596 bytesdocs/recolor.mddoc10,190 bytesdocs/release.mddoc18,204 bytesdocs/rename-gate.mddoc2,454 bytesdocs/run-contract.mddoc57,918 bytesdocs/scene.mddoc8,691 bytesdocs/seamless-video-loop.mddoc5,630 bytesdocs/sheet-slicing.mddoc12,649 bytesdocs/states-and-frames.mddoc6,578 bytesdocs/subject-profiles.mddoc3,341 bytesdocs/troubleshooting.mddoc6,224 bytesdocs/user-workflow.mddoc6,410 bytesdocs/video-pipeline.mddoc177,321 bytesdocs/video.mddoc12,086 bytespyproject.tomlasset6,951 bytesscripts/compose_selected_cycle.pyruns481 bytesscripts/compose_sprite_atlas.pyruns481 bytesscripts/compose_sprite_gif.pyruns477 bytesscripts/curation.pyruns411 bytesscripts/dev/README.mddoc1,186 bytesscripts/dev/breathe_mutation_battery.pyruns15,591 bytesscripts/dev/check_visible_magenta.pyruns495 bytesscripts/dev/measure_align_sigma.pyruns4,788 bytesscripts/dev/source_restoration_demo.pyruns23,413 bytesscripts/diagnose_video_loop.pyruns8,014 bytesscripts/export_aseprite.pyruns484 bytesscripts/export_curated_pngs.pyruns477 bytesscripts/extract_sprite_row_frames.pyruns467 bytesscripts/gen_set.pyruns461 bytesscripts/generate_sprite_image.pyruns445 bytesscripts/generate_sprite_video.pyruns455 bytesscripts/inspect_sprite_run.pyruns459 bytesscripts/interpolate_frames.pyruns483 bytesscripts/linux_lane.shruns10,755 bytesscripts/prepare_sprite_run.pyruns461 bytesscripts/preview_animation.pyruns459 bytesscripts/recolor.pyruns469 bytesscripts/release_notes.pyruns9,567 bytesscripts/release_publish.pyruns10,381 bytesscripts/run_correction_loop.pyruns475 bytesscripts/score_sprite_run.pyruns455 bytesscripts/serve_curation.pyruns479 bytesscripts/slice_sheet_cells.pyruns475 bytesscripts/t4_lane.pyruns8,614 bytesscripts/unpack_atlas_run.pyruns477 bytesscripts/video_canvas.pyruns468 bytesscripts/video_frames.pyruns468 bytesscripts/video_loop.pyruns462 bytesscripts/video_set.pyruns463 bytessprite_gen/__init__.pyruns1,072 bytessprite_gen/_deps.pyruns2,797 bytessprite_gen/_modules.pyruns6,556 bytessprite_gen/background/__init__.pyruns100 bytessprite_gen/background/tile.pyruns15,896 bytessprite_gen/cli.pyruns26,266 bytessprite_gen/compose/__init__.pyruns38 bytessprite_gen/compose/compose_atlas.pyruns14,375 bytessprite_gen/compose/compose_cycle.pyruns8,162 bytessprite_gen/compose/compose_gif.pyruns12,854 bytessprite_gen/compose/export_aseprite.pyruns9,748 bytessprite_gen/compose/export_pngs.pyruns6,062 bytessprite_gen/curate/__init__.pyruns38 bytessprite_gen/curate/anchor.pyruns29,297 bytessprite_gen/curate/curation.pyruns81,966 bytessprite_gen/effects/__init__.pyruns38 bytessprite_gen/effects/anatomy.pyruns19,489 bytessprite_gen/effects/breath_beat.pyruns9,443 bytessprite_gen/effects/breathe.pyruns148,528 bytessprite_gen/effects/interpolate.pyruns15,094 bytessprite_gen/effects/recolor.pyruns19,367 bytessprite_gen/effects/reroll.pyruns7,313 bytessprite_gen/effects/shadow.pyruns11,852 bytessprite_gen/frames/__init__.pyruns38 bytessprite_gen/frames/alpha_floor.pyruns3,089 bytessprite_gen/frames/check_visible_magenta.pyruns2,873 bytessprite_gen/frames/cutout.pyruns26,699 bytessprite_gen/frames/decontam.pyruns51,452 bytessprite_gen/frames/extract.pyruns214,026 bytessprite_gen/frames/folder.pyruns6,882 bytessprite_gen/frames/logo_matte.pyruns32,749 bytessprite_gen/frames/measured_matte.pyruns14,400 bytessprite_gen/frames/segment.pyruns16,436 bytessprite_gen/frames/slice_sheet.pyruns20,985 bytessprite_gen/frames/unpack_atlas.pyruns34,502 bytessprite_gen/gen/__init__.pyruns44,855 bytessprite_gen/gen/address.pyruns4,298 bytessprite_gen/gen/anthropic_api.pyruns20,530 bytessprite_gen/gen/base.pyruns19,542 bytessprite_gen/gen/chroma.pyruns16,069 bytessprite_gen/gen/claude_login.pyruns12,947 bytessprite_gen/gen/codex_provider.pyruns23,585 bytessprite_gen/gen/facing.pyruns7,720 bytessprite_gen/gen/facing_vision.pyruns5,332 bytessprite_gen/gen/gen_set.pyruns15,166 bytessprite_gen/gen/grok_provider.pyruns9,855 bytessprite_gen/gen/handedness.pyruns13,785 bytessprite_gen/gen/logo.pyruns36,110 bytessprite_gen/gen/openai_provider.pyruns16,803 bytessprite_gen/gen/pixel_draw.pyruns76,877 bytessprite_gen/gen/pixel_gates.pyruns19,701 bytessprite_gen/gen/pixel_grid.pyruns28,308 bytessprite_gen/gen/prepare.pyruns61,693 bytessprite_gen/gen/prompt_parts.pyruns8,277 bytessprite_gen/gen/refusal.pyruns7,156 bytessprite_gen/gen/retry.pyruns10,769 bytessprite_gen/gen/video.pyruns57,353 bytessprite_gen/gen/xai.pyruns13,677 bytessprite_gen/qa/__init__.pyruns38 bytessprite_gen/qa/correction_loop.pyruns11,349 bytessprite_gen/qa/handed.pyruns26,127 bytessprite_gen/qa/inspect.pyruns17,172 bytessprite_gen/qa/motion.pyruns24,519 bytessprite_gen/qa/preview.pyruns5,963 bytessprite_gen/qa/score.pyruns6,593 bytessprite_gen/scene/__init__.pyruns124 bytessprite_gen/scene/inspect_scene.pyruns7,836 bytessprite_gen/scene/model.pyruns11,438 bytessprite_gen/scene/render.pyruns18,121 bytessprite_gen/serve/__init__.pyruns38 bytessprite_gen/serve/composer/composer.cssasset8,438 bytessprite_gen/serve/composer/index.htmlasset2,396 bytessprite_gen/serve/composer/src/api.jsruns2,377 bytessprite_gen/serve/composer/src/boot.jsruns1,351 bytessprite_gen/serve/composer/src/canvas.jsruns4,129 bytessprite_gen/serve/composer/src/controls.jsruns5,513 bytessprite_gen/serve/composer/src/i18n.jsruns2,973 bytessprite_gen/serve/composer/src/library.jsruns2,697 bytessprite_gen/serve/composer/src/session.jsruns1,786 bytessprite_gen/serve/composer/src/ui.jsruns2,114 bytessprite_gen/serve/curator/curator.cssasset61,584 bytessprite_gen/serve/curator/index.htmlasset3,268 bytessprite_gen/serve/curator/src/atlas.jsruns7,428 bytessprite_gen/serve/curator/src/base-editor.jsruns4,322 bytessprite_gen/serve/curator/src/boot.jsruns10,808 bytessprite_gen/serve/curator/src/breathe.jsruns38,095 bytessprite_gen/serve/curator/src/cards.jsruns29,543 bytessprite_gen/serve/curator/src/chrome.jsruns2,553 bytessprite_gen/serve/curator/src/compare.jsruns28,238 bytessprite_gen/serve/curator/src/display.jsruns24,872 bytessprite_gen/serve/curator/src/gen-trigger.jsruns2,700 bytessprite_gen/serve/curator/src/i18n.jsruns38,380 bytessprite_gen/serve/curator/src/lasso-select.jsruns6,716 bytessprite_gen/serve/curator/src/persistence.jsruns9,057 bytessprite_gen/serve/curator/src/pipeline-tree.jsruns17,457 bytessprite_gen/serve/curator/src/progress.jsruns3,477 bytessprite_gen/serve/curator/src/recolor.jsruns7,665 bytessprite_gen/serve/curator/src/region-transform.jsruns11,480 bytessprite_gen/serve/curator/src/row-controls.jsruns5,474 bytessprite_gen/serve/curator/src/row-export.jsruns5,722 bytessprite_gen/serve/curator/src/status.jsruns361 bytessprite_gen/serve/curator/src/store.jsruns42,443 bytessprite_gen/serve/curator/src/tooltip.jsruns3,611 bytessprite_gen/serve/curator/src/transform-provider.jsruns6,160 bytessprite_gen/serve/curator/src/transforms.jsruns15,622 bytessprite_gen/serve/curator/src/tween.jsruns4,460 bytessprite_gen/serve/curator/src/util.jsruns1,500 bytessprite_gen/serve/curator/src/view-nav.jsruns6,877 bytessprite_gen/serve/curator/src/zones.jsruns18,927 bytessprite_gen/serve/curator/src/zoom-editor.jsruns76,575 bytessprite_gen/serve/serve_compose.pyruns21,134 bytessprite_gen/serve/serve_curation.pyruns94,771 bytessprite_gen/spec/__init__.pyruns38 bytessprite_gen/spec/assets.pyruns16,878 bytessprite_gen/spec/layout.pyruns4,805 bytessprite_gen/spec/migrate_breathe.pyruns8,056 bytessprite_gen/spec/migrate_request.pyruns4,347 bytessprite_gen/spec/runio.pyruns63,134 bytessprite_gen/spec/subject.pyruns3,482 bytessprite_gen/util/__init__.pyruns38 bytessprite_gen/util/cli_kwargs.pyruns1,491 bytessprite_gen/util/console.pyruns1,306 bytessprite_gen/util/gif_utils.pyruns4,587 bytessprite_gen/util/hexcolor.pyruns1,425 bytessprite_gen/util/lsq.pyruns1,247 bytessprite_gen/util/resample.pyruns7,006 bytessprite_gen/video/__init__.pyruns828 bytessprite_gen/video/align.pyruns111,271 bytessprite_gen/video/auto_motion.pyruns15,755 bytessprite_gen/video/batch.pyruns104,012 bytessprite_gen/video/body_plan.pyruns6,128 bytessprite_gen/video/body_turn.pyruns32,071 bytessprite_gen/video/cadence.pyruns21,275 bytessprite_gen/video/canvas.pyruns28,248 bytessprite_gen/video/clip_prompt.pyruns12,428 bytessprite_gen/video/compare.pyruns18,178 bytessprite_gen/video/crossings.pyruns26,648 bytessprite_gen/video/effect.pyruns5,105 bytessprite_gen/video/evidence.pyruns2,305 bytessprite_gen/video/face_bake.pyruns16,085 bytessprite_gen/video/face_layer.pyruns42,156 bytessprite_gen/video/face_pack.pyruns28,376 bytessprite_gen/video/face_plan.mjsruns1,078 bytessprite_gen/video/facing.pyruns2,252 bytessprite_gen/video/follow.pyruns1,600 bytessprite_gen/video/follow_inspect.pyruns1,113 bytessprite_gen/video/frames.pyruns48,961 bytessprite_gen/video/gait_fallback.pyruns27,609 bytessprite_gen/video/held.pyruns8,233 bytessprite_gen/video/held_fill.pyruns22,303 bytessprite_gen/video/interpolation_quality.pyruns8,322 bytessprite_gen/video/legs.pyruns19,798 bytessprite_gen/video/local_cycle.pyruns105,914 bytessprite_gen/video/loop.pyruns246,080 bytessprite_gen/video/motion_anchor.pyruns12,016 bytessprite_gen/video/nonloop.pyruns13,595 bytessprite_gen/video/part_pop.pyruns20,487 bytessprite_gen/video/parts.pyruns28,943 bytessprite_gen/video/period.pyruns16,218 bytessprite_gen/video/play.pyruns2,982 bytessprite_gen/video/playback.pyruns4,480 bytessprite_gen/video/prop_plate.pyruns6,574 bytessprite_gen/video/repair.pyruns109,907 bytessprite_gen/video/restoration.pyruns38,972 bytessprite_gen/video/rife.pyruns104,556 bytessprite_gen/video/rife_install.pyruns14,415 bytessprite_gen/video/rife_torch.pyruns29,756 bytessprite_gen/video/root_motion.pyruns19,464 bytessprite_gen/video/set_sheet.pyruns15,586 bytessprite_gen/video/source.pyruns17,731 bytessprite_gen/video/sprite-gen-face-v1.mjsruns18,232 bytessprite_gen/video/stop.pyruns34,043 bytessprite_gen/video/sway.pyruns272,343 bytessprite_gen/video/sway_inspect.pyruns26,483 bytessprite_gen/video/wrap_blend.pyruns18,471 bytessprite_gen/workflow/__init__.pyruns122 bytessprite_gen/workflow/access.pyruns3,161 bytessprite_gen/workflow/capabilities.pyruns6,957 bytessprite_gen/workflow/catalog.pyruns4,714 bytessprite_gen/workflow/guide.pyruns7,079 bytessprite_gen/workflow/preferences.pyruns5,441 bytestests/background/test_tile.pyruns9,596 bytestests/background/test_tile_cli.pyruns6,395 bytestests/compose/test_export_aseprite.pyruns5,049 bytestests/conftest.pyruns15,204 bytestests/curate/test_anchor_selection.pyruns36,693 bytestests/curate/test_curation_salvage_and_clones.pyruns10,040 bytestests/curate/test_directions.pyruns5,512 bytestests/curate/test_frame_variant.pyruns4,224 bytestests/curate/test_logical_height_contract.pyruns8,748 bytestests/curate/test_pixel_snap.pyruns16,255 bytestests/curate/test_pixel_unfake_migration.pyruns16,038 bytestests/curate/test_snap_phase_policy.pyruns4,761 bytestests/curate/test_transform_resample.pyruns2,492 bytestests/docs/test_docs_index.pyruns2,376 bytestests/docs/test_hero_assets.pyruns1,037 bytestests/effects/test_breath_beat.pyruns8,734 bytestests/effects/test_breathe.pyruns52,162 bytestests/effects/test_breathe_anatomy_route.pyruns18,127 bytestests/effects/test_breathe_js_mirror.pyruns31,067 bytestests/effects/test_breathe_min_max.pyruns19,463 bytestests/effects/test_breathe_off_state.pyruns47,945 bytestests/effects/test_breathe_publish.pyruns7,698 bytestests/effects/test_breathe_reference_key.pyruns35,487 bytestests/effects/test_breathe_round.pyruns45,293 bytestests/effects/test_breathe_round_curator.pyruns5,823 bytestests/effects/test_breathe_sidecar_roundtrip.pyruns17,722 bytestests/effects/test_breathe_smooth.pyruns49,710 bytestests/effects/test_breathe_smooth_curator.pyruns6,858 bytestests/effects/test_frame_interpolation.pyruns6,550 bytestests/effects/test_palette_post_only.pyruns4,482 bytestests/effects/test_recolor_bake.pyruns7,291 bytestests/effects/test_recolor_docs.pyruns3,202 bytestests/effects/test_shadow.pyruns16,834 bytestests/fixtures/expected-frames-manifest.jsonasset2,689 bytestests/fixtures/expected-fused-frames-manifest.jsonasset2,127 bytestests/fixtures/facing/front.pngasset284 bytestests/fixtures/facing/left.pngasset293 bytestests/fixtures/facing/right.pngasset290 bytestests/fixtures/generate_fixtures.pyruns4,004 bytestests/fixtures/moe/moe_green.pngasset31,791 bytestests/fixtures/moe/moe_heart.pngasset30,170 bytestests/fixtures/moe/moe_mirror.pngasset29,903 bytestests/fixtures/moe/moe_red.pngasset32,336 bytestests/fixtures/pixel_draw/attack-32-margin-detail.txtdoc4,469 bytestests/fixtures/pixel_draw/attack-32-safe-area-pass.txtdoc4,459 bytestests/fixtures/pixel_draw/fourdir-16-pass.txtdoc1,290 bytestests/fixtures/pixel_draw/fourdir-16-unknown-symbol.repair.txtdoc26 bytestests/fixtures/pixel_draw/fourdir-16-unknown-symbol.txtdoc1,311 bytestests/fixtures/pixel_draw/icon-16-json-pass.txtdoc750 bytestests/fixtures/pixel_draw/icon-32-pass.txtdoc1,226 bytestests/fixtures/pixel_draw/icon-32-row-width.repair.txtdoc45 bytestests/fixtures/pixel_draw/icon-32-row-width.txtdoc1,217 bytestests/fixtures/pixel_draw/icon-32-space-in-row.repair.txtdoc413 bytestests/fixtures/pixel_draw/icon-32-space-in-row.txtdoc2,453 bytestests/fixtures/pixel_draw/pick-verdict.jsonasset513 bytestests/fixtures/pixel_draw/sprite-16-pass.txtdoc453 bytestests/fixtures/pixel_draw/sprite-16-safe-area-pass.txtdoc474 bytestests/fixtures/pixel_draw/sprite-32-frame-header-missing.txtdoc1,235 bytestests/fixtures/pixel_draw/tile-16-pass.txtdoc362 bytestests/fixtures/pixel_draw/tile-32-truncated.repair.txtdoc782 bytestests/fixtures/pixel_draw/tile-32-truncated.txtdoc621 bytestests/fixtures/pixel_draw/walk-16-pass.txtdoc1,295 bytestests/fixtures/pixel_draw/walk-32-safe-area-pass.txtdoc4,441 bytestests/fixtures/prepare-rows-v2.32.0.json.gzasset7,953 bytestests/fixtures/prompts-v2.22.0.json.gzasset103,720 bytestests/fixtures/rife-cuts/cuts.jsonasset21,200 bytestests/fixtures/rife-cuts/knight-walk/00.webpasset161,784 bytestests/fixtures/rife-cuts/knight-walk/01.webpasset178,596 bytestests/fixtures/rife-cuts/knight-walk/02.webpasset176,568 bytestests/fixtures/rife-cuts/knight-walk/03.webpasset182,656 bytestests/fixtures/rife-cuts/knight-walk/04.webpasset179,162 bytestests/fixtures/rife-cuts/knight-walk/05.webpasset193,976 bytestests/fixtures/rife-cuts/knight-walk/06.webpasset191,226 bytestests/fixtures/rife-cuts/knight-walk/07.webpasset188,144 bytestests/fixtures/rife-cuts/knight-walk/08.webpasset186,274 bytestests/fixtures/rife-cuts/knight-walk/09.webpasset184,168 bytestests/fixtures/rife-cuts/knight-walk/10.webpasset181,666 bytestests/fixtures/rife-cuts/knight-walk/11.webpasset165,430 bytestests/fixtures/rife-cuts/knight-walk/12.webpasset162,884 bytestests/fixtures/rife-cuts/knight-walk/13.webpasset169,042 bytestests/fixtures/rife-cuts/knight-walk/14.webpasset167,430 bytestests/fixtures/rife-cuts/knight-walk/15.webpasset168,048 bytestests/fixtures/rife-cuts/knight-walk/16.webpasset166,800 bytestests/fixtures/rife-cuts/knight-walk/17.webpasset176,238 bytestests/fixtures/rife-cuts/knight-walk/18.webpasset175,732 bytestests/fixtures/rife-cuts/knight-walk/19.webpasset174,526 bytestests/fixtures/rife-cuts/knight-walk/20.webpasset174,474 bytestests/fixtures/rife-cuts/knight-walk/21.webpasset174,762 bytestests/fixtures/rife-cuts/knight-walk/22.webpasset174,182 bytestests/fixtures/rife-cuts/knight-walk/23.webpasset165,572 bytestests/fixtures/rife-cuts/knight-walk/24.webpasset165,904 bytestests/fixtures/rife-cuts/knight-walk/25.webpasset164,196 bytestests/fixtures/rife-cuts/pip-jump/00.webpasset100,776 bytestests/fixtures/rife-cuts/pip-jump/01.webpasset99,934 bytestests/fixtures/rife-cuts/pip-jump/02.webpasset110,336 bytestests/fixtures/rife-cuts/pip-jump/03.webpasset112,750 bytestests/fixtures/rife-cuts/pip-jump/04.webpasset114,674 bytestests/fixtures/rife-cuts/pip-jump/05.webpasset113,162 bytestests/fixtures/rife-cuts/pip-jump/06.webpasset122,160 bytestests/fixtures/rife-cuts/pip-jump/07.webpasset122,184 bytestests/fixtures/rife-cuts/pip-jump/08.webpasset116,634 bytestests/fixtures/rife-cuts/pip-jump/09.webpasset122,292 bytestests/fixtures/rife-cuts/pip-jump/10.webpasset116,106 bytestests/fixtures/rife-cuts/pip-jump/11.webpasset117,016 bytestests/fixtures/rife-cuts/pip-jump/12.webpasset110,950 bytestests/fixtures/rife-cuts/pip-jump/13.webpasset107,430 bytestests/fixtures/rife-cuts/pip-jump/14.webpasset98,540 bytestests/fixtures/rife-cuts/pip-jump/15.webpasset99,744 bytestests/fixtures/rife-cuts/pip-jump/16.webpasset97,426 bytestests/fixtures/rife-cuts/pip-jump/17.webpasset97,284 bytestests/fixtures/rife-cuts/pip-jump/18.webpasset97,728 bytestests/fixtures/rife-cuts/pip-jump/19.webpasset102,808 bytestests/fixtures/rife-cuts/pip-jump/20.webpasset103,580 bytestests/fixtures/rife-cuts/pip-jump/21.webpasset105,240 bytestests/fixtures/rife-cuts/pip-jump/22.webpasset108,832 bytestests/fixtures/rife-cuts/pip-jump/23.webpasset106,252 bytestests/fixtures/rife-cuts/pip-jump/24.webpasset109,288 bytestests/fixtures/rife-cuts/pip-jump/25.webpasset100,404 bytestests/fixtures/rife-cuts/pip-jump/26.webpasset99,596 bytestests/fixtures/rife-cuts/pip-jump/27.webpasset92,630 bytestests/fixtures/rife-cuts/pip-jump/28.webpasset94,778 bytestests/fixtures/rife-cuts/pip-run/00.webpasset156,012 bytestests/fixtures/rife-cuts/pip-run/01.webpasset155,024 bytestests/fixtures/rife-cuts/pip-run/02.webpasset169,242 bytestests/fixtures/rife-cuts/pip-run/03.webpasset174,196 bytestests/fixtures/rife-cuts/pip-run/04.webpasset171,908 bytestests/fixtures/rife-cuts/pip-run/05.webpasset180,470 bytestests/fixtures/rife-cuts/pip-run/06.webpasset186,796 bytestests/fixtures/rife-cuts/pip-run/07.webpasset192,878 bytestests/fixtures/rife-cuts/pip-run/08.webpasset185,832 bytestests/fixtures/rife-cuts/pip-run/09.webpasset190,168 bytestests/fixtures/rife-cuts/pip-run/10.webpasset183,946 bytestests/fixtures/rife-cuts/pip-run/11.webpasset171,820 bytestests/fixtures/rife-cuts/pip-run/12.webpasset158,644 bytestests/fixtures/rife-cuts/pip-run/13.webpasset149,126 bytestests/fixtures/rife-cuts/pip-run/14.webpasset153,530 bytestests/fixtures/rife-cuts/pip-run/15.webpasset163,514 bytestests/fixtures/rife-cuts/pip-run/16.webpasset159,786 bytestests/fixtures/rife-cuts/pip-run/17.webpasset174,568 bytestests/fixtures/rife-cuts/pip-run/18.webpasset178,278 bytestests/fixtures/rife-cuts/pip-run/19.webpasset185,658 bytestests/fixtures/rife-cuts/pip-run/20.webpasset179,756 bytestests/fixtures/rife-cuts/pip-run/21.webpasset190,342 bytestests/fixtures/rife-cuts/pip-run/22.webpasset181,454 bytestests/fixtures/rife-cuts/pip-run/23.webpasset178,002 bytestests/fixtures/rife-cuts/pip-run/24.webpasset170,092 bytestests/fixtures/rife-cuts/pip-run/25.webpasset159,726 bytestests/fixtures/rife-walkers/bfar33.a.pngasset2,752 bytestests/fixtures/rife-walkers/bfar33.b.pngasset2,194 bytestests/fixtures/rife-walkers/bfar33.ncnn.pngasset21,182 bytestests/fixtures/rife-walkers/bfar50.a.pngasset2,752 bytestests/fixtures/rife-walkers/bfar50.b.pngasset2,194 bytestests/fixtures/rife-walkers/bfar50.ncnn.pngasset22,769 bytestests/fixtures/rife-walkers/bnear50.a.pngasset2,326 bytestests/fixtures/rife-walkers/bnear50.b.pngasset2,150 bytestests/fixtures/rife-walkers/bnear50.ncnn.pngasset11,349 bytestests/fixtures/rife-walkers/cross50.a.pngasset974 bytestests/fixtures/rife-walkers/cross50.b.pngasset920 bytestests/fixtures/rife-walkers/cross50.ncnn.pngasset5,262 bytestests/fixtures/rife-walkers/far50.a.pngasset1,131 bytestests/fixtures/rife-walkers/far50.b.pngasset920 bytestests/fixtures/rife-walkers/far50.ncnn.pngasset6,996 bytestests/fixtures/rife-walkers/mid50.a.pngasset1,131 bytestests/fixtures/rife-walkers/mid50.b.pngasset974 bytestests/fixtures/rife-walkers/mid50.ncnn.pngasset6,024 bytestests/fixtures/rife-walkers/near25.a.pngasset995 bytestests/fixtures/rife-walkers/near25.b.pngasset925 bytestests/fixtures/rife-walkers/near25.ncnn.pngasset4,333 bytestests/fixtures/rife-walkers/walkers.jsonasset6,845 bytestests/fixtures/run-fused/raw/kick.pngasset518 bytestests/fixtures/run-fused/raw/pair.pngasset358 bytestests/fixtures/run-fused/sprite-request.jsonasset992 bytestests/fixtures/run/raw/idle.pngasset706 bytestests/fixtures/run/raw/walk.pngasset453 bytestests/fixtures/run/sprite-request.jsonasset847 bytestests/frames/test_alpha_centroid_align.pyruns3,962 bytestests/frames/test_alpha_floor.pyruns4,976 bytestests/frames/test_chroma_decontam.pyruns53,370 bytestests/frames/test_chroma_key_relative.pyruns50,094 bytestests/frames/test_cutout.pyruns7,277 bytestests/frames/test_decontam_gold.pyruns7,638 bytestests/frames/test_despill_full_tint_bar.pyruns3,452 bytestests/frames/test_extract_perf_equivalence.pyruns13,693 bytestests/frames/test_extraction_golden.pyruns2,470 bytestests/frames/test_grid_record_exactness.pyruns7,163 bytestests/frames/test_heal_async.pyruns6,006 bytestests/frames/test_isolated_dots.pyruns4,088 bytestests/frames/test_key_detect_banded.pyruns7,730 bytestests/frames/test_keyed_resample.pyruns5,151 bytestests/frames/test_logo_matte.pyruns16,935 bytestests/frames/test_measured_matte.pyruns7,314 bytestests/frames/test_pitch_ground_truth.pyruns12,713 bytestests/frames/test_pitch_runlen_crosscheck.pyruns9,103 bytestests/frames/test_posix_manifest_paths.pyruns1,068 bytestests/frames/test_row_placement_align_y.pyruns2,179 bytestests/frames/test_row_scale.pyruns3,670 bytestests/frames/test_safe_area_fit.pyruns6,848 bytestests/frames/test_segment_projection.pyruns7,401 bytestests/frames/test_slice_sheet.pyruns3,569 bytestests/frames/test_slice_sheet_scale.pyruns8,887 bytestests/frames/test_slice_sheet_transparent.pyruns2,982 bytestests/frames/test_sliver_guard.pyruns3,865 bytestests/frames/test_takes_heal.pyruns12,368 bytestests/frames/test_taxonomy_layout.pyruns3,992 bytestests/frames/test_unpack_atlas_publish.pyruns30,691 bytestests/gen/prepare_freeze_table.pyruns4,163 bytestests/gen/prompt_freeze_table.pyruns12,278 bytestests/gen/test_alpha_verdict.pyruns4,095 bytestests/gen/test_anthropic_api.pyruns15,518 bytestests/gen/test_body_plan_sheets.pyruns9,957 bytestests/gen/test_chroma_extraction.pyruns12,444 bytestests/gen/test_chroma_key_auto.pyruns8,775 bytestests/gen/test_chroma_rcb_byte_identity.pyruns75,211 bytestests/gen/test_chroma_soft_alpha.pyruns9,019 bytestests/gen/test_chroma_ycbcr.pyruns8,770 bytestests/gen/test_claude_login.pyruns11,556 bytestests/gen/test_codex_login.pyruns6,085 bytestests/gen/test_codex_rollout_resolution.pyruns6,361 bytestests/gen/test_codex_unavailable.pyruns22,481 bytestests/gen/test_facing.pyruns16,417 bytestests/gen/test_flags_over_spec.pyruns7,394 bytestests/gen/test_gen.pyruns46,555 bytestests/gen/test_gen_set.pyruns11,615 bytestests/gen/test_grok_provider.pyruns21,490 bytestests/gen/test_handedness.pyruns17,330 bytestests/gen/test_layout_guide.pyruns5,701 bytestests/gen/test_logins_off.pyruns7,612 bytestests/gen/test_logo.pyruns30,281 bytestests/gen/test_openai_provider.pyruns29,350 bytestests/gen/test_painted_checkerboard.pyruns6,348 bytestests/gen/test_pixel_draw.pyruns43,123 bytestests/gen/test_pixel_draw_frames.pyruns23,221 bytestests/gen/test_pixel_effect.pyruns3,007 bytestests/gen/test_pixel_gates.pyruns19,230 bytestests/gen/test_pixel_grid.pyruns16,176 bytestests/gen/test_prompt_assembly.pyruns16,862 bytestests/gen/test_prompt_freeze.pyruns8,653 bytestests/gen/test_provider_address.pyruns16,839 bytestests/gen/test_refusal.pyruns6,510 bytestests/gen/test_retry.pyruns18,605 bytestests/gen/test_trim_alpha.pyruns1,437 bytestests/gen/test_video.pyruns88,442 bytestests/gen/test_video_facing.pyruns6,095 bytestests/gen/test_video_modes.pyruns22,349 bytestests/gen/test_vision_read.pyruns5,634 bytestests/http_answer.pyruns1,463 bytestests/keyed_figure.pyruns5,643 bytestests/logo_lettering.pyruns10,350 bytestests/packaging/test_cli_taxonomy.pyruns3,342 bytestests/packaging/test_curation_asset_packaging.pyruns8,449 bytestests/packaging/test_curation_cli_entrypoint.pyruns2,871 bytestests/packaging/test_entrypoint_interpreter.pyruns4,147 bytestests/packaging/test_numpy_dependency_gate.pyruns9,481 bytestests/packaging/test_package_surface.pyruns6,058 bytestests/packaging/test_pipeline_smoke.pyruns27,276 bytestests/packaging/test_project_metadata.pyruns2,013 bytestests/packaging/test_recolor_cli_entrypoint.pyruns1,712 bytestests/packaging/test_version_ssot.pyruns840 bytestests/picture_digest.pyruns1,358 bytestests/qa/test_correction_loop_inputs_kept.pyruns11,050 bytestests/qa/test_handed_check.pyruns13,485 bytestests/qa/test_inspect_score_loop.pyruns5,498 bytestests/qa/test_motion.pyruns16,998 bytestests/release/test_fast_bundle.pyruns2,572 bytestests/release/test_lane_rife_collection.pyruns8,034 bytestests/release/test_release_notes.pyruns10,730 bytestests/release/test_release_publish.pyruns10,123 bytestests/release/test_rife_pins.pyruns1,894 bytestests/release/test_t4_lane.pyruns1,153 bytestests/scene/test_inspect_scene.pyruns11,062 bytestests/scene/test_layer_resample.pyruns1,714 bytestests/scene/test_model.pyruns15,289 bytestests/scene/test_render.pyruns16,940 bytestests/serve/test_curation_view_contract.pyruns34,376 bytestests/serve/test_curator_pixel_scaling_ssot.pyruns14,195 bytestests/serve/test_curator_single_display_pipeline.pyruns7,159 bytestests/serve/test_curator_wire_keys.pyruns18,504 bytestests/serve/test_pixel_grid_always_available.pyruns5,582 bytestests/serve/test_recolor_curation_view.pyruns11,531 bytestests/spec/test_assets.pyruns16,344 bytestests/spec/test_migrate_breathe.pyruns5,641 bytestests/spec/test_publish_rwlock_cross_process.pyruns3,546 bytestests/spec/test_request_read_no_mutation.pyruns8,348 bytestests/spec/test_request_retired_rig_keys.pyruns5,019 bytestests/spec/test_request_write_isolation.pyruns11,907 bytestests/spec/test_run_dir_lock.pyruns63,320 bytestests/spec/test_runio_publish_set.pyruns2,293 bytestests/talking_face.pyruns11,361 bytestests/test_cli_kwargs.pyruns5,772 bytestests/test_gif_report.pyruns1,030 bytestests/test_hexcolor.pyruns3,616 bytestests/test_lsq.pyruns1,164 bytestests/test_prepare_layout_guides.pyruns2,719 bytestests/test_subject_profile.pyruns8,965 bytestests/util/test_console.pyruns2,631 bytestests/util/test_gif_utils.pyruns3,065 bytestests/video/held_fill_inputs.pyruns5,694 bytestests/video/jump_inputs.pyruns3,908 bytestests/video/test_attack_headroom.pyruns4,778 bytestests/video/test_attack_motion.pyruns7,914 bytestests/video/test_attack_return.pyruns4,676 bytestests/video/test_auto_motion.pyruns9,917 bytestests/video/test_auto_motion_opening.pyruns4,422 bytestests/video/test_auto_motion_uncorrected.pyruns4,301 bytestests/video/test_batch_bases.pyruns1,082 bytestests/video/test_batch_facing.pyruns6,406 bytestests/video/test_batch_handed.pyruns8,259 bytestests/video/test_between_cache.pyruns20,991 bytestests/video/test_body_anchor.pyruns3,494 bytestests/video/test_body_anchor_gate.pyruns11,788 bytestests/video/test_body_plan.pyruns22,381 bytestests/video/test_canvas_key_normalize.pyruns9,127 bytestests/video/test_canvas_trail.pyruns2,304 bytestests/video/test_clip_prompt.pyruns13,049 bytestests/video/test_crossfade.pyruns13,310 bytestests/video/test_crossings.pyruns13,393 bytestests/video/test_cycle_align.pyruns34,278 bytestests/video/test_cycle_align_beat.pyruns25,626 bytestests/video/test_cycle_align_foot.pyruns12,231 bytestests/video/test_cycle_align_foot_margin.pyruns3,230 bytestests/video/test_cycle_suspects.pyruns25,601 bytestests/video/test_duration_window_oneshot.pyruns6,589 bytestests/video/test_edge_border.pyruns20,742 bytestests/video/test_edge_speck_lead_in.pyruns22,294 bytestests/video/test_effect.pyruns10,664 bytestests/video/test_explicit_window.pyruns7,713 bytestests/video/test_face_layer.pyruns32,861 bytestests/video/test_fit_tight.pyruns12,240 bytestests/video/test_follow.pyruns31,760 bytestests/video/test_follow_inspect.pyruns31,417 bytestests/video/test_follow_read_on.pyruns22,738 bytestests/video/test_follow_stretch_floor.pyruns11,969 bytestests/video/test_frames_inputs_kept.pyruns5,838 bytestests/video/test_gait_fallback.pyruns32,856 bytestests/video/test_gait_fallback_resample.pyruns1,898 bytestests/video/test_gait_guard_anchor_wide.pyruns18,581 bytestests/video/test_gait_harmonic_ambiguity.pyruns2,288 bytestests/video/test_gait_window_context.pyruns2,899 bytestests/video/test_ghost_given_way.pyruns28,132 bytestests/video/test_ghost_retake.pyruns13,376 bytestests/video/test_ghost_screen.pyruns11,610 bytestests/video/test_held_cut_restoration.pyruns12,281 bytestests/video/test_held_drawings.pyruns18,329 bytestests/video/test_held_fill.pyruns39,936 bytestests/video/test_held_walk_seam.pyruns10,681 bytestests/video/test_idle_still.pyruns5,166 bytestests/video/test_inbetween_doubled.pyruns17,403 bytestests/video/test_inbetween_hole.pyruns46,260 bytestests/video/test_inbetween_seen_through.pyruns4,208 bytestests/video/test_loop_body_turn.pyruns68,932 bytestests/video/test_loop_compare.pyruns8,786 bytestests/video/test_loop_ease.pyruns29,173 bytestests/video/test_loop_flow.pyruns14,803 bytestests/video/test_loop_half_step.pyruns5,479 bytestests/video/test_loop_inputs_kept.pyruns10,911 bytestests/video/test_loop_overlap.pyruns31,220 bytestests/video/test_loop_part_pop.pyruns20,447 bytestests/video/test_loop_prop_seam.pyruns15,183 bytestests/video/test_loop_prop_seam_held.pyruns26,969 bytestests/video/test_loop_repair.pyruns20,349 bytestests/video/test_loop_sampling_and_wrap.pyruns3,228 bytestests/video/test_loop_silent_pass.pyruns18,210 bytestests/video/test_loop_two_lengths.pyruns4,994 bytestests/video/test_motion_anchor.pyruns13,734 bytestests/video/test_once.pyruns9,506 bytestests/video/test_one_shot_moved.pyruns4,070 bytestests/video/test_one_shot_refusal.pyruns9,044 bytestests/video/test_one_step_cut.pyruns18,648 bytestests/video/test_outline_shift.pyruns11,788 bytestests/video/test_parts.pyruns25,036 bytestests/video/test_play.pyruns18,394 bytestests/video/test_prop_plate.pyruns15,884 bytestests/video/test_rife.pyruns20,192 bytestests/video/test_rife_cuts.pyruns9,630 bytestests/video/test_rife_executor.pyruns39,859 bytestests/video/test_rife_install.pyruns12,335 bytestests/video/test_rife_models.pyruns11,161 bytestests/video/test_rife_torch.pyruns31,724 bytestests/video/test_rife_torch_v425.pyruns6,027 bytestests/video/test_root_motion.pyruns21,725 bytestests/video/test_screen_jump.pyruns7,846 bytestests/video/test_seam_bridge.pyruns18,793 bytestests/video/test_seam_pop_gate.pyruns18,325 bytestests/video/test_set_sheet.pyruns16,407 bytestests/video/test_source_restoration.pyruns57,685 bytestests/video/test_spill_hue_evidence.pyruns4,698 bytestests/video/test_spill_reference_window.pyruns9,802 bytestests/video/test_stop.pyruns18,627 bytestests/video/test_strip_resample.pyruns6,526 bytestests/video/test_sway_band.pyruns27,171 bytestests/video/test_sway_breath.pyruns21,648 bytestests/video/test_sway_flat_across.pyruns6,118 bytestests/video/test_sway_frames.pyruns8,671 bytestests/video/test_sway_hold.pyruns20,885 bytestests/video/test_sway_names.pyruns6,011 bytestests/video/test_sway_read_on_recut.pyruns53,198 bytestests/video/test_sway_region.pyruns35,684 bytestests/video/test_sway_region_over.pyruns57,578 bytestests/video/test_sway_seams.pyruns2,737 bytestests/video/test_video_pipeline.pyruns25,944 bytestests/video/test_video_spill.pyruns5,530 bytestests/video/test_walk_canvas_room.pyruns11,061 bytestests/video/test_walk_defaults.pyruns4,740 bytestests/video/test_walk_steps.pyruns152,928 bytestests/video/test_wrap_blend.pyruns31,582 bytestests/workflow/test_capabilities.pyruns9,351 bytestests/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 spriteView the complete source on GitHubSkills 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
- #384 on Oct 29
- #385 on Oct 30
- #384 from Oct 31 to Nov 3
- #382 on Nov 4
- #356 on Nov 5
- #328 since Nov 6
77 earlier periods
- #755 on Aug 2
- #721 from Aug 7 to Aug 8
- #719 on Aug 9
- #743 on Aug 10
- #739 on Aug 11
- #740 on Aug 12
- #731 on Aug 13
- #723 on Aug 14
- #694 on Aug 15
- #718 on Aug 16
- #723 on Aug 17
- #731 on Aug 18
- #712 on Aug 19
- #709 on Aug 20
- #682 on Aug 22
- #714 on Aug 23
- #736 on Aug 24
- #745 on Aug 25
- #724 on Aug 26
- #735 on Aug 27
- #756 on Aug 28
- #693 on Aug 29
- #694 on Aug 30
- #731 on Aug 31
- #743 on Sep 1
- #730 on Sep 2
- #733 on Sep 3
- #708 on Sep 4
- #694 on Sep 5
- #722 on Sep 6
- #730 on Sep 7
- #751 on Sep 8
- #684 on Sep 9
- #561 on Sep 10
- #526 on Sep 11
- #507 on Sep 12
- #498 on Sep 13
- #507 on Sep 14
- #494 on Sep 15
- #498 on Sep 16
- #492 on Sep 17
- #495 on Sep 18
- #476 on Sep 19
- #477 on Sep 20
- #471 on Sep 21
- #472 on Sep 22
- #464 on Sep 23
- #448 on Sep 24
- #444 on Sep 25
- #423 on Sep 26
- #429 on Sep 27
- #432 on Sep 28
- #440 on Sep 29
- #433 on Sep 30
- #429 on Oct 1
- #413 on Oct 2
- #391 on Oct 3
- #379 on Oct 4
- #380 on Oct 5
- #378 from Oct 6 to Oct 8
- #386 on Oct 9
- #370 on Oct 10
- #376 on Oct 11
- #379 from Oct 12 to Oct 13
- #381 on Oct 14
- #375 on Oct 15
- #379 on Oct 16
- #371 on Oct 17
- #377 on Oct 18
- #375 on Oct 19
- #378 on Oct 20
- #374 on Oct 21
- #372 on Oct 22
- #369 on Oct 23
- #364 on Oct 24
- #379 on Oct 25
- #383 on Oct 28
Before you install
Network or broad shellAutomated 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:39Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:37Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:49Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:50Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:64Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:67Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:68Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:69Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:74Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:175Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:176Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:177Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:179Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:292Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:290Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:291Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:293Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:294Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:295Analysis incomplete: physical or joined line exceeds character limitCHANGELOG.md:296Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- 7 dangerous shell commandsin 3 files: scripts/linux_lane.sh:102 tests/effects/test_breathe.py:249 scripts/t4_lane.py:82
- 579 network referencesin 77 files: tests/gen/test_video.py:7 CHANGELOG.md:255 tests/gen/test_provider_address.py:29 and 74 more
- 16 obfuscation signalsin 12 files: tests/gen/test_video_facing.py:14 tests/gen/test_grok_provider.py:58 sprite_gen/gen/codex_provider.py:333 and 9 more
- No instruction overrides
- 477 executable scriptsin 477 files: .githooks/pre-commit:1 scripts/compose_selected_cycle.py:1 scripts/compose_sprite_atlas.py:1 and 474 more
- 284 references to secretsin 62 files: tests/gen/test_video.py:108 tests/gen/test_logins_off.py:40 CHANGELOG.md:14 and 59 more
- No requests to vote in Hot
Show all 1,363 signals by file
.githooks/pre-commit
.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` | |---|---| |  | ; 2.24.0 widens the frames first | ; 2.24.0 widens the frames first | ; 2.24.0 widens the frames first |  | - Network accessline 1468
| `video-follow` on a hip pouch (zoomed): as cut, and following the walk's bob as a damped mass |  | - Network accessline 1590
 - Network accessline 1610
 - Network accessline 1642
| Humans | Animals | |---|---| |  |  |  | - 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
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
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
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
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
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
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
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
sprite_gen/gen/gen_set.py
sprite_gen/gen/grok_provider.py
sprite_gen/gen/handedness.py
- Executable scriptline 1
Executable file
sprite_gen/gen/logo.py
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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")
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
- Contacts download.pytorch.org, which SKILL.md, the README and the plugin manifest do not mentionscripts/linux_lane.sh:80High confidence
- Contacts raw.githubusercontent.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/release_notes.py:134High confidence
- Contacts api.openai.com, which SKILL.md, the README and the plugin manifest do not mentionsprite_gen/gen/address.py:43High confidence
- Contacts api.x.ai, which SKILL.md, the README and the plugin manifest do not mentionsprite_gen/gen/address.py:44High confidence
- Contacts api.anthropic.com, which SKILL.md, the README and the plugin manifest do not mentionsprite_gen/gen/address.py:45High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionsprite_gen/serve/curator/src/pipeline-tree.js:246High confidence
Signal confidence: 494 facts
- Executable script in code of a file that runs.githooks/pre-commit:1High confidence
- Access to secrets in a comment of a file that runs.githooks/pre-commit:6Low confidence
- Access to secrets in prose of documentationCHANGELOG.md:14Low confidence
- Access to secrets in prose of documentationCHANGELOG.md:142Low confidence
- Network access in prose of documentationCHANGELOG.md:255Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:257Low confidence
- Network access in prose of documentationCHANGELOG.md:567Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1182Low confidence
- Network access in prose of documentationCHANGELOG.md:1187Low confidence
- Network access in prose of documentationCHANGELOG.md:1188Low confidence
- Network access in prose of documentationCHANGELOG.md:1189Low confidence
- Network access in prose of documentationCHANGELOG.md:1193Low confidence
- Network access in prose of documentationCHANGELOG.md:1194Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1203Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1204Low confidence
- Access to secrets in prose of documentationCHANGELOG.md:1205Low confidence
- Network access in prose of documentationCHANGELOG.md:1215Low confidence
- Network access in prose of documentationCHANGELOG.md:1216Low confidence
- Network access in prose of documentationCHANGELOG.md:1217Low confidence
- Network access in prose of documentationCHANGELOG.md:1218Low confidence
- Network access in prose of documentationCHANGELOG.md:1219Low confidence
- Network access in prose of documentationCHANGELOG.md:1220Low confidence
- Network access in prose of documentationCHANGELOG.md:1221Low confidence
- Network access in prose of documentationCHANGELOG.md:1222Low confidence
- Network access in prose of documentationCHANGELOG.md:1223Low confidence
- Network access in prose of documentationCHANGELOG.md:1224Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1254Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1255Low confidence
- Network access in prose of documentationCHANGELOG.md:1256Low confidence
- Network access in prose of documentationCHANGELOG.md:1257Low confidence
- Network access in prose of documentationCHANGELOG.md:1258Low confidence
- Network access in prose of documentationCHANGELOG.md:1259Low confidence
- Network access in prose of documentationCHANGELOG.md:1260Low confidence
- Network access in prose of documentationCHANGELOG.md:1329Low confidence
- Network access in prose of documentationCHANGELOG.md:1331Low confidence
- Network access in prose of documentationCHANGELOG.md:1340Low confidence
- Network access in prose of documentationCHANGELOG.md:1465Low confidence
- Network access in prose of documentationCHANGELOG.md:1466Low confidence
- Network access in prose of documentationCHANGELOG.md:1467Low confidence
- Network access in prose of documentationCHANGELOG.md:1468Low confidence
- Network access in prose of documentationCHANGELOG.md:1590Low confidence
- Network access in prose of documentationCHANGELOG.md:1610Low confidence
- Network access in prose of documentationCHANGELOG.md:1642Low confidence
- Network access in prose of documentationCHANGELOG.md:1644Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1691Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1692Low confidence
- Access to secrets in prose of documentationCHANGELOG.md:1694Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1747Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueCHANGELOG.md:1828Low confidence
- Access to secrets in prose of documentationCHANGELOG.md:1829Low confidence
and 444 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.
[](https://hotskills.dev/skill/aldegad-sprite-gen/)