Repository navigation
feat(extend): drive video extend on flow.google.com through Flow's own UI (#639) - #991
Merged
Merged
Conversation
- to_batchexecute_wire: source_workflow_id in media ref, [token,1], uuid3 op envelope, compact JSON separators - _extend_video_batchexecute: resolve workflow_id_for_media, source_path /project/<id>/scene/<scene_id>, referer/origin headers - _batchexecute_post: source_path param, compact f_req - poll_video_status: workflow_id kwarg routes to _poll_video_status_batchexecute (as29s on migrated host; REST batchCheckAsyncVideoGenerationStatus is 401 there) - extend_chain: pass started.workflow_id to the poller Live-verified 2026-09-19: wire submit scheduled wf 2bb68ea1, DONE via jwpduf, mp4 2786225 bytes downloaded (h264 720x1280 7s).
… video extend Signed-off-by: stgmt <stigmat.rudnev@gmail.com>
…639) - FlowApiClient.create_scene routes to _create_scene_batchexecute when host is migrated - _create_scene_batchexecute posts rqZuUc RPC to compose a scene from workflowIds - _run_extend downloads single completed segment directly without aisandbox concatenation - Unit tests for create_scene on migrated vs legacy hosts Signed-off-by: stgmt <stigmat.rudnev@gmail.com>
…rap to flow.google.com (#639) - FlowApiClient.create_scene_for_extend encapsulates host-specific scene creation (media_id for migrated rqZuUc, workflow_id for legacy REST create_scene) - _bootstrap_and_resolve_locale falls back to flow.google.com on labs connection errors - Unit tests for create_scene_for_extend on migrated vs legacy hosts Signed-off-by: stgmt <stigmat.rudnev@gmail.com>
…oll (#639) - Extract flow-content.google signed CDN URL from as29s terminal record - Cache signed URL by media_id and workflow_id in FlowApiClient - download uses cached signed URL directly, eliminating 401 on migrated host Signed-off-by: stgmt <stigmat.rudnev@gmail.com>
…); keep #882's host-independent fixes
…ent (#639) Design B: open the clip editor, read media -> workflow + kind from the passive Zzl0ze reply, guard rqZuUc/fZytfe at the route, reuse the composer observer (submit_rpcs/submit_selector/request_check) and its signed-URL fetch. Unported forms (-n > 1, --scene/--resume-from, --seed, a foreign --aspect) exit 36 before anything is billed.
…SSUES, llms.txt, skill, CHANGELOG
…nd fZytfe The route guard read only the first id of rpcids=, so a wrong fZytfe batched behind another rpc (rpcids=uwAyfb,fZytfe) was released unchecked. It now judges the URL list plus every f.req frame, and aborts any fZytfe after the first released one so a run cannot bill twice. migrated_composer's url_rpcid / body_rpcid / request_body are now public, so the extend driver drops its reportPrivateUsage ignores.
…com; restore labs scene render - Default host auto sent -n>1 / --scene / --resume-from / --seed to the labs arm, which on a page served flow.google.com read the retired projectInitialData (exit 7). _extend_session now checks the served host before that read and raises the same exit-36 refusal. client._upscale_route becomes the public served_route. - Labs -o renders the scene again for any N>=1 (source + extensions, as KNOWN_ISSUES measured); #882 had downloaded only the new 7 s segment. - unported_extend_form + unported_error merge into unported_refusal; on_started is a plain sync callable typed with ExtendStarted. - Drop the unreachable labs.google kill switch inside extend_video_migrated (the CLI never routes labs.google there) and pin _anchor's selector drift (exit 23) with its own test.
…en no submit facts were captured _source_clip took the first Zzl0ze frame even when it did not hold the media, so a later reply that did was lost. It now settles on the matching record; at the budget it returns None (exit 11) if a read answered, else a timeout (exit 9). started() logs migrated_extend.no_submit_facts when the guard never read the page's fZytfe.
Extend passes its own submit button; a missing or disabled one was still reported as 'arrow_forward', pointing at the wrong control.
… -o and the cost note - CONFIGURATION, video-production skill (+ plugin copy), the recon memory and AGENTS.md now list single-segment extend as ported; multi-segment, --scene / --resume-from and --seed exit 36. - extend --help and USAGE: -o renders source + extensions on labs.google but saves only the new extension clip on flow.google.com (scene concat not ported there); the cost-confirmation note is labs.google only. - New repo memory drive-the-page-dont-replay-the-rpc, cited from the D6 row of pr-council-review.
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 4 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
… into helpers Clears Sonar S3776 x2, S3358 and S7503: the on_started handler is now a plain function (the composer already accepts a sync callback). No behaviour change.
…report into helpers Clears Sonar S3776 on _extend_migrated_session. Same output, record call, log event and exit codes.
This was referenced Oct 18, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a maintainer takeover of #882 by @stgmt, opened from the main repo so the SonarCloud gate runs. @stgmt's commits stay in the history with their authorship. Their wire research is the foundation of this change. The fork PR will be closed in favour of this one.
What it does
gflow video extendnow works on accounts that Flow serves from flow.google.com, for one segment per run. Before this change it exited 36 there.gflow drives Flow's own extend UI:
/project/<pid>/edit/<media>.rqZuUc,uwAyfbandfZytfeitself, with a reCAPTCHA token the page minted. gflow only observes those requests, then follows the status poll and downloads the new clip.Plan folder:
docs/superpowers/plans/2026-10-17-migrated-video-extend/(PREDICT, SCENARIO, PLAN). The click path and wire were measured at $0 by aborting the route, recorded in the spikes2026-10-17-migrated-extend-ui-path.mdand2026-09-19-migrated-video-extend-wire.md(the latter by @stgmt).Why the design differs from #882
#882 replayed
fZytfethroughpage.request.post, using a reCAPTCHA token that gflow minted itself and parameters scraped fromWIZ_global_data. Predict was unanimous across five personas that driving the page is safer, for four reasons:inner[2]. Today's capture shows the page sending1where feat(extend): drive video extends on flow.google.com via batchexecute fZytfe (#639) #882 sent2.Driving the page removes all four, and it matches every other port to flow.google.com: composer, upscale and characters. The replay code is deleted, and
client.py,video_extend.pyandextend_chain.pyare back to develop's versions apart from the new entry point.Kept from #882, with tests:
video_resultJSON shape;--jsonoutput;fZytfefield map;as29s/record knowledge.Safety
-n > 1,--scene/--resume-fromand--seed. This also applies under the defaultGFLOW_CLI_FLOW_HOST=auto, where Flow served flow.google.com; previously that path exited 7.Zzl0zeproject read.rqZuUcmust name the media andfZytfeslot 1 must carry the source workflow id. Otherwise the request is aborted with a typed error.fZytfeis aborted.Verification
/gflow:check: hygiene, doc links, website PII, website mirror and council memory checks all pass. ruff and ruff format are clean, pyright reports 0 errors, and the offline suite has 5073 passed.auto;-oscene render;video extendkeeps its recorded parity exemption (tests/mcp/test_cli_parity.py): a long billed chain whose cost confirmation has no MCP equivalent (investigate: clamp long MCP operations to the client tool-timeout (or confirm enqueue already covers it) #481). Nothing in it changes here.Not covered / not ported to flow.google.com yet
-n > 1),--scene/--resume-fromand--seed: each is refused with exit 36. Extending from an existing scene has not been measured.-obehaves differently by host. On flow.google.com it writes the new extension clip only, because scene rendering is not ported there. On labs.google it renders the whole scene, as before.Refs #639. Supersedes #882.