|
180 | 180 | - Lint: `ruff check opencut/` — codebase is fully clean, pre-commit enforces on every commit |
181 | 181 |
|
182 | 182 | ## Version |
183 | | -- Current: **v1.9.3** |
| 183 | +- Current: **v1.9.4** |
184 | 184 | - All version strings: `pyproject.toml`, `__init__.py`, `CSXS/manifest.xml` (ExtensionBundleVersion + Version), `com.opencut.uxp/manifest.json`, `com.opencut.uxp/main.js` (VERSION const), `index.html` version display, README badge, `package.json` |
185 | 185 | - Use `python scripts/sync_version.py --set X.Y.Z` to update all 19 targets at once (including UXP files and package.json) |
186 | 186 | - Use `python scripts/sync_version.py --check` in CI to verify all targets match |
@@ -919,6 +919,23 @@ enhance = ["resemble-enhance>=0.0.1"] |
919 | 919 | - **10 duplicate class attributes in HTML** — 10 elements had two `class=` attributes; HTML parser silently ignores the second, losing spacing utilities (mt-xs, mt-sm, mb-sm, mt-md). All merged into single attributes. |
920 | 920 | - **pip install permission denied** — `safe_pip_install()` failed on Windows when both normal and `--user` installs hit Errno 13 (Microsoft Store Python, OneDrive-synced user dirs, restrictive ACLs). Added `--target ~/.opencut/packages` as third fallback strategy. server.py adds `~/.opencut/packages` to `sys.path` at startup. |
921 | 921 |
|
| 922 | +## v1.9.4 Batch 36 Bug Fixes |
| 923 | +- **face_enhance/face_swap/upscale `_p(pct, msg)` crash** — 3 `on_progress` closures missing `msg=""` default; TypeError when core modules call with 1 arg. Fixed all 3. |
| 924 | +- **engagement attribute crash** — shorts pipeline response used direct attribute access; switched to `getattr()` with defaults for all 5 engagement fields. |
| 925 | +- **broll_plan inconsistent response** — empty result returned 2 keys, success returned 4. Frontend expects all 4. Fixed + `plan is None` guard + `getattr()` on window fields. |
| 926 | +- **style_arbitrary path traversal** — `style_image` not validated via `validate_filepath()`. Added. |
| 927 | +- **plugin install path traversal** — `source` not validated via `validate_path()`. Added. |
| 928 | +- **plugin uninstall symlink escape** — resolved path not verified to stay within `PLUGINS_DIR`. Added `os.path.realpath()` containment check. |
| 929 | +- **depth_effects model_id injection** — `model_size` interpolated into HuggingFace model ID without allowlist in `apply_bokeh_effect()` and `apply_parallax_zoom()`. Added allowlist in all 3 functions. |
| 930 | +- **GPU rate limit gaps** — interpolate + basicvsr denoise bypassed `rate_limit("ai_gpu")`. Added guards. |
| 931 | +- **Queue allowlist +9 routes** — interpolate, depth/map/bokeh/parallax, broll-plan, remove/watermark, upscale/run, multicam-xml, search/auto-index. |
| 932 | +- **title_overlay preset allowlist** — Missing `lower_third`, `countdown`, `kinetic_bounce`. |
| 933 | +- **Engine registry cache race** — `_availability_cache` reads/writes outside lock. Fixed. |
| 934 | +- **main.js timer leak** — `_scanDebounceTimer` missing from `cleanupTimers()`. |
| 935 | +- **main.js safeFixed** — zoom slider used raw `toFixed()`. |
| 936 | +- **FFmpeg stderr truncation** — now prepends `"...[truncated] "` marker. |
| 937 | +- **Test fix** — `test_system_gpu` expected wrong key name. |
| 938 | + |
922 | 939 | ## v1.9.0 Features Added |
923 | 940 |
|
924 | 941 | ### Backend Infrastructure |
|
0 commit comments