Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
9c0695f
feat(tts): add remote OmniVoice backend
hieuh0 Aug 28, 2026
8566126
feat(flow): port Omni text video to migrated API
Bl0ck154 Sep 8, 2026
d5a33d2
chore(gitignore): ignore local dev artifacts (.DS_Store, venv, extens…
hieuh0 Sep 8, 2026
82f8cfa
docs(tts): note remote OmniVoice backend in narrator and import-voice…
hieuh0 Sep 8, 2026
873447c
Merge remote-tracking branch 'origin/main' into feat/remote-omnivoice…
hieuh0 Sep 8, 2026
2eb04f9
feat(flow): create and delete Flow projects on the batchexecute path
hieuh0 Sep 8, 2026
e631fb7
fix(api): reuse existing local project instead of re-inserting
hieuh0 Sep 8, 2026
666ea33
fix(extension): prevent idle Flow tab leaks
Bl0ck154 Sep 10, 2026
1fec6b6
Merge pull request #43 from hieuh0/feat/remote-omnivoice-tts
crisng95 Sep 15, 2026
2080050
Revert "feat: OmniVoice TTS từ xa + tạo/xoá Flow project trên batchex…
crisng95 Sep 15, 2026
73d70d3
Merge pull request #44 from Bl0ck154/fix/idle-tab-leak-extension-deploy
crisng95 Sep 15, 2026
e24c652
Merge pull request #45 from crisng95/revert-43-feat/remote-omnivoice-tts
crisng95 Sep 15, 2026
0d038f5
Merge pull request #41 from Bl0ck154/feature/migrated-omni-t2v
crisng95 Sep 15, 2026
8af92c7
test(flow): lock the wire envelopes before moving who builds them
crisng95 Sep 15, 2026
9aa0e7c
Merge pull request #46 from crisng95/fix/flow-unify-video-submit
crisng95 Sep 15, 2026
ab60985
feat(flow): expand migrated image API
Bl0ck154 Sep 8, 2026
43b0406
fix(flow): match image variant submit behavior
Bl0ck154 Sep 8, 2026
b02a5f5
fix(flow): retry image failures by settled wave
Bl0ck154 Sep 8, 2026
b7eda7a
fix(flow): resolve upstream image API conflicts
Bl0ck154 Sep 17, 2026
a49831f
Merge pull request #42 from Bl0ck154/feature/migrated-image-api
crisng95 Sep 17, 2026
3656301
fix(flow): restore Omni first-frame video on batch API
Bl0ck154 Sep 13, 2026
b1db615
feat(flow): restore all Omni reference modes on batch API
Bl0ck154 Sep 14, 2026
d56a5cc
chore(flow): remove the REST transport Flow stopped authenticating
crisng95 Sep 15, 2026
d009dc2
fix(tests): repair two mocks that drifted behind refactors
crisng95 Sep 17, 2026
f4e2265
docs(doctor): teach /fk-doctor the NO_INJECTION_RESULT error
crisng95 Sep 17, 2026
0c45b39
chore(extension): bump to 0.3.2 and note the new Flow API works
crisng95 Sep 17, 2026
f50414a
Merge pull request #49 from crisng95/chore/flow-drop-legacy-rest
crisng95 Sep 17, 2026
405e57d
Merge PR #48: restore Omni frame/first+last/reference on the batch API
crisng95 Sep 17, 2026
6906c6f
Merge pull request #50 from crisng95/merge/omni-batch-modes
crisng95 Sep 17, 2026
c6076e8
docs(readme): drop the sponsor block, add a changelog
crisng95 Sep 17, 2026
0a22778
Merge pull request #51 from crisng95/docs/readme-changelog
crisng95 Sep 17, 2026
cd3ede2
ci: run the unit suite on every PR and push to main
crisng95 Sep 17, 2026
0c4b885
Merge pull request #53 from crisng95/ci/pytest-on-pr
crisng95 Sep 17, 2026
5cc9dbd
chore(release): v1.2.0
crisng95 Sep 17, 2026
57b52e6
Merge pull request #52 from crisng95/chore/release-v1.2.0
crisng95 Sep 17, 2026
4fc0283
fix(review): repair every provider path, add per-role AI config
crisng95 Sep 19, 2026
32ea1a5
ci: drawtext is a warning now, not a build breaker
crisng95 Sep 19, 2026
4391da9
fix(review): close the findings from the adversarial review
crisng95 Sep 20, 2026
3e0e94a
docs(readme): record what the v1.3.0 verification actually covered
crisng95 Sep 20, 2026
9f62a0e
Merge pull request #54 from crisng95/fix/cli-providers-roles
crisng95 Sep 20, 2026
acd05d3
chore(setup): drop the dead Gemini target, make AGENTS.md generated a…
crisng95 Sep 20, 2026
d7977fd
Merge pull request #55 from crisng95/chore/drop-dead-gemini-generator
crisng95 Sep 20, 2026
2030b08
feat: add core agent API routes, background services, YouTube integra…
tienoho Sep 22, 2026
f6caa51
feat: add CLI providers service, active project API, request handlers…
tienoho Sep 22, 2026
0e0a94e
fix(flow): stop retrying unusual activity blocks
Bl0ck154 Sep 23, 2026
64cdf00
feat(flow): add project sessions and generation guard
Bl0ck154 Sep 23, 2026
3db71e6
fix(flow): sync Omni payloads with current UI
Bl0ck154 Sep 23, 2026
e6407be
Merge pull request #59 from Bl0ck154/fix/flow-session-hardening
crisng95 Sep 23, 2026
a29c2e7
feat(flow): add direct multipart image uploads
Bl0ck154 Sep 23, 2026
1eae10b
fix(extension): mint reCAPTCHA via hidden widget + preload grecaptcha…
matronguyen81-rgb Sep 24, 2026
d8bc87a
Merge pull request #62 from Matro81/fix/captcha-mint-from-flowbridge2
crisng95 Sep 24, 2026
bc051f2
Merge pull request #61 from Bl0ck154/feat/direct-image-uploads-upstream
crisng95 Sep 24, 2026
083fed7
feat: bypass extension_hijack_detected + Trusted Types CSP
votong21 Sep 25, 2026
cd9f156
Merge pull request #64 from soigia21/main
crisng95 Sep 25, 2026
6e04163
docs: add showcase videos to README
crisng95 Sep 28, 2026
777d663
docs: add play button overlay to showcase thumbnails for better UX
crisng95 Sep 28, 2026
76c4d3f
feat: provider-neutral platform + Muse as official review provider
crisng95 Sep 29, 2026
e77688b
docs: add AI Agent Support table above Showcase in README
crisng95 Sep 29, 2026
6bc431f
feat: agent self-review works for Muse, Codex, and agy
crisng95 Sep 29, 2026
0d6714d
docs: centered AI agent icon row under AI Agent Support table
crisng95 Sep 29, 2026
7837949
docs: use official brand colors for agent icons (Claude coral, multic…
crisng95 Sep 29, 2026
72e5f93
docs: move agent icon row above the intro paragraph
crisng95 Sep 29, 2026
4257e1e
docs: single composite agent icon strip (white pill, official brand c…
crisng95 Sep 29, 2026
7d385a1
docs: restore individual agent icons (correct brand colors, white tiles)
crisng95 Sep 29, 2026
de31873
docs: agent icons via fresh v2 URLs (white tiles, official brand colors)
crisng95 Sep 29, 2026
d59257e
fix: resolve file:// URLs correctly on Windows
Sep 29, 2026
5e5dec2
fix(tts): save OmniVoice output as 2-D tensor, honour TTS_DEVICE
Sep 29, 2026
328df2a
feat: per-project video_model_family so the worker can use Omni Flash
Sep 30, 2026
0b790bc
feat: FLOW_MAX_CONCURRENT / FLOW_COOLDOWN_S env for provider pacing
Sep 30, 2026
5008187
Add muse2api media provider (muse.ai via an OpenAI-compatible gateway)
claude Sep 30, 2026
204c7b3
docs: muse2api needs its own service started from its repo
claude Sep 30, 2026
be9e211
fix(db): serialize get_db()'s lazy connect (flaky "database table is …
claude Sep 30, 2026
fe40dec
Merge pull request #70 from crisng95/claude/gracious-lovelace-1567a3
crisng95 Sep 30, 2026
cb1fd33
fix(tts): fade and pad the OmniVoice tail so narration does not end m…
Oct 2, 2026
2f2c5d8
feat: honour scene.duration for Omni Flash clip length
Oct 2, 2026
1c7e7b8
Merge pull request #69 from khnhlt/fix/windows-file-url-paths
crisng95 Oct 4, 2026
3604ad3
feat: add flowkit agent, extension scripts, and testing utilities
tienoho Oct 5, 2026
4b9f883
Merge upstream/main into main: sync latest features, anti-hijack bypa…
tienoho Oct 5, 2026
00d5574
fix(muse2api): support Windows file:// URLs using file_url_to_path
tienoho Oct 5, 2026
ea1aca1
fix(polling): persist and restore operation project_id across restarts
tienoho Oct 5, 2026
af5e058
Merge pull request #57 from tienoho/main
crisng95 Oct 5, 2026
a407946
feat(skills,pipeline): add cinematic series tooling, manifest manager…
tienoho Oct 6, 2026
7db6e3a
Merge branch 'crisng95:main' into main
tienoho Oct 6, 2026
4152c2a
test(setup): update test_setup.py to include antigravity generator ta…
tienoho Oct 6, 2026
b09e783
Merge pull request #73 from tienoho/main
crisng95 Oct 6, 2026
6801f5a
feat(image): add Nano Banana 2.1 (BELUGA), retire NARWHAL from the NA…
crisng95 Oct 24, 2026
7ddb079
feat(muse2api): send entity reference images with scene images
crisng95 Oct 24, 2026
0c6c041
fix(flow): keep the unusual-activity hold across restarts, bound hija…
crisng95 Oct 24, 2026
4a48d10
Merge pull request #75 from crisng95/fix/flow-account-safety
crisng95 Oct 25, 2026
f58cd72
Merge pull request #76 from crisng95/feat/beluga-image-model
crisng95 Oct 25, 2026
6844a88
Merge pull request #77 from crisng95/feat/muse2api-refs
crisng95 Oct 25, 2026
2bd2024
docs: account-safety hold and BELUGA image model in README and IMAGE_API
crisng95 Oct 25, 2026
19cb87d
Merge pull request #78 from crisng95/docs/readme-safety-beluga
crisng95 Oct 25, 2026
efc953c
merge: integrate upstream main with fork compatibility fixes
Bl0ck154 Oct 27, 2026
ac33f0f
fix(sync): restore optional native Flow UI routing after upstream merge
Bl0ck154 Oct 27, 2026
9ad18c3
fix(sync): restore lost Flow browser and model API imports
Bl0ck154 Oct 27, 2026
1b8556e
ci: avoid unbounded apt setup on GitHub runners
Bl0ck154 Oct 28, 2026
64adb1d
refactor(flow): unify Omni and video export polling
Bl0ck154 Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/commands/fk-change-provider.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
fk-change-provider — View & Switch AI CLI Provider (Video Review)
fk-change-provider — View & Switch the Reviewer for a Role
<!-- AUTO-GENERATED by setup.py — do not edit. Source: skills/ -->
Read and follow the instructions in skills/fk-change-provider.md

Expand Down
31 changes: 3 additions & 28 deletions .claude/commands/fk-dashboard.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,5 @@
Show live GLA status in Claude Code statusline.
<!-- AUTO-GENERATED by setup.py — do not edit. Source: skills/ -->
Read and follow the instructions in skills/fk-dashboard.md

Usage: `/fk-dashboard`

The GLA statusline shows real-time project status at the bottom of Claude Code:

```
Opus 4.6 (1M ctx) ctx:14% rl:18%/5h 67%/7d | GLA: ✓ext Operation Hormu 40sc img:40 vid:40 4K:26 ▶0/5
```

## What it shows

- **OMC info**: model, context usage, rate limits (5h & 7d)
- **GLA info**: extension status, project name, scene count, image/video/4K progress, worker slots

## Setup

Statusline is auto-configured by `bash setup.sh`. To manually configure:

```bash
# In .claude/settings.local.json, add:
{
"statusLine": {
"type": "command",
"command": "<project_root>/scripts/statusline.sh"
}
}
```

Requires `jq` and `curl` installed.
Arguments: $ARGUMENTS
2 changes: 1 addition & 1 deletion .claude/commands/fk-doctor.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Diagnose any FlowKit error and prescribe a fix. Knows the full error taxonomy across Flow, extension, FastAPI, worker, and YouTube.
Diagnose any FlowKit error and prescribe a fix. Knows the full error taxonomy across Google Flow, the Chrome extension, the FastAPI layer, the worker, and the YouTube upload pipeline.
<!-- AUTO-GENERATED by setup.py — do not edit. Source: skills/ -->
Read and follow the instructions in skills/fk-doctor.md

Expand Down
114 changes: 3 additions & 111 deletions .claude/commands/fk-gen-chain-videos.md
Original file line number Diff line number Diff line change
@@ -1,113 +1,5 @@
<!-- AUTO-GENERATED by setup.py — do not edit. Source: skills/ -->
Generate videos with automatic scene chaining (start+end frame transitions).
<!-- AUTO-GENERATED by setup.py — do not edit. Source: skills/ -->
Read and follow the instructions in skills/fk-gen-chain-videos.md

Usage: `/gen-chain-videos <project_id> <video_id>`

This creates smooth transitions between scenes in a chain by using the **NEXT scene's image as the endImage** of the current scene's video, so the last frame of scene N matches the first frame of scene N+1 → seamless concat.

## How chaining works

For any scene that has a CHILD in the chain (i.e. some other scene with `parent_scene_id == this.id`):

```
Scene N (chain head or middle): startImage = sceneN.image, endImage = sceneN+1.image
→ video plays FROM sceneN.image TO sceneN+1.image (the next scene's image)

Scene N+1 (next in chain): startImage = sceneN+1.image, endImage = sceneN+2.image (if N+2 exists)
→ continues the chain

Last scene in chain (no child): startImage = lastScene.image, NO endImage
→ plain frame_2_video, no chained transition
```

**Key invariant**: at the cut between two consecutive chain scenes, `sceneN.video.last_frame == sceneN+1.image == sceneN+1.video.first_frame` → **concat is seamless**.

The `endImage` is the **CHILD scene's image** (the next scene's image_media_id), NOT the parent's. Chain heads (ROOT scenes that have a child) DO need an endImage; only chain tails (last scene in chain) and standalone ROOT scenes leave `endImage` null.

## Step 1: Pre-check

```bash
# All scene images must be ready with UUID media_ids
curl -s "http://127.0.0.1:8100/api/scenes?video_id=<VID>"
```

ABORT if any scene is missing `${ori}_image_media_id` (UUID).

## Step 2: Set up end_scene_media_ids for chaining

For each scene that has a CHILD in the chain (i.e. some other scene's `parent_scene_id == this.id`), set its `${ori}_end_scene_media_id` to that **child** scene's `${ori}_image_media_id`:

```bash
curl -X PATCH http://127.0.0.1:8100/api/scenes/<SID> \
-H "Content-Type: application/json" \
-d '{"${ori}_end_scene_media_id": "<child_scene_image_media_id>"}'
```

Logic:
1. Sort scenes by `display_order`
2. Build a child map: `parent_id -> child_scene` (scan all scenes, key by `parent_scene_id`)
3. For each scene `S`:
- If `S` has a child in the map → set `${ori}_end_scene_media_id = child.${ori}_image_media_id`
- Else (no child = chain tail or standalone ROOT) → leave `${ori}_end_scene_media_id` null

**Affected scenes** (those that need an `end_scene_media_id`): chain heads (ROOT-with-child) AND chain middles (CONTINUATION-with-child). NOT chain tails, NOT standalone ROOTs.

**Common mistake**: setting `end_scene_media_id` to the PARENT's image. That makes scene N's video end at scene N-1's frame — when concatenated forward (N then N+1), the cut between N's last frame and N+1's first frame is hard, defeating the chain. The correct frame at the end of scene N's video is `sceneN+1.image`.

## Step 3: Submit ALL video requests at once

The server handles throttling automatically (max 5 concurrent, 10s cooldown). The worker reads `${ori}_end_scene_media_id` from each scene (set in Step 2) and passes it as `endImage` to the API. This triggers `start_end_frame_2_video` (i2v_fl) instead of plain `frame_2_video` (i2v).

```bash
curl -X POST http://127.0.0.1:8100/api/requests/batch \
-H "Content-Type: application/json" \
-d '{
"requests": [
{"type": "GENERATE_VIDEO", "scene_id": "<SID1>", "project_id": "<PID>", "video_id": "<VID>", "orientation": "${ORI}"},
{"type": "GENERATE_VIDEO", "scene_id": "<SID2>", "project_id": "<PID>", "video_id": "<VID>", "orientation": "${ORI}"}
]
}'
```

Build the `requests` array from ALL scenes in display_order. Do NOT manually batch or loop.

Poll aggregate status every 30s until done:

```bash
curl -s "http://127.0.0.1:8100/api/requests/batch-status?video_id=<VID>&type=GENERATE_VIDEO"
# Wait for: "done": true
# If "all_succeeded": false → some failed, check individual failures
```

## Known Limitation: Concat Gap

**Problem:** When concatenating chained videos, the endImage frames of scene N overlap with the startImage frames of scene N+1 — both are the same image. This produces **10-16 static/duplicate frames (~0.4-0.7s)** at each cut point where nothing moves.

```
Scene 1 video: [action...] [endImage = scene2 still] ← 10-16 frames
Scene 2 video: [startImage = scene2 still] [action...] ← 10-16 frames
Concat result: ...action → [~0.8-1.4s static gap] → action...
```

**Mitigations:**
- **Trim overlap** — use `trim_start` / `trim_end` on scenes to cut the static frames before concat. Typically trim 0.4-0.7s from the end of scene N and/or the start of scene N+1.
- **Don't overuse chaining** — only chain scenes that truly need smooth visual continuity (same location, continuous action). For scene changes (new location, time jump), use ROOT without endImage — a hard cut is more natural.
- **Mix techniques** — alternate between chained (CONTINUATION) and unchained (ROOT) scenes. Hard cuts between different locations feel intentional; gaps between continuous action feel broken.

**When to chain vs not:**

| Situation | Recommendation |
|-----------|---------------|
| Same location, continuous action | CONTINUATION (chain) |
| Location change, time jump | ROOT (hard cut — no gap) |
| Dramatic moment, reaction shot | INSERT (hard cut — intentional) |
| Dream/flashback transition | ROOT or R2V (stylistic break) |

## Step 4: Output

Print table:
| Scene | Order | Chain | endImage from | video_status | Duration |
|-------|-------|-------|---------------|-------------|----------|

Print: "Chained videos ready. Run /fk-concat <VID> to merge."
Remind: "Check concat gaps — trim 0.4-0.7s overlap at chain boundaries if needed."
Arguments: $ARGUMENTS
Loading
Loading