Обсуждение библиотеки bscpylgtv, предназначенной для управления телевизорами LG
bscpylgtv - это библиотека для управления по сети телевизорами LG на ОС webOS. Представляет собой улучшенную и более быструю версию библиотеки aiopylgtv. Может быть установлена без функции калибровки, оптимизирована для использования в командной строке (ищет тот же файл конфигурации ключа.aiopylgtv.sqlite).
Системные требования
Установленный Python >= 3.8
Установка из пакета
- Код: Выделить всё
- # Install lite package without calibration functionality
 pip install bscpylgtv
 # Instal full package with calibration functionality (requires numpy package)
 pip install bscpylgtv[with_calibration]
Установка из исходного кода
Выполните следующую команду в этой папке:
- Код: Выделить всё
- # Install lite package without calibration functionality
 pip install --upgrade.
 # Instal full package with calibration functionality (requires numpy package)
 pip install --upgrade. [with_calibration]
Исполняемые файлы для Windows
Исполняемые файлы для Windows можно найти в разделе релизов на github, там же и руководство по первоначальному использованию. Доступно также Руководство по установке и использованию bscpylgtv.
Примеры
Доступные настройки можно найти в каталоге docs, также доступны кнопки пульта.
- Код: Выделить всё
- # Get list of apps (including hidden ones as well)
 bscpylgtvcommand 192.168.1.18 get_apps_all true
 # Push info button
 bscpylgtvcommand 192.168.1.18 button INFO
 # Switch to HDMI2 input
 bscpylgtvcommand 192.168.1.18 set_input HDMI_2
 # Get values of backlight and contrast of the current picture preset (using list)
 bscpylgtvcommand 192.168.1.18 get_picture_settings "[\"backlight\", \"contrast\"]" true
 # Swtich to SDR ISF Expert Dark picture preset
 bscpylgtvcommand 192.168.1.18 set_current_picture_mode expert2
 # Set values of backlight and contrast of the current picture preset (using JSON)
 bscpylgtvcommand 192.168.1.18 set_current_picture_settings "{\"backlight\": 0, \"contrast\": 85}"
 # Turn hdrDynamicToneMapping on in the current HDR10 picture preset (using JSON)
 bscpylgtvcommand 192.168.1.18 set_current_picture_settings "{\"hdrDynamicToneMapping\": \"on\"}"
 # Set colorGamut to "auto" in the current picture preset (using JSON)
 bscpylgtvcommand 192.168.1.18 set_current_picture_settings "{\"colorGamut\": \"auto\"}"
 # Set mpegNoiseReduction off in the current picture preset (using JSON)
 bscpylgtvcommand 192.168.1.18 set_current_picture_settings "{\"mpegNoiseReduction\": \"off\"}"
 # Turn AI Picture Pro on in the current picture preset (using JSON)
 bscpylgtvcommand 192.168.1.18 set_current_picture_settings "{\"ai_Picture\": \"on\"}" aiPicture
 # Setting EOTF in HDMI Signal Override menu, values: auto, sdrGamma, hdrGamma, st2084, hlg (using JSON)
 bscpylgtvcommand 192.168.1.18 set_other_settings "{\"eotf\": \"hlg\"}"
 # Turn PC Mode on/off for HDMI2
 bscpylgtvcommand 192.168.1.18 set_device_info HDMI_2 pc PC
 bscpylgtvcommand 192.168.1.18 set_device_info HDMI_2 hometheater "Home Theatre"
 # Launch and close screensaver
 bscpylgtvcommand 192.168.1.18 launch_app com.webos.app.screensaver
 bscpylgtvcommand 192.168.1.18 close_app com.webos.app.screensaver
 # Turn screen off/on: turn_screen_off [webos_version] (e.g.for older WebOS: turn_screen_off 4)
 bscpylgtvcommand 192.168.1.18 turn_screen_off
 bscpylgtvcommand 192.168.1.18 turn_screen_on
 # Display current picture mode settings
 bscpylgtvcommand 192.168.1.18 launch_app_with_params com.palm.app.settings "{\"target\": \"PictureMode\"}"
 # Launch installation app hidden menu (Hotel Mode, Password change, USB Cloning, Set ID setup, IP Control)
 bscpylgtvcommand 192.168.1.18 launch_app com.webos.app.installation
 # Display 3x MUTE button hidden menu (AVReset, Customer Support, etc)
 bscpylgtvcommand 192.168.1.18 launch_app_with_params com.webos.app.tvhotkey "{\"activateType\": \"mute-hidden-action\"}"
 # Display 7x GREEN button hidden Freesync info
 bscpylgtvcommand 192.168.1.18 launch_app_with_params com.webos.app.tvhotkey "{\"activateType\": \"freesync-info\"}"
 # NOTE: this does not work anymore on some models since end of 2021.Launch hidden software updater on older firmwares
 bscpylgtvcommand 192.168.1.18 launch_app com.webos.app.softwareupdate
 # NOTE: this does not work anymore on some models since end of 2021.Launch hidden software updater on newer firmwares, useful to downgrade (using JSON)
 bscpylgtvcommand 192.168.1.18 launch_app_with_params com.webos.app.softwareupdate "{\"mode\": \"user\", \"flagUpdate\": true}"
 # Toggle TPC or GSR in In-Start Service Menu (on 2020 and newer models), values of algo: tpc, gsr
 bscpylgtvcommand 192.168.1.18 enable_tpc_or_gsr tpc false
 # Set White Balance in Ez-Adjust Service Menu (on 2020 and newer models), values of color_temp: cool, medium, warm
 bscpylgtvcommand 192.168.1.18 set_sm_white_balance warm 192 169 111
 # Launch In-Start Service Menu (code: 0413) (using JSON)
 bscpylgtvcommand 192.168.1.18 launch_app_with_params com.webos.app.factorywin "{\"id\":\"executeFactory\", \"irKey\":\"inStart\"}"
 # Launch Ez-Adjust Service Menu (code: 0413) (using JSON)
 bscpylgtvcommand 192.168.1.18 launch_app_with_params com.webos.app.factorywin "{\"id\":\"executeFactory\", \"irKey\":\"ezAdjust\"}"
 # Enable full Service Menu on newer models
 bscpylgtvcommand 192.168.1.18 set_other_settings "{\"svcMenuFlag\": false}"
 # Get config values of "tv.model" category (using list)
 bscpylgtvcommand 192.168.1.18 get_configs "[\"tv.model. *\"]" true
 # Activate "OLED Motion Pro" on C9 (using JSON)
 bscpylgtvcommand 192.168.1.18 set_configs "{\"tv.model.motionProMode\": \"OLED Motion Pro\"}"
 # Display Total Power On Time under TV Information on EU models where it's hidden (using JSON)
 bscpylgtvcommand 192.168.1.18 set_configs "{\"tv.conti.supportUsedTime\": true}"
 # Take screenshot
 bscpylgtvcommand 192.168.1.18 take_screenshot
 # Soft reboot the TV in case it is malfunctioning: reboot_soft [webos_version] (e.g.for older WebOS: reboot_soft 4)
 bscpylgtvcommand 192.168.1.18 reboot_soft
 # Turn the TV off (standby)
 bscpylgtvcommand 192.168.1.18 power_off
Дополнительные ключи командной строки
- Код: Выделить всё
- # -s "[\"<state1>\", "\<state2>\"]": set states ("software_info" static state is required by some of the calibration commands)
 # values: ["system_info", "software_info", "power", "current_app", "muted", "volume", "apps", "inputs", "sound_output", "picture_settings"]
 bscpylgtvcommand 192.168.1.18 upload_3d_lut_bt2020_from_file expert1 "test3d-2.cube" -s
 bscpylgtvcommand -s "[\"software_info\"]" 192.168.1.18 upload_3d_lut_bt2020_from_file expert1 "test3d-2.cube"
 # -c "{\"lut3d\": \"33pt\", \"dovi\": \"2019\"}": set calibration_info for unsupported chip types (be careful! )
 # values for "lut3d": "17pt", "33pt"
 # values for "dovi": "2018", "2019"
 bscpylgtvcommand -c "{\"lut3d\": \"33pt\", \"dovi\": \"2019\"}" 192.168.1.18 upload_3d_lut_bt2020_from_file expert1 "test3d-2.cube"
 # -o: getting hello info (e.g.to get unique deviceUUID)
 bscpylgtvcommand -o 192.168.1.18 get_hello_info true
 # -w: connecting without SSL
 bscpylgtvcommand -w 192.168.1.18 button INFO
 # -k <client_key>: specifying a client key
 bscpylgtvcommand -k ef6858b2133d68854612831e3df8e495 192.168.1.18 button INFO
 # -p <path_to_key_file>: specifying path to key file
 bscpylgtvcommand -p "D:\config\.aiopylgtv.sqlite" 192.168.1.18 button INFO
 # -l: get list of all saved client keys per ip (otionally from a specified key file)
 bscpylgtvcommand -l
 bscpylgtvcommand -l -p "D:\config\.aiopylgtv.sqlite"
 # -v: display version number
 bscpylgtvcommand -v
Пример базового сценария
- Код: Выделить всё
- import asyncio
 from bscpylgtv import WebOsClient
 async def runloop ():
 client = await WebOsClient.create ('192.168.1.18', ping_interval=None, states=[])
 await client.connect ()
 apps = await client.get_apps_all ()
 for app in apps:
 print (app)
 await client.disconnect ()
 asyncio.run (runloop ())
Пример обновления состояния по подписке
- Код: Выделить всё
- import asyncio
 from bscpylgtv import WebOsClient
 async def on_state_change (client):
 print ("State changed:" ;)
 print (client.apps)
 print (client.inputs)
 print (client.power_state)
 print (client.current_appId)
 print (client.channels)
 print (client.current_channel)
 print (client.channel_info)
 print (client.muted)
 print (client.volume)
 print (client.sound_output)
 print (client.picture_settings)
 print (client.system_info)
 print (client.software_info)
 print (client.hello_info)
 async def runloop ():
 client = await WebOsClient.create ('192.168.1.18', get_hello_info=True)
 await client.register_state_update_callback (on_state_change)
 await client.connect ()
 ret = await client.volume_up ()
 print (ret)
 await asyncio.sleep (30)
 await client.disconnect ()
 asyncio.run (runloop ())
Использование внешнего класса хранилища с помощью сценариев
Замена встроенного хранилища ключей StorageSqliteDict на пользовательский класс StorageMy, реализующий методы класса StorageProto:
- Код: Выделить всё
- import asyncio
 from bscpylgtv import WebOsClient
 from storage_my import StorageMy
 async def runloop ():
 storage = await StorageMy.create ("file_path" ;)
 client = await WebOsClient.create ('192.168.1.18', ping_interval=None, states=[], storage=storage)
 await client.connect ()
 info = await client.get_software_info ()
 print (info)
 await client.disconnect ()
 asyncio.run (runloop ())
Больше полезных примеров можно найти в каталоге docs/scripts.
Функциональность калибровки (в полной версии)
ВНИМАНИЕ: В некоторых случаях вмешательство в данные калибровки может привести к поломке телевизора, что потребует замены материнской платы. Все реализованные на данный момент функции ДОЛЖНЫ быть безопасными (хотя они были тщательно протестированы только для моделей 2018 Alpha 7/9, 2019/2021/2022 Alpha 9), но гарантий нет.
На телевизорах LG с webOS на чипсетах Alpha 7 и Alpha 9 поддерживается загрузка во внутренние 1D/3D LUT, сброс данных заводской калибровки, загруженных через API калибровки, загрузка пользовательских параметров отображения тона (модели >=2019), использование внутреннего генератора тестовых шаблонов (iTPG, модели >=2019), запись файла конфигурации Dolby Vision и другие команды калибровки.
Команды калибровки
Здесь представлена упрощенная версия конвейера обработки изображений (могут быть и другие, не до конца известные/понятные изменения).
Команды калибровки можно выполнять только в режиме калибровки (управляется start_calibration и end_calibration). Некоторые команды калибровки не используются (знак вопроса за названием метода) в зависимости от модели/прошивки. Большинство команд можно выполнять в любом режиме, за исключением set_tonemap_params, которая предназначена только для HDR10+HLG, и set_dolby_vision_config_data, которая предназначена только для Dolby Vision. Только для команд, связанных с 3D LUT и Dolby Vision config, требуется переключатель командной строки -s (states) (или использование вместо него -c (calibration_info) для не заявленных типов чипов, если другие команды калибровки работают нормально, но будьте очень осторожны! ) В целом, команды set_1d_en_* (де-гамма, ре-гамма) и set_3by3_gamut_data_* (цветовые матрицы 3x3) должны использоваться только с unity/custom 3D LUT.
Следующие команды поддерживаются через API калибровки:
- Код: Выделить всё
- start_calibration, end_calibration,
 set_oled_light, set_contrast, set_brightness, set_color
 upload_1d_lut, upload_1d_lut_from_file, set_1d_lut_en (? ),
 upload_3d_lut_bt709, upload_3d_lut_bt709_from_file, upload_3d_lut_bt2020, upload_3d_lut_bt2020_from_file,
 set_1d_en_2_2, set_1d_en_0_45,
 set_3by3_gamut_data_bt709, set_3by3_gamut_data_bt2020, set_3by3_gamut_data_hdr (only used in 2019 models), set_3by3_gamut_data_from_file, set_3by3_gamut_en (? ),
 set_tonemap_params (for HDR10 picture modes),
 set_dolby_vision_config_data (not recommended on >=2020 models! )
Комбинированные команды для настройки режимов обхода и сброса заводских данных:
- Код: Выделить всё
- set_bypass_modes_sdr, set_bypass_modes_hdr10, set_bypass_modes_dovi,
 reset_factory_data_sdr, reset_factory_data_hdr10, reset_factory_data_dovi
Калибровочные данные специфичны для каждого режима изображения, а режимы изображения независимы для SDR, HDR10+HLG и Dolby Vision. Режимы изображения каждой из трех групп доступны только тогда, когда телевизор находится в соответствующем режиме. То есть для загрузки калибровочных данных для режимов изображения HDR10 необходимо подать на телевизор сигнал HDR10 или воспроизвести файл HDR10, и аналогично для Dolby Vision.
Известными поддерживаемыми строками picture_mode являются:
- Код: Выделить всё
- SDR: cinema, expert1, expert2, game, technicolorExpert, filmMaker
 HDR10 (+HLG): hdr_cinema, hdr_game, hdr_technicolorExpert, hdr_filmMaker
 DV: dolby_cinema_bright, dolby_cinema_dark, dolby_game
Для режимов SDR и HDR10 есть два 3D LUT, которые будут автоматически выбраны в зависимости от флагов цветового пространства сигнала или контента. В принципе, почти весь SDR-контент должен быть BT709, а HDR10 - BT2020, но могут быть нестандартные случаи, когда это не так. Для Dolby Vision 3D LUT BT709 кажется активным и единственным используемым.
Поддерживаемые форматы входных LUT - IRIDAS.cube для 1D и 3D LUT, и ArgyllCMS.cal для 1D LUT. Модели с альфой 9 используют 33-точечные 3D LUT, а модели с альфой 7 - 17-точечные.
При загрузке любых данных 1D LUT настройки баланса белого в сервисном меню игнорируются, а настройки гаммы, цветового пространства и баланса белого в пользовательском меню становятся серыми и недоступными. В моделях 2019 года можно устанавливать значения баланса белого 2pt. В режиме калибровки для HDR10 тоновое отображение обходится стороной.
Примеры калибровки
Изменение предустановки expert1 SDR (ISF Expert Bright Room):
- Код: Выделить всё
- # Switch to HDMI2 input
 bscpylgtvcommand 192.168.1.18 set_input HDMI_2
 # Start calibration mode
 bscpylgtvcommand 192.168.1.18 start_calibration expert1
 # Set oled light to 39, contrast to 85, brightness and color to 50
 bscpylgtvcommand 192.168.1.18 set_oled_light 39
 bscpylgtvcommand 192.168.1.18 set_contrast
 bscpylgtvcommand 192.168.1.18 set_brightness
 bscpylgtvcommand 192.168.1.18 set_color
 # Set SDR bypass mode (also known as DDC reset) including uploading unity 1DLUT
 bscpylgtvcommand 192.168.1.18 set_bypass_modes_sdr true -s
 # Upload custom 1DLUT from file
 bscpylgtvcommand 192.168.1.18 upload_1d_lut_from_file "test.cal"
 # Upload custom 3DLUT from file into BT709 slot
 bscpylgtvcommand 192.168.1.18 upload_3d_lut_bt709_from_file "test3d-1.cube" -s
 # Upload custom 3DLUT from file into bt2020 slot
 bscpylgtvcommand 192.168.1.18 upload_3d_lut_bt2020_from_file "test3d-2.cube" -s
 # End calibration mode
 bscpylgtvcommand 192.168.1.18 end_calibration
Тот же сеанс калибровки с помощью сценария:
- Код: Выделить всё
- import asyncio
 from bscpylgtv import WebOsClient
 async def runloop ():
 client = await WebOsClient.create ('192.168.1.18', states=["software_info"])
 await client.connect ()
 await client.set_input ("HDMI_2" ;)
 await client.start_calibration (picture_mode="expert1" ;)
 await client.set_oled_light (value=39)
 await client.set_contrast ()
 await client.set_brightness ()
 await client.set_color ()
 await client.set_bypass_modes_sdr (unity_1d_lut=True)
 await client.upload_1d_lut_from_file (filename="test.cal" ;)
 await client.upload_3d_lut_bt709_from_file (filename="test3d-1.cube" ;)
 await client.upload_3d_lut_bt2020_from_file (filename="test3d-2.cube" ;)
 await client.end_calibration ()
 await client.disconnect ()
 asyncio.run (runloop ())
Загрузка значений байпаса (также известная как сброс DDC)
Следующие команды поддерживаются через API калибровки вместо комбинированной команды set_bypass_modes_*:
- Код: Выделить всё
- upload_1d_lut,
 upload_3d_lut_bt709, upload_3d_lut_bt2020,
 set_1d_en_2_2, set_1d_en_0_45, set_1d_lut_en (? ),
 set_3by3_gamut_data_bt709, set_3by3_gamut_data_bt2020, set_3by3_gamut_data_hdr (only used in 2019 models), set_3by3_gamut_en (? ),
Пример использования (все поддерживаемые команды имеют одинаковый синтаксис):
- Код: Выделить всё
- # Start calibration mode
 bscpylgtvcommand 192.168.1.18 start_calibration hdr_game
 # Upload unity 1DLUT (no extra parameter is required)
 bscpylgtvcommand 192.168.1.18 upload_1d_lut
 # End calibration mode
 bscpylgtvcommand 192.168.1.18 end_calibration
Сброс данных заводской калибровки, загруженных через API калибровки
Можно сбросить отдельные данные заводской калибровки (ранее для этого требовался сброс предустановок изображения или заводской сброс) или сбросить все/большинство из них с помощью комбинированной команды reset_factory_data_*. Через API калибровки поддерживаются следующие команды:
- Код: Выделить всё
- upload_1d_lut,
 upload_3d_lut_bt709, upload_3d_lut_bt2020,
 set_1d_en_2_2, set_1d_en_0_45, set_1d_lut_en (? ),
 set_3by3_gamut_data_bt709, set_3by3_gamut_data_bt2020, set_3by3_gamut_data_hdr (only used in 2019 models), set_3by3_gamut_en (? ),
 set_tonemap_params (for HDR10 picture modes),
 set_dolby_vision_config_data (not recommended on >=2020 models! )
Пример использования (все поддерживаемые команды имеют одинаковый синтаксис, за исключением тех, которые требуют указания picture_mode):
- Код: Выделить всё
- # Start calibration mode
 bscpylgtvcommand 192.168.1.18 start_calibration hdr_game
 # Restore factory 1DLUT after custom 1DLUT was uploaded (by specifying empty list)
 bscpylgtvcommand 192.168.1.18 upload_1d_lut []
 # Restore factory tonemapping parameters after custom ones were uploaded (by specifying empty list)
 bscpylgtvcommand 192.168.1.18 set_tonemap_params hdr_game []
 # End calibration mode
 bscpylgtvcommand 192.168.1.18 end_calibration
Получение команд калибровки
- ПРИМЕЧАНИЕ: они могут быть частично или полностью сломаны (в зависимости от версии прошивки, предустановки изображения и т.д.)
- они могут использоваться как в режиме калибровки, так и вне его
- они возвращают данные активного в данный момент режима изображения
- в случае заводских LUT (иногда и пользовательских LUT) они возвращают постобработанный LUT с учетом всех настроек (включая настройки через меню пользовательских настроек или сервисное меню).
- Код: Выделить всё
- get_1d_en_2_2, get_1d_en_0_45,
 get_3by3_gamut_data, get_3by3_gamut_data_hdr,
 get_1d_lut, get_3d_lut
Пример использования (все поддерживаемые команды имеют одинаковый синтаксис):
- Код: Выделить всё
- # Get 3x3 color matrix (no extra parameter is required)
 bscpylgtvcommand 192.168.1.18 get_3by3_gamut_data
Резервное копирование и восстановление 1D/3D LUTs и цветовых матриц 3x3
Можно создавать резервные копии и восстанавливать 1D/3D LUTs и цветовые матрицы 3x3 (если интерфейс getter API калибровки работает нормально).
Пример использования для резервного копирования:
- Код: Выделить всё
- # Backup 3x3 color matrix
 bscpylgtvcommand 192.168.1.18 get_3by3_gamut_data "hdr_cinema_3x3.matrix"
 # Backup 1D LUT
 bscpylgtvcommand 192.168.1.18 get_1d_lut "hdr_cinema.1dlut"
 # Backup 3D LUT
 bscpylgtvcommand 192.168.1.18 get_3d_lut "hdr_cinema.3dlut" -s
Пример использования для восстановления:
- Код: Выделить всё
- # Start calibration mode
 bscpylgtvcommand 192.168.1.18 start_calibration hdr_cinema
 # Restore 3x3 color matrix
 bscpylgtvcommand 192.168.1.18 set_3by3_gamut_data_from_file "bt2020" "hdr_cinema_3x3.matrix"
 # Restore 1D LUT
 bscpylgtvcommand 192.168.1.18 upload_1d_lut_from_file "hdr_cinema.1dlut"
 # Restore 3D LUT
 bscpylgtvcommand 192.168.1.18 upload_3d_lut_bt2020_from_file "hdr_cinema.3dlut" -s
 # End calibration mode
 bscpylgtvcommand 192.168.1.18 end_calibration
Преобразование файлов 1D LUT в файлы ArgyllCMS cal и vica versa
Также можно конвертировать файлы 1D LUT в файлы ArgyllCMS cal и наоборот. Обратите внимание, что преобразование происходит с потерями из-за ошибок округления и несоответствия точек в 1D LUT и значений I в cal-файле.
Пример использования для конвертации:
- Код: Выделить всё
- # Convert 1DLUT file to ArgyllCMS cal file
 bscpylgtvcommand 192.168.1.18 convert_1dlut_to_cal "dovi_cinema.1dlut" "dovi_cinema.cal"
 # Convert ArgyllCMS cal file to 1DLUT file
 bscpylgtvcommand 192.168.1.18 convert_cal_to_1dlut "dovi_cinema.cal" "dovi_cinema.1dlut"
Загрузка пользовательских параметров тонового отображения для предустановок HDR10
- доступно только для поддерживаемых моделей (>=2019)
- параметры (в этом порядке): picture_mode, peak luminance, mastering_peak_1, rolloff_point_1, mastering_peak_2, rolloff_point_2, mastering_peak_3, rolloff_point_3
- Код: Выделить всё
- # Start calibration mode
 bscpylgtvcommand 192.168.1.18 start_calibration hdr_cinema
 # Upload custom tonemapping parameters for HDR10 Cinema preset
 bscpylgtvcommand 192.168.1.18 set_tonemap_params hdr_cinema 760 1000 75 4000 60 10000 50
 # Or upload custom tonemapping parameters to disable internal tonemapping entirely
 bscpylgtvcommand 192.168.1.18 set_tonemap_params hdr_cinema 760 1000 100 4000 100 10000 100
 # End calibration mode
 bscpylgtvcommand 192.168.1.18 end_calibration
Запись файла конфигурации Dolby Vision для загрузки на USB
Скопируйте созданный файл конфигурации DolbyVision_UserDisplayConfiguration.txt в корень флешки, подключите ее к телевизору, затем воспроизведите контент DoVi (например, с помощью встроенного приложения), появится всплывающее окно обновления конфигурации DoVi.
Примечание: всплывающее окно обновления конфигурации DoVi через USB отключается, если в данный пресет DoVi через API калибровки загружены какие-либо данные (например, пользовательский 1D LUT). Необходимо либо обновить конфигурацию заранее, либо сбросить пресет в пользовательском интерфейсе (или через API калибровки), обновить конфигурацию DoVi через USB, а затем снова загрузить данные (например, пользовательский 1D LUT), если это необходимо.
- режимы изображения: dolby_cinema_bright - 1 (DoVi Cinema Home), dolby_cinema_dark - 2 (DoVi Cinema), dolby_game - 4 (DoVi Game)
- праймериз (в этом порядке): xr, yr, xg, yg, xb, yb
- значение black_level по умолчанию: 0.0001
- конфигурация моделей 2018 года отличается от конфигурации более новых моделей (>=2019)
- Код: Выделить всё
- # Writing DoVi config for one preset (DoVi Cinema)
 bscpylgtvcommand 192.168.1.18 write_dolby_vision_config_file "[{\"picture_mode\": \"dolby_cinema_dark\", \"white_level\": 750, \"primaries\": [0.6796, 0.3187, 0.2595, 0.6849, 0.1448, 0.0494]}]" -s
 # Writing DoVi config for all the presets (DoVi Cinema Home, Cinema, Game) based on one set of data
 bscpylgtvcommand 192.168.1.18 write_dolby_vision_config_file "[{\"white_level\": 750, \"primaries\": [0.6796, 0.3187, 0.2595, 0.6849, 0.1448, 0.0494]}]" true D:\temp -s
 # Writing DoVi config for all the presets (DoVi Cinema Home, Cinema, Game) by specifying them separately
 bscpylgtvcommand 192.168.1.18 write_dolby_vision_config_file "[{\"picture_mode\": \"dolby_cinema_bright\", \"white_level\": 710, \"primaries\": [0.6796, 0.3187, 0.2595, 0.6849, 0.1448, 0.0494]}, {\"picture_mode\": \"dolby_cinema_dark\", \"white_level\": 750, \"primaries\": [0.6796, 0.3187, 0.2595, 0.6849, 0.1448, 0.0494]}, {\"picture_mode\": \"dolby_game\", \"white_level\": 680, \"primaries\": [0.6796, 0.3187, 0.2595, 0.6849, 0.1448, 0.0494]}]" -s
Использование внутреннего генератора тестовых шаблонов (iTPG)
- его можно использовать как в режиме калибровки, так и вне его
- он может быть нарушен множеством различных способов в данной версии прошивки / режиме изображения / и т.д.
- доступно только на поддерживаемых (>=2019) моделях
- модели 2019 года требуют Full Range 10-битных значений (0-1023) при использовании HDR10, в то время как модели >=2020 - Limited Range 10-битных значений (64-940)
- все поддерживаемые модели требуют полного диапазона 10-битных значений (0-1023) с использованием DoVi
 более полезный пример можно найти в каталоге docs/scripts.
- Код: Выделить всё
- # Set full screen black window in the background
 bscpylgtvcommand 192.168.1.18 set_itpg_patch_window 0 0 0 0 3840 2160 0 0
 # Set 5% window green patch on top of the background
 bscpylgtvcommand 192.168.1.18 set_itpg_patch_window 0 1023 0 1
 # Display the 2 set patches
 bscpylgtvcommand 192.168.1.18 toggle_itpg true 2
 # Disable the 2 set patches
 bscpylgtvcommand 192.168.1.18 toggle_itpg false 0
 # Or using "overlay" 5% window green patch on top of the content
 bscpylgtvcommand 192.168.1.18 set_itpg_patch_window 0 1023 0 0
 # Display the set patch
 bscpylgtvcommand 192.168.1.18 toggle_itpg true 1
 # Disable the set patch
 bscpylgtvcommand 192.168.1.18 toggle_itpg false 0
Отображение окна градации:
- Код: Выделить всё
- # Set black to white gradation window for vertical type
 bscpylgtvcommand 192.168.1.18 set_itpg_gradation_window 0 3 0 0 0 1 1 1
 # Display vertical gradation bars
 bscpylgtvcommand 192.168.1.18 toggle_itpg true 1 1
 # Set black to white gradation window for horizontal type
 bscpylgtvcommand 192.168.1.18 set_itpg_gradation_window 0 1 0 0 0 1 1 1
 # Display horizontal gradation bars
 bscpylgtvcommand 192.168.1.18 toggle_itpg true 1 2
 # Display 2 colored vertical gradation bars at the same time
 bscpylgtvcommand 192.168.1.18 set_itpg_gradation_window 0 3 610 520 230 1 1 1
 bscpylgtvcommand 192.168.1.18 set_itpg_gradation_window 1 3 610 50 23 1 1 1
 bscpylgtvcommand 192.168.1.18 toggle_itpg true 2 1
 # Disable gradation window
 bscpylgtvcommand 192.168.1.18 toggle_itpg false 0
Руководства по калибровке
Коллекцию руководств по калибровке можно найти в каталоге docs.
Развитие bscpylgtv
Добавление доступных настроек для новых моделей
Коллекция полезных команд и скриптов доступна в каталоге docs/utils, чтобы добавить поддержку новых прошивок в будущем и облегчить PR.
Добавление нового типа чипа
Только команды калибровки, связанные с 3D LUT и Dolby Vision config, требуют наличия типа чипа для корректной работы, используя метод calibration_support_info. Поле model_name в ответе метода get_software_info содержит тип микросхемы:
- Код: Выделить всё
- bscpylgtvcommand 192.168.1.18 get_software_info true
Единичное тестирование
Необходимые дополнительные пакеты:
- Код: Выделить всё
- pip install numpy pytest pytest-asyncio pytest-mock
Запуск модульных тестов для установленного пакета:
- Код: Выделить всё
- # Run all the tests in all files in tests/ directory
 pytest tests
 # Run all the tests in one file
 pytest tests/test_webos_client_lite.py
 # Run a specific test in one file
 pytest tests/test_webos_client_calibration.py -k test_set_ui_data_methods
Форум
Тема на форуме.
Благодарность
Спасибо следующим людям:
- TheRealLink за оригинальную реализацию
- bendavid за множество модификаций, особенно за функциональность калибровки
- Maassoft за полезные идеи
- Hifi4Vision за его бесценные знания о калибровке


 , измените в нем вручную первые пару значений RGB, пробуя разные значения в абсолютно черной комнате и проверяя с помощью
, измените в нем вручную первые пару значений RGB, пробуя разные значения в абсолютно черной комнате и проверяя с помощью 