Skip to content

Commit 185c6f5

Browse files
committed
feat: complete ai feature reconciliation
1 parent fd858be commit 185c6f5

17 files changed

Lines changed: 645 additions & 86 deletions

.ai/research/2026-05-17/CONTINUE_FROM_HERE.md

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
# OpenCut Research — CONTINUE FROM HERE (for Pass 76)
1+
# OpenCut Research — CONTINUE FROM HERE (for Pass 77)
22

33
**This file's purpose:** if a future autonomous research session starts up, **read this first** before re-doing any of the work already on disk.
44

5-
**Last update:** 2026-05-18 (after Pass 74; Passes 1-34 all ran on 2026-05-17)
6-
**Session state:** all mandated artefacts exist, Passes 4-29 closed F261/F262/F270/F264/F266/F199/F191/F197/F195/F202-tooling/F204/F207/F208/F209/F218/F219/F236/F237/F240/F241/F243/F244/F259/F251/F147/F131/F137/F139/F126/F181/F185/F140/F123/F128/F184/F178, Pass 30 closed F177 model_cards sweep gates, Pass 31 closed F176 eval-dataset catalogue, Pass 32 added the F176 follow-up download runner, Pass 33 closed F200 + F211, Pass 34 closed F217 (UXP BackendClient HTTP-shape contract), Pass 35 closed F121/F122/F127a/F130/F133/F135 (dependency security floor + Python 3.11 source-install floor), Pass 36 closed F180 (Wave N-T / F-number governance ledger), Pass 37 closed F213 (Inno install/uninstall smoke in CI), Pass 38 closed F215 (fuzz harness expansion + parser hardening), Pass 39 closed F216 (concurrent job-cancellation race coverage + process termination fix), Pass 40 closed F214 (ML / compose / TTS performance benchmark contract), Pass 41 closed F192 (legacy OpenAPI typed response schemas expanded to 100 routes), Pass 42 closed F198 (code-owned CEP↔UXP parity catalogue + generated JSON artifact), Pass 43 closed F194 (opt-in generated extended MCP route-tool catalogue), Pass 44 closed F201 (WPF installer build in Windows tag/manual CI), Pass 45 closed F203 (Windows Authenticode signing workflow/tooling + renewal docs), Pass 46 closed F223 (RTL/CJK/bidi caption Unicode validation gate), Pass 47 closed F242 (Unicode-aware CJK line breaking), Pass 48 closed F225 (OTIO Marker sidecar for review bundles), Pass 49 closed F226 (SVG drawing annotation overlays in review bundles), Pass 50 closed F227 (threaded review comments and completion status in review bundles), Pass 51 closed F229 (Premiere marker CSV and EDL review-comment exports), Pass 52 closed F231 (HMAC-signed LAN review portal URLs with Caddy/mDNS descriptors), Pass 53 closed F233 (per-project Atom review feeds plus optional HMAC-signed review webhooks), Pass 54 closed F234 (croc/rclone delivery transfer bundles), Pass 55 closed F238 (BT.1702/WCAG photosensitive flash checker upgrade), Pass 56 closed F239 (Microsoft `ai-audio-descriptions` compatible AD review drafts), Pass 57 closed F249 (Flatpak/AppImage Linux release packaging), Pass 58 closed F250 (Aptabase opt-in telemetry), Pass 59 advanced F252.1 (Bolt/WebView scaffold), Pass 60 advanced F252.2 (UXP host-action dispatcher), Pass 61 closed F254 (UXP createSubsequence range handoff), Pass 62 closed F255 (UXP EncoderManager export handoff), Pass 63 closed F256 (UXP Transcript API helpers), Pass 64 closed F257 (UXP ObjectMaskUtils helper), Pass 65 closed F258 (UXP ProjectConverter AAF export helper), Pass 66 closed F260 (UXP migration risk dashboard), Pass 67 closed F267 (UXP UDT smoke harness), Pass 68 closed F263 (full optional-extras pip-audit gate and dependency drift cleanup), Pass 69 closed F271 (per-feature VRAM requirement UI surface), Pass 70 closed F272 (wedding cinematic reel built-in agent skill), Pass 71 closed F193 (dataclass-discovered OpenAPI response schemas), Pass 72 closed F196 (registry/model-card/check contract), Pass 73 closed F206 (PR-fast/release-full CI split), Pass 74 closed F210 (CEP/UXP Vitest utility coverage), and Pass 75 closed F212 (WPF installer xUnit/headless smoke coverage). This file documents deferred research/product work for a future Pass 76+, not a broken or incomplete research run.
5+
**Last update:** 2026-05-18 (after Pass 76; Passes 1-34 all ran on 2026-05-17)
6+
**Session state:** all mandated artefacts exist; Passes 4-75 are summarized in ROADMAP.md and PROJECT_CONTEXT.md. Pass 76 closed F220-F222 (RVC backend execution, natural-language AI auto-color grading, and cut-point pacing/genre-template analysis). This file documents deferred research/product work for a future Pass 77+, not a broken or incomplete research run.
77

88
---
99

1010
## 1. State at hand-off
1111

1212
- **Repo branch:** `main`; the Pass 35 dependency-floor commit pushed to `origin/main` successfully from this machine. Continue to verify `git status --short --branch` at session start before assuming the working tree is clean.
1313
- **Last shipped version:** v1.32.0 (light theme + appearance toggle, 2026-05-09).
14-
- **Live counts:** 1,376 routes / 101 blueprints / 537 core modules / 189 Python test files / 2 Vitest panel test files / 47 model cards / 118 public `check_*` probes (86 `check_*_available`) / 100 `FeatureRecord` entries / 39 curated MCP tools / 1,319 opt-in extended MCP tools / 110 OpenAPI-typed endpoints / 18 CEP host functions (2 CEP-only).
14+
- **Live counts:** 1,378 routes / 101 blueprints / 537 core modules / 189 Python test files / 2 Vitest panel test files / 47 model cards / 118 public `check_*` probes (86 `check_*_available`) / 100 `FeatureRecord` entries / 39 curated MCP tools / 1,321 opt-in extended MCP tools / 110 OpenAPI-typed endpoints / 18 CEP host functions (2 CEP-only).
1515
- **F-numbers in ledger:** F001-F272 (Pass 1 added F121-F190, Pass 2 added F191-F260, Pass 3 added F261-F272).
1616
- **Wave letters in ledger:** A-M shipped; N-T planned in ROADMAP.md and now F-number-tiered by `.ai/research/2026-05-18/WAVE_N_T_F_NUMBER_LEDGER.md` (F180).
1717

18-
### Pass 76 entry point
18+
### Pass 77 entry point
1919

20-
1. **Continue the remaining queue.** F121/F122/F127a/F130/F133/F135, F123, F126, F128, F137, F139, F140, F147, F176 (+follow-up), F177, F178, F180, F181, F184, F185, F192, F193, F194, F196, F198, F200, F201, F203, F206, F210, F211, F212, F213, F214, F215, F216, F217, F223, F225, F226, F227, F229, F231, F233, F234, F238, F239, F242, F249, F250, F251, F254, F255, F256, F257, F258, F259, F260, F263, F267, F271, F272 are closed. F205 still needs a runner where coverage can finish. F182 (issue seeder) may still depend on a working `gh` auth context. F252.1 and the F252.2 dispatcher slice are complete but F252 remains open for live WebView/in-Premiere UDT result capture. The next local-verifiable Later candidates are F220-F222 (RVC + AI color grading + pacing analysis) unless a model-integration item needs fresh external research first. F268 requires an Adobe developer account/storefront process. Larger Pass-1 Now items still requiring model integration: F149/F162/F163/F167/F169.
20+
1. **Continue the remaining queue.** F121/F122/F127a/F130/F133/F135, F123, F126, F128, F137, F139, F140, F147, F176 (+follow-up), F177, F178, F180, F181, F184, F185, F192, F193, F194, F196, F198, F200, F201, F203, F206, F210, F211, F212, F213, F214, F215, F216, F217, F220, F221, F222, F223, F225, F226, F227, F229, F231, F233, F234, F238, F239, F242, F249, F250, F251, F254, F255, F256, F257, F258, F259, F260, F263, F267, F271, F272 are closed. F205 still needs a runner where coverage can finish. F182 (issue seeder) may still depend on a working `gh` auth context. F252.1 and the F252.2 dispatcher slice are complete but F252 remains open for live WebView/in-Premiere UDT result capture. The next local-verifiable Later candidate is F224 (deepfake detector) unless a model-integration item needs fresh external research first. F268 requires an Adobe developer account/storefront process. Larger Pass-1 Now items still requiring model integration: F149/F162/F163/F167/F169.
2121
2. **F198 is now enforced, not only documented.** `CEP_UXP_PARITY_MATRIX.md` maps all 18 `ocXxx` JSX functions and identifies only two truly CEP-only calls; `opencut/_generated/cep_uxp_parity.json` plus `tests/test_cep_uxp_parity_catalogue.py` keep that claim in sync with `host/index.jsx`.
2222
3. **Complete F179** full `features.md` reconciliation; this remains the largest knowledge debt.
2323
4. **Run a Python 3.11/3.12/3.13 install matrix** for `[all]`; this cannot be fully proven from this VM's single Python 3.12 runtime.
@@ -224,6 +224,18 @@
224224
| Validation | PASS — `npm test` (`8 passed`), `npm run audit:check`, focused F210 Python guard tests (`3 passed`), `py_compile`, focused Ruff, release-smoke `panel-unit`, `npm run build:verify`, `npm run build`, and the PR-fast release-smoke command (`pytest-fast` 705 passed + `panel-unit`) passed locally. |
225225
| Files to review | `extension/com.opencut.panel/client/panel-utils.js`, `extension/com.opencut.panel/tests/`, `extension/com.opencut.panel/vitest.config.mjs`, `extension/com.opencut.uxp/uxp-utils.js`, panel `package.json`/lockfile, `.github/workflows/*.yml`, `scripts/release_smoke.py`, `tests/test_panel_vitest_gate.py`, `ROADMAP.md`, `CHANGELOG.md`, `PROJECT_CONTEXT.md`, and this file. |
226226

227+
### Pass 76 checkpoint
228+
229+
| Item | Status |
230+
|---|---|
231+
| F220-F222 | **DONE** — RVC voice conversion, AI auto-color grading, and pacing/rhythm analysis are now reconciled against the primary AI API surface. |
232+
| RVC backend | `opencut/core/voice_conversion.py` discovers external RVC CLI/script backends, passes model/index/f0 settings, marks successful runs as `method="rvc"`, and preserves the FFmpeg fallback path. |
233+
| Color intent | `/ai/auto-grade` accepts `intent` and `intensity`, reusing `ai_color_intent.py` library/LLM resolution; `/ai/color-intents` exposes the catalogue. |
234+
| Pacing templates | `/ai/pacing-analysis` accepts `cut_points` + `total_duration` without a filepath, while preserving file-based scene detection; `/ai/pacing-genres` exposes template targets. |
235+
| Generated artifacts | Route manifest regenerated to 1,378 routes / 101 blueprints; opt-in extended MCP catalogue regenerated to 1,321 tools. |
236+
| Validation | PASS — `py_compile` for touched modules/tests and focused AI editing/content tests (`32 passed`). |
237+
| Files to review | `opencut/core/voice_conversion.py`, `opencut/core/voice_convert.py`, `opencut/core/auto_color.py`, `opencut/core/pacing_analysis.py`, `opencut/routes/ai_content_routes.py`, `opencut/_generated/route_manifest.json`, `tests/test_ai_editing.py`, `tests/test_ai_content.py`, and roadmap/state docs. |
238+
227239
### Pass 75 checkpoint
228240

229241
| Item | Status |
@@ -390,7 +402,7 @@
390402
| Item | Status |
391403
|---|---|
392404
| F194 | **DONE** — opt-in generated MCP route tools now extend the curated MCP surface without changing the default tool list. |
393-
| Generated catalogue | `opencut/_generated/mcp_extended_tools.json` contains 1,319 `opencut_route_*` tools generated from `opencut/_generated/route_manifest.json`, `opencut/_generated/api_aliases.json`, and the OpenAPI response-schema map. |
405+
| Generated catalogue | `opencut/_generated/mcp_extended_tools.json` contains 1,321 `opencut_route_*` tools generated from `opencut/_generated/route_manifest.json`, `opencut/_generated/api_aliases.json`, and the OpenAPI response-schema map. |
394406
| Runtime opt-in | `opencut-mcp-server --extended-tools` or `OPENCUT_MCP_EXTENDED_TOOLS=1` exposes generated tools; default `tools/list` remains the 39 curated tools. |
395407
| Dispatch | Generated tools route through `mcp_extended_tools.invoke_extended_tool()`: path params are top-level arguments, GET query params use `query`, mutating JSON payloads use `body`, and generated metadata is tagged lower-priority. |
396408
| Guard tests | `tests/test_mcp_extended_tools.py` pins committed-vs-live generation, opt-in behavior, generated metadata, disabled-call errors, and generated dispatch for query/body/path-param routes. |
@@ -659,7 +671,7 @@ This section is preserved because Pass 3/4 used it as the checklist. See §7 and
659671

660672
### 3.1 Quick wins (S effort)
661673

662-
1. **Run `python -m opencut.tools.dump_route_manifest --check`** to verify the cached 1,376-route figure against live `url_map`. Possible drift after future route commits.
674+
1. **Run `python -m opencut.tools.dump_route_manifest --check`** to verify the cached 1,378-route figure against live `url_map`. Possible drift after future route commits.
663675
2. **Run `python scripts/release_smoke.py --json`** end-to-end and capture which steps actually fail. The v4.3 audit listed several failing steps that may have been fixed by the F099/F098/F112 commits.
664676
3. **Verify cross-platform launcher files exist**: `OpenCut-Server.command` (macOS), `OpenCut-Server.sh` (Linux). Pass 2 inferred from Wave I but did not list them. Run `ls Z:/repos/OpenCut | grep Server` and `chmod +x` if needed.
665677
4. **Read `extension/com.opencut.uxp/uxp-api-notes.md`** — internal CEP-vs-UXP comparison the team maintains. Cross-reference against Pass 2 UXP subagent §1-§10 findings.
@@ -950,7 +962,7 @@ Pass 8 closed the route/check readiness generation item and the registry-owned a
950962

951963
### Live correction
952964

953-
`/system/feature-state` now exposes 100 feature records. The generated F191 manifest covers direct route functions that visibly call public `checks.py` probes, and F196 adds curated registry rows plus contract tests for the model-card/check surfaces the scanner cannot infer. It is still not a full per-route readiness matrix for all 1,376 routes.
965+
`/system/feature-state` now exposes 100 feature records. The generated F191 manifest covers direct route functions that visibly call public `checks.py` probes, and F196 adds curated registry rows plus contract tests for the model-card/check surfaces the scanner cannot infer. It is still not a full per-route readiness matrix for all 1,378 routes.
954966

955967
### Remaining immediate work
956968

.ai/research/2026-05-17/FEATURES_RECONCILIATION.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ For each sampled entry from `features.md`:
3636
| 1.2 | AI Eye Contact Correction | ✅ SHIPPED | CLAUDE.md Wave H gotcha: *"Eye-contact already existed — Wave H1.3 was planned as a new module but the existing `core/eye_contact.py` + routes at `/ai/eye-contact` and `/api/video/eye-contact` already cover the feature"* |
3737
| 1.3 | AI Overdub / Voice Correction | ✅ SHIPPED | `/api/audio/overdub` + `/api/audio/overdub/clone-voice` in route manifest |
3838
| 1.4 | AI Lip Sync | ✅ SHIPPED (Wave M v1.30.0) | `core/lipsync_echomimic.py` shipped per CHANGELOG; also stub `lipsync_advanced.py` (K2 Tier 3) for GaussianHeadTalk / FantasyTalking2 |
39-
| 1.5 | AI Voice Conversion / RVC | ❓ UNCLEAR | Not found in CHANGELOG; not in F-ledger. Needs PR. → New backlog: **F220** |
40-
| 1.6 | AI Auto-Color Grading | ❓ UNCLEAR | Color match exists (`color_match.py`); LLM-driven mood grading is unclear. → **F221** |
39+
| 1.5 | AI Voice Conversion / RVC | ✅ SHIPPED | Pass 76 closed **F220**: external RVC CLI/script backend execution + FFmpeg fallback are wired into `voice_conversion.py`. |
40+
| 1.6 | AI Auto-Color Grading | ✅ SHIPPED | Pass 76 closed **F221**: `/ai/auto-grade` accepts natural-language color `intent` + `intensity` via `ai_color_intent.py`. |
4141
| 1.7 | AI Content Moderation / Compliance | ✅ SHIPPED (partial) | Profanity censor (K1.7) shipped; visual NSFW classifier (SafeVision / NudeNet) is Wave J2.6 stub |
4242
| 1.8 | AI Scene Description / Alt-Text | ✅ SHIPPED | `describe_scene_llm()` in `core/audio_description.py` per v1.20.0 changelog; also `/api/ai/scene-describe` route in `ai_intel` blueprint |
4343
| 1.9 | AI Video Summarization | ✅ SHIPPED | `core/highlights.py` LLM-powered summary; `core/shorts_pipeline.py` |
4444
| 1.10 | AI Talking Head / Avatar Generation | 🛑 STUB | Wave H Tier 3 `lipsync_advanced.py` (GaussianHeadTalk / FantasyTalking2); full avatar pipeline = **F148-style** new item |
4545
| 1.11 | AI B-Roll Suggestion & Insertion | ✅ SHIPPED | `core/broll_insert.py` + `core/broll_generate.py` exist per CLAUDE.md |
46-
| 1.12 | AI Pacing & Rhythm Analysis | ❓ UNCLEAR | Not in F-ledger; could become **F222** |
46+
| 1.12 | AI Pacing & Rhythm Analysis | ✅ SHIPPED | Pass 76 closed **F222**: `/ai/pacing-analysis` supports file and cut-point pacing with genre templates. |
4747

4848
**Category 1 takeaway:** of 12 sampled, 8 SHIPPED, 1 STUB, 0 explicitly PLANNED, 3 UNCLEAR (new F-number candidates).
4949

@@ -121,7 +121,7 @@ Sampled 21.x items — most map directly to **Wave R/S/T** in ROADMAP.md (lip-sy
121121
| 78.2 | AI Eye Contact Correction | ✅ SHIPPED (= cat 1.2) |
122122
| 78.3 | AI Voice Overdub | ✅ SHIPPED (= cat 1.3) |
123123
| 78.4 | AI Lip Sync | ✅ SHIPPED (Wave M v1.30.0) |
124-
| 78.5 | Voice-to-Voice Conversion | ❓ UNCLEAR (= cat 1.5) **F220** |
124+
| 78.5 | Voice-to-Voice Conversion | ✅ SHIPPED (= cat 1.5) — Pass 76 closed **F220** |
125125

126126
(Duplication: cat 78.x is essentially cat 1.x; the features.md aspirational catalogue has duplicates across categories.)
127127

@@ -162,9 +162,9 @@ The high SHIPPED rate validates that OpenCut has executed against its 2026-04 pl
162162

163163
| F# | features.md entry | Title |
164164
|---|---|---|
165-
| F220 | 1.5 / 78.5 | AI Voice Conversion / RVC backend |
166-
| F221 | 1.6 | AI Auto-Color Grading (LLM-driven mood map → LUT + adjustments) |
167-
| F222 | 1.12 | AI Pacing & Rhythm Analysis (genre-template comparison) |
165+
| [x] F220 | 1.5 / 78.5 | AI Voice Conversion / RVC backend (closed Pass 76) |
166+
| [x] F221 | 1.6 | AI Auto-Color Grading (LLM-driven mood map → LUT + adjustments) (closed Pass 76) |
167+
| [x] F222 | 1.12 | AI Pacing & Rhythm Analysis (genre-template comparison) (closed Pass 76) |
168168
| F223 | 20.6 | RTL / CJK / Bidi caption rendering validation suite |
169169
| F224 | 27.3 | Deepfake / fake-video detector (adjacent to J2.6 SafeVision) |
170170

.ai/research/2026-05-17/FEATURE_BACKLOG_ADDENDUM.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ Format: ID — title — what — source(s) — effort (S/M/L/XL) — fit (yes/c
6464

6565
| F# | Title | What | Source | Effort | Tier |
6666
|---|---|---|---|---|---|
67-
| F220 | AI Voice Conversion / RVC backend | features.md #1.5 / #78.5; not in F-ledger; RVC popularity explosion | FEATURES_RECONCILIATION §3 | M | Later |
68-
| F221 | AI Auto-Color Grading (LLM-driven mood→LUT) | features.md #1.6; extends `color_match.py` + `lut_library.py` | FEATURES_RECONCILIATION §3 | M | Later |
69-
| F222 | AI Pacing & Rhythm Analysis (genre templates) | features.md #1.12; cuts-per-minute, shot-duration distribution | FEATURES_RECONCILIATION §3 | M | Later |
67+
| [x] F220 | AI Voice Conversion / RVC backend | Closed in Pass 76 — `voice_conversion.py` now runs external RVC CLI/script backends with model/index/f0 settings and keeps FFmpeg fallback | FEATURES_RECONCILIATION §3 | M | Later |
68+
| [x] F221 | AI Auto-Color Grading (LLM-driven mood→LUT) | Closed in Pass 76 — `/ai/auto-grade` now accepts natural-language `intent` + `intensity` through `ai_color_intent.py` and exposes `/ai/color-intents` | FEATURES_RECONCILIATION §3 | M | Later |
69+
| [x] F222 | AI Pacing & Rhythm Analysis (genre templates) | Closed in Pass 76 — `/ai/pacing-analysis` now accepts cut points + duration, preserves file-scene analysis, and exposes `/ai/pacing-genres` | FEATURES_RECONCILIATION §3 | M | Later |
7070
| [x] F223 | RTL / CJK / Bidi caption rendering validation suite | Closed in Pass 46 and extended by Pass 47 — `opencut.tools.caption_unicode_validation --json --check` validates RTL, mixed bidi, Indic, and no-space CJK fixtures across SRT, ASS, and burn-in ASS export paths; F242 now supplies no-space CJK wrapping | FEATURES_RECONCILIATION §3 + niche AI §3 | M | Next |
7171
| F224 | Deepfake / fake-video detector | features.md #27.3; adjacent to J2.6 SafeVision | FEATURES_RECONCILIATION §3 | L | Later |
7272

@@ -130,7 +130,7 @@ Format: ID — title — what — source(s) — effort (S/M/L/XL) — fit (yes/c
130130
| **Now** | F205, F251, F259 | 3 |
131131
| **Done locally after Pass 23 wrap-up** | F191, F195, F197, F199, F202, F204, F207, F208, F209, F218, F219, F236, F237, F240, F241, F243, F244 | 17 |
132132
| **Next** | [x] F192, [x] F194, [x] F198, [x] F200, [x] F201, [x] F203, [x] F211, [x] F213, [x] F214, [x] F215, [x] F216, [x] F217, [x] F223, [x] F225, [x] F226, [x] F227, [x] F229, [x] F231, [x] F233, [x] F234, [x] F238, [x] F239, [x] F242, [x] F249, [x] F250, F252 (F252.1/F252.2 dispatcher done), [x] F254, [x] F255, [x] F256, [x] F257, [x] F258, [x] F260 | 32 |
133-
| **Later** | [x] F193, [x] F196, [x] F206, [x] F210, [x] F212, F220, F221, F222, F224, F228, F230, F232, F235, F245, F246, F247, F248, F253 | 13 open + F193/F196/F206/F210/F212 closed |
133+
| **Later** | [x] F193, [x] F196, [x] F206, [x] F210, [x] F212, [x] F220, [x] F221, [x] F222, F224, F228, F230, F232, F235, F245, F246, F247, F248, F253 | 10 open + F193/F196/F206/F210/F212/F220/F221/F222 closed |
134134

135135
**Total Pass-2 F-numbers: 70** (F191-F260).
136136
**Total project F-numbers: 140** (F121-F260 from Pass 1 + Pass 2; plus the pre-existing F001-F120 from v4.3).

0 commit comments

Comments
 (0)