Skip to content

Releases: eoyilmaz/displaycal-py3

Nightly Builds

Nightly Builds Pre-release
Pre-release

Choose a tag to compare

@eoyilmaz eoyilmaz released this 28 Feb 01:36
5d6d80e

🌙 The nightly builds now include the Qt migration work, the future of DisplayCAL. Qt is a modern, cross-platform UI toolkit that's more capable and reliable than wx.

🧪 To try the Qt version, run DisplayCAL and go to Menu -> Options -> Advanced -> Use Qt user interface (experimental). DisplayCAL will restart in Qt mode, and the setting is remembered for future runs.

🚧 As usual, these builds track the latest development version (develop branch), including fixes on top of the latest release, and most likely a few bugs too!

Warning

🍎 On macOS, after installing DisplayCAL you need to run the following in Terminal:

xattr -dr com.apple.quarantine /Applications/DisplayCAL

DisplayCAL 3.9.19

Choose a tag to compare

@github-actions github-actions released this 13 Jul 14:14

A quick follow-up to 3.9.18, this release adds Linux AppImage/Flatpak packages and fixes 20 issues, mostly stability and crash fixes surfaced by users right after the last release, plus several latent Python 3 bytes/str bugs found during a code audit.

Warning

In MacOS, after installing DisplayCAL you need to run the following in Terminal:

xattr -dr com.apple.quarantine /Applications/DisplayCAL

✨ Highlights

  • AppImage and Flatpak packages are now built and published alongside the existing DEB/RPM installers. (#232 by @eoyilmaz)

🚀 Improvements

  • DEB/RPM postinstall now prints progress instead of running silently, installs prebuilt wxPython wheels from the wxPython extras index, and pulls in the dbus-python build dependencies, fixing installation on Ubuntu 24.04/26.04. (#805 by @eoyilmaz)

🐛 Bug Fixes

🧩 General

  • Fixed displaycal.ini becoming mangled and ballooning to gigabytes in size, eventually crashing the app from memory exhaustion. Config writes are now atomic and lock-protected, oversized config files are quarantined instead of parsed, and the config is explicitly read as UTF-8 so mismatched locale codepages can no longer corrupt it further. (#828, #828 by @eoyilmaz)
  • Fixed several pip-installed console scripts (displaycal-vrml-to-x3d-converter, displaycal-scripting-client, displaycal-eecolor-to-madvr-converter and their console variants) crashing with AttributeError because their entry-point functions didn't exist. (#797 by @eoyilmaz)
  • Fixed invalid filename characters from surviving into color profile names. (#819 by @eoyilmaz)
  • Fixed unsupported format string passed to tuple.__format__ error when generating a cube 3D LUT. (#827 by @eoyilmaz)
  • Fixed a TypeError crash and incorrect CTI3 file-type comparisons in measurement/profile handling caused by leftover Python 2-to-3 bytes/str bugs. (#811 by @eoyilmaz)
  • Fixed the profile.unsupported dialog showing a raw bytes value (e.g. b'mntr') instead of the decoded text, across 12 sites. (#815 by @eoyilmaz)
  • Fixed three latent bytes/str Python 3 port bugs in load_cal_handler/import_session_archive_producer. (#817 by @eoyilmaz)
  • Fixed four more bytes/str bugs that made load_cal_handler's 3D LUT/profile B2A metadata-restore block unreachable dead code. (#820 by @eoyilmaz)
  • Fixed a TypeError from str regex patterns matched against bytes content in the ReShade/MasterEffect 3D LUT install patchers. (#808 by @eoyilmaz)
  • Fixed an Event is undefined error when the number of worker threads is 1. (#799 by @lexxxel)

🍎 macOS

  • Fixed a crash when the first measurement taken after launch is a Measurement Report or Colorimeter Correction. (#822 by @ethanbrookins)
  • Fixed an infinite black-screen ping-pong across multiple displays during VideoLUT recovery, by reloading the clobbered LUTs via CoreGraphics from a single persistent process instead of spawning dispwin. (#824 by @eoyilmaz)

🪟 Windows

  • Fixed DisplayCAL.mscms.manager's logger writing to sys.stderr, which made the frozen windowed .exe falsely show an "Errors in..." dialog on every close even though nothing had actually failed. (#804 by @eoyilmaz)

🙏 Thanks

Thanks to everyone who contributed to this release, including @lexxxel for their first contribution, and @ethanbrookins.

Full Changelog: 3.9.18...3.9.19

DisplayCAL 3.9.18

Choose a tag to compare

@github-actions github-actions released this 05 Jul 21:23

It's been almost 10 months since 3.9.17, and this release reflects that: 72 merged pull requests, 524 commits, and 104 closed issues worth of work, adding support for a new colorimeter, ArgyllCMS 3.5.0 compatibility, and a large batch of accumulated stability and accuracy fixes across Windows, macOS, and Linux.

Warning

In MacOS, after installing DisplayCAL you need to run the following in Terminal:

xattr -dr com.apple.quarantine /Applications/DisplayCAL

✨ Highlights

  • New instrument support: Datacolor Spyder2024 (SpyderX2). (#620 by @g4bri3lDev)
  • ArgyllCMS 3.5.0 support, including the new spectral plot (specplot) option. (#645 by @jaminmc)
  • The simplified splash screen (previously macOS-only) is now available on all platforms, fully translated. (#787 by @ethanbrookins, #791 by @eoyilmaz)
  • Windows ARM64 builds (#741, #747 by @eoyilmaz) and Linux DEB/RPM installer packages (#739 by @eoyilmaz) are now available.

🚀 Improvements

  • Improved Web @ localhost remote calibration: fixed freezing/retry issues, corrected color accuracy shown in the browser, and improved handling when multiple devices are connected. (#647 by @jaminmc)
  • Automatic retry when a spectrophotometer's ambient light diffuser interrupts a measurement. (#733 by @eoyilmaz)
  • Added a warning in the measurement report when the display's actual white point drifts noticeably from the profile's target. (#761 by @eoyilmaz)
  • You can now sort the colorimeter corrections table by clicking its column headers. (#752 by @eoyilmaz)
  • Sped up 3D LUT (B2A) table generation. (#781 by @eoyilmaz)
  • Your saved "2012" observer settings are now migrated automatically to the "2015" naming used by ArgyllCMS 3.4+, no action needed. (#760 by @eoyilmaz)
  • ArgyllCMS downloads and version checks now use a new, more reliable GitHub-hosted source. (#750 by @eoyilmaz)

🐛 Bug Fixes

🧩 General

  • Fixed profiles sometimes crushing near-black shadow detail together. (#724 by @eoyilmaz)
  • Fixed a startup crash some users hit right after launching the app. (#726 by @eoyilmaz)
  • Fixed a spurious warning and a crash in the 3D VRML view/export. (#725, #783 by @eoyilmaz)
  • Fixed profile creation failing on machines with more than 60 CPU cores/threads. (#717 by @eoyilmaz)
  • Fixed corruption and an overly strict white point check that could affect XYZ LUT-based profiles. (#721 by @Youfffeng)
  • Fixed duplicate "please calibrate your instrument" prompts. (#765 by @eoyilmaz)
  • Fixed the app losing track of colorimeter correction measurement progress after a crash. (#767 by @eoyilmaz)
  • Fixed saving the log file so it no longer gets corrupted. (#744 by @eoyilmaz)
  • Fixed an error that could occur when applying calibration/profile associations. (#754 by @eoyilmaz)
  • Fixed a crash when a profile's filename included the %crc32 placeholder. (#777 by @eoyilmaz)
  • Fixed uploading/checking colorimeter corrections online. (#789 by @eoyilmaz)
  • Fixed 3D LUT settings being unexpectedly reset when creating a new profile. (#655 by @Adam-Color)
  • Fixed profiles not reloading correctly after changing certain settings. (#678 by @jaminmc)
  • Fixed the testchart editor grid on newer Python versions (3.10+). (#677 by @jaminmc)
  • Removed excessive debug output that could slow things down. (#699 by @Adam-Color)

🪟 Windows

  • Fixed build/compatibility issues on Python 3.13+, including Windows color management integration. (#646 by @jaminmc)
  • Fixed the ARM64 installer refusing to install on ARM64 systems. (#747, #748 by @eoyilmaz)
  • Fixed the monitor name showing as a generic "Plug and Play" device instead of its real model name. (#740 by @eoyilmaz)
  • Fixed the on-screen color patch being positioned incorrectly at display scaling above 100%. (#743 by @eoyilmaz)
  • Fixed gamut coverage not being displayed, caused by a file path bug. (#746 by @eoyilmaz)
  • Fixed oversized "fancy" text rendering at certain scaling levels. (#755 by @DamoyY)
  • Fixed a Profile Loader crash when monitors are reconnected or rearranged. (#763 by @eoyilmaz)
  • HDR calibration profiles are no longer incorrectly forced while the display is in SDR mode; HDR detection is now more reliable on Windows 11 22H2+. (#766, #771 by @eoyilmaz)
  • Fixed saving a profile with SMPTE 2084 (HDR PQ) roll-off causing an error. (#716 by @eoyilmaz)

🍎 macOS

  • Fixed a black screen appearing during calibration on some Macs. (#723 by @eoyilmaz)
  • Fixed a crash on quit on macOS Sonoma 14.6. (#681 by @eoyilmaz)
  • Fixed bundled tool apps (e.g. the 3D LUT viewer) sometimes launching the wrong app. (#722 by @eoyilmaz)
  • Fixed app signing so all bundled tool apps are properly signed. (#684 by @eoyilmaz)
  • Fixed a crash when creating a colorimeter correction. (#732 by @eoyilmaz)
  • Fixed a crash when saving the log window on certain macOS versions. (#759 by @eoyilmaz)
  • Fixed display names showing as generic instead of the real monitor model on Apple Silicon Macs and macOS Tahoe. (#774 by @eoyilmaz)

🐧 Linux

  • Fixed display names showing as generic "Monitor" instead of the real model name. (#762 by @eoyilmaz)
  • Fixed the interactive display adjustment step hanging under Wayland. (#768 by @eoyilmaz)
  • Added a clearer error message when a required wxPython system library is missing. (#745 by @eoyilmaz)

🙏 Thanks

Thanks to everyone who contributed to this release, including first-time contributors @g4bri3lDev, @jaminmc, @Youfffeng, and @DamoyY.

Full Changelog: 3.9.17...3.9.18

3.9.17

Choose a tag to compare

@eoyilmaz eoyilmaz released this 11 Sep 10:48

Warning

In MacOS, after installing DisplayCAL you need to run the following in Terminal:

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

Release Notes

  • [ALL] Added support for ArgyllCMS 3.4.0+ in regards of the update on the observer names of CIE 2012 2° and CIE 2012 10° being CIE 2015 2° and CIE 2015 10°. Depending on the ArgyllCMS version the old names are still going to be accessible through the UI.
  • [ALL] Fixed an issue related to the black point correction being applied even if it is disabled introduced in DisplayCAL 3.9.15.
  • [ALL] Fixed dispread arguments not being added to argument list by @Anulap
  • [ALL] Fixed unnecessary argument quoting in DisplayCAL.wexpect.spawn_windows.__init__() by @eoyilmaz
  • [ALL] Fixed IndexError in a string formatting in DisplayCAL.worker by @vastunghia
  • [Windows] Fixed the issues related with displays with scaling value more than 150%, where DisplayCAL errors out on startup by @eoyilmaz
  • [Windows] Fixed Profile Loader "Identify Monitor" and "Exceptions" dialog crash by @Anulap
  • [Windows] Fexed output level reporting for and some other issues related to madVR by @eoyilmaz

What's Changed

New Contributors

Full Changelog: 3.9.16...3.9.17

3.9.16

Choose a tag to compare

@eoyilmaz eoyilmaz released this 04 May 16:29

Warning

Under Windows do not set your display scaling to anything higher than 150% or DisplayCAL will not start.

This has now been fixed in the development version.

Warning

In MacOS, after installing DisplayCAL you need to run the following in Terminal:

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

Release Notes

  • [Windows] Fixed the WPARAM error message on the Profile Loader.
  • [Windows] Fixed the wxAnyButton::doSetBitmap() related error message that occured on startup.
  • [Windows] Fixed ArgyllCMS USB device driver installation procedure.
  • [Windows] Fixed RecursionError: maximum recursion depth exceeded error which originated to DisplayCAL.taskscheduler.Task.__str__() method.
  • [macOS] Fixed the shifted gamma of the screen captured background of the splash screen or made it a better than before.
  • [Linux] Made it clear that the logged exception is for a handled exception in DisplayCAL.worker.Worker.exec_cmd() related to DBus.
  • [Linux] Fixed tests running on linux + arm64.
  • [ALL] Dropped Python 3.8 support as it has reached end-of-life on October 2024.
  • [ALL] Removed residual code and dependencies required for Python 2 support (six, enum34 etc.).
  • [ALL] Added tests for wxPython=4.2.3 on all platforms.
  • [ALL] Update recommended wxPython version to 4.2.0 to get rig of the messages saying 4.2.1 is not supported anymore, which is not true.
  • [ALL] Fixed many string formatting issues introduced with 3.9.15.
  • [ALL] Fixed DisplayCAL.icc_profile.ICCProfile.load()when all the data has already been read.
  • [ALL] Fixed AttributeError: NoneType object has no attribute 'listening' error originated to DisplayCAL.wxwindows.BaseApp.query_and_session() method.
  • [ALL] Fixed DisplayCAL.icc_profileICCProfile.get_info() to correctly identify the white point illuminant tag for the key wtpt.
  • [ALL] Added the PVA term in any tech names that mentions VPA in display.tech section for all language files to match ArgyllCMS tech names output.
  • [ALL] Replaced the locale.getdefaultlocale() call in DisplayCAL.config with locale.getlocale() as the original function is getting deprecated in Python 3.9.15.
  • [ALL] Moved most of the ArgyllCMS related utility functions from DisplayCAL.worker to DisplayCAL.argyll.
  • [ALL] Updated DisplayCAL.argyll.get_argyll_version_string() to first try to get the ArgyllCMS version from the log.txt instead of running any utility functions to make it run faster, especially under macOS. It will fallback to the normal method if it can't retrieve the version from the log.txt.
  • [ALL] Renamed a couple of the modules to comply with PEP8 rules:
    • DisplayCAL.ICCProfile is now DisplayCAL.icc_profile.
    • DisplayCAL.CATS is now DisplayCAL.cats.
  • [ALL] Capitalized the enum variables in `DisplayCAL.icc_profile module.
  • [ALL] Fixed the generation and display of the meta.prefix tag of the ICCProfile.
  • [ALL] Fixed DisplayCAL.worker_base.Xicclu.close() to properly handle error output as bytes.
  • [ALL] Added tox as a development requirement.
  • [ALL] Updated the build target in make workflow to use uv.
  • [ALL] Fix update_menus() and install_argyll_instrument_conf() method of DisplayCAL.display_cal.MainFrame class.
  • [ALL] Rename package from DisplayCAL to displaycal in pyproject.toml to comply with PyPI naming conventions.

What's Changed

New Contributors

Full Changelog: 3.9.15...3.9.16

3.9.15

Choose a tag to compare

@eoyilmaz eoyilmaz released this 02 Apr 19:08

WARNING

In MacOS, after installining DisplayCAL you need to run:

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

Release Notes

Big Items:

  • Windows version should now work without a major issue. So, the previous problems about not being able to run ArgyllCMS executables has been resolved, and paths containing empty spaces are handled correctly.
  • The dependency to the RealDisplaySizeMM has been removed. So DisplayCAL doesn't require any C-Extensions to be compiled and this makes it easier to install on different OSes.
  • Added CI GitHub workflow for Windows.
  • Lots of code refactoring and cleanup many thanks to @oldgithubman for their hard work.
  • As it was getting harder to test for wxPython 4.1.1, the minimum wxPython version that we test DisplayCAL with has been upgraded to 4.2.0.
  • CI GitHub tests run much faster under Linux (45-50 minutes vs 6-7 minutes) now as the tests are now using the pre-compiled wheels from wxPython website.
  • Updated DisplayCAL.lib.agw from 0.9.1 to 0.9.7 from wx.lib.agw and introduced a lot of code refactoring and TypeHints on top of the original source.
  • DisplayCAL development is now using the Rust tools for package management and linting. So, uv is the main package manager instead of pip and ruff replaces black and flake8.
  • Removed setup.cfg, DisplayCAL is now fully using pyproject.toml for configuration. Unfortunately, we are still depending on the setup.py.

Auto Generated Notes

New Contributors

Full Changelog: 3.9.14...3.9.15

3.9.14

Choose a tag to compare

@eoyilmaz eoyilmaz released this 16 Oct 00:23

WARNING

In Windows install DisplayCAL under C:\DisplayCAL instead of C:\Program Files\DisplayCAL. There seems to be an issue if the path contains empty spaces.

WARNING

In MacOS, after installining DisplayCAL you need to run:

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

Release Notes

Big Items:

  • Added MacOS package along with the updated Windows Installer (see the Warning above).
  • Added Python 3.13 support for Linux/MacOS. Windows will support Python 3.8-3.11 for now.
  • Fixed Ubuntu installation errors complaining about missing files.
  • Fixed fail to open calibrate window under Debian.
  • Updated default ArgyllCMS to 3.3.0 and latest version of ArgyllCMS will be parsed through www.argyllcms.com.
  • Improved/added numPy 2.0 compatibility.
  • Under MacOS it is now possible to install the profile system-wide (fixing lock/unlock profile shifts on XDR displays, logout/login is still problematic).

Auto Generated Notes

New Contributors

Full Changelog: 3.9.13...3.9.14

3.9.13

Choose a tag to compare

@eoyilmaz eoyilmaz released this 10 Oct 11:33

Release Notes

This release introduces lots of fixes, especially for Windows. The big items are:

  • We now have a Windows Installer. It might not fully work out of the box as we had very limited testing with both the installer and the frozen executables.
  • Updated installation instructions with a cleaner and more understandable format for all OSes.
  • Python 3.12 should now work fine under Linux and MacOS with wxPython 4.2.2. But, Windows is still problematic.
  • Updated default config so that the default profile name doesn't contain any empty spaces.
  • Updated Argyll CMS from V3.1.0 to V3.2.0 (v3.3.0 is already released, so it is left to the users to download).
  • And lots of fixes here and there, check the full changelog for details.

New Contributors

PyPI: https://pypi.org/project/DisplayCAL/3.9.13/
Full Changelog: 3.9.12...3.9.13

3.9.12

Choose a tag to compare

@eoyilmaz eoyilmaz released this 19 Mar 22:39
2c67f1c

Release Notes

This release introduces lots of old and new, small and big bug fixes. Some notable changes are:

  • Made improvements to Windows and MacOS builds.
  • Fixed Resolve patch generator.
  • Fixed ArgyllCMS download function.
  • Fixed MacOS menu disappearing after measurement window is shown.
  • Pipx should now be able locate lang files.
  • Fixed setup tools fail on upgrade for nixpkgs.
  • Fix Windows build and runtime on Python 3.11.4.
  • Fixed lock file mishandling on Windows.
  • Allow py2app to build a MacOS app
  • Implemented a stable sort_by_L which falls back to a then b sort if L is equal.

PyPI: https://pypi.org/project/DisplayCAL/3.9.12/

Contributions

This release's contributers are: Erkan Ozgur Yilmaz, Radosław Szkodziński, Vladislav Sharapov, Matt Khan, Patrick Zwerschke

Changes per contributor are as follows:

Erkan Ozgur Yilmaz

  • Fixed #282 (not a real fix but an improvement).
  • Fixed #283
  • Fixed #61
  • Fixed #302
  • Fixed a regular expression in DisplayCAL.worker module that might be the root cause of #302.
  • Updated utils.patch_consumer so it stays on top.
  • Optimized the utils.patch_consumer so that it uses 16bit colors (but the style sheet uses 8bit).
  • Added utils.patch_consumer to test Resolve patch generator.
  • Added help make target that displays all available targets.
  • Fix for DisplayCAL.worker_base.parse_argyll_version_string() when the input is a bytes object.
  • Fixed BorderGradientButton style for MacOS, which is used as the main button ("Calibrate & Profile" etc.).
  • Updated the term "Authentification" to a more common one of "Authentication".
  • Fixed #291
  • Fixed #303
  • Fixed #137
  • Fixed #310
  • [#318] Fixed a bug that is causing one empty line getting printed after each command output. The output is now better matching vanilla Argyll outputs.
  • [#318] Fixed display_cal.MeasurementFileCheckSanityDialog for python 3.11+.
  • [#318] Fixed StartupFrame test for MacOS.
  • [#318] Introduced some quality of life improvements.
  • [#318] Added {pydir}/share to data dirs.
  • [#320] Did some unnecessary formatting updates while searching for a possible bug.
  • Fixed #271
  • #261 setuptools build fails on upgrade for nixpkgs (#272)
  • Updated Makefile workflow, it should now be easier to build/install/run DisplayCAL.
  • Fixed "Manually Setup" section link.
  • Update Makefile
  • Updated Makefile new-release target to use the VERSION variable for the twine command.

Radosław Szkodziński

  • Fix Windows build and runtime on Python 3.11.4 (#312)
  • Fixes:
    • Runtime on Python 3.11
    • Setuptools, tested with 3.11.4
    • Missing pywin32 dependency
    • Lock file mishandling on Windows
    • Fix a mistake in version handling code

Vladislav Sharapov

  • allow py2app to build a MacOS app (#277)
  • Remove commented out block

Matt Khan

  • untethered mode should take multiple white point measurements at the start and should only update the specific sample not all samples with the same RGB
  • fix for #276 (#278)
    • correct bad string/bytes comparison which was preventing correction of gamma applied to a measurement report
    • workaround apparent wx regression with honouring hidden when set in xrc document #276
  • reformat using black
  • Make maximise lightness diff sort stable
  • minor code cleanup following pr comments
  • implement a stable sort_by_L which falls back to a then b sort if L is equal
  • demonstration of sort problem
  • fix python3 (str/bytes) compatibility errors in untethered mode
  • fix py3 compatibility problems in madtpg net
  • csvwriter requires w mode in python3
  • make sure measurement data is copied to the joined output, fixes #224
  • further py2-3 migration fixes around byte handling when handling madvr 3dlut
  • fix python3 (str/bytes) compatibility errors in untethered mode

Patrick Zwerschke

  • updated test workflow
  • removed manual install of attrdict3 from workflow
  • removed libreadline-gplv2-dev from packages.list
  • updated test workflow to wxpython-4.2.1
  • removed unnecessary wxpython-4.2.0 requirement (attrdict3)
  • updated workflow to accommodate new branch restrictions

3.9.11

Choose a tag to compare

@eoyilmaz eoyilmaz released this 05 Jun 17:23

Release Notes

The release notes will updated properly in the future. You can use the commit messages to deduce the information.

Contributions

Erkan Ozgur Yilmaz
- Fixed new-release target in Makefile to do a pull before merging the develop branch.
- Fixed main branch name in Makefile.
- Updated Makefile to introduce new targets.
- Updated string formatting on several places in wxProfileInfo.
- Fixed colorimeter_correction_web_check_choose() to work properly for fractional scale.

Patrick Zwerschke
- Revert "fix #231 (#237)" (#239)
- This reverts commit 59c456c that accidentally was pushed to main branch
- Updated actions to use Node.js 16 (#220)
- updated restrictions for max python version to run with python 3.11 (#217)
- Update test workflow for python 3.11 (#215)
- added python 3.11 to test workflow
- catch FileNotFoundError in module defaultpaths

Matt Khan
- allow untethered window to open

Hubert Figuière
- Fix appdata to validate for flathub (#253)
- Fix appdata to validate for flathub

filmmakerto
- fix #231 (#240)
- Fixes #231
- fix #231 (#237)

James Addison
- Cleanup: remove no-longer-referenced get_known_folder_path, UserDirs class (#227)
- Cleanup: remove no-longer-referenced defaultpaths.get_known_folder_path method, and associated UserDirs class

sdy623
- Add feature: Add a gamut coverage information in Profile Information page

stativ
- Fix incorect bytes and string comparison when reading a .ti3 file (#221)