Skip to content

Commit b99179a

Browse files
committed
fix: v1.9.11 — 14 encoding fixes, Docker GPU profile, CI improvements
Encoding: - 14 open() calls across 7 files missing encoding="utf-8" — causes UnicodeDecodeError on Windows with non-ASCII content (captions, footage_search, lut_library, motion_graphics, social_post, speed_ramp, video_core presets) Docker: - GPU variant now usable via `docker compose --profile gpu up` - Added WebSocket port 5680 to EXPOSE - Added psutil + python-json-logger to deps - Plugin directory created at build time CI: - Expanded smoke tests: create_app factory, WorkerPool, MCP tools count, CLI commands count, schemas import
1 parent 9889a9f commit b99179a

29 files changed

Lines changed: 91 additions & 59 deletions

.github/workflows/build.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@ jobs:
5555

5656
- name: Smoke test imports
5757
run: |
58-
python -c "from opencut.server import app; print('Import OK')"
58+
python -c "from opencut.server import create_app; app = create_app(); print('Server OK')"
5959
python -c "from opencut.security import get_csrf_token; print('Security OK')"
6060
python -c "from opencut.jobs import _new_job; print('Jobs OK')"
61+
python -c "from opencut.workers import get_pool, JobPriority; print('Workers OK')"
6162
python -c "from opencut.core.repeat_detect import detect_repeated_takes; print('Core OK')"
6263
python -c "from opencut.core.nlp_command import parse_command; print('NLP OK')"
63-
python -c "from opencut.cli import cli; print('CLI OK')"
64+
python -c "from opencut.mcp_server import MCP_TOOLS; print(f'MCP: {len(MCP_TOOLS)} tools')"
65+
python -c "from opencut.cli import cli; print(f'CLI: {len(cli.commands)} commands')"
66+
python -c "from opencut.schemas import WorkflowResult; print('Schemas OK')"
6467
6568
- name: Build with PyInstaller
6669
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## [1.9.11] - 2026-03-27
4+
5+
### Fixed (Batch 43 — Encoding, Docker, CI)
6+
- **13 `open()` calls missing `encoding="utf-8"`** — 6 core modules (captions, footage_search, lut_library, motion_graphics, social_post, speed_ramp) and 1 route (video_core) used system-locale encoding on Windows, causing `UnicodeDecodeError` on non-ASCII file content.
7+
- **Docker GPU variant**`docker-compose.yml` GPU service now usable via `docker compose --profile gpu up` instead of requiring manual uncommenting. Added WebSocket port 5680 to EXPOSE. Added `psutil` and `python-json-logger` to Dockerfile deps. Plugin dir created at build time.
8+
- **CI smoke tests expanded** — Added imports for `create_app` (factory pattern), `WorkerPool`/`JobPriority`, `MCP_TOOLS` (count check), `cli.commands` (count check), `WorkflowResult` schema.
9+
310
## [1.9.10] - 2026-03-27
411

512
### Added

CLAUDE.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
- Lint: `ruff check opencut/` — codebase is fully clean, pre-commit enforces on every commit
181181

182182
## Version
183-
- Current: **v1.9.10**
183+
- Current: **v1.9.11**
184184
- 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`
185185
- Use `python scripts/sync_version.py --set X.Y.Z` to update all 19 targets at once (including UXP files and package.json)
186186
- Use `python scripts/sync_version.py --check` in CI to verify all targets match
@@ -919,6 +919,11 @@ enhance = ["resemble-enhance>=0.0.1"]
919919
- **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.
920920
- **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.
921921

922+
## v1.9.11 Batch 43 (Encoding, Docker, CI)
923+
- **14 open() calls** missing `encoding="utf-8"` across 7 files — causes UnicodeDecodeError on Windows with non-ASCII content.
924+
- **Docker GPU variant** — usable via `docker compose --profile gpu up` instead of manual uncommenting.
925+
- **CI smoke tests expanded** — create_app, WorkerPool, MCP tools, CLI commands, schemas.
926+
922927
## v1.9.10 Batch 42 (CLI Crash Fixes + New Commands)
923928
- **4 CLI commands were completely broken** — color-match, loudness-match, auto-zoom, deliverables all imported from wrong modules. Fixed all 4.
924929
- **2 new CLI commands**`denoise` (FFmpeg noise reduction) and `scene-detect` (scene boundaries with rich table output).

Dockerfile

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# ============================================================
22
# OpenCut Server — Docker Image
33
# Multi-stage build for minimal final image
4+
#
5+
# Build: docker build -t opencut .
6+
# Run (CPU): docker run -d -p 5679:5679 -v opencut-data:/root/.opencut opencut
7+
# Run (GPU): docker run -d --gpus all -p 5679:5679 -v opencut-data:/root/.opencut opencut
48
# ============================================================
59

610
# Stage 1: Base with Python and system deps
@@ -24,11 +28,11 @@ COPY requirements.txt pyproject.toml ./
2428
COPY opencut/__init__.py opencut/__init__.py
2529

2630
# Install core dependencies first (cached layer)
27-
RUN pip install --no-cache-dir flask flask-cors click rich
31+
RUN pip install --no-cache-dir flask flask-cors click rich python-json-logger
2832

2933
# Install standard optional dependencies
3034
RUN pip install --no-cache-dir \
31-
faster-whisper \
35+
faster-whisper>=1.1 \
3236
opencv-python-headless \
3337
Pillow \
3438
numpy \
@@ -37,6 +41,7 @@ RUN pip install --no-cache-dir \
3741
noisereduce \
3842
deep-translator \
3943
scenedetect[opencv] \
44+
psutil \
4045
|| echo "Some optional deps failed — continuing"
4146

4247
# Stage 3: Final image
@@ -50,10 +55,10 @@ COPY --from=deps /usr/local/bin /usr/local/bin
5055
COPY . /app
5156

5257
# Create data directories
53-
RUN mkdir -p /root/.opencut/packages /root/.opencut/models
58+
RUN mkdir -p /root/.opencut/packages /root/.opencut/models /root/.opencut/plugins
5459

55-
# Expose server port
56-
EXPOSE 5679
60+
# Expose server port + WebSocket bridge port
61+
EXPOSE 5679 5680
5762

5863
# Health check
5964
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
@@ -62,6 +67,8 @@ HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
6267
# Environment
6368
ENV OPENCUT_BUNDLED=false
6469
ENV PYTHONUNBUFFERED=1
70+
ENV OPENCUT_HOST=0.0.0.0
71+
ENV OPENCUT_PORT=5679
6572

6673
# Entrypoint
6774
ENTRYPOINT ["python", "-m", "opencut.server"]

Install.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ Write-Host " \___/| .__/ \___|_| |_|\____\__,_|\__|" -ForegroundColor Cyan
155155
Write-Host " |_| " -ForegroundColor Cyan
156156
Write-Host ""
157157
Write-Host " Open Source Video Editing Automation" -ForegroundColor DarkGray
158-
Write-Host " Installer v1.9.10" -ForegroundColor DarkGray
158+
Write-Host " Installer v1.9.11" -ForegroundColor DarkGray
159159

160160
$isAdmin = Test-IsAdmin
161161
if ($isAdmin) {

OpenCut.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
; Fully self-contained installer — bundles server exe, ffmpeg, and CEP extension
33

44
#define MyAppName "OpenCut"
5-
#define MyAppVersion "1.9.10"
5+
#define MyAppVersion "1.9.11"
66
#define MyAppPublisher "SysAdminDoc"
77
#define MyAppURL "https://github.com/SysAdminDoc/OpenCut"
88

docker-compose.yml

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,34 @@ services:
1818
timeout: 5s
1919
retries: 3
2020

21-
# GPU-enabled variant (uncomment to use)
22-
# opencut-server-gpu:
23-
# build: .
24-
# ports:
25-
# - "5679:5679"
26-
# volumes:
27-
# - opencut-data:/root/.opencut
28-
# environment:
29-
# - OPENCUT_BUNDLED=false
30-
# - PYTHONUNBUFFERED=1
31-
# deploy:
32-
# resources:
33-
# reservations:
34-
# devices:
35-
# - driver: nvidia
36-
# count: 1
37-
# capabilities: [gpu]
38-
# restart: unless-stopped
21+
# GPU-enabled variant — use: docker compose --profile gpu up
22+
opencut-server-gpu:
23+
build:
24+
context: .
25+
dockerfile: Dockerfile
26+
ports:
27+
- "5679:5679"
28+
volumes:
29+
- opencut-data:/root/.opencut
30+
environment:
31+
- OPENCUT_BUNDLED=false
32+
- PYTHONUNBUFFERED=1
33+
- NVIDIA_VISIBLE_DEVICES=all
34+
deploy:
35+
resources:
36+
reservations:
37+
devices:
38+
- driver: nvidia
39+
count: 1
40+
capabilities: [gpu]
41+
restart: unless-stopped
42+
healthcheck:
43+
test: ["CMD", "curl", "-f", "http://localhost:5679/health"]
44+
interval: 30s
45+
timeout: 5s
46+
retries: 3
47+
profiles:
48+
- gpu
3949

4050
volumes:
4151
opencut-data:

extension/com.opencut.panel/CSXS/manifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<ExtensionManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
Version="7.0"
44
ExtensionBundleId="com.opencut.panel"
5-
ExtensionBundleVersion="1.9.10"
5+
ExtensionBundleVersion="1.9.11"
66
ExtensionBundleName="OpenCut">
77

88
<ExtensionList>
9-
<Extension Id="com.opencut.panel.main" Version="1.9.10" />
9+
<Extension Id="com.opencut.panel.main" Version="1.9.11" />
1010
</ExtensionList>
1111

1212
<ExecutionEnvironment>

extension/com.opencut.panel/client/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3262,7 +3262,7 @@ <h1 class="content-title" id="contentTitle">Cut & Clean</h1>
32623262
<div class="card-header"><div class="card-title" data-i18n="settings.about">About OpenCut</div></div>
32633263
<div class="settings-row">
32643264
<span class="settings-label">Version</span>
3265-
<span class="settings-value">1.9.10</span>
3265+
<span class="settings-value">1.9.11</span>
32663266
</div>
32673267
<div class="about-links">
32683268
<a href="https://github.com/SysAdminDoc/opencut" class="about-link" target="_blank">GitHub</a>

extension/com.opencut.panel/client/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
OpenCut CEP Panel - Main Controller v1.9.10
2+
OpenCut CEP Panel - Main Controller v1.9.11
33
6-Tab Professional Toolkit
44
============================================================ */
55
(function () {

0 commit comments

Comments
 (0)