Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add CI tests, Windows installer cleanup, and streaming click-track rendering - #6

Merged
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements
May 22, 2026
Merged

Add CI tests, Windows installer cleanup, and streaming click-track rendering#6
eimexdev merged 2 commits into
mainfrom
codex/audit-repo-and-ux-improvements

Conversation

@eimexdev

@eimexdeveimexdev commented May 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Added a CI test job before installer packaging and expanded local build docs to reflect release packaging behavior.
  • Improved analysis cache handling with Windows-native cache paths and versioned cache keys.
  • Switched click-track generation to streaming block writes to reduce peak memory usage.
  • Hardened subtitle timeline import so Resolve track state is restored even on append failure.
  • Updated tests to cover Windows cache paths, cache invalidation inputs, streaming render stability, and installer packaging flags.

Testing

  • Passed python3 -m compileall openbeat scripts tests.
  • Passed Lua syntax loading for OpenBeatCommon.lua.
  • Passed the test suite with uv run --no-project --python 3.11 --with-editable . python -m unittest discover -s tests -v.
  • Branch has been updated against current main; CI is rerunning under the artifact-upload-safe workflow.

@coderabbitai

coderabbitaiBot commented May 22, 2026

Copy link
Copy Markdown
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 579e4ffe-9d09-4cc2-8c67-81797bc5fdad

📥 Commits

Reviewing files that changed from the base of the PR and between 140ad58 and 404b672.

📒 Files selected for processing (1)
  • .github/workflows/build-installers.yml

📝 Walkthrough

Walkthrough

Adds platform-aware analysis caching and sample-rate-aware cache keys, streams click-track rendering in blocks, makes PyInstaller builds platform-specific with Windows GUI/install metadata improvements, updates CI to run tests before builds, and revises docs for platform-specific build and log locations.

Changes

Platform-specific installers and audio infrastructure

Layer / File(s)Summary
Platform-aware analysis and versioned caching
openbeat/analysis.py
Introduces ANALYSIS_TARGET_SR and CACHE_SCHEMA_VERSION, adds sys_platform(), makes default_cache_dir platform-aware, and makes cache keys/paths include target_sr and versions.
Memory-efficient block-based click track rendering
openbeat/artifacts.py
Refactors render_click_track to stream PCM in configurable block_size blocks, precompute click starts, maintain active clicks per block, and write per-block via soundfile.SoundFile.
Platform-specific CLI binary building configuration
scripts/build_installers.py
Generalizes pyinstaller_binary with onefile/windowed flags and stale-output cleanup; updates build_cli_binary(platform=...) and separates macOS/Windows builds in main orchestration.
Windows installer GUI and post-install workflow
scripts/build_installers.py
Refactors embedded Windows installer payload handling, adds helpers (Resolve detection, log path, open_path), makes install_openbeat return installed-path metadata, and enhances Ready/Finish wizard steps with install summary and post-install actions.
Error handling for DaVinci Resolve timeline operations
resolve/Fusion/Modules/OpenBeat/OpenBeatCommon.lua
Wraps AppendToTimeline in pcall, captures append result, restores track states unconditionally, and returns errors from failed append calls.
Test coverage for analysis, rendering, and build system
tests/test_analysis.py, tests/test_build_installers.py
Adds tests for block-size rendering consistency, Windows default_cache_dir, cache key sensitivity to version/target_sr, and Windows PyInstaller flag selection.
CI/CD integration and user documentation
.github/workflows/build-installers.yml, docs/development.md, docs/guide.md
Adds a jobs.test that runs before installer builds, updates development docs to use platform-specific build commands, and separates macOS/Windows log paths in the guide.

Sequence Diagram(s)

sequenceDiagram
participant Dev as Developer
participant CI as GitHub Actions
participant TestJob as jobs.test
participant BuildJob as jobs.build
participant PyInstaller as PyInstaller
participant EmbeddedInstaller as Windows Installer GUI
participant Resolve as DaVinciResolve
participant FS as FileSystem
Dev->>CI: push PR
CI->>TestJob: run unit tests (python)
TestJob->>CI: tests pass/fail
CI->>BuildJob: needs: test -> run build
BuildJob->>PyInstaller: build_cli_binary(platform="windows")
PyInstaller->>FS: write openbeat.exe / bundle
BuildJob->>EmbeddedInstaller: embed installer script
EmbeddedInstaller->>Resolve: check running (tasklist)
EmbeddedInstaller->>FS: install_openbeat() -> return install_result paths
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

In blocks I tap the metronome's cheer,
keys now mark versions, platforms clear,
installers bundle where they belong,
Windows shows paths and buttons strong.
🐰🎶


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:140ad5881d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

ROOT / "openbeat" / "cli.py",
python_bin=python_bin,
onefile=platform != "windows",
windowed=platform == "windows",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove windowed mode from Windows CLI runtime build

Building the bundled openbeat runtime with --windowed makes it a noconsole app on Windows, where PyInstaller documents that sys.stdout/sys.stderr are unavailable; this conflicts with the shipped CLI implementation (for example click-track prints JSON in openbeat/cli.py) and can raise runtime errors instead of producing output. In the installer flow, Resolve invokes this binary for click-track generation, so Windows installs can fail during normal feature use even though packaging succeeds.

Useful? React with 👍 / 👎.

@eimexdev
eimexdev merged commit 8c86ecb into mainMay 22, 2026
4 checks passed
@eimexdev
eimexdev deleted the codex/audit-repo-and-ux-improvements branch May 22, 2026 03:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eimexdev