Skip to content
Agentmart
Submit a tool

generation

Comprehensive multimodal generation via OpenRouter — images (with reference photos), videos (text/image/reference-to-video), and spoken audio.

Skill by Deibler

IndexedMIT★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/deibler-generation

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Comprehensive multimodal generation via OpenRouter — images (with reference photos), videos (text/image/reference-to-video), and spoken audio. Picks models based on task + budget.

Use cases: productivity, finance

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/generation

What's inside

Skill name
generation
Description
Comprehensive multimodal generation via OpenRouter — images (with reference photos), videos (text/image/reference-to-video), and spoken audio. Picks models based on task + budget.
License
MIT
Instructions
159 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Generation (OpenRouter)

Use this for anything beyond a simple one-off image: photo edits using a reference, character consistency across multiple references, style-matched videos, voice memos in a specific voice, etc.

## The tools

Model discovery (always call one of these FIRST so you pick an appropriate model):

- `list_image_models(max_price_usd?, query?)` — filtered by the harness's max image price.
- `list_video_models(max_price_usd?, query?)` — per-second pricing + supported resolutions/ratios.
- `list_audio_models(max_price_usd?, query?)` — audio-output (text-to-speech) models.

Generation (pass `model` from the listing; falls back to configured default if omitted):

- `generate_image(prompt, model?, reference_images?, aspect_ratio?, image_size?)`
- `generate_video(prompt, model?, resolution?, aspect_ratio?, duration?, generate_audio?, frame_images?, reference_images?)`
- `generate_audio(text, model?, voice?, format?)`

All outputs land in the session sandbox (`images/`, `videos/`, `voice-memos/`). Deliver with `send_attachment(path)`.

## When to use reference images

**You almost always should**, when the user has sent anything relevant:

- User sent a photo of themselves and wants an AI version → pass their photo as a reference.
- User wants character X in a scene → pass a photo of X.
- User wants a style match ("make it look like the one from Tuesday") → use that image as reference.
- Edit workflows ("make the fish bigger", "add my dog to this") → pass the source image AND any additions.

The `received-images/` dir inside the sandbox is the first place to look — every image the user has sent is archived there with a dated filename. `ls` that directory and pick the relevant file(s) before calling `generate_image`.

## Picking a model

Price caps are enforced by the harness — anything above them is hidden from the listing. The listing is sorted cheapest-first. Two rules on top of that:

1. **Prefer newer + cheaper variants over their Pro/premium siblings** unless you have a concrete reason not to. Newer model families (Gemini 3.1 Flash Image / Nano Banana 2, gpt-audio-mini, Lyria 3 Clip, Wan 2.5, Seedance) typically match or beat their older Pro counterparts on quality while costing 30-70% less. Don't reach for "Pro" because it sounds better — reach for it only when the task genuinely needs it (long songs, hi-res video with audio, ultra-fine typography).
2. **When two listed models look interchangeable for the task, pick the cheaper one.** You can always re-run with a pricier model if the first result disappoints. You can't refund a $0.14 generation.

Concrete pairs to remember:

- Text-to-image: **`google/gemini-3.1-flash-image-preview` (Nano Banana 2, ~$0.067/img)** over `google/gemini-3-pro-image-preview` (Nano Banana Pro, ~$0.14/img). The Flash is newer, cheaper, and produces better output for most prompts — Jordan has flagged Pro getting picked when Flash would have done better and cost half as much. Only reach for Pro if Flash has failed twice on the same prompt.
- TTS short memos: **`openai/gpt-audio-mini`** over `openai/gpt-4o-audio-preview`. Mini handles one-sentence voice replies fine.
- Music: **`google/lyria-3-clip-preview` ($0.04, 30s)** for jingles and short bits. Only use `lyria-3-pro-preview` ($0.08, full-length with verses + chorus) when the user explicitly asks for a full song.
- Video: cheaper Wan/Seedance first. **`google/veo-3.1` is premium — reach for it only when you need synced audio** or the user asks for Veo by name.

Beyond those:

- **Editing with a reference photo** (far and away the most common user ask — "put a hat on her", "make the fish bigger", "add Cooper in the background"): if you pass `reference_images`, the harness **auto-routes** to an edit-optimized model (FLUX.2 Pro by default). You can override, but FLUX.2 Pro / Max / Sourceful Riverflow V2 Pro preserve faces and composition far better than a text-to-image model like Gemini Flash Image. Never pass the text-to-image default when references are in play — the output will look "similar" instead of "edited".
- **Pure text-to-image** (no reference): Gemini Flash Image (Nano Banana 2) is fast and cheap and fine — use it by default.
- **Character consistency across multiple shots**: `list_image_models(query: "reference consistency")` → pick a multi-reference model.
- **Text in image / typography**: Sourceful Riverflow's `font_inputs` (specialized), or FLUX.2 Pro for general typography.
- **Video with character consistency**: Alibaba Wan, ByteDance Seedance, Google Veo (reference-to-video).
- **Video with sound**: pick a model that supports `generate_audio: true`.
- **Audio — spoken voice memo (TTS)**: `openai/gpt-4o-audio-preview` (default) or `openai/gpt-audio-mini` (cheaper). Voices: alloy, echo, fable, onyx, nova, shimmer. Use when the user says "send me a voice memo", "say it out loud", etc.
- **Audio — singing / music**: `google/lyria-3-pro-preview` ($0.08/song, full-length with verses + chorus) or `google/lyria-3-clip-preview` ($0.04/30-sec clip). Use when the user says "sing about…", "make a song", "write me a jingle". Put the lyrics in the prompt.
- **Picking between TTS and music models**: spoken descriptions → TTS. Anything with melody or "sing" → Lyria. When the user says "voice memo of you *singing*", pick Lyria, not TTS.

Default flow: `list_image_models(query: "editing reference")` → read descriptions → pick → generate. For common edits, just passing `reference_images` and letting the auto-route do its thing is fine.

## Reference-image workflow, by example

User sends a selfie, says "make me into a movie poster":

```
list_image_models({ query: "reference editing" })
# pick e.g. "black-forest-labs/flux.2-pro" — good for references

ls received-images/                                           # find their selfie
# -> 2026-04-19_hhmmss_IMG_1234.jpeg

generate_image({
  prompt: "{user's phrasing about the poster} — make it cinematic, …",
  model: "black-forest-labs/flux.2-pro",
  reference_images: ["/abs/path/received-images/2026-04-19_hhmmss_IMG_1234.jpeg"],
  aspect_ratio: "2:3",
  image_size: "2K"
})
# -> /abs/path/sandbox/<id>/images/YYYY-MM-DD_HHMMSS_poster.png

send_attachment({ file_path: "/abs/path/sandbox/<id>/images/...png" })
```

For multi-reference (character X in scene Y):

```
generate_image({
  prompt: "{scene description}. Character should look like the person in the first reference. Background should match the second reference.",
  model: "{multi-reference-capable model id}",
  reference_images: [characterPhoto, backgroundPhoto],
  aspect_ratio: "16:9"
})
```

For video from a photo:

```
generate_video({
  prompt: "{motion description}",
  model: "google/veo-3.1",
  frame_images: [{ path: photo, frame_type: "first_frame" }],
  resolution: "1080p",
  aspect_ratio: "16:9",
  generate_audio: true
})
```

## Cost, and the re-roll loop

Images are cents. **Video is dollars**, priced per second of output, and it is by
far the easiest way to burn the account down to zero in an evening. On
2026-08-09 a run of video generations drained the OpenRouter balance mid-job and
the next request came back 402 — the person on the other end just saw their clip
die. The fix is not to refuse; it is to spend the money on the right generation
the first time.

**Land the prompt before you spend.** For anything video, and for images with a
lot riding on them, know what you are actually making: subject, what moves,
camera, mood, length, sound or no sound. If the ask is a one-liner and the shot
could go four ways, say the shot back in one sentence and go — or ask the single

From Deibler/edmund-harness, MIT.

More from Deibler/edmund-harness

Compare and alternatives

    Featured in

    Signals

    Stars
    1
    Forks
    0
    Open issues
    0
    Last commit (this folder)
    Sep 4, 2026 (1 month ago)
    Last release
    Oct 22, 2026 (5 days ago)

    From GitHub (fetched Oct 24, 2026).

    Details

    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026

    More from Deibler

    Cite this page

    generation skill. Agent Mart. https://agentmart.dev/skills/deibler-generation (last updated 2026-10-24)