Google Flow / Veo Playbook
Extended notes and the prompt that worked first try: flow-prompts.md in this repo.
Flow has no public API and no official MCP server, so generation runs through the browser.
Veo itself is available through the Gemini API and Vertex AI if you ever want a scriptable
path, but this kit does not use it.
UI map (assistant-driven projects)
- Gemini Omni Flash chat (right panel) = where generation happens. It replies with intent,
then raises an Approve/Reject credit dialog.
+ → Create Scene = timeline assembly of existing clips only, no generation.
- Tools = community tools gallery, not the core generator.
- Videos list view shows every generation's full prompt; use it to diagnose old clips.
- Finished clips: open clip editor → download icon → lands in
~/Downloads.
- Uploads usually originated on this machine, so check
~/Desktop and ~/Downloads before
re-downloading from Flow.
Credit hygiene (hard rules)
- Never approve a spend the user hasn't authorized. Veo 3.1 Lite ≈ 12 credits per
8s 720p/24fps clip (with audio).
- Draft at 360p first. Flow drafts at a lower resolution for a fraction of the
credits, then upscales the version worth keeping (Aug 2026). Iterate on mood there and
spend the full render once, on the clip you have already looked at.
Note (Sep 2026): the assistant reports Veo 3.1 Lite as 720p-only at 10 credits; the
360p draft it offers is a different model (Omni 1.1 Flash, 6 credits). Ask for it by
name if a draft is what you want, and say so in the approval you collected.
- Omni 1.1 Flash (Sep 2026): asked for ONE clip, the assistant proposed nine for 135
credits; reject and restate "exactly ONE video, 1 generation". It then quoted 12 credits
and the dialog charged 15. The clip came back 10s, 720p, with a near-silent audio bed,
so plan on
MUSIC. The 1080p download is an upscale that runs a few minutes and lands
in ~/Downloads on its own as a plain .mp4.
- Downloads arrive as a zip whose inner filename carries a non-ASCII character;
unzip on macOS fails with "Illegal byte sequence". Extract with Python's zipfile.
- If the clip is brighter than the type can stand, tint it locally before spending
again: a 65% navy
color overlay in ffmpeg turned a cream highlight into a
mid-navy that white Montserrat reads on, for zero credits.
- Export the final at 1080p, not 720p and not 4K: the recap composites at 1080x1920
or 1920x1080 depending on the project's
ASPECT, so 1080p removes an upscale and 4K is
thrown away.
- Read the assistant's confirmation before approving: model, count, duration, and
aspect ratio. It has misread one ratio as the other, so ask for the one the project
needs by name, "9:16 PORTRAIT (vertical)" or "16:9 LANDSCAPE (widescreen horizontal)",
and correct it if the confirmation disagrees.
- Stale dialogs: consumed Approve/Reject dialogs linger in chat history and look
clickable but are inert. Only a freshly-raised dialog does anything. If clicks change
nothing, the dialog is dead; check whether the generation already ran.
- Prefer reusing existing clips (loop 8s → any length with a 1s crossfade) over generating.
- Start and end frame control (Aug 2026) can make an 8s background loop seamlessly, so
the crossfade stops being load-bearing. Its headline use, holding a character consistent
across a cut, is the one thing this kit does not do: any frame you supply must be
abstract light only. A photo, a face or a rendered card as a start frame is rule 5.
Prompt rules (learned from failures)
- No hex codes.
#F2DF74 in a prompt became ribbon text "Best #2DF74".
- No text you want rendered. Quoting text is a coin flip; render type locally instead.
- Ban text redundantly when you want none: "absolutely NO text, NO letters, NO
numbers, NO words, NO typography, NO logos, NO symbols".
- Describe colors in words ("deep dark navy blue"), camera as "completely static" for
backgrounds, and request the audio explicitly ("soft uplifting instrumental corporate
background music, no vocals"); the audio bed comes free.
- Nothing exact in-frame: faces, logos, and photos with text must never be AI-animated;
composite them locally over textless generated motion.
- A theme is text. When a caller asks for a background "matching the theme", steer
only the colour, light direction and movement, and keep the theme wording out of the
prompt entirely. In
toastmasters-flow-promos that steering value is BG_MOOD in
meeting.conf; substitute it for the palette clause of the background prompt and keep
every NO. A prompt carrying "FRESH START" is how you get FRESH START rendered in
wobbly letters across the backdrop, which is rule 2 with a friendlier face.
Verify every clip before using it
Contact-sheet it:
ffmpeg -i clip.mp4 -vf "select='not(mod(n\,24))',scale=640:-1,tile=4x2" -frames:v 1 sheet.png
Scan every second for surprise text or objects. One clip that looked clean grew the words
"WHERE LEADERS ARE MADE" out of a paint stroke at the 6-second mark.
1---2name: google-flow3description: Drive Google Flow (labs.google/fx/tools/flow) via Claude in Chrome to generate Veo video clips safely and cheaply. Use for any Flow/Veo generation task - creating clips, managing credits/approvals, downloading assets, or diagnosing garbled AI text in generated video.4---56# Google Flow / Veo Playbook78Extended notes and the prompt that worked first try: `flow-prompts.md` in this repo.910Flow has no public API and no official MCP server, so generation runs through the browser.11Veo itself is available through the Gemini API and Vertex AI if you ever want a scriptable12path, but this kit does not use it.1314## UI map (assistant-driven projects)1516- **Gemini Omni Flash chat (right panel)** = where generation happens. It replies with intent,17 then raises an Approve/Reject credit dialog.18- **`+` → Create Scene** = timeline assembly of *existing* clips only, no generation.19- **Tools** = community tools gallery, not the core generator.20- **Videos list view** shows every generation's full prompt; use it to diagnose old clips.21- Finished clips: open clip editor → download icon → lands in `~/Downloads`.22- Uploads usually originated on this machine, so check `~/Desktop` and `~/Downloads` before23 re-downloading from Flow.2425## Credit hygiene (hard rules)2627- **Never approve a spend the user hasn't authorized.** Veo 3.1 Lite ≈ 12 credits per28 8s 720p/24fps clip (with audio).29- **Draft at 360p first.** Flow drafts at a lower resolution for a fraction of the30 credits, then upscales the version worth keeping (Aug 2026). Iterate on mood there and31 spend the full render once, on the clip you have already looked at.32 Note (Sep 2026): the assistant reports Veo 3.1 Lite as 720p-only at 10 credits; the33 360p draft it offers is a different model (Omni 1.1 Flash, 6 credits). Ask for it by34 name if a draft is what you want, and say so in the approval you collected.35- **Omni 1.1 Flash (Sep 2026):** asked for ONE clip, the assistant proposed nine for 13536 credits; reject and restate "exactly ONE video, 1 generation". It then quoted 12 credits37 and the dialog charged 15. The clip came back 10s, 720p, with a near-silent audio bed,38 so plan on `MUSIC`. The 1080p download is an upscale that runs a few minutes and lands39 in `~/Downloads` on its own as a plain .mp4.40- **Downloads arrive as a zip** whose inner filename carries a non-ASCII character;41 `unzip` on macOS fails with "Illegal byte sequence". Extract with Python's `zipfile`.42- **If the clip is brighter than the type can stand**, tint it locally before spending43 again: a 65% navy `color` overlay in ffmpeg turned a cream highlight into a44 mid-navy that white Montserrat reads on, for zero credits.45- **Export the final at 1080p**, not 720p and not 4K: the recap composites at 1080x192046 or 1920x1080 depending on the project's `ASPECT`, so 1080p removes an upscale and 4K is47 thrown away.48- **Read the assistant's confirmation before approving**: model, count, duration, and49 aspect ratio. It has misread one ratio as the other, so ask for the one the project50 needs by name, "9:16 PORTRAIT (vertical)" or "16:9 LANDSCAPE (widescreen horizontal)",51 and correct it if the confirmation disagrees.52- **Stale dialogs**: consumed Approve/Reject dialogs linger in chat history and look53 clickable but are inert. Only a freshly-raised dialog does anything. If clicks change54 nothing, the dialog is dead; check whether the generation already ran.55- Prefer reusing existing clips (loop 8s → any length with a 1s crossfade) over generating.56- **Start and end frame control** (Aug 2026) can make an 8s background loop seamlessly, so57 the crossfade stops being load-bearing. Its headline use, holding a character consistent58 across a cut, is the one thing this kit does not do: any frame you supply must be59 abstract light only. A photo, a face or a rendered card as a start frame is rule 5.6061## Prompt rules (learned from failures)62631. **No hex codes.** `#F2DF74` in a prompt became ribbon text "Best #2DF74".642. **No text you want rendered.** Quoting text is a coin flip; render type locally instead.653. **Ban text redundantly** when you want none: "absolutely NO text, NO letters, NO66 numbers, NO words, NO typography, NO logos, NO symbols".674. Describe colors in words ("deep dark navy blue"), camera as "completely static" for68 backgrounds, and request the audio explicitly ("soft uplifting instrumental corporate69 background music, no vocals"); the audio bed comes free.705. Nothing exact in-frame: faces, logos, and photos with text must never be AI-animated;71 composite them locally over textless generated motion.726. **A theme is text.** When a caller asks for a background "matching the theme", steer73 only the colour, light direction and movement, and keep the theme wording out of the74 prompt entirely. In `toastmasters-flow-promos` that steering value is `BG_MOOD` in75 `meeting.conf`; substitute it for the palette clause of the background prompt and keep76 every NO. A prompt carrying "FRESH START" is how you get `FRESH START` rendered in77 wobbly letters across the backdrop, which is rule 2 with a friendlier face.7879## Verify every clip before using it8081Contact-sheet it:8283```bash84ffmpeg -i clip.mp4 -vf "select='not(mod(n\,24))',scale=640:-1,tile=4x2" -frames:v 1 sheet.png85```8687Scan every second for surprise text or objects. One clip that looked clean grew the words88"WHERE LEADERS ARE MADE" out of a paint stroke at the 6-second mark.