Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/media-agent/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "media-agent",
"displayName": "Media Agent",
"version": "0.9.1",
"version": "0.10.0",
"author": {
"name": "4nrry",
"url": "https://github.com/4nrry"
Expand Down
2 changes: 1 addition & 1 deletion plugins/media-agent/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "media-agent",
"version": "0.9.1",
"version": "0.10.0",
"description": "Media production by an agent on a machine with an 8 GB GPU and commercial licensing, one skill per modality with rules that hold for any model: image and video generation, image retouching, voice-over at -16 LUFS, music and sound with per-item licenses, video composed as code, editing finished video, and a 3D product turntable. One hook warns where vipsthumbnail -o really writes.",
"author": {
"name": "4nrry",
Expand Down
2 changes: 2 additions & 0 deletions plugins/media-agent/skills/audio/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ licenses).

## Music

- Google Flow Music (Lyria 3.5) publishes no commercial terms yet: not for a
commercial piece.
- Make it the length of the cut. Generate at that length, or generate 40 s and
loop with a 2 s crossfade: long generations degrade toward the end.
- For institutional pieces: instrumental, no drums, slow, minimal.
Expand Down
2 changes: 1 addition & 1 deletion plugins/media-agent/skills/audio/references/xai.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Checked on 2026-10-26. xAI's speech-to-text (`grok-voice-transcribe-2.0`,
`POST /v1/stt`, word-level timestamps, 38+ languages) takes an xAI API key.

On the SuperGrok subscription there is no headless route yet: Hermes uses this
On the Grok subscription there is no headless route yet: Hermes uses this
model only for voice messages in its gateway and voice mode, and `hermes chat`
has no transcription tool (`-t stt` is rejected); Grok Build and Cursor CLI
have no audio tools. For word-timed captions of real speech, use ElevenLabs'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ key's budget belongs to something else.

| Tool | Billed to | Script | Good for | Notes |
|---|---|---|---|---|
| Grok Imagine, through Grok Build (`grok`) | SuperGrok subscription | `scripts/grok-image.sh "<prompt>" out.png` | exploring directions fast | sober documentary look; no negative prompt field |
| Grok Imagine, through Grok Build (`grok`) | Grok subscription | `scripts/grok-image.sh "<prompt>" out.png` | exploring directions fast | sober documentary look; no negative prompt field |
| Gemini image, through Antigravity (`agy`) | Google AI Pro/Ultra subscription | `scripts/agy-image.sh "<prompt>" out.png` | the final still | richer light and detail, more "AI look"; slow (a 1376x768 PNG took 230 s on 2026-10-26) |
| Gemini image API | Gemini API key, per image | `scripts/nano.py <model> "<prompt>" -o out.png [--image in.png]` | batches, or when agy's quota is out | `gemini-nano-banana-2.1` (newest), `gemini-3.1-flash-image` (cheaper), `gemini-3-pro-image` (edits; ask gently, it overdoes changes) |
| Grok Imagine 2.0, through Hermes | SuperGrok subscription | `scripts/hermes-image.sh "<prompt>" out.jpg [landscape\|square\|portrait]` | the SuperGrok subscription's image model by name | JPEG, 1280x720 at the default "1k" (`image_gen.xai.resolution: 2k` in Hermes's config for more); with `image_gen.xai.storage.public_url` on, the file also sits at a public x.ai URL until it expires |
| Grok Imagine 2.0, through Hermes | Grok subscription | `scripts/hermes-image.sh "<prompt>" out.jpg [landscape\|square\|portrait]` | the Grok subscription's image model by name | JPEG, 1280x720 at the default "1k" (`image_gen.xai.resolution: 2k` in Hermes's config for more); with `image_gen.xai.storage.public_url` on, the file also sits at a public x.ai URL until it expires |
| Grok Imagine API (`grok-imagine-image-2.0`, `-quality`) | xAI API key, per image | none bundled | batches billed per image | needs an xAI API key |
| Nano Banana 2.1, in Google Flow (web) | Google AI Pro/Ultra credits | a browser, `video-generation` skill's `references/flow.md` | a still to animate in Flow right after | price shown only in the app |
| Z-Image Turbo, local | your GPU | `image-retouching` skill, `comfy-run.py generate` | offline, Apache-2.0 weights | 8 GB GPU |

## Setup
Expand All @@ -27,7 +28,7 @@ Only needed when a tool fails. Every billing step is the user's.
the image tool is `generate_image`. Run the official binary only: reusing
agy's login token in another tool breaks the terms.

**grok (Grok Build).** Needs a SuperGrok subscription, with `grok` installed
**grok (Grok Build).** Needs a Grok subscription (X Subscription; Plus and up), with `grok` installed
and logged in. Grok Build's command is `/imagine`; headless,
`grok -p "..." --cwd DIR --always-approve --output-format json` and the script
asks the agent for an image.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Generate ONE image headless with the official Grok Build CLI (`grok`), using the
# SuperGrok quota, and check that the file was written. Faster than agy: good for
# Grok subscription's quota, and check that the file was written. Faster than agy: good for
# exploring variations before picking a direction.
#
# grok-image.sh "scene description" out.png
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Generate ONE image with the image model Hermes is configured for (here xAI's
# grok-imagine-image-2.0, on the SuperGrok subscription) and download it to OUT.
# grok-imagine-image-2.0, on the Grok subscription) and download it to OUT.
# Runs the official hermes CLI and never touches its login.
#
# hermes-image.sh "scene description" out.jpg [landscape|square|portrait]
Expand Down
2 changes: 2 additions & 0 deletions plugins/media-agent/skills/video-generation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ scripts/grok-video.sh "slow drone push forward along the windrows, mist drifting
scripts/contact-sheet.sh check.jpg still.png shot.mp4
```

Google Flow runs Omni and Veo on the Google AI subscription's credits through a
browser ([references/flow.md](references/flow.md)).
`scripts/omni.py` takes the same prompt and still on the Gemini API key, which
bills every call; [references/tools.md](references/tools.md) marks what each
route bills.
Expand Down
59 changes: 59 additions & 0 deletions plugins/media-agent/skills/video-generation/references/flow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Google Flow

Checked on 2026-10-26, with one live run. Flow (flow.google.com) is Google's
web studio for Gemini Omni Flash, Veo 3.1 and Nano Banana, paid with the Google
AI Plus, Pro or Ultra subscription's credits; there is also a mobile app. It has
no API, and its credits do not reach the Gemini API.

## Credits

Pro adds 1,000 credits a month (no rollover) to the 50 a day everyone gets.

| Model | Credits |
|---|---|
| Gemini Omni Flash, 360p | 4 (4 s), 5 (6 s), 6 (8 s), 7 (10 s) |
| Gemini Omni Flash, 720p | 7 (4 s), 10 (6 s), 12 (8 s), 15 (10 s) |
| Omni Flash edit of a video | 40 |
| Veo 3.1 Lite / Fast / Quality, 8 s | 10 / 20 / 100 (Ultra pays less for Lite and Fast) |

Image costs are not published; the in-product model picker shows the current
price.

## Driving it from an agent

- Use a browser where the user is already signed in: the desktop app's browser
pane, Claude in Chrome, or a persistent Chrome profile under Playwright. The
user signs in; never type their password or answer a CAPTCHA.
- Google's terms forbid automated access only against a site's robots.txt or
around its protections; labs.google's robots.txt allows everything. Keep it
to the user's own account and pace.
- Flow's own agent panel takes a plain request. Keep **Agent settings →
Confirm before generating: Always**: it states the cost and asks Approve /
Always approve / Reject. Approve one generation at a time, and ask for the
cost before it starts.
- A still from disk needs a browser tool that can fill a file picker (Claude in
Chrome's upload, Playwright's `set_input_files`). The desktop app's browser
pane cannot; there, generate the still in Flow or have the user drop it in.
- The clip opens in an editor that extends it (+), edits it from a prompt
("change only the sky"), and has the download button. Downloading is the
user's call; the file carries SynthID.

## Measured

One run on Pro, 2026-10-26: a 16:9 Nano Banana 2.1 still in about 25 s, which
the agent made without asking for approval; then Omni 1.1 Flash animated it as
the first frame at 360p, 8 s. The agent quoted 6 credits, waited for Approve,
queued the job "due to high demand", and finished about a minute later.

## Flow Music

flowmusic.app makes full songs with Lyria 3.5 on daily credits, but publishes
no commercial terms: keep it out of a commercial piece until it does (`audio`
skill).

## Sources

- Google Flow Help, "Get started with Google Flow" (answer 16353333) and
"Manage your Google Flow credits" (labs answer 16526234).
- Google Terms of Service; labs.google/robots.txt.
- flowmusic.app home page.
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ key's budget belongs to something else.
| Tool | Billed to | Script | Good for | Notes |
|---|---|---|---|---|
| Gemini Omni (`gemini-omni-1.1-flash`), Gemini API | Gemini API key, per second | `python3 scripts/omni.py "<motion>" -o shot.mp4 --image still.png` | shots from a still, between a first and a last frame (`--last`), or of a subject from references (`--ref`); extending a clip (up to 40 s in total) and editing it in turns, through the API only | 360p or 720p native; 1080p and 4k are upscaled by Google; 16:9 or 9:16; no negative prompt and no duration setting: clips come back at 10 s, 24 fps, with an audio track (trim in the edit) |
| Grok Imagine video, through Grok Build | SuperGrok subscription | `scripts/grok-video.sh "<motion>" out.mp4 --image still.png` | backgrounds, small cards, Reels backdrops | 480p by default, `--res 720p` at most: on the subscription, both Grok Build's video tools and Hermes's refuse 1080p ("resolution_name must be one of: 480p, 720p"); 6 s clips with audio |
| Grok Imagine API (`grok-imagine-video-1.5`, `-1.5-lite`) | xAI API key, per second | none bundled | native 1080p, 1–15 s, reference images | priced per second; needs an xAI API key |
| Grok Imagine video, through Grok Build | Grok subscription | `scripts/grok-video.sh "<motion>" out.mp4 --image still.png` | backgrounds, small cards, Reels backdrops | 480p by default, `--res 720p` at most: on the subscription, both Grok Build's video tools and Hermes's refuse 1080p ("resolution_name must be one of: 480p, 720p"); 6 s clips with audio |
| Google Flow (web), Omni Flash and Veo 3.1 | Google AI Pro/Ultra credits | a browser, [flow.md](flow.md) | Omni and Veo without an API key: from a still, first and last frame, extend and edit in the app | 360p 8 s Omni costs 6 credits; no API, so a browser agent drives it with the user signed in |
| Grok Imagine API (`grok-imagine-video-1.5`, `-1.5-lite`) | xAI API key, per second (billed apart from the Grok subscription) | none bundled | native 1080p, 1–15 s, reference images | priced per second; needs an xAI API key |
| Veo 3.1 GA (`veo-3.1-generate-001`, `-fast-`) | Google Cloud billing (Vertex) | none bundled | premium shots | only on Google's enterprise platform (Vertex), us-central1 |
| ElevenLabs canvas (MCP) | ElevenLabs plan credits | `audio` skill | upscaling a clip (Topaz) | video models there cost a large share of a month's credits per clip |

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Generate a short clip headless with the official Grok Build CLI (`grok`), using
# the SuperGrok quota, and check that the MP4 was written. With --image, animates
# the Grok subscription's quota, and check that the MP4 was written. With --image, animates
# an existing image as the first frame.
#
# grok-video.sh "motion description" out.mp4 [--image frame.png] [--res 720p]
Expand Down
2 changes: 1 addition & 1 deletion plugins/media-agent/skills/voice/references/tts.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ key's budget belongs to something else.
| Engine | Billed to | Runs on | License | Trap |
|---|---|---|---|---|
| ElevenLabs | ElevenLabs plan credits | cloud | paid plan for commercial use | best pt-BR by a margin among the paid APIs |
| xAI TTS, voice `liora`, through Hermes | SuperGrok subscription | cloud, SuperGrok subscription | xAI's terms | `scripts/hermes-tts.sh "text" s1.mp3`; mp3 24 kHz mono at about -20 LUFS, so normalize it like the rest |
| xAI TTS, voice `liora`, through Hermes | Grok subscription | cloud | xAI's terms | `scripts/hermes-tts.sh "text" s1.mp3`; mp3 24 kHz mono at about -20 LUFS, so normalize it like the rest |
| Pocket TTS (Kyutai) | nothing (local) | CPU, `uv tool install pocket-tts` | code MIT, weights CC-BY-4.0 (credit) | without `--language portuguese` Portuguese comes out as accented English; larger `_24l` variants exist |
| Kokoro-82M | nothing (local) | CPU | Apache-2.0 | pins Python below 3.13: `uv venv -p 3.12` |
| Qwen3-TTS 1.7B | nothing (local) | 8 GB GPU | Apache-2.0 | Portuguese sounds European; `--instruct` does not fix it |
Expand Down
2 changes: 1 addition & 1 deletion plugins/media-agent/skills/voice/scripts/hermes-tts.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Speak ONE sentence with the TTS Hermes is configured for (here xAI, voice liora,
# pt-BR, on the SuperGrok subscription) and copy the audio to OUT. Runs the
# pt-BR, on the Grok subscription) and copy the audio to OUT. Runs the
# official hermes CLI and never touches its login.
#
# hermes-tts.sh "text to speak" out.mp3
Expand Down
Loading