CineTone is a tiny, native menu bar app that disables True Tone the moment video starts playing and switches it back on when you stop — so films, YouTube and Netflix are not tinted by your room lighting. It can do the same for Night Shift.
848 KB · 0.05% CPU · no permissions required · no telemetry
- Why CineTone
- Features
- Menu bar at a glance
- Install
- Running it for the first time
- How to use it
- How it works
- Requirements
- Build from source
- FAQ
- Troubleshooting
- Uninstall
- Contributing
- Licence
True Tone continuously shifts your Mac's display white balance to match the light in the room you are sitting in. That is genuinely nice for reading and writing — and actively wrong for watching anything.
Films, TV and video are colour graded against a fixed reference white point. True Tone pulls the picture away from it, so under warm evening lighting your screen quietly adds an orange cast to everything you watch. Night Shift does the same thing, much harder.
Turning True Tone off by hand every time you watch something is tedious. Remembering to turn it back on afterwards is worse. CineTone does both, automatically, and gets out of the way.
- 🎬 Turns True Tone off while video plays — in any app, automatically.
- 🌙 Optional Night Shift handling — off by default, one click to enable.
- 🎧 Ignores music. Audio-only playback never triggers it. Neither do notifications, screen savers or idle windows.
- 🔒 Only touches what was already on. Keep True Tone off and CineTone does nothing at all.
- ↩️ Always gives your settings back — when video ends, when you quit, even when the app is force-killed.
- 🙋 Defers to you. Change the setting yourself mid-video and CineTone stops managing it until the next thing you watch.
- ⏱️ Smart restore delay so ad breaks and scrubbing do not cause repeated colour shifts.
- 🪶 Tiny and quiet — an 848 KB universal app using 0.05% of one CPU core.
- 🔐 No permissions, no network. No accessibility, screen recording or automation prompts. Nothing leaves your Mac.
CineTone lives entirely in your menu bar. The icon is a small screen that tells you what is happening without you having to click it: a wedge of tone across it means True Tone is adapting your display, and a clean screen means CineTone is holding that adaptation off for video.
- Go to the Releases page.
- Download
CineTone.zipand unzip it. - Drag CineTone.app into your Applications folder.
- Follow Running it for the first time below.
Building takes about ten seconds and completely avoids the macOS security prompt.
git clone https://github.com/aliahmadmalik/CineTone.git
cd CineTone
make installThat compiles a universal binary, installs it to /Applications, and launches
it. Look for the sun icon in your menu bar.
To have CineTone start with your Mac, open its menu and tick Launch at Login.
CineTone is signed ad-hoc rather than notarised, because notarisation requires a paid Apple Developer account. If you downloaded a release, macOS will refuse the first launch with a message like "Apple could not verify CineTone is free of malware."
This is expected for open-source Mac apps distributed outside the App Store. To open it anyway, pick either method:
Right-click method
- Find CineTone.app in Applications.
- Right-click (or Control-click) it → Open.
- Click Open in the dialog.
macOS remembers this, so you only do it once.
Terminal method
xattr -dr com.apple.quarantine /Applications/CineTone.appBuilding from source with
make installavoids this entirely, because the app is never quarantined.
There is nothing to configure — it works the moment it launches. Everything optional lives in the menu bar icon's menu:
| Setting | Default | What it does |
|---|---|---|
| Enable CineTone | On | Master switch. When off, nothing is watched or changed. |
| True Tone | On | Switch True Tone off during video playback. |
| Night Shift | Off | Also switch Night Shift off during video playback. |
| Restore Delay | 5 seconds | How long to wait after video stops before restoring. |
| Ignored Apps | — | Apps that should never count as video playback. |
| Launch at Login | Off | Start CineTone automatically when you log in. |
| About CineTone | — | Shows the installed version. |
True Tone fades over about a second, and the change is visible. Restoring the instant a video pauses would make ad breaks, buffering and scrubbing flicker between colour profiles. The delay absorbs that.
Set it to Immediately if you would rather it snap back, or 30 seconds if you watch a lot of things with long ad breaks.
macOS requires apps to declare why they need the machine kept awake. An app
playing video takes a PreventUserIdleDisplaySleep assertion, because a video is
worthless if the screen dims. An app playing only audio does not — it takes a
system-sleep assertion instead, because the display is irrelevant to sound.
That distinction is the whole trick. It lets CineTone tell video from music without knowing anything about individual apps, and without ever looking at what is on your screen. Playing a YouTube video in Safari looks like this:
pid 4322(Safari): PreventUserIdleDisplaySleep
named: "com.apple.WebCore: HTMLMediaElement playback"
The same is true of Chrome, Firefox, Arc, Brave, VLC, IINA, QuickTime Player, Netflix, Apple TV, Plex, Infuse and anything else that plays video properly. No per-app support is needed, and new apps work on day one.
A few processes hold that assertion for reasons unrelated to video — screen
sharing, presentations, caffeinate. Those are filtered out by default, and you
can add your own from the menu.
True Tone itself is toggled through Apple's private CoreBrightness framework,
resolved at run time. It is the same mechanism Control Center uses, and the only
way to reach the setting programmatically — Apple publishes no public API for it.
Measured on an M4 MacBook Air:
| Bundle size | 848 KB (universal, both architectures) |
| Idle CPU | 0.05% of one core, averaged over 60 seconds |
| Memory | ~40 MB resident, nearly all of it shared AppKit pages |
| Detection cost | ~0.1 ms per check, once every 2 seconds |
CineTone polls rather than subscribing, because the documented
com.apple.system.powermanagement.assertions.anychange notification registers
successfully but is never actually delivered on current macOS — verified with
notifyutil.
- macOS 11 Big Sur or later
- A Mac with a True Tone display:
- Every Apple silicon Mac — M1, M2, M3, M4 and later (MacBook Air, MacBook Pro, iMac, Mac mini, Mac Studio with a supported display)
- Intel Macs from 2018 onward
- Studio Display and Pro Display XDR
CineTone ships as a universal binary and runs natively on both Apple silicon and Intel — no Rosetta. If your hardware does not support a feature, the matching menu item is greyed out and explains why.
You need only the Xcode Command Line Tools. Full Xcode is not required.
xcode-select --installThen:
| Command | What it does |
|---|---|
make build |
Builds the universal .app into ./build |
make run |
Builds it and launches it |
make install |
Builds and installs to /Applications |
make selftest |
Exercises the engine against a synthetic video player |
make icon |
Regenerates the app icon from source |
make uninstall |
Removes the app and its preferences |
make clean |
Deletes build output |
The build compiles each architecture with swiftc and joins them with lipo,
because swift build --arch requires full Xcode's build system.
make selftestThis creates a real display-sleep assertion and verifies that True Tone is suppressed on playback, restored after the grace period, left alone when it was already off, and handed back untouched when you override it mid-video. It takes about 30 seconds, toggles your display a few times, and restores your original setting when it finishes.
Pushing code to main does not create a release — it only updates the
source. A release is produced when a v* tag is pushed, which triggers the
release workflow to build the app, zip it, and attach it to the Releases page.
make release VERSION=1.0.1That bumps the version in Info.plist, checks the project still builds,
commits, tags v1.0.1, and pushes. The download appears on the Releases page
about a minute later.
| File | Role |
|---|---|
Sources/CineTone/VideoMonitor.swift |
Reads display-sleep assertions and decides what counts as video |
Sources/CineTone/CoreBrightness.swift |
Run-time bridges to the private True Tone and Night Shift APIs |
Sources/CineTone/SuppressionEngine.swift |
The state machine: when to switch off, when to give back, when to defer to you |
Sources/CineTone/MenuBarController.swift |
The menu bar item and its menu |
Sources/CineTone/StatusIcon.swift |
The menu bar glyph and its three states |
Scripts/make-icon.swift |
Draws the app icon with CoreGraphics — there is no binary icon source |
Does this work with YouTube in the browser?
Yes. Safari, Chrome, Firefox, Arc, Brave and Edge all take the display-sleep assertion that CineTone watches for. It works with YouTube, Netflix, Disney+, Prime Video, Twitch and any other site that plays video properly.
Will it turn True Tone off when I am only listening to music?
No. This is the main reason CineTone works the way it does. Audio-only playback takes a system-sleep assertion, not a display-sleep assertion, so Spotify, Apple Music and podcasts never trigger it.
What if I keep True Tone off already?
CineTone does nothing. It only ever switches off something that was already on, and only gives back what it took.
What happens if the app crashes or I force-quit it?
Your settings are restored. CineTone handles SIGINT and SIGTERM, so being
killed from Activity Monitor, pkill, or a logout still hands True Tone back.
Do video calls count as video?
Yes — Zoom, FaceTime, Google Meet and Teams take the same assertion. That is usually what you want for accurate skin tones, but if you disagree, add them under Ignored Apps in the menu.
Does it need Accessibility or Screen Recording permission?
No. CineTone never reads your screen, your windows, or your input. It only asks the power manager which apps are keeping the display awake. macOS will not prompt you for anything.
Does it phone home or collect anything?
No. There is no networking code in the app at all.
Why does it use a private API? Is that safe?
Apple provides no public API for True Tone — the private CoreBrightness
framework is the only route, and it is what Control Center itself uses. CineTone
resolves it at run time and checks that every method exists before calling it, so
if a future macOS changes it, the feature reports itself as unsupported and the
app keeps running rather than crashing. It would then need an update to work
again.
Can it go on the Mac App Store?
No. Apps using private frameworks cannot be sandboxed or accepted, which is why CineTone is distributed here as open source instead.
Does it work on an external monitor?
True Tone only exists on displays that have the hardware for it — built-in Mac displays, the Studio Display and the Pro Display XDR. On a third-party monitor there is no True Tone to switch off, and CineTone will grey the option out.
The menu bar icon is missing. macOS hides menu bar items when the bar runs out of room, which is common on MacBooks with a notch. Quit some other menu bar apps, or use a manager like Bartender or Ice. Confirm CineTone is actually running with:
pgrep -x CineTone"True Tone" is greyed out in the menu. Your display does not report True Tone support. See Requirements.
Nothing happens when I play a video. Check whether the app is being detected at all — open the CineTone menu while the video is playing and look at the top of the menu. If your player is listed under Ignored Apps, remove it. If it is not detected at all, your player may not take a display-sleep assertion; please open an issue and say which app it is.
The colour keeps flipping back and forth. Increase the Restore Delay to 10 or 30 seconds.
make uninstallOr manually: quit CineTone, drag /Applications/CineTone.app to the Trash, then
remove its preferences:
defaults delete com.cinetone.CineToneIf you enabled Launch at Login on macOS 11 or 12, also remove
~/Library/LaunchAgents/com.cinetone.CineTone.launcher.plist.
Issues and pull requests are welcome. If you are reporting a detection problem, the most useful thing you can include is the output of this while the video is playing:
pmset -g assertionsPlease run make selftest before opening a pull request that touches the engine.
MIT — see LICENSE. Do what you like with it.
Keywords: macOS True Tone toggle · disable True Tone automatically · turn off True Tone when watching video · Night Shift auto disable · macOS menu bar app · colour accuracy for video on Mac · Apple silicon M1 M2 M3 M4 · free and open source Mac utility
