cmux-next: backgrounds batch: collages, every Apple aerial, video playback and Chief picture motion settings

Closed
TE
11d ago
+6761-55

Summary

A reduced backgrounds batch for cmux-next. It carries:

  • Collages (from #21789): arrange several pictures as one background. New Collage… in the background picker opens the editor; a saved collage is collage:<id>, can be edited (saved under a new id; the old one goes only after the background switches) and removed (never the one in use). A collage draws only pictures the picker offers (a painting is downloaded first, a file only from your images, a system picture only from Desktop Pictures), and one picture that can't be read refuses the save instead of dropping it.
  • Every Apple aerial is a background (from #21784): aerials macOS has not downloaded show as an empty tile with a download mark and open the Wallpaper pane.
  • Video playback settings (from #21746): appearance.backgroundVideo (Play, Only While cmux Is Active, Still Picture) and appearance.backgroundVideoOnBattery (Keep Playing, Pause). Low Power Mode and Reduce Motion still pause a video.
  • Chief picture motion (from #21746): home.chiefPictureMotion (always, on hover (default), never) for a Chief's animated picture on Home pages, native and web.

Dropped, and why

  • appearance.backgroundAvoidPanes ("Keep Paintings Clear of Panes", #21746).
  • Placing a picture by hand (#21743): BackdropUserPlacement, BackdropPlacementStore, BackdropAdjustOverlay, the Adjust Placement… button, the cmux.settings.backdrop.image.adjust op and its not_adjustable error, updateArtCrop/adjustable.

Their settings, strings in every locale, ops, web UI and tests are gone. #22562 (merged into feat-cmux-next today) made the background aspect-fill the window, centered, with no framing logic, and deleted BackdropArtPlacement.swift, the visible-span math, the blurred fill and the pane-column reports, because framing made the picture jump while resizing. Both dropped features were built on that framing, so this PR follows #22562 and brings none of it back: WindowMaterialView.swift is base's version unchanged, and base's art blur (#22566) and one-background-or-shuffle (#22577, including Shuffle a Folder) stay as they are.

The string catalogs are base plus only the strings this batch uses (additions only). docs/mdm/com.manaflow.cmux.json and schemas/defaults/cmux-next.json are base's; the PR autofix regenerates them.

Changelog

  • Added: Collages: arrange several pictures as one window background.
  • Added: Every Apple aerial is offered as a background; ones not downloaded open the Wallpaper pane.
  • Added: Settings for when a video background plays and whether it plays on battery, and for when a Chief's animated picture moves.

Testing

  • Red-then-green: BackdropCollagesTests.oneUnreadablePictureRefusesTheCollage and the new cases in BackdropImagesPageProviderTests.collagesSaveReadAndDelete are committed before the fix (f1d71c9bf52a), the fix is 0f0b9d8c4a5f.

  • Fleet compile of CmuxNext with its tests and the app on the head (cmux-ci compile-check --package CmuxNext --app).

  • webviews: bun run check, bun test src/pages/settings (216 pass), scripts/web-lint.sh, scripts/cmux-next/prepush-gate.py.

  • Base merges: feat-cmux-next 056118fdaa98 (conflict only in WebTheme.swift: base's workingLook / data-working-look and this PR's pictureMotion / data-picture-motion both kept), b857e19141ee (SettingsPageLayout.swift: base moved Chief Chat to the new Chief page, so the Chief Pictures group moves there with it; PageFactory.swift: base's side), then clean merges of 855674fd98c4, f7a403370ec4, 74b91c115465 and 4af74bec7a88. CmuxNextSettings/Localizable.xcstrings is base's text plus this PR's 12 keys (an earlier merge had reordered the whole file).

  • Settings exports and the defaults snapshot come from the PR autofix's pr-autofix-patch artifact (runs 39614862117 and 39653863256), applied as chore(next): PR autofix commits; the push job does not run on pull_request events.

  • Localization: Collage (da/de/es/fr/it/nb) and Name (de) are documented identities in scripts/localization-allowed-omissions.json; python3 scripts/localization_catalog.py check no longer reports these catalogs.

  • test/home-chief-picture-motion.test.tsx yields a turn instead of a 20 ms fixed wait (check:fixed-waits); bun test of it and of src/pages/settings pass (241 pass, 1 skip).

  • Fleet cmux-ci compile-check --app passed on e7c20a57b325, dd954625b770, cacbf8a3ed43, 63922e969850, 4c2e4e0fddda, 12703f092814, 483b19549d42 and 0244c5223e28.

No capture: the visible changes are Settings web page rows and the collage editor (the gallery advisory run renders the settings page) and backdrop behavior (video playback, battery pause, picture motion), not new native chrome.

Observed / Not run

  • Observed: the checks above on huge-blue and the fleet; CI on the head.
  • Not run this pass: local bun run check / scripts/web-lint.sh (refused on cosmic-gray); CI's web lint ran them and passed (fast gates).
  • Not run: no live dogfood of a collage or an aerial in a tagged build in this pass.

Replaces the separate PRs #21746, #21789 and #21784 (their kept content lands here). #21743's hand placement is dropped as above.

🤖 Generated with Claude Code

Agent session: cosmic-gray