openFlow

io.github.molkex/omni-flash-veo3-nano-banana · v1.1.0 · ai-and-media

openFlow is healthy: it completed an MCP handshake in 783 ms and exposes 45 tools.

Omni Flash and Veo video, Nano Banana images on Google Flow, from any MCP client

Endpoint: https://openflowmcp.com/mcp (streamable-http)

Repository · Website · JSON · Add to my inventory

Facts

Users (last 30 days)0
HandshakeHealthy
Auth neededNone
Tool count45
Latency783 ms
Last checked (UTC)2026-10-16T10:50:35.501Z

Health history

Checked (UTC)StatusLatencyError
2026-10-16T10:50:35.501ZHealthy783
2026-10-15T06:05:35.104ZHealthy2871

Tools (45)

generate_with_faceGenerate a NEW image of the SAME PERSON/character as an existing photo or portrait — dress them differently, move them somewhere else, make an avatar. This is the tool for "here is my photo, now put me in a suit / in a park", and also the ONLY tool for "generate another picture of <chara
generate_imageGenerate an image from a text prompt via Google Flow. model — pass ONE of these exact ids (from GET v1/flow/models, verified 2026-07-25): BELUGA = "Nano Banana 2" — the DEFAULT, ~30s (legacy id NARWHAL is accepted as an alias) GEM_PIX_2 = "Nano Banana Pro" — highest
music_generateGenerate a full song from a text brief via Google Flow Music (Lyria). prompt — free text: genre, mood, BPM, instruments, and whether you want vocals or an instrumental (e.g. "dreamy synthwave, retro 80s, 110 bpm, instrumental"). The Producer agent turns it into a finished track (usually
music_chatTalk to the Google Flow Music Producer agent instead of one-shotting a track. Use this when the work is a conversation rather than a single brief: asking what it can do, having it write lyrics first, or editing a track it already made ("drop the vocals", "same song, 30 seconds shorter",
music_stemsSplit a track we generated into stems (vocals, instrumental, drums, bass, …). clip_id — the id of a clip returned by music_generate (or music_video's song). Runs on the same account that made the track. Returns {"stems": {name: "/v1/media/..."}, "media": [...]} when done, or a job_id to
music_listList the user's music tracks.
music_getGet metadata for a single music track.
music_downloadDownload the raw .m4a file of a track to the server.
music_creditsCheck remaining flowmusic credits and subscription tier.
generate_sceneBuild a location precisely from a scene-layout/v2 map and generate its plate. This is the "exact location building" path: instead of describing the room in prose (which the model reinterprets — furniture drifts, depths change between shots), it renders a control image from the map's box
generate_videoGenerate a video from a text prompt via Google Flow (Veo models). video_model_key options: abra_t2v_4s (default, 7 credits), veo_3_1_t2v_lite (10cr, visibly cleaner), veo_3_1_t2v (100cr, "Quality" tier), veo_3_1_t2v_fast (20cr). project_id: put the clip into a project made with create_
edit_videoRewrite a video from a plain description: "make the sky stormy", "take the passer-by out of the shot", "warmer light", "put the product from the image on the table". Source — ONE of: media_id: id from a previous generate_video* result (OUR OWN generation). Job is p
recast_videoRe-make a video with YOUR character in place of the person in it: same camera, movement, gestures, timing and mouth movement, the character's look. character: name from list_characters (its portrait is used as the look). Source — ONE of media_id (a video this service made) or video_base
extend_videoContinue a video this service already generated — Flow writes what happens next. media_id: the id from a previous generate_video* result (the bare id, not the /v1/media/... path). Only videos made through this service can be extended: the id belongs to a specific Google account's projec
generate_video_between_framesGenerate the transition between TWO given frames: the video starts at the first image and ends at the second one, Flow invents everything in between. This is Flow's "Кадры" with both slots filled — a different mechanism from generate_video_from_image, which only pins the FIRST frame and
generate_video_from_imageGenerate a video that starts from a given image (i2v — image-to-video). start_image_base64: raw base64-encoded image bytes, no data: URI prefix. Mutually exclusive with reference-image (r2v) generation. For "make content that looks like this real photo of a person" specifically, pr
generate_video_with_referenceGenerate a video using up to 3 reference images (r2v — e.g. a consistent character/subject across the video). reference_images_base64: raw base64-encoded image bytes (no data: URI prefix), up to 3. Mutually exclusive with start-image (i2v) generation. THIS IS THE RECOMMENDED WAY to
generate_character_imageGenerate a portrait or body image for an existing Flow character. entity_id: the character's entityId — from create_character or create_character_from_photo, or create_character_from_description's own result (which already calls this for slot 0 — no need to call it again for that slot).
create_characterCreate a new, empty Flow character (just gets you an entity_id — no portrait/body, no description yet). Plain HTTP, no browser involved. Low-level building block — for "make me a character from a description and generate its portrait", call create_character_from_description instead of t
create_character_from_photoCreate a new Flow character whose portrait (and optionally body) is a REAL PHOTO, not a text description or generation. Both photos become the character's slot-0 (portrait) and slot-1 (body) images directly — Flow's own upload mechanism in its New Character composer, discovered live 2026
create_character_from_descriptionInvent a new character from a text description and generate its portrait — the full "make me a character, no photo involved" path in ONE call, instead of gluing together create_character + update_character + generate_character_image yourself. name: short and unique among YOUR OWN charac
list_charactersList the characters YOU created (create_character_from_description, or create_character_from_photo with name=...) and can now generate more images of via generate_with_face(character=<name>, prompt=...). Read-only, no Flow calls, no credits spent. Returns {"characters": [{"name", "s
generate_character_turnaroundGenerate a single image showing the character's FULL BODY from 3 angles (front/side/back) in one row, labeled — a "turnaround sheet". Pure HTTP as of 2026-07-26 — no browser involved (see below for what changed and what that does and does NOT prove). History, so the mechanism change
generate_character_expression_sheetGenerate a single image showing the character's FACE with several different expressions in one row, labeled — an "expression sheet". Same job type and same history as generate_character_turnaround — see its docstring for the full story: the 2026-07-11 finding (plain Android-bearer image
create_projectCreate a NEW Flow project on one of your Google accounts and return its project_id. Use this to give every one of YOUR OWN clients their own namespace: create a project per client once, then pass that project_id to generate_image / generate_video so their results never mix with anyone e
generate_voiceSpeak `text` aloud with a Gemini TTS voice and return a WAV (24 kHz, mono, 16-bit). Takes ~15-25 seconds. Costs no image/video quota. Russian, English and most other languages work; the voice name only sets the timbre. text: what to say (up to 5000 characters). voice: one of list_v
set_character_voiceAttach a preset Gemini TTS voice to a Flow character for auto-lipsync in future videos. Synthesizes a short reference audio in the chosen voice and attaches its media_id to the character's `audio_references`. This is a ONE-TIME setup per character: any subsequent video generation that r
list_voicesThe 30 Gemini TTS voices usable with generate_voice: name, gender, short description. Gender/description are a rough guide only; any voice reads any language.
check_creditsCheck projects for a Google account (or all). NOTE: for the credit BALANCE and a full at-a-glance overview, prefer `flow_dashboard()` — it returns real credit numbers per account + totals. This tool only returns the project list.
flow_dashboardThe account-pool control panel: for EVERY Google account, the real credit balance, subscription tier, project count, and health status, plus totals — one call, formatted for reading. Use this to answer "how many accounts, how many credits on each and in total, what projects" — the operat
update_characterSave a character's display name and/or personality notes. Without this, a character stays 'Untitled Character' with no description even after portrait/body images exist. account must be whichever Google account's project owns this entity_id.
upscale_imageUpscale an existing generated image (from a prior generate_image call) to a higher resolution -- the same "1K/2K/4K" choice Flow offers when downloading. account: the Google account whose project owns media_id. Do not guess it and do not ask the user: the generate_image result you alrea
upscale_videoUpscale an existing generated video (from a prior generate_video call) to a higher resolution -- the same "270p/720p/1080p/4K" choice Flow offers when downloading. Counts against the weekly free video limit (3 a week without a subscription), like any other video operation, and spends th
check_jobCheck the status/result of a job previously returned by generate_image, generate_video, generate_video_from_image, or generate_video_with_reference. Besides status/result it reports PROGRESS, so you can tell the person something truthful instead of "still waiting": queue_position
fetch_mediaDownload a generated media file (video, frame) and return its bytes, base64-encoded, so the file can be saved or shown even though the media endpoint isn't publicly reachable with your MCP key. THIS IS THE EXPENSIVE PATH — prefer `download_url` from the job result. Bytes returned he
add_account_tokenAttach one of YOUR OWN Google accounts to the pool using an oauth_token captured on the USER'S OWN machine (password/2FA never leave it). This is the self-serve onboarding path — no server-side browser, no SSH. PREFERRED PATH — no oauth_token handling at all: call flow_status; its `
flow_statusWhat this key still needs before it can do everything — READ-ONLY, spends nothing. Call this BEFORE the first generation of a session, whenever a call is refused, and whenever the user asks why something does not work. It answers in one shot: is a Google account connected, how much of t
flow_healthCheck whether the Flow generation backend is reachable and see current queue depth (queued + warming + running jobs). Note: the Android emulator is now OFF — generation runs on a pure-HTTP token path, so there's no warm-up delay anymore.
list_live_modelsLive from Google, no credits, use to answer «is this model still working?». Reads Google Flow's own current model catalog (modelConfig: usage keys, per-tier credit prices, durations) and the availability status of each model family, through one of the caller's connected accounts. READ-O
list_modelsList every valid model id this service accepts — READ-ONLY, spends no credits, calls nothing outside this service. Call this BEFORE generate_image/generate_video if you're unsure of an exact id: guessing (e.g. the family key "nano_banana_pro" or a display name like "Nano Banana 2" instea
chat_gemini_proЗапрос к Gemini 3 Pro через вашу подписку Google AI Pro. Использует ваш подключённый Google-аккаунт (подключите на /connect-google). Расходует вашу квоту Google, не наши токены. Args: messages: список {"role": "user|assistant", "content": "..."}. sys
chat_gemini_flashБыстрый и дешёвый Gemini 3 Flash — для коротких запросов, классификации, извлечения полей из текста. Идёт в вашу подписку Google, наши токены не тратит. Args: messages: список {"role": "user|assistant", "content": "..."}. system: системный промпт (опционально
chat_claude_sonnetЗапрос к Claude Sonnet 4.6 через вашу подписку Anthropic (если подключена) или через подписку Google (Vertex). Поддерживает инструменты (tool_use). Args: messages: список {"role": "user|assistant", "content": "..."}. system: системный промпт (опционально).
list_available_llmКакие LLM-модели доступны этому ключу прямо сейчас, и какая у ключа квота. Делает два параллельных запроса: GET /llm/models (OmniRoute — список моделей и подключённых Google-аккаунтов) и GET /v1/me (openFlow — plan + квоты). ETag от /v1/me держится OmniRoute'ом в кэше ~5 мин
refresh_llm_modelsПолучить актуальный список LLM-моделей из каталога OmniRoute. OmniRoute сам опрашивает Google раз в час; `force_live=True` просит релей сходить в Google прямо сейчас (жёсткий rate-limit на стороне релея: не чаще 10 секунд). Полезно, когда клиент видит 404 на недавно