Skip to content

Restore Omni first/last/reference modes on migrated Flow API - #48

Merged
crisng95 merged 2 commits into
crisng95:mainfrom
Bl0ck154:candidate/omni-batch-modes
Sep 17, 2026
Merged

crisng95 merged 2 commits into
crisng95:mainfrom
Bl0ck154:candidate/omni-batch-modes

Conversation

@Bl0ck154

Copy link
Copy Markdown
Contributor

Summary

Ports the remaining Gemini Omni image-conditioned video modes to the current flow.google.com batchexecute transport.

This builds on the already-merged Omni text-to-video path and restores the three image-driven modes that still fail fast on upstream main when USE_BATCH_RPC=1:

  • first frame -> video
  • first + last frame -> video
  • reference images -> video

What changes

  • reuse the migrated eb1hJf video submit for Omni first-frame generation with the current abra_i2v_<duration>s model family
  • add captured batch request builders for Start+End and multi-reference Omni modes
  • route /api/flow/generate-video Omni first-frame/first+last requests through the migrated transport
  • route /api/flow/generate-video-omni reference requests through the migrated transport
  • preserve the existing workflow/operation polling descriptors so callers can use the correct poll path returned by the submit
  • update Omni docs for the migrated modes and supported polling behavior

Validation

These changes come from the fork version currently used in production and were isolated from unrelated browser/session and deployment changes before opening this PR.

crisng95 added a commit that referenced this pull request Sep 17, 2026
Merge #48: restore Omni frame/first+last/reference on the batch API
@crisng95 crisng95 closed this in #50 Sep 17, 2026
@crisng95
crisng95 merged commit 405e57d into crisng95:main Sep 17, 2026
crisng95 added a commit that referenced this pull request Sep 17, 2026
First release since v1.1.0 (2026-05-09), and it is one arc: Flow moved to
flow.google.com in September 2026 and stopped minting the bearer the old REST
API needed, so the transport was rebuilt on batchexecute (#39), the dead REST
path deleted (#49), the image API migrated (#42), and the Omni image-conditioned
modes ported back on top of it (#48/#50).

Also fixes a version drift this release would otherwise have deepened. ccf89c6
put "0.2.0" in two places in agent/main.py; 939b956 bumped only the FastAPI
line, so /health has reported 0.2.0 ever since while the app said 1.1.0 — three
releases stale, on the endpoint CLAUDE.md tells you to curl before anything
else. /health now reads app.version, so there is one string to bump instead of
two literals that agree only by luck.

extension/manifest.json is deliberately not bumped. It tracks the extension's
own lifecycle, it is at 0.3.2, and a bump there forces a user-visible reload.

Verified: 272 passed; /health and app.version both report 1.2.0, checked by
calling the handler rather than reading the source.

Not verified: the Omni envelopes from #48. They are live-verified per that PR
and the tests lock their shape, but nothing has submitted through a signed-in
Flow tab since the merge resolution.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5BJVhNgerhFTUgmfnKTSj
duonghungit24 pushed a commit to duonghungit24/flowkit that referenced this pull request Sep 18, 2026
There was no CI at all — `.github/` held only FUNDING.yml — so nothing ran the
tests until someone ran them by hand. PR crisng95#48 reached review carrying an
ImportError against `agent.config.USE_BATCH_RPC` and `agent/services/headers.py`,
both deleted by a PR that merged while crisng95#48 was open. The code could not import
on main, and the only reason that surfaced is that someone happened to try. This
job is what catches that class of thing.

Matrix is 3.10 and 3.13: the floor the README badge advertises and the version
development runs on. 3.10 was verified rather than assumed — the full suite runs
there, 259 of 259 non-ffmpeg tests pass.

Two things the run needs that are easy to get wrong:

`fonts-dejavu-core` is installed alongside ffmpeg. The drawtext call in
video_reviewer.py passes no `fontfile=`, so it asks fontconfig for a default
family; with --no-install-recommends a runner can end up holding an ffmpeg that
has drawtext and no font for it to use.

The ffmpeg check renders a frame instead of grepping `ffmpeg -filters`. Grep
proves the filter is compiled in, not that a font exists, and a stock Homebrew
ffmpeg already demonstrates the first failure mode: it ships without
--enable-libfreetype, and 13 tests then fail with "Filter not found", which
reads like a test bug rather than a missing codec. Rendering one frame through
the same filter the tests use catches both modes in the step whose name says
what is wrong. Verified in both directions against a good and a drawtext-less
ffmpeg, running the script as PyYAML parses it so the escaping is checked too.

timeout-minutes is 10 against a ~7s suite. That ceiling only trips on a hang,
which this suite has had: an aiosqlite connection left open by a missing mock
keeps a non-daemon worker thread alive and the interpreter never exits.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5BJVhNgerhFTUgmfnKTSj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants