|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## [1.10.5] - 2026-04-13 |
| 4 | + |
| 5 | +### Added |
| 6 | +- **302-feature expansion plan** (`features.md`) — 62 categories covering every major video editing domain. 12 new categories added: 360/VR, camera correction, video repair, AI generation, privacy/redaction, spectral audio, split-screen, content repurposing, storyboarding, proxy management, composition intelligence, AI dubbing. |
| 7 | +- **ROADMAP v3.0** — 7-wave implementation plan organized by dependency chains (Wave 1: quick wins with 0 new deps through Wave 7: emerging tech). Replaces completed Phases 0-6. |
| 8 | +- **230 new core modules** (`opencut/core/`) — implementations for feature categories including deinterlace, lens correction, room tone, credits generator, retro effects, hardware acceleration, GIF export, ProRes/AV1/DNxHR encoding, color scopes, spectral audio, video repair, proxy generation, split-screen templates, AI dubbing, storyboard generation, pacing analysis, shot classification, and 200+ more. |
| 9 | +- **43 new route blueprints** (`opencut/routes/`) — 600+ new API endpoints covering audio production, video processing, encoding, creative effects, QC checks, gaming, education, documentary, integrations, generative AI, professional workflows, and more. |
| 10 | +- **43 new test files** (`tests/`) — smoke tests for all new route blueprints. |
| 11 | +- **880 total routes** (up from 254 in v1.9.26). All registered via `__init__.py`. |
| 12 | + |
| 13 | +### Fixed |
| 14 | +- **Ruff lint** — 1,207 auto-fixed + 45 manual fixes (F401 noqa for lazy imports, F821 forward refs, E741 ambiguous vars, E701 multi-statement lines) across all new files. Codebase fully lint-clean. |
| 15 | + |
| 16 | +## [1.10.4] - 2026-04-12 |
| 17 | + |
| 18 | +### Added |
| 19 | +- **Expandable "Why this suggestion?"** on Sequence Assistant recommendation cards. Click to reveal the reasoning behind each suggestion with context-specific explanation. |
| 20 | + |
| 21 | +## [1.10.3] - 2026-04-12 |
| 22 | + |
| 23 | +### Added |
| 24 | +- **Journal "Apply to selection"** — Apply a journal entry's operation to the currently selected clip with one click from the Operation Journal panel. |
| 25 | + |
| 26 | +## [1.10.2] - 2026-04-12 |
| 27 | + |
| 28 | +### Added |
| 29 | +- **Persisted Assistant dismissals** — Dismissed Sequence Assistant suggestions are remembered across sessions via localStorage. Prevents the same suggestion from reappearing after panel reload. |
| 30 | + |
| 31 | +## [1.10.1] - 2026-04-12 |
| 32 | + |
| 33 | +### Added |
| 34 | +- **Preflight checks for /full and /shorts-pipeline** — Validate dependencies, disk space, and clip metadata before starting long multi-step pipelines. Prevents wasted time on doomed jobs. |
| 35 | +- **More audio preview buttons** — Added waveform preview buttons on additional audio processing sub-tabs. |
| 36 | + |
| 37 | +## [1.10.0] - 2026-04-12 |
| 38 | + |
| 39 | +### Added |
| 40 | +- **Sequence Assistant** — "What should I edit next?" AI-powered recommendation engine. Analyzes the current clip and project context to suggest relevant operations (denoise, captions, color correction, etc.) with one-click execution. Displays as a dismissible card panel. |
| 41 | + |
| 42 | +## [1.9.36] - 2026-04-11 |
| 43 | + |
| 44 | +### Added |
| 45 | +- **Live audio preview for denoise** — Preview denoised audio in-panel before applying. Streams a short processed sample for A/B comparison. |
| 46 | + |
| 47 | +## [1.9.35] - 2026-04-11 |
| 48 | + |
| 49 | +### Added |
| 50 | +- **Visual LUT grid** — Browse available LUTs as a visual grid with thumbnail previews showing each LUT applied to a reference frame. Click to apply. |
| 51 | + |
| 52 | +## [1.9.34] - 2026-04-11 |
| 53 | + |
| 54 | +### Added |
| 55 | +- **Transcript-to-timeline scrubber** — Click any word in the transcript view to seek to that position in the Premiere timeline. Bidirectional sync between text and playhead. |
| 56 | + |
| 57 | +## [1.9.33] - 2026-04-11 |
| 58 | + |
| 59 | +### Added |
| 60 | +- **Preflight checklist** — Before starting long pipelines (silence + captions + export), display a checklist of required dependencies, available disk space, and estimated processing time. User confirms or cancels. |
| 61 | + |
| 62 | +## [1.9.32] - 2026-04-11 |
| 63 | + |
| 64 | +### Added |
| 65 | +- **Batch mode for Interview Polish** — Run the Interview Polish workflow on multiple clips sequentially with a single click. Progress tracking per clip. |
| 66 | + |
| 67 | +## [1.9.31] - 2026-04-11 |
| 68 | + |
| 69 | +### Added |
| 70 | +- **CLI `opencut polish`** — Headless interview/podcast cleanup pipeline. Chains denoise + normalize + silence removal + filler removal from the command line. |
| 71 | + |
| 72 | +## [1.9.30] - 2026-04-11 |
| 73 | + |
| 74 | +### Added |
| 75 | +- **Replay past job on current clip** — From the job history panel, replay any previous operation on the currently selected clip with the same parameters. One-click re-run. |
| 76 | + |
| 77 | +## [1.9.29] - 2026-04-10 |
| 78 | + |
| 79 | +### Added |
| 80 | +- **Interview Polish** — One-click interview/podcast cleanup pipeline. Chains: denoise + normalize + silence removal + filler removal with optimized defaults. Quick Action button on Cut tab. |
| 81 | + |
| 82 | +## [1.9.28] - 2026-04-10 |
| 83 | + |
| 84 | +### Added |
| 85 | +- **Operation Journal** — Persistent log of all operations performed on each clip with parameters, timestamps, and results. One-click rollback to undo the last operation. |
| 86 | + |
| 87 | +## [1.9.27] - 2026-04-10 |
| 88 | + |
| 89 | +### Added |
| 90 | +- **Session Context** — "Where you left off" welcome-back card on panel open. Shows last clip worked on, last operation performed, and quick resume button. |
| 91 | + |
| 92 | +## [1.9.26] - 2026-04-09 |
| 93 | + |
| 94 | +### Fixed |
| 95 | +- **Install route rate limit timing** — `make_install_route()` checked `rate_limit("model_install")` inside the `@async_job` body (async thread), so concurrent installs returned `200 + job_id` then failed asynchronously. Moved check to synchronous Flask handler — now returns `429 RATE_LIMITED` immediately with no job spawned. |
| 96 | +- **`@async_job` filepath errors lacked structured codes** — Filepath validation failures returned bare `{"error": "..."}` without `code` or `suggestion` fields. Now classifies into `INVALID_INPUT` vs `FILE_NOT_FOUND` with actionable suggestions. Applies to all 97 async routes. |
| 97 | + |
| 98 | +## [1.9.25] - 2026-04-09 |
| 99 | + |
| 100 | +### Fixed |
| 101 | +- **`/system/dependencies` cold call 6.5s** — 20+ `importlib.import_module()` probes + subprocess calls ran synchronously. Added 60-second TTL cache. Cold: 6,463ms. Warm: <1ms (~6,000x speedup). `?fresh=1` param bypasses cache. |
| 102 | + |
| 103 | +## [1.9.24] - 2026-04-09 |
| 104 | + |
| 105 | +### Fixed |
| 106 | +- **Env var config ignored** — `OPENCUT_PORT`, `OPENCUT_HOST`, `OPENCUT_DEBUG` env vars were silently ignored. `server.py::main()` only read argparse with hardcoded defaults. Now reads env vars first, argparse overrides. |
| 107 | + |
| 108 | +## [1.9.23] - 2026-04-09 |
| 109 | + |
| 110 | +### Fixed |
| 111 | +- **UXP accessibility** — All 7 tab panels now have `aria-labelledby`. All 72 buttons have `type="button"`. `.hidden` utility class unified as global `display: none !important`. |
| 112 | + |
| 113 | +## [1.9.22] - 2026-04-08 |
| 114 | + |
| 115 | +### Fixed |
| 116 | +- **`/file` preview route allowlist restored** — Regression had removed the security allowlist. |
| 117 | +- **`safe_bool()` hardened** — Rejects NaN, inf, containers. 15 new call sites across route files. |
| 118 | +- **MCP serialization fallback** — Added JSON fallback for non-serializable job results. |
| 119 | +- **`highlights.py` None-text guard** — Prevents crash on segments with null text. |
| 120 | + |
| 121 | +## [1.9.21] - 2026-04-08 |
| 122 | + |
| 123 | +### Added |
| 124 | +- **CEP panel UX polish** — Friendlier error messages, clearer button labels, improved alert formatting. |
| 125 | + |
| 126 | +### Fixed |
| 127 | +- **Boolean coercion hardening** — `safe_bool()` added to all 26 boolean flag sites across 8 route files. Prevents `"false"` string coercing to `True`. |
| 128 | + |
| 129 | +## [1.9.20] - 2026-04-07 |
| 130 | + |
| 131 | +### Fixed |
| 132 | +- **Gemini API key URL leak** — `core/llm.py` passed API key as query string, leaking through error messages. Moved to `x-goog-api-key` header. Added `_sanitize_url()`. |
| 133 | +- **motion_graphics drawtext colon injection** — 3 drawtext builders escaped `:` inside single-quoted values, producing literal `\:` in rendered text. Removed wrong escapes. |
| 134 | +- **Queue allowlist +19 routes** — 19 async routes missing from `_ALLOWED_QUEUE_ENDPOINTS` (total now 101). |
| 135 | +- **CEP SSE/poll cancel race** — Stale events after cancel could trigger `onJobDone()`. Added guard. |
| 136 | +- **audio_enhance no-op .cpu() calls** — Removed ineffective `.cpu()` calls before `del`. |
| 137 | +- **animated_captions temp file leak** — Unlinked orphan tempfile on VideoWriter failure. |
| 138 | + |
| 139 | +## [1.9.19] - 2026-04-06 |
| 140 | + |
| 141 | +### Changed |
| 142 | +- Comprehensive audit + full modernization pass. |
| 143 | + |
| 144 | +## [1.9.18] - 2026-04-05 |
| 145 | + |
| 146 | +### Fixed (Comprehensive 6-Phase Audit — 103+ issues) |
| 147 | +- **P0: loudness_match completely broken** — `_run_ffmpeg()` returned `str` but callers accessed `.returncode`/`.stderr`. Renamed to `_run_ffmpeg_raw()`. |
| 148 | +- **P0: UXP CSRF token refresh wrong header** — Read `X-CSRF-Token` instead of `X-OpenCut-Token`. |
| 149 | +- **P0: UXP chat endpoint 404** — Posted to `/chat/message` but route is `/chat`. |
| 150 | +- **P1: WorkerPool shutdown TypeError** — `None` poison pills not comparable with `PriorityQueue` items. |
| 151 | +- **P1: styled captions progress crash** — Missing `msg=""` default. |
| 152 | +- **P1: scene_detect + shorts_pipeline bare ffmpeg** — 4 bare `"ffmpeg"` strings. |
| 153 | +- **P1: 3 GPU memory leaks** — MusicGen (1.2-13GB), SAM2 (1-4GB), Florence-2 (450MB) models never freed. |
| 154 | +- **P2: 37 additional fixes** — Route allowlists, float coercion, structured errors, resource cleanup, font thread safety, CSS missing rules. |
| 155 | + |
| 156 | +## [1.9.17] - 2026-04-03 |
| 157 | + |
| 158 | +### Changed |
| 159 | +- README update with comprehensive feature documentation and audit prompt. |
| 160 | + |
| 161 | +## [1.9.16] - 2026-04-02 |
| 162 | + |
| 163 | +### Fixed (Performance Audit & Memory Leak Fixes) |
| 164 | +- **`/video/auto-zoom` broken return** — Route returned `{}` instead of `result_dict`. |
| 165 | +- **Unbounded thread spawning** — `_persist_job()` and `_schedule_record_time()` spawned raw threads per call. Replaced with bounded `_io_pool = ThreadPoolExecutor(2)`. |
| 166 | +- **Rate limit slot leak** — `make_install_route()` leaked permanently when `rate_limit()` returned False. |
| 167 | +- **GPU memory leak in audio_enhance** — Now deletes all tensor refs + `.cpu()` + `torch.cuda.empty_cache()`. |
| 168 | +- **Timer thread spam** — `_schedule_temp_cleanup()` replaced with single `_cleanup_worker` daemon thread + event queue. |
| 169 | +- **Haar cascade race condition** — Added `_CASCADE_LOCK` with double-checked locking. |
| 170 | +- **SQLite connection leak** — Added `close_all_connections()` shutdown hook. |
| 171 | +- **CEP health timer leak** — `setInterval` reassigned without `clearInterval`. |
| 172 | +- **Single theme ("Studio Graphite")** — Removed multi-theme system (10 themes). Only root dark theme remains. |
| 173 | + |
3 | 174 | ## [1.9.15] - 2026-03-27 |
4 | 175 |
|
5 | 176 | ### Release Audit (Batch 47) |
|
0 commit comments