#273 by GitHub stars
0x0funky/agent-sprite-forge
Agent Skill for generating 2D sprite sheets and map, transparent PNG frames, and animated GIFs from prompts.
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
skills/codeart2d/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
5324342fdfab → 72fa5ad92d79
Week of Oct 26, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
5324342fdfab → 5324342fdfab
skills/generate2dmap/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5324342fdfab → 72fa5ad92d79
Week of Oct 26, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5324342fdfab → 5324342fdfab
skills/generate2dmedia/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5324342fdfab → 72fa5ad92d79
Week of Oct 26, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5324342fdfab → 5324342fdfab
skills/generate2dsprite/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5324342fdfab → 72fa5ad92d79
Week of Oct 26, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
5324342fdfab → 5324342fdfab
skills/video2dsprite/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
5324342fdfab → 72fa5ad92d79
Week of Oct 26, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
5324342fdfab → 5324342fdfab
Verified commit 72fa5ad92d79b811acff464da32c8f3b1caa010f
git clone --filter=blob:none --no-checkout https://github.com/0x0funky/agent-sprite-forge.git .hotskills/0x0funky-agent-sprite-forge && git -C .hotskills/0x0funky-agent-sprite-forge checkout --detach 72fa5ad92d79b811acff464da32c8f3b1caa010f
# Copy each selected skill directory from .hotskills/0x0funky-agent-sprite-forge into .claude/skills/<skill-name>/Heat
7.9- Star growth, last 7 daysAhead of 99% of tracked repositories
- Star growth, last 24 hoursAhead of 98% of tracked repositories
- Rank movement, last 7 daysAhead of 89% of tracked repositories
- Commits, last 30 daysAhead of 54% 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
- codeart2d
skills/codeart2d - generate2dmap
skills/generate2dmap - generate2dmedia
skills/generate2dmedia - generate2dsprite
skills/generate2dsprite - video2dsprite
skills/video2dsprite
How it works
codeart2d
When your agent uses it
Explicit-only last resort. Draws game art from code, with no image model - pixel sprites from a PixelSpec, flat vector props, UI and icons from portable SVG, rigged characters with planted feet, FX with a JS runtime, seam-proven autotiles, playable top-down layouts with collision, stylized parallax and ambient plate motion - palette-exact, with QA and review sheets. Use only when the user explicitly asks for code-drawn art, or when generate2dmedia route_media.py finds no image or video route (no-route, exit 3). Never the default - image generation (generate2dsprite, generate2dmap, video2dsprite) comes first for characters, props, maps and FX. Not for painterly, detailed or likeness art, HD-2D plates or realistic fire, smoke or water. Always disclose the result as code-drawn.
What it loads into context
Frontmatter
190 tokensAlways available to the agent
SKILL.md
2,506 tokensWhen the skill is activated
Reference documents
37,887 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Use when
- Do not use when
- Capability check (once per session)
- Art source
- Host notes
- Commands
- Hello sprite
- Pipeline
- Rules
- Acceptance
Scripts executed separately
references/runtime/fx-template.mjsscripts/ambient_bake.pyscripts/autotile_build.pyscripts/codeart_core.pyscripts/forge_core.pyscripts/forge_nav.pyscripts/forge_schema.pyscripts/fx_build.pyscripts/fx_verify.mjsscripts/layout_build.pyscripts/parallax_build.pyscripts/pixel_qa.pyscripts/render_pixelspec.pyscripts/rig_animate.pyscripts/svg_render.py../generate2dmedia/scripts/route_media.py../generate2dsprite/scripts/build_animation_clips.py
Files
../../.claude-plugin/marketplace.jsonasset333 bytes../../.claude-plugin/plugin.jsonasset555 bytesSKILL.mdcore9,848 bytesSKILL.mdcore9,848 bytesSKILL.mdcore9,848 bytesSKILL.mdcore9,848 bytesSKILL.mdcore9,848 bytesSKILL.mdcore9,848 bytesSKILL.mdcore9,848 bytesagents/openai.yamlasset364 bytesexamples/dirt-path.material.jsonasset2,020 bytesexamples/hero.anim.jsonasset2,216 bytesexamples/hero.rig.svgasset3,295 bytesexamples/meadow-layout.jsonasset13,244 bytesexamples/palette.jsonasset447 bytesexamples/parallax-gen.jsonasset1,434 bytesexamples/plate-effects.jsonasset1,130 bytesexamples/potion-icons.svgasset3,326 bytesexamples/slash.fx.jsonasset2,089 bytesexamples/slime.pixelspec.jsonasset3,357 bytesexamples/walker16x24.pixelspec.jsonasset5,224 bytesexamples/water-grass.material.jsonasset1,427 bytesreferences/fx-language.mddoc9,747 bytesreferences/fx-runtime-contract.mddoc7,508 bytesreferences/layouts-and-parallax.mddoc20,931 bytesreferences/pixelspec.mddoc11,070 bytesreferences/rasterizers.mddoc4,992 bytesreferences/rig-animation.mddoc18,550 bytesreferences/runtime/fx-template.mjsruns13,262 bytesreferences/schemas/codeart.schema.jsonasset53,525 bytesreferences/schemas/common.schema.jsonasset13,239 bytesreferences/schemas/map.schema.jsonasset131,541 bytesreferences/schemas/sprite.schema.jsonasset67,057 bytesreferences/style-envelope.mddoc5,195 bytesreferences/svg-profile.mddoc8,592 bytesreferences/tiles-and-maps.mddoc15,772 bytesscripts/ambient_bake.pyruns33,234 bytesscripts/autotile_build.pyruns105,163 bytesscripts/codeart_core.pyruns121,672 bytesscripts/forge_core.pyruns80,216 bytesscripts/forge_nav.pyruns97,789 bytesscripts/forge_schema.pyruns26,699 bytesscripts/fx_build.pyruns50,526 bytesscripts/fx_verify.mjsruns30,415 bytesscripts/layout_build.pyruns109,133 bytesscripts/parallax_build.pyruns47,841 bytesscripts/pixel_qa.pyruns22,051 bytesscripts/render_pixelspec.pyruns44,029 bytesscripts/rig_animate.pyruns120,897 bytesscripts/svg_render.pyruns26,869 bytes../generate2dmap/SKILL.mddoc11,789 bytes../generate2dmedia/scripts/route_media.pyruns42,718 bytes../generate2dsprite/SKILL.mddoc14,298 bytes../generate2dsprite/scripts/build_animation_clips.pyruns75,686 bytes../video2dsprite/SKILL.mddoc15,298 bytes
Read SKILL.md
# Code Art 2D
You write the art as text (PixelSpec JSON, portable SVG, rig, FX, material, layout or parallax
specs); the scripts render, check and package it. No image model is involved. It is a declared art
source (`art_source: "code"`), not a placeholder.
## Use when
- The user explicitly asks for code-drawn art: a PixelSpec or SVG sprite, palette variants drawn in code, a code rig, code FX, a seam-proven autotile set, a code-made layout, stylized parallax or ambient loops.
- `route_media.py` prints `no-route` (exit 3): no API key is configured and no local image or video route exists. Say so, and offer to add a key or a CLI as well.
- Pose and layout guides that help an image model (support material, not final art).
## Do not use when
View the complete source on GitHubgenerate2dmap
When your agent uses it
Plan and build 2D game maps and scenes - top-down and side-scrolling levels, tilemaps, prop packs, parallax backgrounds and HD-2D battle or story plates - with collision, navigation and reachability checks, environment motion, a playable HTML preview and export to Tiled, Godot 4 or LDtk. Map art (terrain, tiles, props, plates, parallax layers) is image generation by default, through generate2dmedia route_media.py (the API when a key is configured, else the local Codex or Grok CLI); map data (layout, collision, exits, spawns) is written as data. Use for any map, level, room, scene, background, terrain or prop-kit request. Not for characters, creatures, items or FX (generate2dsprite), character animation (video2dsprite), code-drawn tiles or maps (codeart2d, only on request) or calling an image or video API by itself (generate2dmedia).
What it loads into context
Frontmatter
215 tokensAlways available to the agent
SKILL.md
2,959 tokensWhen the skill is activated
Reference documents
55,099 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Use when
- Do not use when
- Capability check (once per session)
- Art source
- Host notes
- Commands
- Plan before art
- Pipeline
- Acceptance
- References
Scripts executed separately
references/runtime/map-runtime.mjsscripts/build_motion_mask.pyscripts/build_scene_preview.pyscripts/compose_layered_preview.pyscripts/conform_background.pyscripts/edit_locality_check.pyscripts/export_godot.pyscripts/export_ldtk.pyscripts/export_tiled.pyscripts/extract_platform_strip.pyscripts/extract_prop_pack.pyscripts/extract_scene_lights.pyscripts/extract_terrain_tiles.pyscripts/forge_av.pyscripts/forge_core.pyscripts/forge_matte.pyscripts/forge_nav.pyscripts/forge_schema.pyscripts/map_bundle.pyscripts/map_nav.pyscripts/scene_layout_guide.pyscripts/scene_motion.pyscripts/validate_chunks.pyscripts/validate_layout.pyscripts/validate_parallax.pyscripts/validate_stage.py../generate2dmedia/scripts/cli_media.py../generate2dmedia/scripts/forge_doctor.py../generate2dmedia/scripts/route_media.py
Files
../codeart2d/SKILL.mddoc9,848 bytesSKILL.mdcore11,789 bytesSKILL.mdcore11,789 bytesSKILL.mdcore11,789 bytesSKILL.mdcore11,789 bytesSKILL.mdcore11,789 bytesSKILL.mdcore11,789 bytesSKILL.mdcore11,789 bytesagents/openai.yamlasset513 bytesreferences/background-scenes.mddoc14,499 bytesreferences/engine-maps.mddoc14,699 bytesreferences/hd2d-plates.mddoc12,155 bytesreferences/hd2d-presentation.mddoc10,052 bytesreferences/layered-map-contract.mddoc21,780 bytesreferences/map-presets.mddoc8,062 bytesreferences/map-strategies.mddoc12,448 bytesreferences/parallax-backgrounds.mddoc14,362 bytesreferences/prop-pack-contract.mddoc15,348 bytesreferences/runtime/map-runtime.mjsruns83,076 bytesreferences/scene-preview.mddoc14,941 bytesreferences/schemas/common.schema.jsonasset13,239 bytesreferences/schemas/map.schema.jsonasset131,541 bytesreferences/side-scroll-scenes.mddoc14,644 bytesscripts/build_motion_mask.pyruns47,402 bytesscripts/build_scene_preview.pyruns95,708 bytesscripts/compose_layered_preview.pyruns94,387 bytesscripts/conform_background.pyruns26,004 bytesscripts/edit_locality_check.pyruns27,682 bytesscripts/export_godot.pyruns87,642 bytesscripts/export_ldtk.pyruns52,620 bytesscripts/export_tiled.pyruns46,560 bytesscripts/extract_platform_strip.pyruns30,134 bytesscripts/extract_prop_pack.pyruns64,734 bytesscripts/extract_scene_lights.pyruns44,248 bytesscripts/extract_terrain_tiles.pyruns55,416 bytesscripts/forge_av.pyruns47,697 bytesscripts/forge_core.pyruns80,216 bytesscripts/forge_matte.pyruns73,353 bytesscripts/forge_nav.pyruns97,789 bytesscripts/forge_schema.pyruns26,699 bytesscripts/map_bundle.pyruns84,242 bytesscripts/map_nav.pyruns32,612 bytesscripts/scene_layout_guide.pyruns22,525 bytesscripts/scene_motion.pyruns55,744 bytesscripts/validate_chunks.pyruns49,975 bytesscripts/validate_layout.pyruns48,225 bytesscripts/validate_parallax.pyruns30,107 bytesscripts/validate_stage.pyruns63,749 bytes../generate2dmedia/SKILL.mddoc8,604 bytes../generate2dmedia/references/route-media.mddoc13,074 bytes../generate2dmedia/scripts/cli_media.pyruns115,970 bytes../generate2dmedia/scripts/forge_doctor.pyruns74,093 bytes../generate2dmedia/scripts/route_media.pyruns42,718 bytes../generate2dsprite/SKILL.mddoc14,298 bytes../video2dsprite/SKILL.mddoc15,298 bytes
Read SKILL.md
# Generate 2D Map
Build the smallest scene bundle the request needs, in the game's art, camera, renderer and data conventions.
A background picture needs no game system; a playable map needs explicit geometry and data beyond a painting.
## Use when
- A playable map, level, room set, tilemap, terrain or prop kit, with collision and exits.
- A parallax background, a battle, title or story backdrop, or an HD-2D plate with lights and motion.
- Map data must be validated, previewed or exported to Tiled, Godot or LDtk.
## Do not use when
- Actors, items and attack FX: [generate2dsprite](../generate2dsprite/SKILL.md). Character motion from video: [video2dsprite](../video2dsprite/SKILL.md).View the complete source on GitHubgenerate2dmedia
When your agent uses it
The art-route layer of the Forge skills. route_media.py is the one command that generates an image or an image-to-video clip - through the paid API of any provider whose key is configured (OpenAI, Google Gemini, xAI, BytePlus ModelArk, fal.ai; the configured key is the owner's consent), else through the user's own signed-in Codex or Grok CLI - and prints one JSON line with the route, artifact, sha256 and cost estimate; with no route it answers no-route (codeart2d is then the last resort). Also the capability check (forge_doctor), API key configuration, the spend ledger, resume and Codex image adoption. Use when a Forge skill sends a generation here, for the capability check, or when the user asks about keys, routes or spend. Not for planning, processing or QA of sprites, video frames or maps (generate2dsprite, video2dsprite, generate2dmap) or for code-drawn art (codeart2d).
What it loads into context
Frontmatter
215 tokensAlways available to the agent
SKILL.md
2,321 tokensWhen the skill is activated
Reference documents
31,665 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Use when
- Do not use when
- Route order (owner decision 2026-10-06)
- Capability check (once per session)
- Generate (`route_media.py`)
- Keys
- Spend and the ledger
- Lower-level tools
- Host notes
- Commands and outputs
Scripts executed separately
scripts/cli_media.pyscripts/forge_doctor.pyscripts/generate_media.pyscripts/media_config.pyscripts/media_ledger.pyscripts/media_mp4.pyscripts/media_providers.pyscripts/route_media.py
Files
../codeart2d/SKILL.mddoc9,848 bytes../generate2dmap/SKILL.mddoc11,789 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesSKILL.mdcore8,604 bytesagents/openai.yamlasset388 bytesreferences/agent-profiles/README.mddoc1,327 bytesreferences/agent-profiles/video-agent.mddoc981 bytesreferences/api-usage.mddoc19,019 bytesreferences/capabilities.jsonasset33,639 bytesreferences/cli-routes.mddoc15,664 bytesreferences/prices.jsonasset24,079 bytesreferences/provider-survey.mddoc17,626 bytesreferences/route-media.mddoc13,074 bytesreferences/schemas/common.schema.jsonasset13,239 bytesreferences/schemas/media.schema.jsonasset23,054 bytesscripts/cli_media.pyruns115,970 bytesscripts/forge_doctor.pyruns74,093 bytesscripts/generate_media.pyruns73,845 bytesscripts/media_config.pyruns9,310 bytesscripts/media_ledger.pyruns29,586 bytesscripts/media_mp4.pyruns9,597 bytesscripts/media_providers.pyruns68,505 bytesscripts/route_media.pyruns42,718 bytes../generate2dsprite/SKILL.mddoc14,298 bytes../video2dsprite/SKILL.mddoc15,298 bytes
Read SKILL.md
# Generate 2D Media
The route layer. It makes raw media; the owning skill plans the asset before and checks it after.
## Use when
- Any Forge skill (or its pipeline script) needs a generated image, reference edit or image-to-video clip.
- Once per session, to see which routes work here (`forge_doctor.py`).
- The user asks to configure an API key, to use a particular route, or about spend.
## Do not use when
- Planning, keying, registering or packaging: [generate2dsprite](../generate2dsprite/SKILL.md), [video2dsprite](../video2dsprite/SKILL.md), [generate2dmap](../generate2dmap/SKILL.md).
- Code-drawn art the user asked for: [codeart2d](../codeart2d/SKILL.md).View the complete source on GitHubgenerate2dsprite
When your agent uses it
Make game-ready 2D characters, creatures, props, icons and FX as master stills, sprite sheets or animation clips. Plan size, motion and finish; generate the art (image generation is the default, through generate2dmedia route_media.py - the API when a key is configured, else the local Codex or Grok CLI); approve one master still per character; then key, slice, register, scale, palette, QA and export frames for a game engine (Aseprite JSON, Godot SpriteFrames or Sprite3D). HD finish by default, pixel finish on request. Character animation is one image-to-video clip per action from the master (video2dsprite); sheets are for FX, icons and props. Use for sprites, masters, sheets, frame-by-frame animation and packaging frames from any source. Not for maps, tiles or backgrounds (generate2dmap), video clips (video2dsprite), code-drawn art (codeart2d, only on request) or calling an image or video API by itself (generate2dmedia).
What it loads into context
Frontmatter
227 tokensAlways available to the agent
SKILL.md
3,604 tokensWhen the skill is activated
Reference documents
48,928 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Use when
- Do not use when
- Capability check (once per session)
- Art source
- Master still (every character animation starts here)
- Host notes
- Commands
- Plan the asset
- Generate (image routes)
- Pipeline
- Acceptance
- References
Scripts executed separately
../generate2dmedia/scripts/cli_media.py../generate2dmedia/scripts/forge_doctor.py../generate2dmedia/scripts/route_media.pyscripts/assemble_frames.pyscripts/build_animation_clips.pyscripts/export_engine.pyscripts/forge_core.pyscripts/forge_matte.pyscripts/forge_palette.pyscripts/generate2dsprite.pyscripts/make_anchor_layout.pyscripts/make_layout_guide.pyscripts/master_still.pyscripts/palette_tool.pyscripts/pixel_reduce.pyscripts/plan_guide.pyscripts/scale_frames.pyscripts/sheet_qc.py
Files
../codeart2d/SKILL.mddoc9,848 bytes../generate2dmap/SKILL.mddoc11,789 bytes../generate2dmedia/SKILL.mddoc8,604 bytes../generate2dmedia/references/route-media.mddoc13,074 bytes../generate2dmedia/scripts/cli_media.pyruns115,970 bytes../generate2dmedia/scripts/forge_doctor.pyruns74,093 bytes../generate2dmedia/scripts/route_media.pyruns42,718 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesSKILL.mdcore14,298 bytesagents/openai.yamlasset529 bytesreferences/action-recipes.mddoc14,125 bytesreferences/animation-planning.mddoc9,292 bytesreferences/character-animation.mddoc3,994 bytesreferences/engine-export.mddoc13,981 bytesreferences/frames-and-clips.mddoc16,631 bytesreferences/master-still.mddoc15,270 bytesreferences/modes.mddoc6,208 bytesreferences/palette-and-pixels.mddoc12,262 bytesreferences/processing.mddoc14,579 bytesreferences/prompt-rules.mddoc10,015 bytesreferences/runtime-integration.mddoc10,863 bytesreferences/schemas/common.schema.jsonasset13,239 bytesreferences/schemas/sprite.schema.jsonasset67,057 bytesreferences/video-handoff.mddoc7,954 bytesscripts/assemble_frames.pyruns53,179 bytesscripts/build_animation_clips.pyruns75,686 bytesscripts/export_engine.pyruns66,621 bytesscripts/forge_core.pyruns80,216 bytesscripts/forge_matte.pyruns73,353 bytesscripts/forge_palette.pyruns71,916 bytesscripts/generate2dsprite.pyruns138,938 bytesscripts/make_anchor_layout.pyruns7,471 bytesscripts/make_layout_guide.pyruns6,245 bytesscripts/master_still.pyruns87,435 bytesscripts/palette_tool.pyruns41,616 bytesscripts/pixel_reduce.pyruns15,597 bytesscripts/plan_guide.pyruns33,380 bytesscripts/scale_frames.pyruns38,691 bytesscripts/sheet_qc.pyruns71,924 bytes../video2dsprite/SKILL.mddoc15,298 bytes
Read SKILL.md
# Generate 2D Sprite
Make the smallest asset bundle the game needs, at its real display size, camera and style.
Game logic (collision, damage, timing) stays independent of the art.
## Use when
- A character, creature, prop, item, icon or FX is needed as a master still, a sheet or clips.
- Frames already exist (generated, painted, code-drawn) and need clips, palettes or an engine export.
## Do not use when
- Maps, tiles, terrain, parallax or scene plates: [generate2dmap](../generate2dmap/SKILL.md).
- Animating a character: approve one master here, then [video2dsprite](../video2dsprite/SKILL.md) makes one clip per action ([video-handoff.md](references/video-handoff.md)).View the complete source on GitHubvideo2dsprite
When your agent uses it
Turn one approved master still into a character's whole animated sprite set - one image-to-video clip per action (idle, walk, run, attack, jump, hurt, cast and so on), all from that still, generated through generate2dmedia route_media.py (the xAI API when a key is configured, else the local Grok CLI) - then gate each take, key it with a soft matte, register it to the master, pick loops or retime actions, finish (HD by default, pixel on request) and package fixed-canvas frames, alpha WebM, packed MP4 for iPhone and a PNG fallback with engine metadata and a JS runtime. Also processes a supplied clip. Use for character and creature animation, fluid motion and any video-to-sprite work. Not for FX, icon or prop sheets (generate2dsprite), maps or plate loops (generate2dmap), code-drawn animation (codeart2d, only on request) or calling a video API by itself (generate2dmedia).
What it loads into context
Frontmatter
219 tokensAlways available to the agent
SKILL.md
3,982 tokensWhen the skill is activated
Reference documents
42,638 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Use when
- Do not use when
- Capability check (once per session)
- Art source
- A whole sprite set from one still
- Host notes
- Commands
- Pipeline (one clip)
- Finish (HD default, pixel option)
- Motion and geometry rules
- Runtime and acceptance
Scripts executed separately
../generate2dmedia/scripts/forge_doctor.py../generate2dmedia/scripts/route_media.pyreferences/packed-alpha-runtime.jsreferences/runtime/forge-runtime.mjsreferences/runtime/packed-alpha-webgl.mjsscripts/animation_review.pyscripts/colour_lock.pyscripts/engine_export.pyscripts/finish_frames.pyscripts/forge_av.pyscripts/forge_core.pyscripts/forge_matte.pyscripts/forge_palette.pyscripts/forge_schema.pyscripts/gait_loop.pyscripts/prepare_i2v_input.pyscripts/register_clip.pyscripts/retime.pyscripts/sprite_set.pyscripts/validate_animation.pyscripts/video2dsprite.py
Files
../codeart2d/SKILL.mddoc9,848 bytes../generate2dmap/SKILL.mddoc11,789 bytes../generate2dmedia/SKILL.mddoc8,604 bytes../generate2dmedia/references/route-media.mddoc13,074 bytes../generate2dmedia/scripts/forge_doctor.pyruns74,093 bytes../generate2dmedia/scripts/route_media.pyruns42,718 bytes../generate2dsprite/SKILL.mddoc14,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesSKILL.mdcore15,298 bytesagents/openai.yamlasset495 bytesreferences/animation-review.mddoc11,205 bytesreferences/finishing.mddoc19,748 bytesreferences/matte.mddoc11,509 bytesreferences/motion-prompts.mddoc15,455 bytesreferences/packed-alpha-runtime.jsruns2,910 bytesreferences/pipeline.mddoc17,276 bytesreferences/prompt-rules.mddoc9,353 bytesreferences/runtime/forge-runtime.mjsruns38,811 bytesreferences/runtime/packed-alpha-webgl.mjsruns21,938 bytesreferences/schemas/common.schema.jsonasset13,239 bytesreferences/schemas/video.schema.jsonasset48,856 bytesreferences/sprite-set.mddoc20,603 bytesscripts/animation_review.pyruns31,880 bytesscripts/colour_lock.pyruns26,012 bytesscripts/engine_export.pyruns110,379 bytesscripts/finish_frames.pyruns118,987 bytesscripts/forge_av.pyruns47,697 bytesscripts/forge_core.pyruns80,216 bytesscripts/forge_matte.pyruns73,353 bytesscripts/forge_palette.pyruns71,916 bytesscripts/forge_schema.pyruns26,699 bytesscripts/gait_loop.pyruns106,471 bytesscripts/prepare_i2v_input.pyruns47,070 bytesscripts/register_clip.pyruns105,459 bytesscripts/retime.pyruns46,960 bytesscripts/sprite_set.pyruns180,441 bytesscripts/validate_animation.pyruns40,779 bytesscripts/video2dsprite.pyruns99,133 bytes
Read SKILL.md
# Video to 2D Animation
An approved still sets identity and geometry, a video model supplies motion, and deterministic
tools prepare it for the engine. Video is not promised to be smaller, seamless or cheaper than sheets.
## Use when
- Animating a character or creature: every action comes from one approved master still, one clip per action.
- Fluid motion from an accepted master: idle breathing, walks, runs, attacks, casts, hair, capes, creatures.
- A supplied clip must become transparent, registered, looped frames and engine video.
## Do not use when
- FX, icon or prop sheets: [generate2dsprite](../generate2dsprite/SKILL.md).View the complete source on GitHubSkills included
- codeart2d
- generate2dmap
- generate2dmedia
- generate2dsprite
- video2dsprite
Repository facts
- License
- MIT
- Created
- Apr 23, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 512
- Open issues
- 7
- Project activity
- Active
Rank over the last 12 weeks
Now #273 · best #238 · down 14 in 30 days
- #278 on Oct 31
- #276 from Nov 1 to Nov 2
- #277 on Nov 3
- #278 on Nov 4
- #274 on Nov 5
- #273 since Nov 6
69 earlier periods
- #238 on Aug 2
- #239 from Aug 7 to Aug 8
- #235 on Aug 9
- #242 on Aug 10
- #237 on Aug 11
- #234 on Aug 12
- #237 on Aug 13
- #236 from Aug 14 to Aug 15
- #239 from Aug 16 to Aug 17
- #245 on Aug 18
- #243 on Aug 19
- #242 on Aug 20
- #241 on Aug 21
- #238 on Aug 22
- #243 from Aug 23 to Aug 25
- #239 on Aug 26
- #240 on Aug 27
- #239 from Aug 28 to Aug 30
- #240 on Aug 31
- #245 on Sep 1
- #241 on Sep 2
- #250 on Sep 3
- #245 on Sep 4
- #247 on Sep 5
- #244 on Sep 6
- #247 on Sep 7
- #245 on Sep 8
- #248 on Sep 9
- #246 on Sep 10
- #247 from Sep 11 to Sep 12
- #251 on Sep 13
- #252 on Sep 14
- #253 on Sep 15
- #251 on Sep 16
- #249 on Sep 17
- #253 on Sep 18
- #249 on Sep 19
- #253 on Sep 20
- #254 from Sep 21 to Sep 22
- #255 on Sep 23
- #254 on Sep 24
- #252 on Sep 25
- #253 from Sep 26 to Sep 27
- #257 from Sep 28 to Sep 29
- #254 on Sep 30
- #256 on Oct 1
- #259 on Oct 2
- #255 on Oct 3
- #252 on Oct 4
- #256 from Oct 5 to Oct 6
- #259 from Oct 7 to Oct 8
- #262 on Oct 9
- #259 on Oct 10
- #262 on Oct 11
- #265 on Oct 12
- #266 on Oct 13
- #265 on Oct 14
- #266 on Oct 15
- #263 on Oct 16
- #266 from Oct 17 to Oct 18
- #267 on Oct 19
- #266 on Oct 20
- #270 on Oct 21
- #271 on Oct 22
- #269 on Oct 23
- #270 on Oct 24
- #272 on Oct 25
- #277 on Oct 28
- #279 from Oct 29 to Oct 30
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Changed on Oct 27, 2026
New signal: Dangerous shell operation
No longer found: Access to secrets
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 41 notes
skills/codeart2d/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/codeart2d/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/codeart2d/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/codeart2d/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/codeart2d/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/codeart2d/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmap/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmap/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmap/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmap/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmap/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmap/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dmedia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/generate2dsprite/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 6 dangerous shell commandsin 1 file: skills/generate2dmedia/scripts/cli_media.py:88
- 379 network referencesin 31 files: generate2dmedia/references/capabilities.json:4 generate2dmedia/references/prices.json:5 generate2dmedia/references/provider-survey.md:72 and 28 more
- 18 obfuscation signalsin 9 files: skills/generate2dmedia/scripts/forge_doctor.py:120 skills/generate2dmedia/scripts/cli_media.py:1802 codeart2d/scripts/forge_core.py:327 and 6 more
- No instruction overrides
- 93 executable scriptsin 83 files: skills/generate2dmedia/scripts/route_media.py:1 skills/generate2dmedia/scripts/forge_doctor.py:1 skills/generate2dmedia/scripts/cli_media.py:1 and 80 more
- 179 references to secretsin 29 files: skills/generate2dmedia/scripts/forge_doctor.py:22 skills/generate2dmedia/references/route-media.md:116 generate2dmedia/scripts/media_config.py:10 and 26 more
- No requests to vote in Hot
Show all 675 signals by file
.claude-plugin/plugin.json
- Network accessline 5
"description": "Game-ready 2D sprites, maps, code-drawn pixel art, video-derived animation and API media generation as agent skills, with deterministic Python processors.", "author": { "name": "0x0funky" }, "homepage": "https://github.c - Network accessline 6
"author": { "name": "0x0funky" }, "homepage": "https://github.com/0x0funky/agent-sprite-forge", "repository": "https://github.com/0x0funky/agent-sprite-forge", - Network accessline 7
"homepage": "https://github.com/0x0funky/agent-sprite-forge", - Network accessline 8
"repository": "https://github.com/0x0funky/agent-sprite-forge",
skills/codeart2d/examples/hero.rig.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"
skills/codeart2d/examples/potion-icons.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="32" viewBox="0 0 128 32" data-codeart="icons">
skills/codeart2d/references/rig-animation.md
- Network accessline 44
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"
skills/codeart2d/references/runtime/fx-template.mjs
- Executable scriptline 1
Executable file
skills/codeart2d/references/schemas/codeart.schema.json
skills/codeart2d/references/schemas/common.schema.json
skills/codeart2d/references/schemas/map.schema.json
skills/codeart2d/references/schemas/sprite.schema.json
skills/codeart2d/references/svg-profile.md
- Network accessline 41
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"> - Network accessline 69
| Code | Problem | Fix | |---|---|---| | `xml` | not well-formed XML, a DOCTYPE/ENTITY, or a root that is not `<svg>` | write plain SVG with `xmlns="http://www.w3.org/2000/svg"` | - Network accessline 70
|---|---|---| | `xml` | not well-formed XML, a DOCTYPE/ENTITY, or a root that is not `<svg>` | write plain SVG with `xmlns="http://www.w3.org/2000/svg"` | | `viewbox` | `viewBox` missing, not four numbers, not integers, or not equal to the - Network accessline 71
| `xml` | not well-formed XML, a DOCTYPE/ENTITY, or a root that is not `<svg>` | write plain SVG with `xmlns="http://www.w3.org/2000/svg"` |
skills/codeart2d/scripts/ambient_bake.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/codeart2d/scripts/autotile_build.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/codeart2d/scripts/codeart_core.py
- Executable scriptline 1
Executable file - Network accessline 337
SVG_NS = "http://www.w3.org/2000/svg" - Network accessline 338
XLINK_NS = "http://www.w3.org/1999/xlink" - Network accessline 391
raise CodeArtError(f"SVG is not well-formed XML: {exc}") from None if root.tag != _q("svg"): raise CodeArtError('root element must be <svg xmlns="http://www.w3.org/2000/svg">') - Network accessline 392
if root.tag != _q("svg"): raise CodeArtError('root element must be <svg xmlns="http://www.w3.org/2000/svg">') return root - Network accessline 393
raise CodeArtError('root element must be <svg xmlns="http://www.w3.org/2000/svg">') - Access to secretsline 868
[Credential-related source omitted] - Access to secretsline 880
[Credential-related source omitted] - Network accessline 1043
"....obbo.obbo...", "....obbo.obbo...", "...ooooo.ooooo..", "................", ) _SVG_OPEN = '<svg xmlns="http://www.w3.org/2000/svg"' - Network accessline 1045
_SVG_OPEN = '<svg xmlns="http://www.w3.org/2000/svg"' - Network accessline 1133
'<line x1="20" y1="2" x2="30" y2="12" stroke="#22142b" stroke-width="1"/></svg>') rig = f'{_SVG_OPEN} width="32" height="32" viewBox="0 0 32 32" shape-rendering="crispEdges">' t07 = ('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl - Network accessline 1134
rig = f'{_SVG_OPEN} width="32" height="32" viewBox="0 0 32 32" shape-rendering="crispEdges">' t07 = ('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" ' 'height="16" viewBox="0 0 3 - Network accessline 1135
t07 = ('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" ' - Access to secretsline 1999
[Credential-related source omitted]
skills/codeart2d/scripts/forge_core.py
skills/codeart2d/scripts/forge_nav.py
- Executable scriptline 1
Executable file
skills/codeart2d/scripts/forge_schema.py
- Executable scriptline 1
Executable file
skills/codeart2d/scripts/fx_build.py
- Executable scriptline 1
Executable file - Network accessline 547
def _svg(width: int, height: int, body: str, view: tuple[int, int, int, int] | None = None) -> str: x0, y0, w, h = view or (0, 0, width, height) return (f'<svg xmlns="http://www.w3.org/2000/svg" width="{w}" height="{h}" viewBox="{x0 - Network accessline 548
x0, y0, w, h = view or (0, 0, width, height) return (f'<svg xmlns="http://www.w3.org/2000/svg" width="{w}" height="{h}" viewBox="{x0} {y0} {w} {h}">' f"{body}</svg>") - Network accessline 549
return (f'<svg xmlns="http://www.w3.org/2000/svg" width="{w}" height="{h}" viewBox="{x0} {y0} {w} {h}">'
skills/codeart2d/scripts/fx_verify.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/codeart2d/scripts/layout_build.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/codeart2d/scripts/parallax_build.py
skills/codeart2d/scripts/pixel_qa.py
- Executable scriptline 1
Executable file
skills/codeart2d/scripts/render_pixelspec.py
skills/codeart2d/scripts/rig_animate.py
skills/codeart2d/scripts/svg_render.py
- Executable scriptline 1
Executable file
skills/generate2dmap/SKILL.md
skills/generate2dmap/references/parallax-backgrounds.md
- Network accessline 146
Primary sources (checked 2026-09-11 for the improved fork's version of this guide): Godot's [2D parallax tutorial](https://docs.godotengine.org/en/stable/tutorials/2d/2d_parallax.html) covers scroll scale, repeat sizing and the extra covera
skills/generate2dmap/references/runtime/map-runtime.mjs
skills/generate2dmap/references/schemas/common.schema.json
skills/generate2dmap/references/schemas/map.schema.json
skills/generate2dmap/scripts/build_motion_mask.py
skills/generate2dmap/scripts/build_scene_preview.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 797
page.on("request", (request) => { const url = request.url(); if (url !== config.url && !/^(data|about):/i.test(url)) result.requests.push(url.slice(0, 200)); - Network accessline 798
const url = request.url(); if (url !== config.url && !/^(data|about):/i.test(url)) result.requests.push(url.slice(0, 200)); }); - Network accessline 799
if (url !== config.url && !/^(data|about):/i.test(url)) result.requests.push(url.slice(0, 200)); - Access to secretsline 1644
[Credential-related source omitted]
skills/generate2dmap/scripts/compose_layered_preview.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/conform_background.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/edit_locality_check.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/export_godot.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/export_ldtk.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 73
# LDtk 1.5.3 JSON (https://ldtk.io/json, schema https://ldtk.io/files/JSON_SCHEMA.json): the fields this - Network accessline 669
tilesets = list(tileset_defs.values()) + ([props_tileset] if props_tileset else []) project = { "__header__": {"fileType": "LDtk Project JSON", "app": "LDtk", "doc": "https://ldtk.io/json", - Network accessline 670
project = { "__header__": {"fileType": "LDtk Project JSON", "app": "LDtk", "doc": "https://ldtk.io/json", "schema": "https://ldtk.io/files/JSON_SCHEMA.json", "appAuthor": "Sebastien 'deepnight' Benard", - Network accessline 671
"__header__": {"fileType": "LDtk Project JSON", "app": "LDtk", "doc": "https://ldtk.io/json", - Network accessline 672
"schema": "https://ldtk.io/files/JSON_SCHEMA.json", "appAuthor": "Sebastien 'deepnight' Benard", - Network accessline 673
"appVersion": LDTK_VERSION, "url": "https://ldtk.io"},
skills/generate2dmap/scripts/export_tiled.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/extract_platform_strip.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/extract_prop_pack.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/extract_scene_lights.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/extract_terrain_tiles.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/forge_av.py
- Executable scriptline 1
Executable file
skills/generate2dmap/scripts/forge_core.py
skills/generate2dmap/scripts/forge_matte.py
- Executable scriptline 1
Executable file
skills/generate2dmap/scripts/forge_nav.py
- Executable scriptline 1
Executable file
skills/generate2dmap/scripts/forge_schema.py
- Executable scriptline 1
Executable file
skills/generate2dmap/scripts/map_bundle.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/map_nav.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/scene_layout_guide.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/scene_motion.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/validate_chunks.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/validate_layout.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/validate_parallax.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmap/scripts/validate_stage.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmedia/SKILL.md
skills/generate2dmedia/references/api-usage.md
- Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Network accessline 248
`--base-url https://gateway.example/v1` replaces the provider's base URL. It sends
skills/generate2dmedia/references/capabilities.json
- Network accessline 4
"notes": "One record per model id, checked against each vendor's official documentation on verifiedAt. No live call was made (the owner has no keys): request shapes follow the docs only, and the community reports real-world differences. Fie - Network accessline 5
"retired": [ {"provider": "openai", "model": "gpt-image-1", "shutdown": "2026-10-23", "dropped": true, "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, {"provider": "openai", "model" - Network accessline 6
{"provider": "openai", "model": "gpt-image-1", "shutdown": "2026-10-23", "dropped": true, "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 7
{"provider": "openai", "model": "gpt-image-1.5", "shutdown": "2026-12-01", "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 8
{"provider": "openai", "model": "gpt-image-1-mini", "shutdown": "2026-12-01", "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 9
{"provider": "openai", "model": "chatgpt-image-latest", "shutdown": "2026-12-01", "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 10
{"provider": "openai", "model": "dall-e-3", "shutdown": "2026-05-12", "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 11
{"provider": "openai", "model": "dall-e-2", "shutdown": "2026-05-12", "use": "gpt-image-2.5-sunburst", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 12
{"provider": "openai", "model": "sora-2", "shutdown": "2026-09-24", "dropped": true, "use": "an image-to-video route of xai, byteplus or fal", "source": "https://developers.openai.com/api/docs/deprecations"}, - Network accessline 13
{"provider": "gemini", "model": "gemini-2.5-flash-image", "shutdown": "2026-10-02", "use": "gemini-3.1-flash-image", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 14
{"provider": "gemini", "model": "gemini-3.1-flash-image-preview", "shutdown": "2026-06-25", "use": "gemini-3.1-flash-image", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 15
{"provider": "gemini", "model": "gemini-3-pro-image-preview", "shutdown": "2026-06-25", "use": "gemini-3-pro-image", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 16
{"provider": "gemini", "model": "imagen-4.0-generate-001", "shutdown": "2026-08-17", "use": "gemini-3.1-flash-image", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 17
{"provider": "gemini", "model": "imagen-4.0-ultra-generate-001", "shutdown": "2026-08-17", "use": "gemini-3-pro-image", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 18
{"provider": "gemini", "model": "imagen-4.0-fast-generate-001", "shutdown": "2026-08-17", "use": "gemini-3.1-flash-image", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 19
{"provider": "gemini", "model": "veo-3.1-generate-preview", "shutdown": "2026-10-22", "dropped": true, "use": "fal:fal-ai/veo3.1/first-last-frame-to-video", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 20
{"provider": "gemini", "model": "veo-3.1-fast-generate-preview", "shutdown": "2026-10-22", "dropped": true, "use": "fal:fal-ai/veo3.1/fast/first-last-frame-to-video", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 21
{"provider": "gemini", "model": "veo-3.1-lite-generate-preview", "shutdown": "2026-10-22", "dropped": true, "use": "an image-to-video route of xai, byteplus or fal", "source": "https://ai.google.dev/gemini-api/docs/deprecations"}, - Network accessline 22
{"provider": "xai", "model": "grok-imagine-image-quality", "shutdown": "2026-11-02", "use": "grok-imagine-image-2.0 with --quality low", "source": "https://docs.x.ai/developers/migration/imagine-image-quality-nov-2"} - Network accessline 26
"label": "OpenAI API", "keyEnv": ["OPENAI_API_KEY"], "apiBase": "https://api.openai.com/v1", - Network accessline 27
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 28
"apiBase": "https://api.openai.com/v1", - Network accessline 30
"kinds": ["image"], "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/reference/resources/images", "https://developers.openai.com/api/docs/guides/image-generation", "https://developers.openai.com/api/docs/d - Network accessline 31
"verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/reference/resources/images", "https://developers.openai.com/api/docs/guides/image-generation", "https://developers.openai.com/api/docs/deprecations", "https://dev - Network accessline 32
"docs": ["https://developers.openai.com/api/reference/resources/images", "https://developers.openai.com/api/docs/guides/image-generation", "https://developers.openai.com/api/docs/deprecations", "https://developers.openai.com/api/docs/pricin - Network accessline 35
"models": { "gpt-image-2.5-sunburst": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst"], - Network accessline 36
"gpt-image-2.5-sunburst": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst"], "image": {"generate": true, "edit": "mask", "refs_max": 16, "tran - Network accessline 37
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst"], - Network accessline 42
}, "gpt-image-2.5-flare": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2.5-flare"], - Network accessline 43
"gpt-image-2.5-flare": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2.5-flare"], "image": {"generate": true, "edit": "mask", "refs_max": 16, "transparen - Network accessline 44
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2.5-flare"], - Network accessline 49
}, "gpt-image-2": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2"], - Network accessline 50
"gpt-image-2": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2"], "image": {"generate": true, "edit": "mask", "refs_max": 16, "transparent_bg": "native", - Network accessline 51
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-2"], - Network accessline 57
}, "gpt-image-1.5": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-1.5"], - Network accessline 58
"gpt-image-1.5": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-1.5"], "image": {"generate": true, "edit": "mask", "refs_max": 16, "transparent_bg": "nati - Network accessline 59
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-1.5"], - Network accessline 63
}, "gpt-image-1-mini": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-1-mini"], - Network accessline 64
"gpt-image-1-mini": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-1-mini"], "image": {"generate": true, "edit": "mask", "refs_max": 16, "transparent_bg": - Network accessline 65
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://developers.openai.com/api/docs/models/gpt-image-1-mini"], - Network accessline 73
"label": "Google Gemini API", "keyEnv": ["GOOGLE_API_KEY", "GEMINI_API_KEY"], "apiBase": "https://generativelanguage.googleapis.com/v1beta", - Network accessline 74
[Credential-related source omitted] - Access to secretsline 74
[Credential-related source omitted] - Network accessline 75
"apiBase": "https://generativelanguage.googleapis.com/v1beta", - Access to secretsline 76
[Credential-related source omitted] - Network accessline 77
"kinds": ["image"], "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/generate-content/image-generation", "https://ai.google.dev/api/generate-content", "https://ai.google.dev/gemini-api/docs/api-key", " - Network accessline 78
"verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/generate-content/image-generation", "https://ai.google.dev/api/generate-content", "https://ai.google.dev/gemini-api/docs/api-key", "https://ai.google.dev/gemi - Network accessline 79
"docs": ["https://ai.google.dev/gemini-api/docs/generate-content/image-generation", "https://ai.google.dev/api/generate-content", "https://ai.google.dev/gemini-api/docs/api-key", "https://ai.google.dev/gemini-api/docs/generate-content/api-e - Network accessline 82
"models": { "gemini-3.1-flash-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image"], - Network accessline 83
"gemini-3.1-flash-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image"], "image": {"generate": true, "edit": "instruct", "refs_max": 14, "t - Network accessline 84
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image"], - Network accessline 91
}, "gemini-3-pro-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3-pro-image"], - Network accessline 92
"gemini-3-pro-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3-pro-image"], "image": {"generate": true, "edit": "instruct", "refs_max": 14, "transpare - Network accessline 93
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3-pro-image"], - Network accessline 100
}, "gemini-3.1-flash-lite-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-image"], - Network accessline 101
"gemini-3.1-flash-lite-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-image"], "image": {"generate": true, "edit": "instruct", "refs_ma - Network accessline 102
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-image"], - Network accessline 113
"label": "xAI API", "keyEnv": ["XAI_API_KEY"], "apiBase": "https://api.x.ai/v1", - Network accessline 114
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Network accessline 115
"apiBase": "https://api.x.ai/v1", - Network accessline 117
"kinds": ["image", "video"], "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/model-capabilities/video/generation", "https://docs.x.ai/developers/model-capabilities/video/reference-to-video", "https://docs.x.ai - Network accessline 118
"verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/model-capabilities/video/generation", "https://docs.x.ai/developers/model-capabilities/video/reference-to-video", "https://docs.x.ai/developers/model-capabilities/imag - Network accessline 119
"docs": ["https://docs.x.ai/developers/model-capabilities/video/generation", "https://docs.x.ai/developers/model-capabilities/video/reference-to-video", "https://docs.x.ai/developers/model-capabilities/images/generation", "https://docs.x.ai - Network accessline 123
"models": { "grok-imagine-image-2.0": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-image-2.0"], - Network accessline 124
"grok-imagine-image-2.0": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-image-2.0"], "image": {"generate": true, "edit": "instruct", "refs_max": 5, "transparent - Network accessline 125
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-image-2.0"], - Network accessline 132
}, "grok-imagine-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-image"], - Network accessline 133
"grok-imagine-image": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-image"], "image": {"generate": true, "edit": "instruct", "refs_max": 1, "transparent_bg": "n - Network accessline 134
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-image"], - Network accessline 140
}, "grok-imagine-video-1.5": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video-1.5", "https://docs.x.ai/developers/model-capabilities/video/reference-to-video"] - Network accessline 141
"grok-imagine-video-1.5": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video-1.5", "https://docs.x.ai/developers/model-capabilities/video/reference-to-video"], - Network accessline 142
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video-1.5", "https://docs.x.ai/developers/model-capabilities/video/reference-to-video"], - Network accessline 148
}, "grok-imagine-video-1.5-lite": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video-1.5-lite"], - Network accessline 149
"grok-imagine-video-1.5-lite": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video-1.5-lite"], "video": {"i2v": true, "last_frame": false, "durations": {"min": - Network accessline 150
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video-1.5-lite"], - Network accessline 156
}, "grok-imagine-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video"], - Network accessline 157
"grok-imagine-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video"], "video": {"i2v": true, "last_frame": false, "durations": {"min": 1, "max": 15, "ste - Network accessline 158
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.x.ai/developers/models/grok-imagine-video"], - Network accessline 167
"label": "BytePlus ModelArk API", "keyEnv": ["ARK_API_KEY"], "apiBase": "https://ark.ap-southeast.bytepluses.com/api/v3", - Network accessline 168
[Credential-related source omitted] - Access to secretsline 168
[Credential-related source omitted] - Network accessline 169
"apiBase": "https://ark.ap-southeast.bytepluses.com/api/v3", - Network accessline 171
"kinds": ["image", "video"], "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1541523", "https://docs.byteplus.com/en/docs/ModelArk/1520757", "https://docs.byteplus.com/en/docs/ModelArk/1521309", - Network accessline 172
"verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1541523", "https://docs.byteplus.com/en/docs/ModelArk/1520757", "https://docs.byteplus.com/en/docs/ModelArk/1521309", "https://docs.byteplus.com/en/docs/ - Network accessline 173
"docs": ["https://docs.byteplus.com/en/docs/ModelArk/1541523", "https://docs.byteplus.com/en/docs/ModelArk/1520757", "https://docs.byteplus.com/en/docs/ModelArk/1521309", "https://docs.byteplus.com/en/docs/ModelArk/1330310", "https://docs.b - Network accessline 177
"models": { "dola-seedream-5-0-pro-260628": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedream-5-0-pro"], - Network accessline 178
"dola-seedream-5-0-pro-260628": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedream-5-0-pro"], "image": {"generate": true, "edit": "instruct", "refs_max": 10, "tra - Network accessline 179
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedream-5-0-pro"], - Network accessline 185
}, "dola-seedream-5-0-flash-260915": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1541523"], - Network accessline 186
"dola-seedream-5-0-flash-260915": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1541523"], "image": {"generate": true, "edit": "instruct", "refs_max": 10, "transparen - Network accessline 187
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1541523"], - Network accessline 193
}, "dreamina-seedance-2-0-260128": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedance-2-0", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 194
"dreamina-seedance-2-0-260128": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedance-2-0", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], "video": {"i2v": t - Network accessline 195
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedance-2-0", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 203
}, "dreamina-seedance-2-0-mini-260615": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedance-2-0", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 204
"dreamina-seedance-2-0-mini-260615": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedance-2-0", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], "video": {"i2 - Network accessline 205
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/modelark/seedance-2-0", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 213
}, "dreamina-seedance-2-0-fast-260128": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 214
"dreamina-seedance-2-0-fast-260128": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1520757"], "video": {"i2v": true, "last_frame": true, "durations": {"min": 4, "max" - Network accessline 215
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 222
}, "dreamina-seedance-2-5-260628": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/2607688", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 223
"dreamina-seedance-2-5-260628": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/2607688", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], "video": {"i2v": true, - Network accessline 224
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://docs.byteplus.com/en/docs/ModelArk/2607688", "https://docs.byteplus.com/en/docs/ModelArk/1520757"], - Network accessline 236
"label": "fal.ai API", "keyEnv": ["FAL_KEY"], "apiBase": "https://queue.fal.run", - Network accessline 237
[Credential-related source omitted] - Network accessline 238
"apiBase": "https://queue.fal.run", - Network accessline 240
"kinds": ["image", "video"], "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/docs/model-apis/model-endpoints/queue", "https://fal.ai/docs/documentation/model-apis/errors.md", "https://fal.ai/docs/documentation/model-apis/me - Network accessline 241
"verifiedAt": "2026-10-06", "docs": ["https://fal.ai/docs/model-apis/model-endpoints/queue", "https://fal.ai/docs/documentation/model-apis/errors.md", "https://fal.ai/docs/documentation/model-apis/media-expiration", "https://fal.ai/do - Network accessline 242
"docs": ["https://fal.ai/docs/model-apis/model-endpoints/queue", "https://fal.ai/docs/documentation/model-apis/errors.md", "https://fal.ai/docs/documentation/model-apis/media-expiration", "https://fal.ai/docs/documentation/setting-up/authen - Network accessline 243
"uploads": "inputs go to the fal CDN first, as the official fal_client does (POST https://rest.fal.ai/storage/auth/token?storage_type=fal-cdn-v3, then POST https://v3.fal.media/files/upload): free requests made before the paid one; --provid - Network accessline 247
"models": { "fal-ai/veo3.1/first-last-frame-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/veo3.1/first-last-frame-to-video/api"], - Network accessline 248
"fal-ai/veo3.1/first-last-frame-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/veo3.1/first-last-frame-to-video/api"], "video": {"i2v": true, "last_frame": true, "duratio - Network accessline 249
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/veo3.1/first-last-frame-to-video/api"], - Network accessline 256
}, "fal-ai/veo3.1/fast/first-last-frame-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/veo3.1/fast/first-last-frame-to-video/api"], - Network accessline 257
"fal-ai/veo3.1/fast/first-last-frame-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/veo3.1/fast/first-last-frame-to-video/api"], "video": {"i2v": true, "last_frame": true - Network accessline 258
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/veo3.1/fast/first-last-frame-to-video/api"], - Network accessline 265
}, "fal-ai/kling-video/v3/pro/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/kling-video/v3/pro/image-to-video/api"], - Network accessline 266
"fal-ai/kling-video/v3/pro/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/kling-video/v3/pro/image-to-video/api"], "video": {"i2v": true, "last_frame": true, "durat - Network accessline 267
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/kling-video/v3/pro/image-to-video/api"], - Network accessline 274
}, "fal-ai/kling-video/v3/standard/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/kling-video/v3/standard/image-to-video/api"], - Network accessline 275
"fal-ai/kling-video/v3/standard/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/kling-video/v3/standard/image-to-video/api"], "video": {"i2v": true, "last_frame": tr - Network accessline 276
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/kling-video/v3/standard/image-to-video/api"], - Network accessline 282
}, "luma/agent/ray/v3.2/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/luma/agent/ray/v3.2/image-to-video/api"], - Network accessline 283
"luma/agent/ray/v3.2/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/luma/agent/ray/v3.2/image-to-video/api"], "video": {"i2v": true, "last_frame": true, "durations": {"val - Network accessline 284
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/luma/agent/ray/v3.2/image-to-video/api"], - Network accessline 292
}, "minimax/h3/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/minimax/h3/image-to-video/api"], - Network accessline 293
"minimax/h3/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/minimax/h3/image-to-video/api"], "video": {"i2v": true, "last_frame": true, "durations": {"min": 5, "max": 15, " - Network accessline 294
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/minimax/h3/image-to-video/api"], - Network accessline 301
}, "alibaba/wan-3.0/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/alibaba/wan-3.0/image-to-video/api"], - Network accessline 302
"alibaba/wan-3.0/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/alibaba/wan-3.0/image-to-video/api"], "video": {"i2v": true, "last_frame": true, "durations": {"min": 2, "m - Network accessline 303
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/alibaba/wan-3.0/image-to-video/api"], - Network accessline 311
}, "fal-ai/vidu/q3/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/vidu/q3/image-to-video/api"], - Network accessline 312
"fal-ai/vidu/q3/image-to-video": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/vidu/q3/image-to-video/api"], "video": {"i2v": true, "last_frame": true, "durations": {"min": 1, "max - Network accessline 313
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/vidu/q3/image-to-video/api"], - Network accessline 320
}, "lightricks/ltx-2.5/image-to-video/pro": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/lightricks/ltx-2.5/image-to-video/pro/api"], - Network accessline 321
"lightricks/ltx-2.5/image-to-video/pro": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/lightricks/ltx-2.5/image-to-video/pro/api"], "video": {"i2v": true, "last_frame": true, "durations": - Network accessline 322
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/lightricks/ltx-2.5/image-to-video/pro/api"], - Network accessline 330
}, "lightricks/ltx-2.5/image-to-video/fast": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/lightricks/ltx-2.5/image-to-video/fast/api"], - Network accessline 331
"lightricks/ltx-2.5/image-to-video/fast": { "kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/lightricks/ltx-2.5/image-to-video/fast/api"], "video": {"i2v": true, "last_frame": true, "durations - Network accessline 332
"kind": "video", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/lightricks/ltx-2.5/image-to-video/fast/api"], - Network accessline 340
}, "fal-ai/nano-banana-2/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/nano-banana-2/edit/api"], - Network accessline 341
"fal-ai/nano-banana-2/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/nano-banana-2/edit/api"], "image": {"generate": false, "edit": "instruct", "refs_max": 14, "transparent_b - Network accessline 342
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/nano-banana-2/edit/api"], - Network accessline 350
}, "fal-ai/nano-banana-pro/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/nano-banana-pro/edit/api"], - Network accessline 351
"fal-ai/nano-banana-pro/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/nano-banana-pro/edit/api"], "image": {"generate": false, "edit": "instruct", "refs_max": 14, "transpare - Network accessline 352
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/fal-ai/nano-banana-pro/edit/api"], - Network accessline 360
}, "bytedance/seedream/v5/pro/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/bytedance/seedream/v5/pro/edit/api"], - Network accessline 361
"bytedance/seedream/v5/pro/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/bytedance/seedream/v5/pro/edit/api"], "image": {"generate": false, "edit": "instruct", "refs_max": 10, "tra - Network accessline 362
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/bytedance/seedream/v5/pro/edit/api"], - Network accessline 369
}, "openai/gpt-image-2/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/openai/gpt-image-2/edit/api"], - Network accessline 370
"openai/gpt-image-2/edit": { "kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/openai/gpt-image-2/edit/api"], "image": {"generate": false, "edit": "mask", "refs_max": 16, "transparent_bg": "nat - Network accessline 371
"kind": "image", "verifiedAt": "2026-10-06", "docs": ["https://fal.ai/models/openai/gpt-image-2/edit/api"],
skills/generate2dmedia/references/cli-routes.md
skills/generate2dmedia/references/prices.json
- Network accessline 5
"notes": "List prices transcribed from the vendors' pricing pages on 2026-10-06 (provider-survey.md); no live call was made. Excludes tax, rejected or regenerated attempts and subscription quotas. A request whose provider, model, unit and q - Network accessline 6
"rows": [ {"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1024", "quality": "low", "usd": 0.006, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06" - Network accessline 7
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1024", "quality": "low", "usd": 0.006, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 8
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1024", "quality": "medium", "usd": 0.053, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 9
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1024", "quality": "high", "usd": 0.211, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 10
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1536x1024", "quality": "low", "usd": 0.005, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 11
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1536x1024", "quality": "medium", "usd": 0.041, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 12
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1536x1024", "quality": "high", "usd": 0.165, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 13
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1536", "quality": "low", "usd": 0.005, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 14
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1536", "quality": "medium", "usd": 0.041, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 15
{"provider": "openai", "model": "gpt-image-2", "unit": "output_image", "size": "1024x1536", "quality": "high", "usd": 0.165, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06"}, - Network accessline 16
{"provider": "openai", "model": "gpt-image-2.5-sunburst", "unit": "output_image", "size": "1024x1024", "quality": "low", "usd": 0.0059, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", - Network accessline 17
{"provider": "openai", "model": "gpt-image-2.5-sunburst", "unit": "output_image", "size": "1024x1024", "quality": "medium", "usd": 0.0132, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06 - Network accessline 18
{"provider": "openai", "model": "gpt-image-2.5-sunburst", "unit": "output_image", "size": "1024x1024", "quality": "high", "usd": 0.0527, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", - Network accessline 19
{"provider": "openai", "model": "gpt-image-2.5-sunburst", "unit": "output_image", "size": "1024x1024", "quality": "xhigh", "usd": 0.0937, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06" - Network accessline 20
{"provider": "openai", "model": "gpt-image-2.5-sunburst", "unit": "output_image", "size": "1024x1024", "quality": "max", "usd": 0.2107, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", - Network accessline 21
{"provider": "openai", "model": "gpt-image-2.5-flare", "unit": "output_image", "size": "1024x1024", "quality": "low", "usd": 0.0059, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", "no - Network accessline 22
{"provider": "openai", "model": "gpt-image-2.5-flare", "unit": "output_image", "size": "1024x1024", "quality": "medium", "usd": 0.0132, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", - Network accessline 23
{"provider": "openai", "model": "gpt-image-2.5-flare", "unit": "output_image", "size": "1024x1024", "quality": "high", "usd": 0.0527, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", "n - Network accessline 24
{"provider": "openai", "model": "gpt-image-2.5-flare", "unit": "output_image", "size": "1024x1024", "quality": "xhigh", "usd": 0.0937, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", " - Network accessline 25
{"provider": "openai", "model": "gpt-image-2.5-flare", "unit": "output_image", "size": "1024x1024", "quality": "max", "usd": 0.2107, "source": "https://developers.openai.com/api/docs/guides/image-generation", "verifiedAt": "2026-10-06", "no - Network accessline 26
{"provider": "gemini", "model": "gemini-3.1-flash-image", "unit": "output_image", "resolution": "512", "usd": 0.045, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 27
{"provider": "gemini", "model": "gemini-3.1-flash-image", "unit": "output_image", "resolution": "1K", "usd": 0.067, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 28
{"provider": "gemini", "model": "gemini-3.1-flash-image", "unit": "output_image", "resolution": "2K", "usd": 0.101, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 29
{"provider": "gemini", "model": "gemini-3.1-flash-image", "unit": "output_image", "resolution": "4K", "usd": 0.151, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 30
{"provider": "gemini", "model": "gemini-3-pro-image", "unit": "output_image", "resolution": "1K", "usd": 0.134, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 31
{"provider": "gemini", "model": "gemini-3-pro-image", "unit": "output_image", "resolution": "2K", "usd": 0.134, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 32
{"provider": "gemini", "model": "gemini-3-pro-image", "unit": "output_image", "resolution": "4K", "usd": 0.24, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 33
{"provider": "gemini", "model": "gemini-3-pro-image", "unit": "input_image", "usd": 0.0011, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06", "note": "560 input tokens per image at $2 per 1M"}, - Network accessline 34
{"provider": "gemini", "model": "gemini-3.1-flash-lite-image", "unit": "output_image", "resolution": "1K", "usd": 0.0336, "source": "https://ai.google.dev/gemini-api/docs/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 35
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "output_image", "resolution": "1k", "quality": "low", "usd": 0.04, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 36
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "output_image", "resolution": "1.5k", "quality": "low", "usd": 0.05, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 37
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "output_image", "resolution": "2k", "quality": "low", "usd": 0.06, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 38
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "output_image", "resolution": "1k", "quality": "medium", "usd": 0.06, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 39
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "output_image", "resolution": "1.5k", "quality": "medium", "usd": 0.07, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 40
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "output_image", "resolution": "2k", "quality": "medium", "usd": 0.08, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 41
{"provider": "xai", "model": "grok-imagine-image-2.0", "unit": "input_image", "usd": 0.01, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 42
{"provider": "xai", "model": "grok-imagine-image", "unit": "output_image", "resolution": "1k", "usd": 0.02, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 43
{"provider": "xai", "model": "grok-imagine-image", "unit": "output_image", "resolution": "2k", "usd": 0.02, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 44
{"provider": "xai", "model": "grok-imagine-image", "unit": "input_image", "usd": 0.002, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 45
{"provider": "xai", "model": "grok-imagine-video-1.5", "unit": "output_second", "resolution": "480p", "usd": 0.08, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 46
{"provider": "xai", "model": "grok-imagine-video-1.5", "unit": "output_second", "resolution": "720p", "usd": 0.14, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 47
{"provider": "xai", "model": "grok-imagine-video-1.5", "unit": "output_second", "resolution": "1080p", "usd": 0.25, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 48
{"provider": "xai", "model": "grok-imagine-video-1.5", "unit": "input_image", "usd": 0.01, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 49
{"provider": "xai", "model": "grok-imagine-video-1.5-lite", "unit": "output_second", "resolution": "480p", "usd": 0.02, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 50
{"provider": "xai", "model": "grok-imagine-video-1.5-lite", "unit": "output_second", "resolution": "720p", "usd": 0.03, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 51
{"provider": "xai", "model": "grok-imagine-video-1.5-lite", "unit": "output_second", "resolution": "1080p", "usd": 0.14, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 52
{"provider": "xai", "model": "grok-imagine-video-1.5-lite", "unit": "input_image", "usd": 0.01, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 53
{"provider": "xai", "model": "grok-imagine-video", "unit": "output_second", "resolution": "480p", "usd": 0.05, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 54
{"provider": "xai", "model": "grok-imagine-video", "unit": "output_second", "resolution": "720p", "usd": 0.07, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 55
{"provider": "xai", "model": "grok-imagine-video", "unit": "input_image", "usd": 0.002, "source": "https://docs.x.ai/developers/pricing", "verifiedAt": "2026-10-06"}, - Network accessline 56
{"provider": "byteplus", "model": "dola-seedream-5-0-pro-260628", "unit": "output_image", "resolution": "up-to-2.61MP", "usd": 0.045, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "up to - Network accessline 57
{"provider": "byteplus", "model": "dola-seedream-5-0-pro-260628", "unit": "output_image", "resolution": "above-2.61MP", "usd": 0.09, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "above - Network accessline 58
{"provider": "byteplus", "model": "dola-seedream-5-0-pro-260628", "unit": "input_image", "usd": 0.003, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "the first reference image is free"}, - Network accessline 59
{"provider": "byteplus", "model": "dola-seedream-5-0-flash-260915", "unit": "output_image", "usd": 0.018, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "reference images are free"}, - Network accessline 60
{"provider": "byteplus", "model": "dreamina-seedance-2-0-260128", "unit": "output_second", "resolution": "480p", "usd": 0.07, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list price pe - Network accessline 61
{"provider": "byteplus", "model": "dreamina-seedance-2-0-260128", "unit": "output_second", "resolution": "720p", "usd": 0.15, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list price pe - Network accessline 62
{"provider": "byteplus", "model": "dreamina-seedance-2-0-260128", "unit": "output_second", "resolution": "1080p", "usd": 0.37, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list price p - Network accessline 63
{"provider": "byteplus", "model": "dreamina-seedance-2-0-mini-260615", "unit": "output_second", "resolution": "480p", "usd": 0.04, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list pri - Network accessline 64
{"provider": "byteplus", "model": "dreamina-seedance-2-0-mini-260615", "unit": "output_second", "resolution": "720p", "usd": 0.08, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list pri - Network accessline 65
{"provider": "byteplus", "model": "dreamina-seedance-2-5-260628", "unit": "output_second", "resolution": "480p", "usd": 0.103, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list price p - Network accessline 66
{"provider": "byteplus", "model": "dreamina-seedance-2-5-260628", "unit": "output_second", "resolution": "720p", "usd": 0.231, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list price p - Network accessline 67
{"provider": "byteplus", "model": "dreamina-seedance-2-5-260628", "unit": "output_second", "resolution": "1080p", "usd": 0.569, "source": "https://docs.byteplus.com/en/docs/ModelArk/1544106", "verifiedAt": "2026-10-06", "note": "list price - Network accessline 68
{"provider": "fal", "model": "fal-ai/veo3.1/first-last-frame-to-video", "unit": "output_second", "resolution": "720p", "usd": 0.2, "source": "https://fal.ai/models/fal-ai/veo3.1/first-last-frame-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 69
{"provider": "fal", "model": "fal-ai/veo3.1/first-last-frame-to-video", "unit": "output_second", "resolution": "1080p", "usd": 0.2, "source": "https://fal.ai/models/fal-ai/veo3.1/first-last-frame-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 70
{"provider": "fal", "model": "fal-ai/veo3.1/fast/first-last-frame-to-video", "unit": "output_second", "resolution": "720p", "usd": 0.1, "source": "https://fal.ai/models/fal-ai/veo3.1/fast/first-last-frame-to-video", "verifiedAt": "2026-10-0 - Network accessline 71
{"provider": "fal", "model": "fal-ai/veo3.1/fast/first-last-frame-to-video", "unit": "output_second", "resolution": "1080p", "usd": 0.1, "source": "https://fal.ai/models/fal-ai/veo3.1/fast/first-last-frame-to-video", "verifiedAt": "2026-10- - Network accessline 72
{"provider": "fal", "model": "luma/agent/ray/v3.2/image-to-video", "unit": "output_second", "resolution": "540p", "usd": 0.03, "source": "https://fal.ai/models/luma/agent/ray/v3.2/image-to-video", "verifiedAt": "2026-10-06", "note": "per 5 - Network accessline 73
{"provider": "fal", "model": "luma/agent/ray/v3.2/image-to-video", "unit": "output_second", "resolution": "720p", "usd": 0.06, "source": "https://fal.ai/models/luma/agent/ray/v3.2/image-to-video", "verifiedAt": "2026-10-06", "note": "per 5 - Network accessline 74
{"provider": "fal", "model": "luma/agent/ray/v3.2/image-to-video", "unit": "output_second", "resolution": "1080p", "usd": 0.24, "source": "https://fal.ai/models/luma/agent/ray/v3.2/image-to-video", "verifiedAt": "2026-10-06", "note": "per 5 - Network accessline 75
{"provider": "fal", "model": "minimax/h3/image-to-video", "unit": "output_second", "resolution": "480P", "usd": 0.05, "source": "https://fal.ai/models/minimax/h3/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 76
{"provider": "fal", "model": "minimax/h3/image-to-video", "unit": "output_second", "resolution": "768P", "usd": 0.06, "source": "https://fal.ai/models/minimax/h3/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 77
{"provider": "fal", "model": "minimax/h3/image-to-video", "unit": "output_second", "resolution": "2K", "usd": 0.13, "source": "https://fal.ai/models/minimax/h3/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 78
{"provider": "fal", "model": "alibaba/wan-3.0/image-to-video", "unit": "output_second", "resolution": "480p", "usd": 0.05, "source": "https://fal.ai/models/alibaba/wan-3.0/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 79
{"provider": "fal", "model": "alibaba/wan-3.0/image-to-video", "unit": "output_second", "resolution": "720p", "usd": 0.1, "source": "https://fal.ai/models/alibaba/wan-3.0/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 80
{"provider": "fal", "model": "alibaba/wan-3.0/image-to-video", "unit": "output_second", "resolution": "1080p", "usd": 0.2, "source": "https://fal.ai/models/alibaba/wan-3.0/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 81
{"provider": "fal", "model": "fal-ai/vidu/q3/image-to-video", "unit": "output_second", "resolution": "540p", "usd": 0.07, "source": "https://fal.ai/models/fal-ai/vidu/q3/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 82
{"provider": "fal", "model": "fal-ai/vidu/q3/image-to-video", "unit": "output_second", "resolution": "720p", "usd": 0.154, "source": "https://fal.ai/models/fal-ai/vidu/q3/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 83
{"provider": "fal", "model": "fal-ai/vidu/q3/image-to-video", "unit": "output_second", "resolution": "1080p", "usd": 0.154, "source": "https://fal.ai/models/fal-ai/vidu/q3/image-to-video", "verifiedAt": "2026-10-06"}, - Network accessline 84
{"provider": "fal", "model": "lightricks/ltx-2.5/image-to-video/pro", "unit": "output_second", "resolution": "720p", "usd": 0.12, "source": "https://fal.ai/models/lightricks/ltx-2.5/image-to-video/pro", "verifiedAt": "2026-10-06"}, - Network accessline 85
{"provider": "fal", "model": "lightricks/ltx-2.5/image-to-video/pro", "unit": "output_second", "resolution": "1080p", "usd": 0.17, "source": "https://fal.ai/models/lightricks/ltx-2.5/image-to-video/pro", "verifiedAt": "2026-10-06"}, - Network accessline 86
{"provider": "fal", "model": "lightricks/ltx-2.5/image-to-video/fast", "unit": "output_second", "resolution": "720p", "usd": 0.09, "source": "https://fal.ai/models/lightricks/ltx-2.5/image-to-video/fast", "verifiedAt": "2026-10-06"}, - Network accessline 87
{"provider": "fal", "model": "lightricks/ltx-2.5/image-to-video/fast", "unit": "output_second", "resolution": "1080p", "usd": 0.13, "source": "https://fal.ai/models/lightricks/ltx-2.5/image-to-video/fast", "verifiedAt": "2026-10-06"}, - Network accessline 88
{"provider": "fal", "model": "fal-ai/kling-video/v3/pro/image-to-video", "unit": "output_second", "usd": 0.112, "source": "https://fal.ai/models/fal-ai/kling-video/v3/pro/image-to-video", "verifiedAt": "2026-10-06", "note": "audio off"}, - Network accessline 89
{"provider": "fal", "model": "fal-ai/kling-video/v3/standard/image-to-video", "unit": "output_second", "usd": 0.084, "source": "https://fal.ai/models/fal-ai/kling-video/v3/standard/image-to-video", "verifiedAt": "2026-10-06", "note": "audio - Network accessline 90
{"provider": "fal", "model": "fal-ai/nano-banana-2/edit", "unit": "output_image", "resolution": "0.5K", "usd": 0.06, "source": "https://fal.ai/models/fal-ai/nano-banana-2/edit", "verifiedAt": "2026-10-06"}, - Network accessline 91
{"provider": "fal", "model": "fal-ai/nano-banana-2/edit", "unit": "output_image", "resolution": "1K", "usd": 0.08, "source": "https://fal.ai/models/fal-ai/nano-banana-2/edit", "verifiedAt": "2026-10-06"}, - Network accessline 92
{"provider": "fal", "model": "fal-ai/nano-banana-2/edit", "unit": "output_image", "resolution": "2K", "usd": 0.12, "source": "https://fal.ai/models/fal-ai/nano-banana-2/edit", "verifiedAt": "2026-10-06"}, - Network accessline 93
{"provider": "fal", "model": "fal-ai/nano-banana-2/edit", "unit": "output_image", "resolution": "4K", "usd": 0.16, "source": "https://fal.ai/models/fal-ai/nano-banana-2/edit", "verifiedAt": "2026-10-06"}, - Network accessline 94
{"provider": "fal", "model": "fal-ai/nano-banana-pro/edit", "unit": "output_image", "resolution": "1K", "usd": 0.15, "source": "https://fal.ai/models/fal-ai/nano-banana-pro/edit", "verifiedAt": "2026-10-06"}, - Network accessline 95
{"provider": "fal", "model": "fal-ai/nano-banana-pro/edit", "unit": "output_image", "resolution": "2K", "usd": 0.15, "source": "https://fal.ai/models/fal-ai/nano-banana-pro/edit", "verifiedAt": "2026-10-06"}, - Network accessline 96
{"provider": "fal", "model": "fal-ai/nano-banana-pro/edit", "unit": "output_image", "resolution": "4K", "usd": 0.3, "source": "https://fal.ai/models/fal-ai/nano-banana-pro/edit", "verifiedAt": "2026-10-06"}, - Network accessline 97
{"provider": "fal", "model": "bytedance/seedream/v5/pro/edit", "unit": "output_image", "resolution": "up-to-1536", "usd": 0.0675, "source": "https://fal.ai/models/bytedance/seedream/v5/pro/edit", "verifiedAt": "2026-10-06", "note": "up to 1 - Network accessline 98
{"provider": "fal", "model": "bytedance/seedream/v5/pro/edit", "unit": "output_image", "resolution": "up-to-2048", "usd": 0.135, "source": "https://fal.ai/models/bytedance/seedream/v5/pro/edit", "verifiedAt": "2026-10-06", "note": "up to 20 - Network accessline 99
{"provider": "fal", "model": "bytedance/seedream/v5/pro/edit", "unit": "input_image", "usd": 0.0045, "source": "https://fal.ai/models/bytedance/seedream/v5/pro/edit", "verifiedAt": "2026-10-06", "note": "each reference after the first"}, - Network accessline 100
{"provider": "fal", "model": "openai/gpt-image-2/edit", "unit": "output_image", "size": "1024x1024", "quality": "low", "usd": 0.015, "source": "https://fal.ai/models/openai/gpt-image-2/edit", "verifiedAt": "2026-10-06"}, - Network accessline 101
{"provider": "fal", "model": "openai/gpt-image-2/edit", "unit": "output_image", "size": "1024x1024", "quality": "medium", "usd": 0.061, "source": "https://fal.ai/models/openai/gpt-image-2/edit", "verifiedAt": "2026-10-06"}, - Network accessline 102
{"provider": "fal", "model": "openai/gpt-image-2/edit", "unit": "output_image", "size": "1024x1024", "quality": "high", "usd": 0.219, "source": "https://fal.ai/models/openai/gpt-image-2/edit", "verifiedAt": "2026-10-06"}
skills/generate2dmedia/references/provider-survey.md
- Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Access to secretsline 33
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Network accessline 72
recorded as the actual cost. Image edits are JSON, never multipart. The zero-data-retention upload URL goes in `output.upload_url`. - **BytePlus ModelArk**: base `https://ark.ap-southeast.bytepluses.com/api/v3`. Seedream watermarks - Network accessline 73
upload URL goes in `output.upload_url`. - **BytePlus ModelArk**: base `https://ark.ap-southeast.bytepluses.com/api/v3`. Seedream watermarks by default (ASF sends `watermark: false`), answers JPEG unless asked (`output_format: png`) and - Network accessline 74
- **BytePlus ModelArk**: base `https://ark.ap-southeast.bytepluses.com/api/v3`. Seedream watermarks - Network accessline 80
[Credential-related source omitted] - Network accessline 81
[Credential-related source omitted] - Network accessline 82
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Network accessline 189
- OpenAI: [Terms of Use](https://openai.com/policies/terms-of-use/), - Network accessline 190
[Services Agreement](https://openai.com/policies/services-agreement/), - Network accessline 191
[Usage Policies](https://openai.com/policies/usage-policies/). - Network accessline 192
- xAI: [Terms of Service](https://x.ai/legal/terms-of-service), - Network accessline 193
[Enterprise Terms](https://x.ai/legal/terms-of-service-enterprise), - Network accessline 194
[Acceptable Use Policy](https://x.ai/legal/acceptable-use-policy). - Network accessline 208
OpenAI [image guide](https://developers.openai.com/api/docs/guides/image-generation), - Network accessline 209
[Images reference](https://developers.openai.com/api/reference/resources/images), - Network accessline 210
[deprecations](https://developers.openai.com/api/docs/deprecations); - Network accessline 211
Google [image generation](https://ai.google.dev/gemini-api/docs/generate-content/image-generation), - Network accessline 212
[generateContent](https://ai.google.dev/api/generate-content), - Network accessline 213
[API keys](https://ai.google.dev/gemini-api/docs/api-key), - Network accessline 214
[errors](https://ai.google.dev/gemini-api/docs/generate-content/api-errors), - Network accessline 215
[pricing](https://ai.google.dev/gemini-api/docs/pricing), - Network accessline 216
[deprecations](https://ai.google.dev/gemini-api/docs/deprecations); - Network accessline 217
xAI [video generation](https://docs.x.ai/developers/model-capabilities/video/generation), - Network accessline 218
[reference to video](https://docs.x.ai/developers/model-capabilities/video/reference-to-video), - Network accessline 219
[multi-image editing](https://docs.x.ai/developers/model-capabilities/images/multi-image-editing), - Network accessline 220
[pricing](https://docs.x.ai/developers/pricing); - Network accessline 221
BytePlus [image API](https://docs.byteplus.com/en/docs/ModelArk/1541523), - Network accessline 222
[video task](https://docs.byteplus.com/en/docs/ModelArk/1520757), - Network accessline 223
[query task](https://docs.byteplus.com/en/docs/ModelArk/1521309), - Network accessline 224
[error codes](https://docs.byteplus.com/en/docs/ModelArk/1299023), - Network accessline 225
[pricing](https://docs.byteplus.com/en/docs/ModelArk/1544106); - Network accessline 226
fal.ai [queue](https://fal.ai/docs/model-apis/model-endpoints/queue), - Network accessline 227
[errors](https://fal.ai/docs/documentation/model-apis/errors.md), - Network accessline 228
[media expiration](https://fal.ai/docs/documentation/model-apis/media-expiration), - Network accessline 229
[fal_client uploads](https://github.com/fal-ai/fal/blob/main/projects/fal_client/src/fal_client/client.py) - Network accessline 230
and each model's page `https://fal.ai/models/<endpoint-id>`.
skills/generate2dmedia/references/route-media.md
- Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 134
[Credential-related source omitted] - Access to secretsline 134
[Credential-related source omitted] - Access to secretsline 134
[Credential-related source omitted] - Access to secretsline 134
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted]
skills/generate2dmedia/references/schemas/common.schema.json
skills/generate2dmedia/references/schemas/media.schema.json
- Network accessline 1
{ "$schema": "https://json-schema.org/draft/2020-12/schema", - Network accessline 2
"$schema": "https://json-schema.org/draft/2020-12/schema", - Network accessline 3
"$id": "https://raw.githubusercontent.com/0x0funky/agent-sprite-forge/main/shared/schemas/media.schema.json", "title": "generate2dmedia contracts", "description": "Frozen contracts, version 1, for paid or quota-consuming media requests:
skills/generate2dmedia/scripts/cli_media.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Dangerous shell operationline 88
MAX_IMAGE_REFERENCES = 8 # Codex attaches them to codex exec (--image); 64 MiB together at most - Dangerous shell operationline 88
MAX_IMAGE_REFERENCES = 8 # Codex attaches them to codex exec (--image); 64 MiB together at most - Dangerous shell operationline 88
MAX_IMAGE_REFERENCES = 8 # Codex attaches them to codex exec (--image); 64 MiB together at most - Dangerous shell operationline 130
# --- Codex: one image through codex exec (recipe codex-exec-imagegen/1; verified by the owner on - Dangerous shell operationline 130
# --- Codex: one image through codex exec (recipe codex-exec-imagegen/1; verified by the owner on - Dangerous shell operationline 130
# --- Codex: one image through codex exec (recipe codex-exec-imagegen/1; verified by the owner on - Access to secretsline 241
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted] - Possible obfuscationline 1802
data = base64.b64decode(chosen, validate=True) - Possible obfuscationline 1802
data = base64.b64decode(chosen, validate=True) - Possible obfuscationline 1802
data = base64.b64decode(chosen, validate=True)
skills/generate2dmedia/scripts/forge_doctor.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Possible obfuscationline 120
NATIVE_MAGIC = (b"MZ", b"\x7fELF", b"\xfe\xed\xfa\xce", b"\xfe\xed\xfa\xcf", b"\xce\xfa\xed\xfe", - Possible obfuscationline 120
NATIVE_MAGIC = (b"MZ", b"\x7fELF", b"\xfe\xed\xfa\xce", b"\xfe\xed\xfa\xcf", b"\xce\xfa\xed\xfe", - Possible obfuscationline 120
NATIVE_MAGIC = (b"MZ", b"\x7fELF", b"\xfe\xed\xfa\xce", b"\xfe\xed\xfa\xcf", b"\xce\xfa\xed\xfe", - Possible obfuscationline 120
NATIVE_MAGIC = (b"MZ", b"\x7fELF", b"\xfe\xed\xfa\xce", b"\xfe\xed\xfa\xcf", b"\xce\xfa\xed\xfe", - Possible obfuscationline 121
b"\xcf\xfa\xed\xfe", b"\xca\xfe\xba\xbe") - Possible obfuscationline 121
b"\xcf\xfa\xed\xfe", b"\xca\xfe\xba\xbe") - Possible obfuscationline 121
b"\xcf\xfa\xed\xfe", b"\xca\xfe\xba\xbe") - Possible obfuscationline 121
b"\xcf\xfa\xed\xfe", b"\xca\xfe\xba\xbe") - Access to secretsline 293
[Credential-related source omitted] - Access to secretsline 293
[Credential-related source omitted] - Access to secretsline 293
[Credential-related source omitted] - Access to secretsline 293
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 329
[Credential-related source omitted] - Access to secretsline 329
[Credential-related source omitted] - Access to secretsline 329
[Credential-related source omitted] - Access to secretsline 329
[Credential-related source omitted] - Access to secretsline 346
[Credential-related source omitted] - Access to secretsline 346
[Credential-related source omitted] - Access to secretsline 346
[Credential-related source omitted] - Access to secretsline 346
[Credential-related source omitted] - Access to secretsline 383
[Credential-related source omitted] - Access to secretsline 383
[Credential-related source omitted] - Access to secretsline 383
[Credential-related source omitted] - Access to secretsline 383
[Credential-related source omitted] - Access to secretsline 498
[Credential-related source omitted] - Access to secretsline 498
[Credential-related source omitted] - Access to secretsline 498
[Credential-related source omitted] - Access to secretsline 498
[Credential-related source omitted] - Access to secretsline 785
[Credential-related source omitted] - Access to secretsline 785
[Credential-related source omitted] - Access to secretsline 785
[Credential-related source omitted] - Access to secretsline 785
[Credential-related source omitted]
skills/generate2dmedia/scripts/generate_media.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 13
[Credential-related source omitted] - Network accessline 20
from datetime import datetime, timezone import hashlib import http.client - Network accessline 21
import hashlib import http.client import io - Network accessline 22
import http.client - Network accessline 116
class _TrackedHTTPSConnection(http.client.HTTPSConnection): - Network accessline 307
try: return exc.read(65536) except (AttributeError, OSError, ValueError, http.client.HTTPException): - Network accessline 308
return exc.read(65536) except (AttributeError, OSError, ValueError, http.client.HTTPException): return b"" - Network accessline 309
except (AttributeError, OSError, ValueError, http.client.HTTPException): - Network accessline 557
raise MediaError(f"{text}; the request was not sent", code="not_sent" if paid else "network", sent=False) from None raise _lost(paid, f"Connection failed while sending ({type(exc.reason).__name__})") from None except (OS - Network accessline 558
raise _lost(paid, f"Connection failed while sending ({type(exc.reason).__name__})") from None except (OSError, http.client.HTTPException) as exc: raise _lost(paid, f"No complete response after the request was sent ({type - Network accessline 559
except (OSError, http.client.HTTPException) as exc: - Network accessline 590
raise MediaError(f"Media download failed (HTTP {exc.code}); a known job can be resumed", code="network") \ from None except (OSError, http.client.HTTPException): - Network accessline 591
from None except (OSError, http.client.HTTPException): raise MediaError("Media download failed; use resume for a known video request", code="network") from None - Network accessline 592
except (OSError, http.client.HTTPException): raise MediaError("Media download failed; use resume for a known video request", code="network") from None if len(data) > DOWNLOAD_LIMIT: - Access to secretsline 945
[Credential-related source omitted] - Access to secretsline 1103
[Credential-related source omitted] - Access to secretsline 1105
[Credential-related source omitted]
skills/generate2dmedia/scripts/media_config.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 11
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 18
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 46
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 115
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 136
[Credential-related source omitted] - Access to secretsline 191
[Credential-related source omitted]
skills/generate2dmedia/scripts/media_ledger.py
skills/generate2dmedia/scripts/media_mp4.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dmedia/scripts/media_providers.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Access to secretsline 8
[Credential-related source omitted] - Access to secretsline 9
[Credential-related source omitted] - Possible obfuscationline 310
return base64.b64decode(value, validate=True) - Network accessline 1041
auth_scheme = "Key" reserved = frozenset({"prompt"}) TOKEN_URL = "https://rest.fal.ai/storage/auth/token?storage_type=fal-cdn-v3" - Network accessline 1042
reserved = frozenset({"prompt"}) TOKEN_URL = "https://rest.fal.ai/storage/auth/token?storage_type=fal-cdn-v3" UPLOAD_URL = "https://v3.fal.media/files/upload" - Network accessline 1043
TOKEN_URL = "https://rest.fal.ai/storage/auth/token?storage_type=fal-cdn-v3" - Network accessline 1044
UPLOAD_URL = "https://v3.fal.media/files/upload"
skills/generate2dmedia/scripts/route_media.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 343
[Credential-related source omitted] - Access to secretsline 343
[Credential-related source omitted] - Access to secretsline 343
[Credential-related source omitted] - Access to secretsline 343
[Credential-related source omitted] - Access to secretsline 343
[Credential-related source omitted] - Access to secretsline 760
[Credential-related source omitted] - Access to secretsline 760
[Credential-related source omitted] - Access to secretsline 760
[Credential-related source omitted] - Access to secretsline 760
[Credential-related source omitted] - Access to secretsline 760
[Credential-related source omitted]
skills/generate2dsprite/SKILL.md
skills/generate2dsprite/references/runtime-integration.md
- Network accessline 85
- Aseprite separates sheet layout from animation frames and can export selected tags; a matrix is a storage layout. [Sprite sheets](https://www.aseprite.org/docs/sprite-sheet/) - Network accessline 86
- Tags group frame ranges with a playback direction; frame durations are edited separately. [Tags](https://www.aseprite.org/docs/tags/), [Frame Duration](https://www.aseprite.org/docs/frame-duration/) - Network accessline 87
- Slice pivots describe a base or central location; keep the coordinate conversion when using them as runtime origins. Lua `Frame.duration` is in seconds, while `.aseprite` frame headers store milliseconds. [Slices](https://www.aseprite.org - Network accessline 88
- Godot `SpriteFrames` stores a per-animation speed and per-frame relative durations: seconds = `relative_duration / (animation_fps * abs(playing_speed))`. For an imported duration of `ms` at speed 1, use `relative_duration = ms * animation - Network accessline 89
- Godot documents part-based cutout animation, pivots and draw order, and mixing it with frame animation. [Cutout animation](https://docs.godotengine.org/en/stable/tutorials/animation/cutout_animation.html)
skills/generate2dsprite/references/schemas/common.schema.json
skills/generate2dsprite/references/schemas/sprite.schema.json
skills/generate2dsprite/scripts/assemble_frames.py
- Executable scriptline 1
Executable file
skills/generate2dsprite/scripts/build_animation_clips.py
skills/generate2dsprite/scripts/export_engine.py
- Executable scriptline 1
Executable file
skills/generate2dsprite/scripts/forge_core.py
skills/generate2dsprite/scripts/forge_matte.py
- Executable scriptline 1
Executable file
skills/generate2dsprite/scripts/forge_palette.py
- Executable scriptline 1
Executable file
skills/generate2dsprite/scripts/generate2dsprite.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dsprite/scripts/make_anchor_layout.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dsprite/scripts/make_layout_guide.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dsprite/scripts/master_still.py
skills/generate2dsprite/scripts/palette_tool.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dsprite/scripts/pixel_reduce.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dsprite/scripts/plan_guide.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 302
guide = Image.new("RGB", (width, height), (255, 255, 255)) annotated = Image.new("RGB", (width, height), (255, 255, 255)) svg = [f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" ' - Network accessline 303
annotated = Image.new("RGB", (width, height), (255, 255, 255)) svg = [f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" ' f'viewBox="0 0 {width} {height}">', f'<rect width="{width}" height="{height}" - Network accessline 304
svg = [f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" '
skills/generate2dsprite/scripts/scale_frames.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/generate2dsprite/scripts/sheet_qc.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/SKILL.md
skills/video2dsprite/references/packed-alpha-runtime.js
- Executable scriptline 1
Executable file
skills/video2dsprite/references/runtime/forge-runtime.mjs
- Executable scriptline 1
Executable file
skills/video2dsprite/references/runtime/packed-alpha-webgl.mjs
- Executable scriptline 1
Executable file
skills/video2dsprite/references/schemas/common.schema.json
skills/video2dsprite/references/schemas/video.schema.json
skills/video2dsprite/scripts/animation_review.py
- Executable scriptline 1
Executable file - Possible obfuscationline 146
function tick(now){const dt=Math.max(0,now-last);last=now;if(loaded){const[a,b]=range();if(running){if(index<a||index>=b)index=a;elapsed+=dt*Number($('speed').value);const stepMs=1000/data.fps;const steps=Math.floor(elapsed/stepMs);elapsed-
skills/video2dsprite/scripts/colour_lock.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/engine_export.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/finish_frames.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/forge_av.py
- Executable scriptline 1
Executable file
skills/video2dsprite/scripts/forge_core.py
skills/video2dsprite/scripts/forge_matte.py
- Executable scriptline 1
Executable file
skills/video2dsprite/scripts/forge_palette.py
- Executable scriptline 1
Executable file
skills/video2dsprite/scripts/forge_schema.py
- Executable scriptline 1
Executable file
skills/video2dsprite/scripts/gait_loop.py
skills/video2dsprite/scripts/prepare_i2v_input.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/register_clip.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/retime.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/sprite_set.py
skills/video2dsprite/scripts/validate_animation.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/video2dsprite/scripts/video2dsprite.py
- Executable scriptline 1
#!/usr/bin/env python3
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 www.w3.org, which SKILL.md, the README and the plugin manifest do not mentioncodeart2d/scripts/codeart_core.py:337High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentioncodeart2d/scripts/fx_build.py:549High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentioncodeart2d/scripts/rig_animate.py:99High confidence
- Contacts ldtk.io, which SKILL.md, the README and the plugin manifest do not mentiongenerate2dmap/scripts/export_ldtk.py:671High confidence
- Contacts v3.fal.media, which SKILL.md, the README and the plugin manifest do not mentiongenerate2dmedia/scripts/media_providers.py:1044High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentiongenerate2dsprite/scripts/plan_guide.py:304High confidence
Signal confidence: 381 facts
- Network access in code of documentationcodeart2d/references/rig-animation.md:44Low confidence
- Executable script in a comment of a file that runscodeart2d/references/runtime/fx-template.mjs:1Low confidence
- Network access in code of documentationcodeart2d/references/svg-profile.md:41Low confidence
- Network access in prose of documentationcodeart2d/references/svg-profile.md:69Low confidence
- Network access in prose of documentationcodeart2d/references/svg-profile.md:70Low confidence
- Network access in prose of documentationcodeart2d/references/svg-profile.md:71Low confidence
- Executable script in code of a file that runscodeart2d/scripts/ambient_bake.py:1High confidence
- Executable script in code of a file that runscodeart2d/scripts/autotile_build.py:1High confidence
- Executable script in prose of a file that runscodeart2d/scripts/codeart_core.py:1Low confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:337High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:338High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:391High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:392High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:393High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/codeart_core.py:868Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/codeart_core.py:880Low confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:1043High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:1045High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:1133High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:1134High confidence
- Network access in code of a file that runscodeart2d/scripts/codeart_core.py:1135High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/codeart_core.py:1999Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/forge_core.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/forge_core.py:150Low confidence
- Possible obfuscation in code of a file that runscodeart2d/scripts/forge_core.py:327High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/forge_core.py:660Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/forge_nav.py:1Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/forge_schema.py:1Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/fx_build.py:1Low confidence
- Network access in code of a file that runscodeart2d/scripts/fx_build.py:547High confidence
- Network access in code of a file that runscodeart2d/scripts/fx_build.py:548High confidence
- Network access in code of a file that runscodeart2d/scripts/fx_build.py:549High confidence
- Executable script in code of a file that runscodeart2d/scripts/fx_verify.mjs:1High confidence
- Executable script in code of a file that runscodeart2d/scripts/layout_build.py:1High confidence
- Executable script in code of a file that runscodeart2d/scripts/parallax_build.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/parallax_build.py:677Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/pixel_qa.py:1Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/render_pixelspec.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/render_pixelspec.py:528Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/rig_animate.py:1Low confidence
- Network access in code of a file that runscodeart2d/scripts/rig_animate.py:99High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecodeart2d/scripts/rig_animate.py:1711Low confidence
- Executable script in prose of a file that runscodeart2d/scripts/svg_render.py:1Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valueskills/generate2dmap/SKILL.md:30Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valuegenerate2dmap/SKILL.md:30Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valueskills/generate2dmap/SKILL.md:30Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valueskills/generate2dmap/SKILL.md:30Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valueskills/generate2dmap/SKILL.md:30Low confidence
- Network access in prose of documentationgenerate2dmap/references/parallax-backgrounds.md:146Low confidence
- Executable script in a comment of a file that runsgenerate2dmap/references/runtime/map-runtime.mjs:1Low confidence
and 331 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/codeart2d/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/codeart2d/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/codeart2d/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/codeart2d/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/codeart2d/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/0x0funky-agent-sprite-forge/)