
今天拆的是 gflow-cli:一个借你本机真 Chrome 里那个已登录的 Google 会话去驱动 Google Flow 的 CLI 与 MCP 服务端,让编码 Agent 批量生成 Veo 视频与 Imagen 图片;文章给全它在链条上的位置、五条上手命令、七处已知阻塞,以及订阅、积分和赞助这三笔钱怎么算。
gflow-cli 是一个 Python 命令行工具,MIT 许可,作者是 GitHub 上的 ffroliva(Flavio Oliva),2026 年 5 月 9 日建仓。12 它做的事一句话能说完:借你本机那扇已经登录 Google 的真 Chrome 窗口,替你去点 Google Flow 的网页界面,把 Veo 视频和 Imagen / Nano Banana 图片生成出来。3 到 2026 年 9 月 25 日,仓库有 226 star、62 fork、1,994 次提交,其中 1,847 次来自作者本人;59 个未关闭的 issue 与 4 个未关闭的 PR 挂着,另有 185 个 issue 已经关闭。1 发版很密:仓库侧 101 个 release,PyPI 上 101 个版本,最新一版 v0.79.1 发布于 2026 年 9 月 22 日。45$GFLOW_CLI_OUTPUT_DIR,配好 GFLOW_CLI_STORAGE_URI 之后直接写进 S3、MinIO 或 Google Cloud Storage;3 批量生成是 shell 循环的事,一条命令对应一次生成;3 它的交付物到素材为止,时间线与成片在别的层。ui_automation:用 Playwright 驱动一个有头的、真实的 Chrome,配一个按账号隔离的持久 profile。12aisandbox-pa.googleapis.com 上的认证与 reCAPTCHA 挡住了三类客户端:广告自己是自动化的浏览器(被标记的是 navigator.webdriver = true,所以每条启动路径都带 --disable-blink-features=AutomationControlled);无头浏览器(OAuth 同意流程里同样被指纹识别拦下);还有不带真 Chrome 会话铸出的 cookie 与 token 的裸 HTTP 客户端(多数端点返回 401,或者返回一个只能由人现场通过的 reCAPTCHA)。12 作者试过三条纯 HTTP 路线,三条都停了:evaluate_fetch 在视频上传那一步拿到一个 401;bearer 的令牌轮换太快,几分钟内被限流;sapisidhash 能过读接口,全部写接口(包括所有生成调用)都被拒。三份实现留在 src/gflow_cli/api/transports/experimental/ 目录里备查。12labs.google/fx/tools/flow/project/<id> 重定向到 flow.google.com/project/<id>,前端换了一套、wire 也换了(batchexecute 取代 aisandbox-pa),而且同一个账号、同一个 profile 可能这次落在旧主机、几分钟后落在新主机。13 迁移后的驱动目前覆盖文生视频、本地文件的图生视频与参考生视频、文生图、本地文件的图生图;状态读取用的是页面自己的通道——图那边是一次挂住约 19.7 秒的 ogiZ0b 响应,视频那边是 Flow 页面自己持有的 5.00 秒定时器 jwpduf,仓库为这件事写了两份实测,结论是这条路上没有推送通道,只能轮询。12gflow mcp run 走 stdio,gflow serve 在 /mcp 上开一个 Streamable HTTP 端点;服务端建在 mcp>=2 的 Python SDK 上,一次连接里协商协议版本,同时伺候握手那几代与 2026-07-28 的无状态版。14 Claude Code 可以用插件装,装完得到两个技能和一个 MCP 服务端登记;这个插件默认是关的,理由写在文档里:Claude Code 在插件被启用时会自动起它的 MCP 服务端而不再问一次,而这个服务端花的是你账号里的 Veo 积分。1415 Codex 的插件只带技能,因为 Codex 不从插件里加载 MCP 服务端;15 此外还有 skills/gflow-cli/SKILL.md、AGENTS.md、CLAUDE.md、llms.txt 这几份写给模型看的文件。316gflow mcp run --no-spend(或 GFLOW_MCP_NO_SPEND=1):它干脆不注册 gflow_generate_image 与 gflow_generate_video 这两个会花钱的工具,tools/list 里看不到它们。18gflow.db 和那个 profile 目录,前者记项目、图片、视频、profile 四类记录,gflow data list {projects,images,videos,profiles} 可以只读地翻。319
skills/、docs/、docker/、glama.json 与 pyproject.toml,顶部那行提交来自默认分支 develop;截至采集当天,仓库侧累计 101 个 release。1gflow auth login --browser chrome 会打开真的 Chrome 窗口,你登录、你自己过验证码(文档写明工具不会替你解,这是有意的)、Flow 面板加载完成后工具自己关窗并把会话存进 profile 目录;会话默认能撑到 Google 让它失效,通常是几周。20gflow video t2v)、图生(i2v,可以带尾帧)、参考生(r2v,用 Flow 里的素材)、把一个已有片段的最后一帧接上下一个片段(chain),以及越过 Flow 那个 8 秒上限的延长(extend)。3gflow image t2i)、图生(i2i,引用可以是本地文件,也可以是 Flow 里已有素材的 UUID)、上传、放大,还有一次给出多条提示词的批量。314gflow character 用脸与身体的参考图铸一个 Flow Character,让同一个人物跨多次生成保持一致。3 迁移后的主机上 character create 已经能用,character list 还在读一条被退休的旧路由,一跑就退出 7。22gflow scene 在服务端把有序片段拼起来,gflow instructions 管的是 Agent-Mode 的持久简报卡。3expand_prompt 按 Google 那套五段式扩写一句话、create_character)与 3 个 resource(MCP 用法指南、本仓库 KNOWN_ISSUES 的索引、SQLite schema);容器自检那一次的 tools/list 返回的是 15 个工具。1423SKILL.md 里有一段写着,需要生产级可靠性与 SLA 的场景请改用官方的 Gen AI SDK;16 MARKETPLACES.md 专门列了一节「没有任何渠道能给你什么」:没有托管或远程的 gflow 服务端(没有公开的 Flow API,也没有 OAuth 可以让你合法地建一个),没有一个能用的 Docker 镜像。15uv tool install gflow-cli # 装 CLI,装完得到 gflow 与 flow 两个入口
uv tool run --from gflow-cli playwright install chromium # 一次性,约 150 MB
gflow auth login --browser chrome # 一次性,你自己登录并过验证码
gflow auth status # 期望看到 Flow session verified
gflow video t2v "a hot air balloon over Tokyo at sunrise" # 第一段视频3--browser chrome 省不得:文档说这是唯一会把 profile 标成「真 Chrome profile」的策略,后续生成正是拿这个标记去开同一个 profile;默认的 auto 在装了 Chrome 的机器上会选中它,一旦回落到内置策略,生成会在那个 profile 上立刻失败。20 你还可以顺手跑一次 gflow credits user 读余额,这条命令能不能成,见下面第 5 条阻塞。16/plugin marketplace add ffroliva/gflow-cli 再 /plugin install gflow@gflow-cli,会装上 gflow-cli 与 video-production 两个技能并把 MCP 服务端登记好;插件默认关闭,要显式启用,或者干脆自己登记 gflow mcp run --no-spend。Codex 那边是 codex plugin marketplace add . 与 codex plugin add gflow@gflow-cli,只带技能。两条路都要求 gflow 已经在 PATH 里,并且已经完成过一次有头登录。15gflow auth status 退出 0 并打印认到的账号;gflow data list videos 能看到刚生成的记录;每条命令失败时带一个类型化错误、一个退出码和一个 retryable 布尔值,脚本按它决定要不要重跑。1420 退出码本身也是一套信号:10 是风控挡下,21 是日或分钟配额到顶,22 是套餐不够,23 是界面选择器漂移,31 是命令落到了 Flow 的公开落地页,36 是这个能力还没搬过去,39 是这个账号根本没有 Flow 权限。61422
UiSelectorDriftError,retryable: false;同一个账号前一天还是好的。
触发条件:你的账号被 Google 迁到新主机。触发这件事的是账号侧的灰度,跟你改没改配置无关——#639 里写着,同一个账号、同一个 profile、同一个项目,这次落在旧主机、几分钟后落在新主机,中间没有任何客户端改动。
现状:#639 由外部报告者在 2026 年 9 月 2 日提交,到 2026 年 9 月 25 日仍是 open,28 条评论。根因写得很干净:迁移后的前端里 <i> 元素数量为零,而 gflow 的模式识别与每个模式开关都锚在 Material Symbols 的 ligature 选择器(i.google-symbols:text-is(...))上,于是识别回落、开关找不到、整条命令倒下。报告者在 0.59.0、0.62.1、0.63.0 与 0.65.0 上都复现过。13 到目前为止的覆盖写在 KNOWN_ISSUES 里:文生视频、本地文件的图生视频与参考生视频、文生图、本地文件的图生图已经跑在新主机上;图片侧支持 Nano Banana 2 / Pro,以及它在 radiogroup 里渲染的画面比例,数量 1 到 4;character create 已经能用,character list 不能;UUID 与 @名字 的引用、Agent instructions、Imagen 4、按 UUID 的帧引用、scene、extend 与 tools 都还没搬,遇到就退出 36。2226
你能怎么办:用 GFLOW_CLI_FLOW_HOST 明确指定主机,并把 --project 带上(迁移后的路径要求有项目);然后按上面的清单挑今天能用的形态,别把「文档列了」读成「这条路上已经通了」。12 另外记住 #716 那笔账:在这个保护落地之前,gflow video t2v @名字 … 或带 --reference-entity 的请求在迁移后的主机会被提交并计费,而主体被静默丢掉,出来的是一段「换了个人」的合理画面;v0.71.0 之后这道检查被提到了所有提前返回之前。27
<i> 元素」上,并写明这件事会随页面加载来回摆动。13gflow auth status 在半秒内回你「Flow session verified」,之后每条命令都退出 31,页面停在 Flow 的公开落地页 /about。
触发条件:Google 要求你的账号重新确认一次身份。这时 cookie 全在、也没过期,所以那半秒的探测看到的是一个健康的会话。
现状:KNOWN_ISSUES 把它记为 Open、对受影响账号属于 High(什么都跑不了),证据是在一个账号上 2026 年 9 月 23 日测到的,跟踪单是 #902。当时的 auth login 看到一个有效 cookie 就关掉 Chrome,而 Chrome 是在关掉之后才走到 Google 那个确认页;CHANGELOG 里写明这个失败状态没能在线复现,修复只有离线测试压过。222829
你能怎么办:文档给的绕过办法需要账号密码。确认没有 gflow 命令在跑之后,用那个 profile 目录自己开一次真 Chrome(--user-data-dir=<profile 目录> --password-store=basic https://flow.google.com/),点页面上的主按钮把 Google 的确认走完,再自己关掉窗口;在那个被测账号上,下一次运行 /about 就消失了。22 新版会把这个状态显式报成退出码 12,不再谎报成功。29navigator.webdriver = true,无头与自动化标记都会被挡,所以生成路径用的是有头系统 Chrome(channel=chrome 只解析到 /opt/google/chrome/chrome,Chromium 不算)。1223 因此 MARKETPLACES.md 那一节「没有任何渠道能给你什么」的第一条就是托管或远程服务端:每次生成都在你自己的账号上跑一个真实 Chrome 会话,托管它等于替别人保管 Google 会话,而且没有公开的 Flow API 或 OAuth 让你合法地建一个。15
你能怎么办:把它当成一台常驻机器上的本地工具来安排。容器这条路有一条被修正过的实测:2026 年 9 月 15 日的记录写着,在一个装了真 Chrome 的容器里 gflow 能跑,Chrome 在 Xvfb 下以有头方式启动,navigator.webdriver 是 None;同一页也保留了 Glama 那个自动构建的镜像不能生成任何东西这一点,它按设计不装浏览器,只是用来过目录方的健康检查。23WafRejectionError,退出码 10,附带 PUBLIC_ERROR_UNUSUAL_ACTIVITY。
触发条件:短时间内连续提交。文档里那份实测来自一个真实账号(#241,2026 年 7 月 5 日):三次提交分散在 30 到 60 分钟里全部通过;在大约 10 分钟内连交约 14 张图之后落在一个 403 上;等约 30 分钟冷却,再按 45 到 120 秒的间隔一条条跑,同一个 profile、同一个项目 4 次里过了 4 次。Flow 的风控看的是累计节奏,单次请求本身说明不了什么。630
现状:项目把自己做的事和没做的事都列在一页里。做的是:驱动真实有头 Chrome;每次点击、面板等待与输入都加 ±25% 的抖动,专门打散确定性自动化那条完美均匀的时间签名;多条提示词的批量在两次提交之间插入 0.5 到 1.5 秒的随机停顿;一次运行只建一个项目,免得反复创建拉高自动化特征;每个账号一个隔离 profile;以及宁可拒绝也不重试——选择器漂移、模型不可用、套餐被拒都停在提交之前。没做的是:代理与轮换 IP、指纹伪装、无头「解锁」,以及假装自己不是自动化。那一页还把功劳留给读者自己判断:项目生命周期内没有在任何测试账号上观察到账号被封,作者把它标成一条观察,并提醒几个账号上的无证据不足以证明不存在,而 Google 的条款是 Google 执行的。6 风控记的是 profile 这一层,同一个账号换一个 profile 当天可能就过了;配套的动作是停手、冷却 30 到 60 分钟、这期间用这个账号真的在 Chrome 里做点事、必要时换 profile、恢复时把间隔调大。6
你能怎么办:把批量拆开、间隔拉开、别把主账号压上去。项目给出的建议很直接:账号风险如果不可接受,那就别用这个工具,或者只用在丢了也能承受的账号上。6
gflow credits user 却报错;或者跑完一轮才发现花超了。
触发条件:你的账号被迁到新主机,而读余额这条路还没跟着搬过去。
现状:KNOWN_ISSUES 里这一条写得很具体(#795):在迁移后的账号上 credits 被 labs 挡住,报错还会把责任推给 SAPISID,而那个主机根本没被访问过。2231 v0.79.1 的发布说明里,作者记下的验证缺口正是这条:gflow credits 在那个账号上返回 401,所以余额读不出来,验证那一次一个积分也没有花。32 至于花超这件事,护栏不在工具里:MCP 那层唯一的刹车是本地令牌桶,文档明写没有额度记账、没有按会话或按天的上限(#495),硬保证要自己登记 --no-spend(#496)。141718
你能怎么办:先确认 gflow credits user 在你账号上是否可用。可用就把它写进批量的前置检查;不可用就把预算纪律放到流程外层——先小批量试,把每次运行留在 gflow.db 里的记录用 gflow data list videos 对账,并且不要让 Agent 在没有 --no-spend 的配置下自由发挥。1422Unexpected error … retryable: False,而 Flow 那边已经生成并计费,本地什么都没有。
触发条件:下载已签名素材的过程中连接被重置。
现状:v0.79.1 的发布说明写的是「一次 ECONNRESET 会让整条命令失败,而 Veo 已经产出并收了钱」,报告者的数据是连续六次运行里失败两次;修复用 Playwright 自己的 max_retries 重试,并且同时修了三处下载点,没有只修报错栈里出现的那一处。293233 更早一版先补了兜底:gflow data download <media_id> 能从 Flow 的项目里把那段已经计费的片段免费取回来;v0.79.0 的说明里写着这条路只对视频有效,图片 id 会立刻以退出 11 拒绝,省掉一次开浏览器再超时三轮的等待。32
你能怎么办:升到 v0.79.1 或更新;万一还是遇到,先别重新生成——错误信息现在会带上 media id 和那条免费取回的命令。32[RED],到 9 月 25 日已累积 42 条运行记录。它写明托管 CI 做不了这件事——在线测试需要一个真实登录的 Chrome profile,而 Google 的机器检测与 reCAPTCHA 让托管环境里的认证走不通。34 发版节奏与之呼应:v0.74.0 在 9 月 14 日、v0.79.1 在 9 月 22 日,八天五个版本;仓库侧 101 个 release,PyPI 上 101 个版本。45 ROADMAP 说得也直接:这是一个跟踪私有接口的独立 CLI,上游一次界面改动就能打乱一个冲刺,所以只公布主题,不公布日期。19 文档本身也能看到漂移的痕迹:USER_GUIDE 讲第一条视频时写着「复用已保存的 Playwright 会话——没有浏览器打开(无头)」,而 ACCOUNT_SAFETY 与 ARCHITECTURE 都写着生成路径需要真实有头 Chrome、无头会被 reCAPTCHA 立刻拒掉;同一件事还有一处,README 说迁移后的图片侧实测到四种画面比例,KNOWN_ISSUES 写成五种(3:4 在 2026 年 9 月 17 日出现,编号 #864)。6122022
你能怎么办:把它当一条会漂的链路来接——锁版本,在流水线里留一个「今天还能不能跑」的探针(gflow auth status 加一次最小生成),并把 #559 当体检表订阅着看。34
claude 的账号 29 次,其余十几个账号合计 75 次。1 赞助页把因果也写了出来:每次发布都要对着真实的 Google Flow 验证一遍,而视频验证花的是真积分,所以赞助同时买的是积分和时间。25| 方案 | 你给它什么 | 它给你什么 | 它在这一层 | 许可与公开体量 |
|---|---|---|---|---|
| 本期:gflow-cli | 一个带 Flow 权限的 Google 账号、一台能开真 Chrome 的机器、积分 | Veo 视频与 Imagen 图片、本地目录、Agent 工具面 | 私有接口的自动化访问层 | MIT,226 star1 |
| vibeframe | Seedance / Runway / Veo / Kling 各自的 key | 一条带硬性花费上限的生成命令 | 多供应商生成路由 | MIT,170 star9 |
| story-shot-agent | 一份任意格式的剧本、一个 LLM key 与 Redis | 镜头级的中英双语提示词与音频提示词 | 剧本到分镜的规划层 | MIT,205 star10 |
| descript-mcp | 一个 Descript 账号 | 改文字就是剪片的那套操作 | 官方 SaaS 的 MCP 接口 | Apache-2.0,32 star11 |
| Comfy MCP | 一个 Comfy 账号,或一台跑着 ComfyUI 的机器 | Agent 自己建图、跑渲染、批量取素材 | 生成引擎的官方接口 | AGPL-3.0-or-later 或商用许可,234 star7 |
| capcut-cli | Node 与一份本机剪映草稿库 | 一份还能继续改的工程 | 工程文件读写层 | MIT,723 star8 |
| Nomi | 一台机器与外部模型来源 | 一份本地工程:画布、分镜、时间线、MP4 | 本机工作台 | AGPL-3.0,522 star37 |
| FireRed-OpenStoryline | 一份 config.toml 与几个模型 key | 18 个工具节点串起的成片产线 | 自带 Agent 的流水线 | Apache-2.0,3,438 star38 |
| HyperFrames | HTML 与组件代码 | 浏览器里的渲染底座 | 渲染底座 | Apache-2.0,52,877 star39 |
| hypit | 一份需求描述 | 一条从脚本到成片的流程 | 编排层 | 自订许可,16,111 star40 |
@名字、instructions、Imagen 4、scene、extend、tools、character list);22 你的批量规模很大,超过「大约 10 分钟里十几次提交」就顶到风控那条线;6 你需要在跑之前读到余额,而 gflow credits user 在迁移后的账号上可能返回 401;31 你想把它放进托管服务或容器平台当常驻服务。15gflow auth status 确认会话是真的,以及在没加 --no-spend 的时候别让 Agent 自由发挥——这个工具会替你花的钱,只有 Veo 视频那一样。14github.com
github.com
github.com
github.com
pypi.org
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
labs.google
github.com
github.com
one.google.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
blog.google
github.com
github.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.