gflow-cli

io.github.ffrolivaPublished by GitHub account ffrolivav0.95.0Updated Nov 7, 2026

Drive Google Flow from an agent: Veo video and Imagen image generation

VerifiedSTDIODesktop onlyBrowser AutomationMedia & Design

Overview

AI-generated overview

Drives Google Flow from an agent to generate Veo videos and Imagen images using your own Google account and credits.

What you can do
  • Generate images from text prompts, with aspect ratio, model and count options
  • Generate and extend videos: text-to-video, image-to-video, reference-to-video and continuation past the 8-second limit
  • Create reusable Flow Characters so the same subject recurs across generations
  • Apply prompt-rewriting tools and manage persistent brief cards
  • Render multi-scene movie manifests and stitch scenes server-side
  • Check the session and Veo credit balance without spending credits
When to use it
Useful when you already have a Google account with Flow access and Veo credits and want scripted, batched or pipeline-driven image and video generation instead of clicking through the Flow interface.
Requirements
Runs locally as a Python package installed with uvx or pip, plus a one-time Playwright Chromium download of about 150 MB. A headed Chrome browser and an interactive login are needed, and the optional GFLOW_CLI_HOME variable sets where the profile, config and database live.
Before you install
Alpha and reverse-engineered, not affiliated with Google; automation is subject to Google's terms and may put your account at risk. Video generation spends your own Flow credits, so register with the no-spend option if you want to avoid that. It drives a real browser session and can change or upload media in your Flow projects, and it uploads anonymous weekly usage totals after consent.

Installation

In SourceWeft

  1. Open gflow-cli in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

gflow-cli

Python CLI and MCP server for Google Flow. Drive Veo (image-to-video, text-to-video) and Imagen (text-to-image) from your terminal: scripted, batched, pipeline-ready.

[PyPI version] [CI] [Release] [Python versions] [License: MIT] [Status: alpha] [Code style: ruff] [Type checked: pyright] [Tests: TDD] [Quality Gate Status] [Coverage] [OpenSSF Scorecard] [Listed on mcpservers.org]

⚠️ Read this before you install. gflow-cli is alpha and reverse-engineered — not affiliated with Google. It drives a headed browser on your own Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with any Google account that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full DISCLAIMER.

🛡️ "Will this get my account flagged?" The honest, specific answer — what the tool does to stay unremarkable (headed real Chrome, randomised interaction timing, paced submissions), what it deliberately does not do (no proxies, no fingerprint spoofing, no pretending it isn't automation), what you can tune, and what we cannot promise — is in docs/ACCOUNT_SAFETY.md.

💳 What failure costs you. Credits are only spent on Veo video generation — images and composition ops are free, so most breakage costs nothing. When Flow's UI drifts mid-run, the CLI fails fast and loudly with distinct exit codes (e.g. selector drift = exit 23) instead of resubmitting, and batch items are recorded locally before submission so a broken run never silently burns credits on a stale state. See KNOWN_ISSUES for the current risk list.

🌐 Headed browser today. gflow drives Flow through a persistent Playwright Chromium profile, because Google's auth and reCAPTCHA gates require it. The Architecture section shows where you can help.

Why gflow-cli?

You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:

  • Batch generation. Loop prompts straight from the shell: for p in $(cat prompts.txt); do gflow image t2i "$p"; done. Image batching plus gflow video t2v / i2v / r2v all ship today, and gflow video extend continues an existing clip past Flow's 8s ceiling.
  • Consistent subjects. gflow character create mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
  • Prompt tools. --tool creative-director rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with My Tools.
  • Pipelines. Wire Veo into your content automation, AI-video stack, or batch experiments.
  • Terminal-native. After one gflow auth login, you stay in the shell. No clicking through dialogs. A stale session renews headlessly with gflow auth renew.

Same Veo and Imagen models, same quality, same billing against your own Google account, now programmatic.

60-second quick start

bash
# 1 · Install (uv recommended; also: pip install gflow-cli)uv tool install gflow-cliuv tool run --from gflow-cli playwright install chromium     # one-time, ~150 MB# later: `gflow update` upgrades in place (every command shows a banner when a newer release is out)
# 2 · Authenticate (one-time, opens a real Chrome window)# Behind a proxy (e.g. Clash)? Set GFLOW_CLI_BROWSER_PROXY=http://127.0.0.1:7897 first (docs/CONFIGURATION.md)gflow auth login --browser chrome
# Check the session (spends nothing)gflow auth statusgflow credits user          # Veo credit balance (opens Flow in the browser; spends nothing)
# 3 · Generategflow image t2i "a hot air balloon over Tokyo at sunrise"# or:gflow video t2v "Slow cinematic push-in on a sunlit forest clearing" --aspect 16:9# or mint a reusable Character (face + body reference):gflow character create --project <id> --name "Aria" --face-prompt "..." --body-prompt "..."

Outputs land under $GFLOW_CLI_OUTPUT_DIR, or you can route them to S3, MinIO, or Google Cloud Storage with GFLOW_CLI_STORAGE_URI. The first call takes 30 to 90 seconds while Chromium warms up; later calls reuse the warm session.

Why --browser chrome? It is the only strategy that marks the profile as a real-Chrome profile, which is what later generation runs open it with. The default auto picks it whenever Chrome is installed — see docs/AUTHENTICATION.md.

Installing from a local checkout? uv tool install <path> ignores uv.lock and resolves dependencies from the pyproject.toml ranges, so it can hand you a Playwright build this project has never tested. Playwright ships the browser driver, and an untested minor can wedge a generation silently. Carry the locked version explicitly:

bash
uv tool install --force --with playwright==1.59.0 .

Installing from PyPI (uv tool install gflow-cli) is unaffected — the published range is upper-bounded. Check what you actually have with uv tool run --from gflow-cli python -c "import importlib.metadata as m; print(m.version('playwright'))".

For the full 10-minute walkthrough with troubleshooting and multi-account setup, see USER_GUIDE: Journey 1.

Examples

One command in, real Flow output back. Left: gflow image t2i generating a photorealistic scene in your library. Right: a frame-to-frame transform.

[gflow-cli examples: text-to-image generation, and a before/after frame transform]

Demo

[gflow image t2i runs a single 9:16 prompt, streams structlog output, and writes a PNG to disk]

A single gflow image t2i "..." --aspect 9:16 --model nano2 call against a logged-in Flow profile. The terminal streams the run's structlog JSON, then lists the written PNG. Chromium drives the Flow editor silently in the background.

Reproduce the recording with scripts/record_demo.ps1 (Windows, OBS, ffmpeg, gifski). More formats, including the side-by-side split-screen: docs/DEMOS.md.

Documentation

docs/INDEX.md is the master routing layer. Quick links:

Usage data: gflow stores local usage counters and, after an interactive notice (and explicit consent in the EU/EEA), uploads weekly totals without an identifier. See the privacy notice and how to turn it off.

TopicRead
🎯 Getting startedUser Guide · Usage · Configuration
Storage & catalogExternal Storage · Data Layer
🎭 CharactersCharacters, reusable subjects (gflow character)
🤖 Agentic & automationInstructions (gflow instructions, persistent brief cards) · Movie (gflow movie, multi-scene manifests) · Tools (--tool, prompt rewriting) · MCP server (gflow mcp run / gflow serve)
🔐 Auth & sessionsAuthentication · Known issues
📣 Where to install fromMarketplaces (every channel and what each actually delivers) · Container (why the image introspects but cannot generate)
🏗️ InternalsArchitecture · Security · Usage data notice · Debugging
📦 ReleasesChangelog · Roadmap · Release protocol · Project status
🤝 ContributingContributing · Development · GitHub workflow

For AI agents & LLMs

gflow-cli ships four agent entry points. Pick the one your tool reads first.

FileAudienceTools
AGENTS.mdUniversal coding-agent specCursor · Codex · Aider · Antigravity · Jules · Devin · Windsurf · Zed · Warp · opencode · Copilot
CLAUDE.mdClaude Code's auto-loaded memoryClaude Code
llms.txtLLM-readable summary (llmstxt.org format)Paste into ChatGPT, Claude, or Gemini to onboard the model
skills/gflow-cli/SKILL.mdClaude Code SkillSymlink into ~/.claude/skills/

Install the plugin (Claude Code)

One step, and you get the gflow-cli and video-production skills plus the MCP server:

/plugin marketplace add ffroliva/gflow-cli/plugin install gflow@gflow-cli

The plugin ships disabled. Claude Code starts a plugin's MCP servers automatically once a plugin is enabled, with no prompt of its own — and this server drives your own Google account, where Veo video generation bills your credits. So installing it starts nothing, and enabling it is a deliberate act. Images and composition are free; only video spends. For a hard guarantee, register the server yourself with gflow mcp run --no-spend, which never registers the credit-spending tools at all. See docs/MCP.md for the details, including which revision /plugin marketplace add gives you.

Codex users: codex plugin marketplace add . then codex plugin add gflow@gflow-cli.

Onboard any agent in one line. Paste this into your agent of choice:

"Read AGENTS.md and docs/INDEX.md, then help me with my Flow batch."

Architecture & current limitations

text
gflow CLI  →  Provider (interchangeable)  →  Flow (ui_automation) / Mock (tests) / [planned: Official Veo]                                              ↓                                      Playwright Chromium (headed — login AND generation, by default)                                              ↓                              aisandbox-pa.googleapis.com  (Google's private Flow API)

Current transport: ui_automation drives Flow through a persistent Playwright Chromium profile. It is production-stable and verified end-to-end every release (see the per-release LIVE_VERIFICATION_* evidence files).

Two Flow frontends: Google is moving accounts from labs.google onto flow.google.com (#639) — same product, different widget toolkit and wire protocol (batchexecute instead of aisandbox-pa). The migrated driver covers text-to-video, image-to-video from a local start frame, reference-to-video from local files, text-to-image, image-to-image from local files, and a single-segment video extend. Image generation supports Nano Banana 2.1 (nano2, #958) / 2 Lite / Pro, the five aspect ratios measured on that host (16:9, 4:3, 1:1, 3:4, 9:16), and counts 1–4; an existing project is required at the transport boundary. Images can tag a character by @Name, and reference-to-video takes a named character with --reference-entity + --reference-entity-name (#723). An account served the agent-only composer (#799) gets text-to-image and text-to-video only. An image --ref <uuid> is referenced in place when the catalog records it in the same --project (#995). Other UUID media references, an entity id without a name, instructions, Imagen 4, and the rest of the matrix keep the labs driver until ported (GFLOW_CLI_FLOW_HOST, see CONFIGURATION).

What's blocked: a pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers plus a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (evaluate_fetch, bearer, sapisidhash) live under src/gflow_cli/api/transports/experimental/ for research, off the production path.

How you can help: if you have driven aisandbox-pa.googleapis.com from outside a real Chrome session, or you understand Google's anti-bot stack here, please open an issue. A working REST transport would unlock serverless deployments, true horizontal concurrency, and roughly 10x the project's reach. Details: docs/ARCHITECTURE.md § Headed-browser dependency.

Project status

Alpha. Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend, upscale) run end-to-end on ui_automation, with a 5-model Veo picker plus --duration and --count. Beyond single generations: gflow movie renders multi-scene manifests, gflow instructions manages persistent Agent-Mode brief cards (credits-free), gflow character handles reusable subjects, gflow scene does credit-free server-side stitching, --tool applies prompt-rewriting tools, and an MCP server (gflow mcp run stdio / gflow serve Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.

Full milestone history lives in CHANGELOG.md. Where the project is heading: ROADMAP.md.

Support gflow-cli

gflow-cli is built and maintained by one person. Every release is verified against real Google Flow, which spends real AI credits, and breakages get fixed fast because people run it in their pipelines. Sponsorship pays for both.

[Sponsor $5 one-time] [Sponsor $5 a month]

Relying on gflow-cli at work? The monthly company tiers put your logo here, and Silver and above also get priority issues. All tiers and what each one gets: docs/SPONSORS.md.

Patched gflow-cli in your fork? Please open an issue or a pull request — a fix that lands upstream helps everyone.

Hall of fame

No sponsors yet. Be the first — every public sponsor is listed here.

License & legal

MIT License © 2026 Flavio Oliva (ffroliva). The MIT license covers gflow-cli's code only. It grants no rights to Flow, Veo model output, or any Google service. Google's own terms (Labs Additional Terms and any plan-specific subscription terms) govern your generations. See the DISCLAIMER.

Acknowledgements


Stats

[GitHub stars] [GitHub forks] [GitHub watchers] [GitHub issues] [GitHub pull requests] [GitHub last commit] [GitHub repo size] [PyPI downloads]

Star history

[Star history chart for ffroliva/gflow-cli]

If gflow-cli saves you time, please ⭐ the repo. It is the cheapest way to support the project.

Source: README.md at commit f12193f

Tools

20

gflow_generate_image

Generate an image using Google Flow's image models. Produces 1-4 images from a text prompt. output, if given, must resolve inside the configured output directory. Models: nano2 (Nano Banana 2.1, fast; 'nano2.1' also accepted), nano2-lite (Nano Banana 2 Lite), nano-pro (Nano Banana Pro), image4 (Imagen 4, no longer in Flow's menu). Aspects: 1:1, 9:16, 16:9, 4:3, 3:4. The prompt supports @AssetName mentions to tag saved project characters/assets by name (resolves to referenceEntities/referenceImages). Reference a SAVED named asset via @Name; reference an arbitrary one-off image via reference_images. See docs/REFERENCE_STRATEGIES.md. On accounts served from flow.google.com, use an existing project and local reference files. A character attaches there by name (@Name, or reference_entities paired with reference_entity_names); a UUID media reference the local catalog records in that same project is referenced in place (#995), but any other UUID, an entity id without a name, and image4 are not ported to that composer yet and fail before submit; retrying will not clear it. On an agent-only composer (#799) only text-to-image runs, so reference_images and character references fail there too. Returns local file paths to the generated images.

Parameterswaitcountmodeltoolsaspectoutputpromptrequiredprofileprojectui_modeinstructionsproject_name+3 more

gflow_generate_video

Generate a video using Google Flow's Veo model. Modes: t2v (text-to-video), i2v (image-to-video), r2v (reference-to-video). Aspects: 9:16, 16:9. Optional model (veo_lite/veo_fast/veo_quality/omni_flash), duration (seconds), and count select the Veo model, clip length, and batch size (CLI parity). The prompt supports @CharacterName mentions to tag saved project characters by name (resolves to referenceEntities). Reference a SAVED character via @Name; pass one-off ingredient images via reference_images. See docs/REFERENCE_STRATEGIES.md. Optional ui_mode ('classic'/'auto') verifies the classic editor pre-submit and aborts before spending credits if unreachable; 'agentic' is not supported for video. output, if given, must resolve inside the configured output directory. Returns the local file path to the generated video.

Parametersmodewaitcountmodeltoolsaspectoutputpromptrequiredprofileprojectui_modeduration+7 more

gflow_list_tools

List available gflow prompt tools (name, title, description, category).

Takes no parameters.

gflow_list_models

List the image and video models the generate tools accept: name, Flow's menu label (image), accepted aliases, reference cap, max duration (video), aspects and tiers. Static catalog, the same as `gflow models --json`; no browser, no spend.

Takes no parameters.

gflow_get_credits

Read the current Google Flow credit balance for one saved profile or all profiles - the number Flow's account menu shows, read from flow.google.com in that profile's browser (one browser launch per profile, sequential for all_profiles). Spends no credits. Set all_profiles=true when choosing an account for generation; partial profile failures remain visible in the result. Set refresh=true to renew a signed-out session (rewrites that profile's saved cookies) in a headless browser and read again (slower - one more Chrome launch per signed-out profile; a revoked session still needs `gflow auth login`). The tier fields (sku, service_tier, user_paygate_tier, subscription_credits) are always null: flow.google.com does not report them.

Parametersprofilerefreshall_profiles

gflow_character_list

List the saved Flow CHARACTER entities in a project, with their entity ids. Read-only and spends no credits. Call this to discover what you can attach: an id goes to reference_entities on the generate tools, and a display_name can be used as an @Name mention in a prompt (same wire, they dedupe). Drives a browser session, so it is slower than the catalog tools.

Parametersprofileprojectrequired

gflow_character_voices

List the preset voices available for a Flow Character's TTS. Static lookup — no network, no browser, no cost. Call it before creating a character to choose a valid voice name.

Takes no parameters.

gflow_character_show

Show one saved Flow CHARACTER entity by id or by exact display name. Read-only and spends no credits. Exactly one of entity_id or name is required; an ambiguous name is an error rather than a guess, which is the reason to prefer the id. Drives a browser session.

Parametersnameprofileprojectrequiredentity_id

gflow_download_media

Fetch an already-generated VIDEO from Flow by its media ID and write it to disk. For a generation that finished and was billed but whose download failed — the clip is in the Flow project and the local catalog shows no file for it. Spends no credits: the generation was already paid for. The bytes are verified against the size Flow reports before the file is written. out_dir, if given, must resolve inside the configured output directory. Video only: an image media ID is refused immediately (exit 11) because the signed URL this needs comes from a record only a clip's route emits. See issue #877. The transfer already retries a dropped connection internally, so a failure marked retryable means wait a moment and call again — never immediately, and never in a tight loop: each call opens a browser under a per-profile lease, and a second concurrent call fails on that lease instead (exit 11).

Parametersout_dirprofilemedia_idrequired

gflow_upscale_image

Upscale a platform-generated Flow image to 2K or 4K and save it locally. media_id is the UUID of the image to upscale. scale is '2k' or '4k' (4k requires Ultra subscription; Pro/Plus accounts support 2k). project is optional (resolved from the local catalog when omitted). out_dir is the output directory (defaults to configured images directory; must resolve inside the configured output directory). profile selects the auth profile (defaults to the active profile). Spends no credits: image upscale is free.

Parametersscaleout_dirprofileprojectmedia_idrequired

gflow_upscale_video

Upscale or export a platform-generated Flow video to 1080p Full HD (or 270p GIF). media_id is the UUID of the video to upscale. scale is '1080p' (Full HD), '720p' (original), or '270p' (animated GIF). project is optional (resolved from the local catalog when omitted). out_dir is the output directory (defaults to configured videos directory; must resolve inside the configured output directory). profile selects the auth profile (defaults to the active profile). flow.google.com only (GFLOW_CLI_FLOW_HOST=labs.google refuses it). Measured free (1 observation, 2026-10-07): the 1080p export spent no credits.

Parametersscaleout_dirprofileprojectmedia_idrequired

gflow_list_projects

List all projects in the local gflow catalog. Returns project IDs, names, and creation dates from the SQLite database.

Parameterslimitoffsetprofile

gflow_usage_stats

Summarize local gflow-cli usage statistics over the last N weeks. Returns command invocation counts from local telemetry (when enabled) and generation counts from the local catalog. Like every gflow tool call, it may start the weekly background upload of usage totals when one is due (only on machines where a person has seen the usage notice; see the telemetry block's upload state).

Parametersweeks

gflow_auth_status

Non-interactive, credit-free Flow session probe (#497). Call this BEFORE a generation tool to fail fast on expired auth, before a long blocking generation call. Never starts an interactive login flow. May boot a short-lived headless browser, which on flow.google.com is the usual path, and may take up to ~2 min on a slow network.

Parametersprofile

gflow_instructions_list

List a Flow project's persistent Agent-Mode instruction cards (reads the live server brief). Credits-free.

Parametersprofileprojectrequired

gflow_instructions_add

Add a persistent instruction card to a Flow project's Agent-Mode brief (credits-free). Each ref is classified automatically: local image path → uploaded as an image reference; asset UUID → image reference; anything else → character id/name.

Parametersrefstextrequiredtitlerequiredenabledprofileprojectrequired

gflow_instructions_set_enabled

Enable or disable one instruction card on a Flow project's brief, selected by title or card id (exactly one). Credits-free.

Parameterstitlecard_idenabledrequiredprofileprojectrequired

gflow_instructions_rm

Remove one instruction card from a Flow project's brief, selected by title or card id (exactly one). Credits-free.

Parameterstitlecard_idprofileprojectrequired

gflow_instructions_toggle_mode

Turn a Flow project's brief master switch on or off. When off, NO cards apply even if individually enabled. Cards are left untouched. Credits-free.

Parametersenabledrequiredprofileprojectrequired

gflow_instructions_apply

Declaratively FULL-SYNC a Flow project's brief: REPLACES all existing instruction cards with the given set (destructive — cards not listed are removed). Each card is {'title', 'text', 'ref': [...], 'enabled'}. Credits-free.

Parameterscardsrequiredprofileprojectrequired

Version history

25
  1. v0.95.0LatestNov 7, 2026
  2. v0.93.0Nov 6, 2026
  3. v0.92.1Oct 30, 2026
  4. v0.92.0Oct 29, 2026
  5. v0.90.0Oct 25, 2026
  6. v0.89.1Oct 24, 2026
  7. v0.89.0Oct 23, 2026
  8. v0.88.0Oct 22, 2026
  9. v0.87.0Oct 22, 2026
  10. v0.86.0Oct 18, 2026
  11. v0.85.0Oct 14, 2026
  12. v0.84.0Oct 12, 2026
  13. v0.83.2Oct 11, 2026
  14. v0.83.1Oct 8, 2026
  15. v0.83.0Oct 7, 2026
  16. v0.82.1Oct 2, 2026
  17. v0.82.0Oct 1, 2026
  18. v0.81.0Oct 1, 2026
  19. v0.80.0Sep 30, 2026
  20. v0.79.1Sep 22, 2026
  21. v0.79.0Sep 18, 2026
  22. v0.78.0Sep 18, 2026
  23. v0.77.1Sep 17, 2026
  24. v0.77.0Sep 16, 2026
  25. v0.76.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts