Skip to content

OpenCut v1.9.23 — UXP a11y polish

Choose a tag to compare

@SysAdminDoc SysAdminDoc released this 11 Apr 22:30

v1.9.23 — UXP Accessibility Polish (Round-2 audit follow-up)

Incremental release on top of v1.9.22 that lands the remaining UXP accessibility fixes surfaced during the second QA audit round.

What's in v1.9.23

  • 7 UXP tab panels now have working aria-labelledby — previously the Cut panel had an orphan aria-labelledby="" and the other 6 panels had no attribute at all, leaving screen readers unable to announce the active section. Assigned tabBtn{Cut,Captions,Audio,Video,Timeline,Search,Deliverables,Settings} ids to each tab button and wired each panel's aria-labelledby to the matching id.
  • All 72 UXP <button> elements now carry explicit type="button" — previously 61/72 were missing it. No active <form> in the UXP doc (so no implicit submit), but CLAUDE.md mandates explicit type on all buttons. Closes the gap with the CEP panel's 179/179 coverage.
  • .hidden and .oc-hidden unified as display: none !important — previously only scoped to .oc-result-area.hidden and .oc-processing-banner.hidden, so toggling .hidden on any other element (e.g., depth install hint, NLP result card) was a silent no-op. New global rule makes the utility class work regardless of element type.

Everything v1.9.22 shipped (recap)

  • /file preview route allowlist restored (realpath must be under tempdir or ~/.opencut, MIME type must be audio/video/image) — reverts a v1.9.21 security regression
  • safe_bool() hardened against NaN/inf/containers — reject lists/tuples/sets/dicts that were previously coerced to True
  • 15 more safe_bool call sites across audio/captions/system/video_ai/video_core/video_editing routes
  • mcp_server.py JSON-RPC serialization fallback (default=str + -32603 on failure) so non-serializable tool results can no longer hang the client
  • core/highlights.py null-safe guard on response.text.startswith(...) when LLM provider returns an empty response
  • routes/system.py moved tempfile + OPENCUT_DIR to function-local imports inside serve_file() (fixes the v1.9.21 CI lint failure)

Downloads

  • Windows: OpenCut-Server-Windows.tar.gz (PyInstaller onedir, WebView2-ready)
  • Linux: OpenCut-Server-Linux.tar.gz
  • macOS: OpenCut-Server-macOS.tar.gz

Binaries are built by GitHub Actions CI and uploaded automatically. If the download links below show "(no assets yet)", the CI run is still in progress — refresh in a few minutes.