{"id":19639034,"url":"https://github.com/timsutton/customdisplayprofiles","last_synced_at":"2025-09-26T07:32:08.471Z","repository":{"id":9939606,"uuid":"11955765","full_name":"timsutton/customdisplayprofiles","owner":"timsutton","description":"A command-line utility for setting ColorSync profiles for connected displays on OS X.","archived":false,"fork":false,"pushed_at":"2022-10-04T21:48:58.000Z","size":29,"stargazers_count":67,"open_issues_count":2,"forks_count":9,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-01-11T07:07:03.987Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"basecamp/bc3-integrations","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timsutton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-08-07T17:16:59.000Z","updated_at":"2024-10-28T18:30:00.000Z","dependencies_parsed_at":"2022-09-13T14:50:49.012Z","dependency_job_id":null,"html_url":"https://github.com/timsutton/customdisplayprofiles","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timsutton%2Fcustomdisplayprofiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timsutton%2Fcustomdisplayprofiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timsutton%2Fcustomdisplayprofiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timsutton%2Fcustomdisplayprofiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timsutton","download_url":"https://codeload.github.com/timsutton/customdisplayprofiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234296428,"owners_count":18810001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T12:43:52.194Z","updated_at":"2025-09-26T07:32:08.182Z","avatar_url":"https://github.com/timsutton.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# customdisplayprofiles\n\nThis is a simple command-line Python script that can check, set or unset a custom ColorSync ICC profile for a given display. It uses PyObjC and the most current (as of 2013) ColorSync API to do this.\n\n## Installation\n\nYou can either **(1)** download a pre-compiled executable, or **(2)** execute the script directly with a Python runtime you have available.\n\n### 1. Pre-compiled executable\n\nDownload the latest version from the [Releases](https://github.com/timsutton/customdisplayprofiles/releases/latest) section, make the file executable and run it. The executable contains the necessary runtime and libraries, bundled via [PyInstaller](https://pyinstaller.org/).\n\n### 2. Execute the script directly\n\nClone or download this repo (or just the single `customdisplayprofiles` script) and execute it directly. You'll also need to have the [PyObjC PyPi package](https://pypi.org/project/pyobjc/) installed and available in your Python runtime's environment:\n\n`pip3 install pyobjc`\n\n\n## Usage\n\n### Setting a profile\n\nUse the `set` action to set a profile (as the user running the command) for the main display.\n\n`customdisplayprofiles set /path/to/profile.icc`\n\nUse the `--display` option to configure an alternate display.\n\n`customdisplayprofiles set --display 2 /path/to/profile.icc`\n\nIf you want to get a list of displays with their associated index:\n\n`customdisplayprofiles displays`\n\n\n### Configurable user scope\n\nThe `--user-scope` option allows you to define whether the profile will be applied to the \"Current\" or \"Any\" user domain, which may allow you set this preference as a default for all users:\n\n`customdisplayprofiles set --user-scope any /path/to/profile.icc`\n\nSpecifying `any` here requires root privileges, as it will write these preferences to a system-owned location.\n\nMore information on the user preferences system on OS X can be found [here](https://developer.apple.com/library/mac/#documentation/userexperience/Conceptual/PreferencePanes/Concepts/Managing.html) and [here](http://developer.apple.com/library/ios/#DOCUMENTATION/MacOSX/Conceptual/BPRuntimeConfig/Articles/UserPreferences.html).\n\n\n### Retrieving the current profile\n\nThe full path to an ICC profile can be printed to stdout:\n\n`customdisplayprofiles current-path`\n\nThis could be useful if you want to check the current setting using an idempotent login script or a configuration framework like Puppet.\n\n`current-path` will output nothing if there is no profile currently set for that display.\n\n\n### Full details\n\nA more complete dictionary of information can be printed with the `info` action:\n\n\u003cpre\u003e\u003ccode\u003e➜ ./customdisplayprofiles info\n{\n    CustomProfiles =     {\n        1 = \"file://localhost/Library/Application%20Support/Adobe/Color/Profiles/SMPTE-C.icc\";\n    };\n    DeviceClass = mntr;\n    DeviceDescription = iMac;\n    DeviceHostScope = kCFPreferencesCurrentHost;\n    DeviceID = \"\u003cCFUUID 0x7fb6204abea0\u003e 00000610-0000-B005-0000-0000042C0140\";\n    DeviceUserScope = kCFPreferencesAnyUser;\n    FactoryProfiles =     {\n        1 =         {\n            DeviceModeDescription = iMac;\n            DeviceProfileURL = \"file://localhost/Library/ColorSync/Profiles/Displays/iMac-00000610-0000-B005-0000-0000042C0140.icc\";\n        };\n        DeviceDefaultProfileID = 1;\n    };\n}\n\u003c/pre\u003e\u003c/code\u003e\n\n\n## Sample wrapper script\n\nThere's a (very simple) example script in the [sample-helper-login-script](https://github.com/timsutton/customdisplayprofiles/blob/master/sample-helper-login-script/configure_display_profiles.sh) folder, which demonstrates how you could wrap this utility in an environment where you don't manage the ICC profiles directly. Someone calibrating a display would only need to drop the profile in a known folder location, indexed by display number, and at login for all users, the desired color profiles are configured for each online display.\n\n\n## Building a pkg\n\nYou might want to build a pkg to deploy the script to one or more Macs in your environment. To create a pkg so, you can run the `make` command in the repo folder. \nThe included Makefile will be used to create a package which will install `customdisplayprofiles` in `/usr/local/bin`\nIf you'd like to install the script at a different path, you can override the default when creating the package with  \n`make INSTALLPATH=/path/to/installfolder`\n\nIf you're also using munki, there's a `make munki` command to import the package into your munki repository.\n\n```\n# first run make to create the pkg\nmake\n\n# Then, import the package into munki\nmake MUNKI_REPO_SUBDIR=util munki\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimsutton%2Fcustomdisplayprofiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimsutton%2Fcustomdisplayprofiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimsutton%2Fcustomdisplayprofiles/lists"}