Repository navigation
Add studio effects, LED zones, calibration and appearance - #56
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 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".
| settings.speed, | ||
| settings.effect_reverse, | ||
| ); | ||
| let frames = lighting::transform(&colors, &[], &settings, 1.0 / 30.0); |
There was a problem hiding this comment.
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 👍 / 👎.
| "First LED", | ||
| input( | ||
| "number", | ||
| Math.floor((zone.start / 1000) * draft.count) + 1, |
There was a problem hiding this comment.
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 👍 / 👎.
| ? media.matches | ||
| ? "dark" | ||
| : "light" | ||
| : value.theme; |
There was a problem hiding this comment.
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 👍 / 👎.
| pub blend: u8, | ||
| pub effect_reverse: bool, | ||
| #[serde(default)] | ||
| pub studio: crate::studio::Studio, |
There was a problem hiding this comment.
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 👍 / 👎.
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
Closes #11
Closes #12
Closes #19
Closes #21
Closes #28
Closes #36