Skip to content

feat(theme): follow local desktop colors with a System theme - #10249

Open
joshistoast wants to merge 1 commit into
mainfrom
feat/system-theme
Open

joshistoast wants to merge 1 commit into
mainfrom
feat/system-theme

Conversation

@joshistoast

@joshistoast joshistoast commented Nov 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Add a System theme in Appearance that follows the local server's active Omarchy palette and light/dark mode after refresh, with browser system colors as the fallback.

Preserve native surface shades and accents, keep text and actions readable, soften ordinary borders, and prevent Dark Reader from recoloring valid native palettes.

QA Instructions

From invokeai/frontend/webv2:

  • INVOKEAI_DESKTOP_THEME=0 pnpm check:release passed: 13,233 unit tests, 4,686 browser tests and one existing skip, fixtures, production/performance checks, project-file journeys, accessibility, and three-engine lifecycle smoke.
  • After the final contrast and border adjustments, pnpm build passed again, including formatting, lint, types and architecture checks. Focused System checks passed in Chromium, Firefox and WebKit (21/21), theme/UI checks passed (95/95), and token/pre-paint unit checks passed (14/14).

From the repository root:

  • uv run --no-sync python -m pytest tests/app/api/test_frontend.py tests/app/api/test_trusted_route_guard.py --durations=5 passed (48/48). Commit hooks passed Ruff checks and formatting.

Interactive verification:

  1. Run INVOKEAI_DESKTOP_THEME=1 pnpm dev:mock from the frontend package and select System in Appearance.
  2. With Ristretto active, refresh and check native dark brown surfaces, coral accents, restrained ordinary borders, stronger hover outlines and visible keyboard focus.
  3. Switch Omarchy to Rose Pine and refresh. Verify cream surfaces and light mode even when the browser prefers dark and Dark Reader is enabled.
  4. Select a fixed theme and verify that it remains fixed while the System card previews the native palette. Enable high contrast and verify the stronger text and borders.

These flows passed against real Ristretto/Rose Pine palette fixtures with an isolated Dark Reader profile and no page errors. Screenshots were captured locally; attachment upload was unavailable in this session.

Review

Resolved native-palette contrast issues in green/orange action labels and small secondary text, and verified that softer ordinary borders preserve high-contrast and focus/error cues. No known material findings remain.

Compatibility / Rollout

No API schema, dependency or saved-preference shape changes. Existing unknown-theme fallback handles older builds that do not recognize system.

The native palette belongs to the machine running the server; remote clients see that host's colors. Missing, unreadable or invalid local palettes use browser system colors. Vite's native integration is opt-in and never bakes a developer palette into production builds.

Checklist

  • The PR has a short but descriptive title, suitable for a changelog
  • Meaningful regression coverage added / updated where needed; obsolete tests/code removed
  • Persisted-state and API changes include required migrations / compatibility validation (no migration or generated API changes required)
  • Relevant performance/efficiency opportunities considered; material claims have evidence
  • Material review findings resolved and relevant checks rerun
  • Documentation added / updated (if applicable)
  • Updated What's New copy (if doing a release after this PR) — not a release PR

Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

Read the active Omarchy palette on page load with native browser colors as fallback.
Keep light and dark surfaces, action contrast, and theme previews aligned with the source palette.
@github-actions github-actions Bot added api python PRs that change python files frontend-deps PRs that change frontend dependencies frontend PRs that change frontend files python-tests PRs that change python tests labels Nov 12, 2026
@joshistoast

Copy link
Copy Markdown
Collaborator Author

Gimmick feature, not very necessary but very cool

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api frontend PRs that change frontend files frontend-deps PRs that change frontend dependencies python PRs that change python files python-tests PRs that change python tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant