Skip to content

Add studio effects, LED zones, calibration and appearance - #56

Merged
mskutin merged 1 commit into
mainfrom
codex/studio-backlog
Oct 19, 2026
Merged

mskutin merged 1 commit into
mainfrom
codex/studio-backlog

Conversation

@mskutin

@mskutin mskutin commented Oct 19, 2026

Copy link
Copy Markdown
Owner

Changes

Add studio authoring without changing the current lighting until Apply: layered custom effects and reusable v1 presets, named LED zones, keyboard-accessible LED/edge selection with placement preview and undo, and separate bias-light calibrations. Add local image/wallpaper palette extraction and persistent theme/accent/density settings shared with Quick controls.

Zones and effects use the existing native engine and retain Stop, capture consent, lifecycle pauses and comfort limits. Finite effects restart when applied; ordinary color edits exit bias calibration. Windows supports automatic static-wallpaper lookup; other platforms use manual image selection. RGB white targets are explicitly approximate.

Bump desktop and CLI packages to 0.11.0 for the existing signed automatic release workflow. Preserve physical validation trackers #37, #38 and #45. Continue the remaining backlog with capture and sequence playback after this batch.

Validation

  • 69 Rust tests, strict Clippy and formatting.
  • Browser interaction, theme/accent text contrast, narrow-layout, keyboard selection, draft Apply/Cancel/Undo and CSP checks.
  • Isolated native Windows WebView/IPC smoke: effect validation, Apply while stopped, persistence and cross-window appearance synchronization; no USB or capture started.
  • 14 release/signature/publication tests, icon and backlog checks.
  • Physical strip output and assistive-technology validation remain pending.

Closes #11
Closes #12
Closes #19
Closes #21
Closes #28
Closes #36

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T09:01:01.098433Z 474c897 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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: 474c897026

ℹ️ 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".

Comment thread src-tauri/src/studio.rs
settings.speed,
settings.effect_reverse,
);
let frames = lighting::transform(&colors, &[], &settings, 1.0 / 30.0);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Bypass transition limiting for stateless previews

When transitionLimit is nonzero, passing an empty previous frame makes lighting::transform clamp every preview channel from zero to only one 1/30-second transition step. Because each preview request starts from an empty frame again, the editor remains nearly black instead of ever reaching the selected colors; either omit the transition limiter for this stateless preview or preserve preview state across calls.

Useful? React with 👍 / 👎.

Comment thread src/ui/studio.js
"First LED",
input(
"number",
Math.floor((zone.start / 1000) * draft.count) + 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Round the displayed first LED consistently

For zones created from most nonzero LED indices, the stored start boundary is rounded to thousandths, but converting it back with Math.floor displays the preceding LED. For example, selecting LED 2 of a 65-LED strip stores start = 15, which this renders as LED 1 even though the overlay excludes LED 1; use a consistent inverse mapping so the editable range matches the preview and output.

Useful? React with 👍 / 👎.

Comment thread src/ui/appearance.js
? media.matches
? "dark"
: "light"
: value.theme;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Invalidate canvas colors when applying an explicit theme

When the persisted or newly selected theme differs from the OS preference, changing data-theme does not invalidate LightUI.theme() because that cache is keyed only by prefers-color-scheme. If a canvas was drawn before this assignment—especially during startup while appearance IPC is pending—subsequent monitor, strip, and pattern renders keep using colors cached from the previous theme. Notify or invalidate the shared theme cache whenever this explicit theme value changes.

Useful? React with 👍 / 👎.

Comment thread src-tauri/src/settings.rs
pub blend: u8,
pub effect_reverse: bool,
#[serde(default)]
pub studio: crate::studio::Studio,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include studio data when matching the active scene

Profiles now persist effects, zones, and bias calibration in studio, but LightUI.matchesScene still compares only the legacy mode fields. Consequently, two profiles with identical legacy settings but different zones or custom compositions are both shown as active in the main and Quick-controls favorite lists. Add the relevant studio state to the scene comparison.

Useful? React with 👍 / 👎.

@mskutin
mskutin merged commit cb52ec4 into main Oct 19, 2026
9 checks passed
@mskutin
mskutin deleted the codex/studio-backlog branch October 19, 2026 09:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant