An open collection of tools and experiments for rendering wide-gamut scene-linear data into an image for an SDR or HDR display device.

Overview

Open Display Transform

An open collection of tools and experiments for rendering wide-gamut scene-linear data into an image for an SDR or HDR display device.

All tools are available as a node for Nuke or Nuke Non-Commercial, and as a DCTL for Resolve Studio. Matchbox shaders are in development.

Display Transforms

  • OpenDRT
    A simple and robust display transform based on CIE 2006 LMS and the Michaelis-Menten Equation.
    Neutral appearance. Color preserving where possible, faithful to input image data.
  • rgbDT
    A classic per-channel display-transform. Uses a custom rendering gamut designed to handle input colorimetry beyond the bounds of the spectral locus without sacrificing image appearance.
  • JzDT
    Another experiment using the max(r,g,b) norm and the JzAzBz LMS space.

Look Transforms

A collection of tools designed to creatively adjust image appearance.

Documentation

There is a collection of documentation available on the wiki.

Issues
  • Nayatani_HK.dctl with DR17/ATI/W10

    Nayatani_HK.dctl with DR17/ATI/W10

    Dear Jed,

    Thank you in advance for your work/updates.

    The first and the newer Nayatani_HK.dctl are not working in Windows 10 with Resolve 17.2.2 and ATI Radeon VII.

    Propably it has a syntax in code that is not supported by ATI GPU.

    Gamut Compress 0.7 had a similar issue, but you/Nick have solved it: https://github.com/jedypod/gamut-compress/issues/4

    Thank you.

    Ted.

    opened by ConnecTEDDD 4
  • DCDM Inverse ODT

    DCDM Inverse ODT

    Hi! Here is the example of what I was talking about. Even with rec709 limited gamut, XYZ image can't be completely used as an input for DCDM. And even if a hard clip the input image far from 0 and 1 values.

    I've used Rec709 curve because if I use power law gamma or just Linear, the image that goes into Inverse ODT doesn't contain colors that cause this artifact.

    01

    02

    03

    And here is what happens if I replace Inverse ODT and ODT by each other: 04

    opened by antonmeleshkevich 3
  • Dolby presets not preserving red objects hue

    Dolby presets not preserving red objects hue

    It's most noticeable with 100 nit vs others. But with others it's also noticeable. The more nits - the more red jacket shifts to the orange. Not sure if this an issue or it behaves as it should. And I apologize for the giant images :) It's probably because they are vertical.

    Screenshot 2021-11-04 053037

    Screenshot 2021-11-04 053051

    Screenshot 2021-11-04 053124

    Screenshot 2021-11-04 053140

    Screenshot 2021-11-04 053150

    opened by antonmeleshkevich 1
  • NotoriousSix_Vibrance - random black pixels with 'chromaticity-linear' checkbox

    NotoriousSix_Vibrance - random black pixels with 'chromaticity-linear' checkbox

    I get these artifacts with all default settings of the DCTL. But when I turn off "chromaticity-linear" they go away. And all the other look tools don't have this. Screenshot 2021-10-20 005129

    Looks like they are completely random. When I change anything prior the DCTL, they appear in random places. Does it look like a platform specific issue? I guess, you don't get this on your system.

    And not to open a new issue for just one small thing, just add it here: Is Linear Grade pivot default correct? Looks like it is far from 0.18 now.

    opened by antonmeleshkevich 1
  • Negative values are white pixels now with OpenDRT

    Negative values are white pixels now with OpenDRT

    Hi! In OpenDRT v0.0.90b2 I get this, if the image has negative values. Screenshot 2021-10-20 004110

    By the way, this is the red jacket I was talking about. Its hue is different with different "dolby" presets.

    opened by antonmeleshkevich 1
  • Inverse DRT issues

    Inverse DRT issues

    Hi! I get this when I try to inverse HDR DRTs. Looks like it turns high saturated colors into 0 in linear gamma.

    Screenshot 2021-11-22 064504

    And here is another thing, I've already asked about. But I'm not sure I understood your answer right. Is this expected and correct behavior? It is Inverse 1886 and then back to 1886. All the colors look different, even those that are low saturated.

    Screenshot 2021-11-22 064240

    Screenshot 2021-11-22 064312

    P.S. I've added OpenDRT into built-in Resolve ACES :) They've made it possible now to add custom IDT and ODT based on DCTL. Screenshot 2021-11-22 070057

    opened by antonmeleshkevich 2
Releases(v0.0.82)
  • v0.0.82(Jul 4, 2021)

    Features

    • Add input transfer function options with common camera log and log working space encodings for the Resolve DCTL.
    • Add Blackmagic Gen5 colorscience inputs: Blackmagic Wide Gamut // Blackmagic Film Gen5 Log encoding
    • Add toe compression into chroma compression factor. This naturally reduces chroma in deep shadows and helps render shadow grain more naturally. No more rainbow colors in the shadow grain.
    • Add lenscap black subtraction compensation feature. Pretty experimental but it is intended to add a small value to compensate for negative grain on input. Since OpenDRT maps 0.0 to 0.0, this helps preserve shadow detail. Disable this if manually compensating black levels while grading.
    • Add gamut compression operator to better handle extremely high purity input colors.
    • Update perceptual dechroma to use ICtCp colorspace. This biases the chromaticity-linear hue paths of the highlight dechroma and gamut compression, along perceptual hue-lines, resulting in more natural looking colors and better appearance matching between HDR and SDR outputs.

    Bug Fixes

    • Remove semicolons on parameter lines which may have caused issues with Metal on Mac.
    Source code(tar.gz)
    Source code(zip)
    OpenDRT.dctl(32.66 KB)
    OpenDRT.nk(37.39 KB)
    OpenDRT_params.dctl(30.85 KB)
  • v0.0.81(Jun 6, 2021)

  • v0.0.80(May 23, 2021)

    This is a big change with a lot of development work compared to v0.0.75. Here is a summary of the notable new features:

    Tonemap

    • Replace tonemapping function with a piecewise hyperbolic compression function with power and parabolic toe compression. See this desmos plot for details on the math. And if you're curious about other options and a verbose history of the development, check out these posts on the acescentral thread. In particular, this one and this one.
    • First pass model and presets for HDR displays

    Chroma Rendering

    • Switch to using a "weighted vector length" norm. This allows a massive complexity reduction while preserving the nice rendering features I was trying to achieve with much more complex methods before:

      • More saturated colors especially blues and reds render darker, while yellow and orange renders brighter
      • Saturation boosted along the red/blue axis while keeping magenta and yellow under control
    • Switch the rendering colorspace to Truelight LMS, described in Chromaticity coordinates for graphic arts based on CIE 2006 LMS with even spacing of Munsell colours by Richard Kirk.

    • Apply chromatic adaptation for white-point handling as LMS scales in the rendering colorspace.

    • Calculate whitepoint normalization factor based on whitepoint and output display gamut, and concatenate with other output domain scale elements

    • Add inverse transform

    • Completely rework and massively simplify InverseEOTF and EOTF nodes

    DaVinci Resolve DCTL Implementation

    Source code(tar.gz)
    Source code(zip)
    OpenDRT.dctl(13.48 KB)
    OpenDRT.nk(23.33 KB)
  • v0.0.75(Mar 21, 2021)

    • Hopefully resolve issue with oklab perceptual model by moving it into the RGB Ratios setup. Not sure why I didn't think about that before. Also it doesn't require the exposure invariant setup anymore, which seemed hacky. It should be more reversible also.
    • Move tonescale to a seperated group that happens prior to all other display rendering operations to try to compartmentalize things a bit more.
    • I still think there is a much simpler version of this model possible. There is still too much fiddling and tweaking for my taste. Need to do more experimentation...
    Source code(tar.gz)
    Source code(zip)
    OpenDRT_v0.0.75.nk(45.80 KB)
  • v0.0.72(Mar 21, 2021)

  • v0.0.70(Mar 21, 2021)

    • Remove bias on distance control
    • Rework bias on luminance control
    • Switch back to power function on path to white factor because it actually looks about the same with the rgb ratio distance control setup.
    • Still need to figure out the kinks in the perceptual setup, and I'm questioning whether it is a good design decision to have something this brittle and non-reversible in here.
    • Still need to figure out the HDR tonescale...
    Source code(tar.gz)
    Source code(zip)
    OpenDRT_v0.0.70.nk(44.37 KB)
  • v0.0.61(Mar 21, 2021)

    • I discovered that luminance weights applied directly to inverse RGB ratios results in the correct weighting, so this is now simplified a lot and looks better.
    • Refine luminance control (setup that controls luminance per hue region), to include a bias for what region of norm to remove. Put another way: darken blues and reds below a certain threshold more than values above that threshold.
    • Experiment with s-curve on distance factor, the setup which "raises" RGB ratio luminance for more saturated colors. This is a bad idea.
    • Add very rough experimental version of a perceptual hue model using OkLab. Behavior is strange for colors near achromatic. To be solved...
    Source code(tar.gz)
    Source code(zip)
    OpenDRT_v0.0.61.nk(42.77 KB)
  • v0.0.50(Mar 21, 2021)

    • Remove parameters from node because it's a bad idea to expose them for creative adjustments.
    • First draft of using luminance weights for affecting both luminance of achromatic, and as a factor to multiply into the rgb ratios
    • Not sure the luminance weights are done correctly, but the result looks better than anything I've done so far so I must be on the right track. Or maybe not.
    • Tweak exponential function which calculates path to white factor to preserve a bit more color in completely blown out highlights. Might not be necessary to go all the way to achromatic for these areas.
    Source code(tar.gz)
    Source code(zip)
    OpenDRT_v0.0.50.nk(30.64 KB)
  • v0.0.40(Mar 21, 2021)

    • Add creative whitepoint
    • Add parameters to adjust gamut volume size, and luminance, per hue. Prone to artifacts, not ideal given the complexity.
    • Multiplying the RGB ratios up is an idea that has potential.
    • There must be a better and simpler model to accomplish the same thing.
    Source code(tar.gz)
    Source code(zip)
    OpenDRT_v0.0.40.nk(41.43 KB)
  • v0.0.25(Mar 21, 2021)

    • Initial version.
    • Use exponential function for path to white factor calculation
    • Experimenting with per-hue adjustments on RGB Ratios and Achromatic.
    • HDR EOTF curves are there, but the HDR adjustments to the tonescale are missing and need to be figured out.
    Source code(tar.gz)
    Source code(zip)
    OpenDRT_v0.0.25.nk(41.16 KB)
Owner
Jed Smith
Jed Smith
multi-sdr-gps-sim generates a IQ data stream on-the-fly to simulate a GPS L1 baseband signal using a SDR platform like HackRF or ADLAM-Pluto.

multi-sdr-gps-sim generates a GPS L1 baseband signal IQ data stream, which is then transmitted by a software-defined radio (SDR) platform. Supported at the moment are HackRF, ADLAM-Pluto and binary IQ file output. The software interacts with the user through a curses based text user interface (TUI) in terminal.

null 57 Jun 20, 2022
Display array is a board that sets 6 ST7735 display with a resolution of 80x160px in a linear array sharing the clock, data, rs, backlight pins together

The display array is a board that sets 6 ST7735 display with a resolution of 80x160px in a linear array sharing the clock, data, rs, backlight pins together, and leaving individual access to the cs lines of each display, This board allows you to display images with a resolution of 480x160px.

Josue Alejandro Gutierrez 61 Jun 20, 2022
CaribouLite turns any 40-pin Raspberry-Pi into a Tx/Rx 6GHz SDR

CaribouLite CaribouLite is an affordable, educational, open-source SDR platform that is also a HAT for the Raspberry-Pi family of boards (40-pin versi

CaribouLabs.co 816 Jun 21, 2022
OpenScan is an open-source document scanner app that enables users to scan hard copies of documents or notes and convert it into a PDF file. No ads. No data collection. We respect your privacy.

OpenScan An open source app that enables users to scan hardcopies of documents or notes and convert it to a PDF file. No ads. No data collection. We r

Ethereal Developers Inc 1.1k Jun 25, 2022
The Vulkan Profiles Tools are a collection of tools delivered with the Vulkan SDK for Vulkan application developers to leverage Vulkan Profiles while developing a Vulkan application

Copyright © 2021-2022 LunarG, Inc. Vulkan Profiles Tools (BETA) The Vulkan Profiles Tools are a collection of tools delivered with the Vulkan SDK for

The Khronos Group 52 Jun 9, 2022
Night mode on any camera. Based on HDR+.

Burst Photo This is a macOS app written in Swift / SwiftUI / Metal that implements a simplified version of HDR+, the computational photography pipelin

Martin Marek 49 May 25, 2022
EDACS trunk tracking using RTL2832. rtl_fm, sdr++, gqrx, or gnuradio.

EDACS-FM Florida Man Edition EDACS 9600 Trunk Tracking software for Linux, *Nix, BSD systems (and maybe others) using two RTL2838 dongles(or anything

null 5 Jun 23, 2022
Radiosonde decoder plugin for SDR++

Radiosonde decoder plugin for SDR++ Build instructions Download the SDR++ source code: git clone https://github.com/AlexandreRouma/SDRPlusPlus Open th

Davide Belloli 25 Jun 14, 2022
Open-source node system framework, to change your algorithmic code into useful tools to create much more complicated simulations!

Open-source node system framework, to change your algorithmic code into useful tools to create much more complicated simulations!

Zenus Technology 563 Jun 26, 2022
BMI_automatics-faceshielding-device - this is a project utilizing STM32, MATLAB,Softmax classifier to achieve a portable face shielding(mask) device

BMI_automatics-faceshielding-device this is a project utilizing STM32, MATLAB,Softmax classifier to achieve a portable face shielding(mask) device in

Lyu Tian 2 Dec 23, 2021
Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display

pico-display-matrix Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display or how to actually use all Flash

null 28 Apr 3, 2022
Simple command-line program for sharing the display image on a local network.

XCast is a simple server/client command line program for sharing screen under X. With XCast you have the ability to either pull the display from a rem

Vito Čuček 3 Dec 12, 2021
"Zero setup" cross-compilation for a wide variety of architectures.

"Zero setup" cross-compilation for a wide variety of architectures. xcross includes compact docker images and a build utility for minimal setup C/C++ cross-compiling, inspired by rust-embedded/cross

Alexander Huszagh 24 May 20, 2022
Playbit System interface defines an OS-like computing platform which can be implemented on a wide range of hosts

PlaySys The Playbit System interface PlaySys defines an OS-like computing platform which can be implemented on a wide range of hosts like Linux, BSD,

Playbit 227 Jun 22, 2022
This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut).

hotkey_manager This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut). hotkey_manager Platform Support Quick Star

LeanFlutter 61 Jun 16, 2022
Dwm_lut - Apply 3D LUTs to the Windows desktop for system-wide color correction/calibration

About This tool applies 3D LUTs to the Windows desktop by hooking into DWM. It works in both SDR and HDR modes, and uses tetrahedral interpolation on

null 127 Jun 25, 2022
mimikatz is a tool I've made to learn C and make somes experiments with Windows security

mimikatz is a tool I've made to learn C and make somes experiments with Windows security

Benjamin DELPY 15.5k Jun 24, 2022
Experiments using the RPI Zero GPU for FFT (1D and 2D)

RPI0_GPU_FFT Experiments using the RPI Zero GPU for FFT/IFFT 1D/2D For an input 4194304 (1D), the GPU was around 7X faster than np.fft.fft and np.fft.

Ricardo de Azambuja 26 Dec 2, 2021
My experiments with Linux for the Apple M1 platform, based on Asahi and Corellium patches

Linux kernel ============ There are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML an

Danny Lin 9 Oct 24, 2021