Display Calibration Backupper v0.1.1.1 (for a lack of a good name)
(Doesn’t actually backup yet, just fixes databases)
Download HERE Proof-of-Concept, NOT FOR PRODUCTION USE!
More information in post #5
As I wanted to install Windows 10 Pro from my own key and to keep the color calibration I had to find a way to restore the calibration on new installation. As I explain below, it’s reasonably easy when you know how CalMAN Client stores calibration data and recognizes the monitor, wasn’t quite as easy when I was figuring it out This method is also applicable for when monitor instance ID changes for any other reason.
The METHOD boils down to following: Replace old monitor pnpID in MonitorsDB.2.3.sdf with one from new Windows installation.
Here is a not so newb friendly step by step example execution of the method
MonitorsDB.2.3.sdf from the original installation (from “C:\ProgramData\SpectraCal\CalMAN Client 3\data”)
Before you begin, I want to say that don’t be afraid trying out things if you’re not certain of a number or something, as long as you have a copy of the MonitorsDB somewhere safe, the calibration can be restored. And you can always try again.
First we’ll need a new installation and some tools to do database editing. Yes, CalMAN Client stores calibration data in SQL CE 4.0 database, with no password protection, which is awesome for us.
- Install Windows (obviously)
- Install CalMAN Client https://calman.spectracal.com/calman-client-3-download.html
- Install LINQPad 5 http://www.linqpad.net/download.aspx
- Install SQL Server Compact 4.0 SP1 Runtime https://www.microsoft.com/en-us/download/details.aspx?id=30709
Next we need to find out the new monitor pnpID
- Windows+R --> devmgmt.msc
- Monitors --> Generic PnP Monitor --> Properties --> Details
- From Property dropdown menu select “Device instance path”
- pnpID is the part after “DISPLAY\SHP1494” for example “4&1493a664&0&UID265988”
Now we connect to the database.
- Close the CalMAN Client, make sure it’s closed (task manager --> background processes)
- Copy the MonitorsDB with calibration data back to “C:\ProgramData\SpectraCal\CalMAN Client 3\data”
- Open LINQPAD
- Click add connection --> select Build data context automatically, default (LINQ to SQL) --> next
- select provider SQL CE 4.0 and attach database file “C:\ProgramData\SpectraCal\CalMAN Client 3\Data\MonitorsDB.2.3.sdf”
Now we connect to the database
- In query part of LINQPad set Language as SQL and connection as MonitorsDB
Now we edit the db.
- First we list profiles to determine which monitorID is actually calibrated.
- In query input “select * from ICCs” and press execute (green play button)
- Results windows should open and list profiles.
- Find first ICC_DataID with date after 11/28/2017 (most likely 6)
- Note the ICC_DataID and run query “select * from Profiles”
- From that result find ICC_DataID you noted and note the CreatedMonitorID from same row (most likely 3)
- next run query “select * from Monitors”
- Here you see the old pnpID on the row with same monitorID as the CreatedMonitorID from last step, we will change the pnpID to new one we found earlier.
- Run query “UPDATE Monitors SET pnpid=‘NEW_PNP_ID_HERE’ WHERE MonitorID=CREATED_MONITOR_ID_HERE”
- There is no confirmation, check with query “select * from Monitors”, it should have new pnpID on monitorID you entered.
- Check if there are other rows with same id.
- IF YES, we need to delete those with “Delete from Monitors where MonitorID=1”
And that’s it. Open CALMAN Client and you should be able to change between profiles and see the change.
It would be ideal if the color profile backup and restoration could be built into a “online service” with client program. However, this will take time and effort, so I decided to make the method known to the community in the mean time.
Anyways, if you have any questions, please shoot, I’ll update the “tutorial” when I find time to do so.
Also, I’d like to take a look at few more monitor profiles, so I’d appreciate it if few guys could pm me theirs.