Skip to content
Content
Skill

/generate2dmedia

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

BOOST
From plugin
agent-sprite-forge
4.3k5 skills
Install
$ npx -y skills add 0x0funky/agent-sprite-forge --skill generate2dmedia --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/generate2dmedia

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

generate2dmedia.SKILL.md
name: generate2dmedia
description: 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).

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).

Route order (owner decision 2026-10-06)

1. **API**, every provider whose key is configured, in this order (the user's `providers.order` goes first). Images: OpenAI (`gpt-image-2.5-sunburst`), Google Gemini (`gemini-3.1-flash-image`; `--tier hero` takes `gemini-3-pro-image` for hero masters), xAI (`grok-imagine-image-2.0`), BytePlus ModelArk (Seedream 5.0), fal.ai (reference edits). Video: xAI (`grok-imagine-video-1.5`; `--tier draft` takes 1.5 Lite), BytePlus ModelArk (Seedance 2.0), fal.ai (Kling v3, Veo 3.1, Luma, MiniMax, Wan, Vidu, LTX). A configured key is the owner's consent: no per-call question. 2. **Local**: your own image tool if you have one (Codex `image_gen`, Grok's native tools), otherwise the user's signed-in CLI: Codex (local CLI) `image_gen` with references attached, then Grok (local CLI) one-shot image or edit; video Grok (local CLI) in ACP mode. An installed CLI is used as is; its first successful run records the VERIFIED proof. 3. **codeart2d**, only when the user explicitly asks for code-drawn art or `route_media.py` prints `no-route` (exit 3).

Always name the route that ran ("OpenAI API", "Google Gemini API", "xAI API", "BytePlus ModelArk API", "fal.ai API", "Codex (local CLI)", "Grok (local CLI)"). Details: [route-media.md](references/route-media.md).

Capability check (once per session)

Run `python "<skill-dir>/scripts/forge_doctor.py" --host-tools <tools> --save <output>/doctor.json`, where `<tools>` lists the media tools in your own tool list (`image_gen`, `image_edit`, `image_to_video`) or `none`. Its `ROUTES` block shows which API keys are configured (yes or no, never a key), the local readiness of each CLI and the resolved order (`routeOrder`). If `encoding.stdout` fails, set `PYTHONUTF8=1`.

Generate (`route_media.py`)

| Need | Command | |---|---| | Which route would run | `python "<skill-dir>/scripts/route_media.py" resolve --kind image` (or `video`; `--references N`) | | One image, still or edit | `python "<skill-dir>/scripts/route_media.py" image --prompt-file <txt> --reference <png> --size 1024x1024 --out-dir <new>` (`--reference` repeatable, in the order the prompt names them) | | Animate an approved still | `python "<skill-dir>/scripts/route_media.py" video --prompt-file <txt> --reference <still.png> --last-frame <still.png> --duration 6 --resolution 720p --out-dir <new>` | | A route or model of the user's choice | add `--route api`, `local`, `openai`, `gemini`, `xai`, `byteplus`, `fal`, `fal:<endpoint-id>`, `codex-cli`, `grok-cli` or `grok-acp`; `--model <id>`, `--tier draft` or `hero`, `--provider-option [PROVIDER:]KEY=VALUE` | | The plan and estimate first | add `--dry-run` (no key is used, nothing is sent or written) |

Success prints one ASCII JSON line and exits 0: `{"status":"ok","route":"api:openai","artifact":"<out-dir>/generated.png","sha256":...,"estimateUsd":...}` plus `model`, `job` and, for video, `lastFrameUsed`, `durationRequested` and `durationUsed` (a length is snapped to the nearest one the model renders; Grok (local CLI) renders 6 or 10 s and never pins a last frame) and `crop` when the frames were padded to 16:9 for a model without 1:1. Every clip is published without audio. No route prints `{"status":"no-route","fallback":"codeart2d"}` and exits 3. A failure prints one `error: <route>: <code>: <message>` line and exits 1. A route whose account cannot serve the request (no credit, no access, not signed in) passes it to the next route; a refusal such as moderation stops. Write prompts yourself into UTF-8 files; local routes take the size and every instruction from the prompt.

Keys

Each provider reads only its own key: `OPENAI_API_KEY`, `GOOGLE_API_KEY` or `GEMINI_API_KEY` (`GOOGLE_API_KEY` wins), `XAI_API_KEY`, `ARK_API_KEY` (BytePlus ModelArk) and `FAL_KEY` (fal.ai), from the environment or from the user config file, never from a project: `%APPDATA%\agent-sprite-forge\config.json` on Windows, `~/.config/agent-sprite-forge/config.json` elsewhere (`$XDG_CONFIG_HOME` when set), as `{"OPENAI_API_KEY": "...", "FAL_KEY": "..."}` with optional `"models"` and `"providers": {"order": [...]}`. Never print, log, commit or paste a key, and never put one in a prompt. A Codex or Grok sign-in is never an API key.

Spend and the ledger

Every call, paid or local, is a line in `<project>/.forge/ledger.jsonl` with its estimate (`estimateUsd` is null when

Read more
Ships withagent-sprite-forge

Languages: English | 繁體中文 | 简体中文 | 日本語 | 한국어 0.4 launch teaser: every frame is real ASF output.

Get the whole plugin
Stats
4,356
Stars
428
Forks
Active
Maintenance
Python
Language
MIT
License
2d ago
Last commit
5mo ago
Created

Repo: 0x0funky/agent-sprite-forge

Other skills on agent-sprite-forge.