I've implemented the needed protocols for display calibration/LUT uploads for LG 2018/19 OLED's (plus a few LCD's apparently) in an open source python library at https://github.com/bendavid/aiopylgtv
Documentation is available on the github page.
This was created to allow a full calibration workflow using DisplayCal/ArgyllCMS, but it's not restricted to this in any way, since standard Iridas .cube files are supported for lut input.
This has been tested extensively on my C8 OLED, but other models should work. If anyone with a 2019 set would be willing to help me with implementing support for custom tone mapping curves, please message me.
Feedback/bug reports/feature requests welcome.
One interesting feature of the protocol which I do not fully understand yet:
Calibration mode is initialized with an additional sequence of 9 floating point numbers, which I do not know their purpose or meaning. The default values are
but the library also supports sending different values in case someone wants to play around with this or has any ideas what these are for.