Skip to content

Repository files navigation

CineTone icon

CineTone

Automatically turn off True Tone while you watch video on macOS

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.

macOS 11+ Universal Swift Version License: MIT Build

848 KB · 0.05% CPU · no permissions required · no telemetry


Contents


Why CineTone

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.

Features

  • 🎬 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.

Menu bar at a glance

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.

CineTone menu bar icon states: idle, active and paused

Install

Option 1 — Download the app

  1. Go to the Releases page.
  2. Download CineTone.zip and unzip it.
  3. Drag CineTone.app into your Applications folder.
  4. Follow Running it for the first time below.

Option 2 — Build it yourself (recommended)

Building takes about ten seconds and completely avoids the macOS security prompt.

git clone https://github.com/aliahmadmalik/CineTone.git
cd CineTone
make install

That 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.

Running it for the first time

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

  1. Find CineTone.app in Applications.
  2. Right-click (or Control-click) it → Open.
  3. Click Open in the dialog.

macOS remembers this, so you only do it once.

Terminal method

xattr -dr com.apple.quarantine /Applications/CineTone.app

Building from source with make install avoids this entirely, because the app is never quarantined.

How to use it

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.

About the restore delay

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.

How it works

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.

Footprint

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.

Requirements

  • 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.

Build from source

You need only the Xcode Command Line Tools. Full Xcode is not required.

xcode-select --install

Then:

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.

Running the tests

make selftest

This 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.

Releasing a new version

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.1

That 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.

Project layout

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

FAQ

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.

Troubleshooting

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.

Uninstall

make uninstall

Or manually: quit CineTone, drag /Applications/CineTone.app to the Trash, then remove its preferences:

defaults delete com.cinetone.CineTone

If you enabled Launch at Login on macOS 11 or 12, also remove ~/Library/LaunchAgents/com.cinetone.CineTone.launcher.plist.

Contributing

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 assertions

Please run make selftest before opening a pull request that touches the engine.

Licence

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

About

Automatically turn off True Tone (and optionally Night Shift) while video plays on macOS. A tiny, native menu bar app for colour-accurate viewing. Universal — Apple silicon + Intel.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages