DisplayCAL Profile Not Applied After Reboot (macOS Fix)

You calibrate your display, the profile applies perfectly, then you log out, reboot, log back in, and your calibration is gone. The screen looks uncalibrated again. This is a real, confirmed bug in DisplayCAL-py3 on macOS, reported as GitHub issue #392.

Symptoms

The pattern from the issue report is very specific:

  • You run a calibration in DisplayCAL and apply it to the current user. It works.
  • You log out of macOS (or restart the Mac) and log back in.
  • The profile is no longer applied. The display looks as if it was never calibrated.
  • Re-applying manually in DisplayCAL works again, until the next logout.

Reported environment: macOS Sonoma 14.6.1, DisplayCAL-py3 3.9.12 installed from the wheel, Python 3.11, ArgyllCMS 3.1.0. If your setup matches, this page is for you.

Why It Happens

DisplayCAL applies calibration in two parts: the ICC profile (characterization data) and the video LUT (the correction loaded into the graphics card, sometimes called vcgt). The profile file stays on disk, but the video LUT lives in the GPU and is wiped on logout and reboot. Something has to reload it at every login, normally DisplayCAL’s profile loader. On macOS, the loader does not reliably start at login for some users, so the LUT is never restored.

Fix: Re-Apply the Profile Automatically at Login

Attribution: the steps below are the workaround reported by a user in issue #392, not an official fix. It uses ArgyllCMS’s own dispwin tool, the same program DisplayCAL uses internally to load profiles.

Step 1. Find your profile and dispwin

Locate your saved .icc profile (check ~/Library/Application Support/DisplayCAL/storage/) and your ArgyllCMS bin folder (check ~/Library/Application Support/DisplayCAL/dl/).

Step 2. Create the reload script

Create a file such as ~/bin/display_profile.sh with this content, replacing the paths with your own:

#!/bin/sh
"/Users/YOURNAME/Library/Application Support/DisplayCAL/dl/Argyll_V3.5.0/bin/dispwin" -v -d1 -I "/Users/YOURNAME/Library/Application Support/DisplayCAL/storage/YOUR-PROFILE.icc"

Make it executable:

chmod +x ~/bin/display_profile.sh

Step 3. Create a LaunchAgent

Create ~/Library/LaunchAgents/com.displaycal.profile.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.displaycal.profile</string>
    <key>Program</key>
    <string>/Users/YOURNAME/bin/display_profile.sh</string>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Step 4. Load it and test

launchctl load ~/Library/LaunchAgents/com.displaycal.profile.plist

Now log out and back in. Your calibration should be applied automatically.

Still Not Working?

  • Check the script runs manually first. Run ~/bin/display_profile.sh in Terminal. If dispwin reports an error, fix the paths before blaming launchd.
  • Verify the profile itself is valid. Re-run a verification report after manually applying. A corrupt profile will not load no matter how you trigger it.
  • Try DisplayCAL’s own loader. Check the profile loader and autostart options in DisplayCAL. For some users the built-in loader works once re-enabled.
  • Upgrade ArgyllCMS. The issue was reported with ArgyllCMS 3.1.0; current is 3.5.0. This may help but is not a confirmed fix for this issue.
  • Follow the issue. Add your environment details to issue #392 so the maintainer can reproduce it.

Related: DisplayCAL troubleshooting hub | Quickstart guide | Profile loader guide

Frequently Asked Questions

Why does DisplayCAL apply the profile fine but lose it after reboot?
DisplayCAL’s profile loader runs in your user session. On macOS, if the loader does not start automatically at login, or the system resets the display state, the calibration (video LUT) is not re-applied. This is the exact behavior reported in GitHub issue #392.
Is the launchd workaround safe?
It runs ArgyllCMS’s own dispwin tool with your saved profile, the same operation DisplayCAL performs when you install a profile. It was reported by a user in issue #392 and worked for them. Keep a backup of your .icc file before trying.
Does this affect Windows or Linux?
This specific report is macOS-only. On Windows, use DisplayCAL’s profile loader autostart option; on Linux, display managers typically restore the profile via colord.
Will upgrading DisplayCAL fix it?
Issue #392 was reported against 3.9.12 and is still open. Upgrading to 3.9.19 is still worthwhile for other macOS fixes, but do not assume it resolves this. Test after upgrading.