From f26003ca377dc84e5123da5a6add7dce9285f6d7 Mon Sep 17 00:00:00 2001 From: 4nrry Date: Mon, 26 Oct 2026 14:19:33 -0300 Subject: [PATCH] media-agent 0.10.0: Google Flow route on the subscription; Grok plan renamed New video-generation/references/flow.md: Flow (flow.google.com) runs Gemini Omni Flash, Veo 3.1 and Nano Banana on the Google AI subscription's credits, with no API, so a browser agent drives it with the user signed in. Credits table from Google's help, the terms check (robots.txt allows; no bypassing protections), Flow's agent panel with confirm-before-generating, and one live run: a Nano Banana 2.1 still, then Omni 1.1 Flash 360p 8 s from it, quoted 6 credits, done about a minute after approval. Flow Music publishes no commercial terms, so the audio skill keeps it out of commercial pieces. "SuperGrok subscription" becomes "Grok subscription": the plans are now Plus, Premium, Super and Ultra, and x.ai says API usage is billed apart from the subscription's pool. Co-Authored-By: Claude Opus 5.5 --- .../media-agent/.claude-plugin/plugin.json | 2 +- plugins/media-agent/plugin.json | 2 +- plugins/media-agent/skills/audio/SKILL.md | 2 + .../skills/audio/references/xai.md | 2 +- .../image-generation/references/tools.md | 7 ++- .../image-generation/scripts/grok-image.sh | 2 +- .../image-generation/scripts/hermes-image.sh | 2 +- .../skills/video-generation/SKILL.md | 2 + .../video-generation/references/flow.md | 59 +++++++++++++++++++ .../video-generation/references/tools.md | 5 +- .../video-generation/scripts/grok-video.sh | 2 +- .../skills/voice/references/tts.md | 2 +- .../skills/voice/scripts/hermes-tts.sh | 2 +- 13 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 plugins/media-agent/skills/video-generation/references/flow.md diff --git a/plugins/media-agent/.claude-plugin/plugin.json b/plugins/media-agent/.claude-plugin/plugin.json index a4cc914..9ffb08c 100644 --- a/plugins/media-agent/.claude-plugin/plugin.json +++ b/plugins/media-agent/.claude-plugin/plugin.json @@ -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" diff --git a/plugins/media-agent/plugin.json b/plugins/media-agent/plugin.json index a1d1e07..b1249ad 100644 --- a/plugins/media-agent/plugin.json +++ b/plugins/media-agent/plugin.json @@ -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", diff --git a/plugins/media-agent/skills/audio/SKILL.md b/plugins/media-agent/skills/audio/SKILL.md index d0684f7..cf1d82c 100644 --- a/plugins/media-agent/skills/audio/SKILL.md +++ b/plugins/media-agent/skills/audio/SKILL.md @@ -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. diff --git a/plugins/media-agent/skills/audio/references/xai.md b/plugins/media-agent/skills/audio/references/xai.md index 3312ba6..37f1302 100644 --- a/plugins/media-agent/skills/audio/references/xai.md +++ b/plugins/media-agent/skills/audio/references/xai.md @@ -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' diff --git a/plugins/media-agent/skills/image-generation/references/tools.md b/plugins/media-agent/skills/image-generation/references/tools.md index 9d142ff..ac15cd1 100644 --- a/plugins/media-agent/skills/image-generation/references/tools.md +++ b/plugins/media-agent/skills/image-generation/references/tools.md @@ -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 "" out.png` | exploring directions fast | sober documentary look; no negative prompt field | +| Grok Imagine, through Grok Build (`grok`) | Grok subscription | `scripts/grok-image.sh "" 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 "" 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 "" -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 "" 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 "" 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 @@ -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. diff --git a/plugins/media-agent/skills/image-generation/scripts/grok-image.sh b/plugins/media-agent/skills/image-generation/scripts/grok-image.sh index 87bfa44..915faf1 100755 --- a/plugins/media-agent/skills/image-generation/scripts/grok-image.sh +++ b/plugins/media-agent/skills/image-generation/scripts/grok-image.sh @@ -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 diff --git a/plugins/media-agent/skills/image-generation/scripts/hermes-image.sh b/plugins/media-agent/skills/image-generation/scripts/hermes-image.sh index 56cc081..2cf4256 100755 --- a/plugins/media-agent/skills/image-generation/scripts/hermes-image.sh +++ b/plugins/media-agent/skills/image-generation/scripts/hermes-image.sh @@ -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] diff --git a/plugins/media-agent/skills/video-generation/SKILL.md b/plugins/media-agent/skills/video-generation/SKILL.md index b081677..8282b7d 100644 --- a/plugins/media-agent/skills/video-generation/SKILL.md +++ b/plugins/media-agent/skills/video-generation/SKILL.md @@ -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. diff --git a/plugins/media-agent/skills/video-generation/references/flow.md b/plugins/media-agent/skills/video-generation/references/flow.md new file mode 100644 index 0000000..eccb6a3 --- /dev/null +++ b/plugins/media-agent/skills/video-generation/references/flow.md @@ -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. diff --git a/plugins/media-agent/skills/video-generation/references/tools.md b/plugins/media-agent/skills/video-generation/references/tools.md index 2d5f080..1901231 100644 --- a/plugins/media-agent/skills/video-generation/references/tools.md +++ b/plugins/media-agent/skills/video-generation/references/tools.md @@ -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 "" -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 "" 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 "" 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 | diff --git a/plugins/media-agent/skills/video-generation/scripts/grok-video.sh b/plugins/media-agent/skills/video-generation/scripts/grok-video.sh index e444b41..e9d302f 100755 --- a/plugins/media-agent/skills/video-generation/scripts/grok-video.sh +++ b/plugins/media-agent/skills/video-generation/scripts/grok-video.sh @@ -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] diff --git a/plugins/media-agent/skills/voice/references/tts.md b/plugins/media-agent/skills/voice/references/tts.md index 11f28f9..e8efc3a 100644 --- a/plugins/media-agent/skills/voice/references/tts.md +++ b/plugins/media-agent/skills/voice/references/tts.md @@ -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 | diff --git a/plugins/media-agent/skills/voice/scripts/hermes-tts.sh b/plugins/media-agent/skills/voice/scripts/hermes-tts.sh index 6c94286..9c9a522 100755 --- a/plugins/media-agent/skills/voice/scripts/hermes-tts.sh +++ b/plugins/media-agent/skills/voice/scripts/hermes-tts.sh @@ -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