Реклама показывается только незарегистрированным пользователям. Вход или Регистрация

bscpylgtv - управление телевизором LG по локальной сети

Обсуждение программ и приложений для смарт телевизоров LG на webOS. Здесь вы найдете информацию о том, где бесплатно скачать приложения для смарт тв, как установить и удалить приложение, какие есть лучшие приложения smart TV для просмотра каналов и фильмов.

bscpylgtv - управление телевизором LG по локальной сети

Сообщение JackSparrow » 16 май 2024, 12:12

Обсуждение библиотеки 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 с учетом всех настроек (включая настройки через меню пользовательских настроек или сервисное меню).
Через API калибровки поддерживаются следующие команды:

Код: Выделить всё
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 за его бесценные знания о калибровке
Последний раз редактировалось JackSparrow 19 май 2024, 20:18, всего редактировалось 3 раз(а).

За это сообщение автора JackSparrow поблагодарил:
dimonml (16 май 2024, 17:33)
JackSparrow

 
Сообщения: 10224
Зарегистрирован: 10 июн 2018, 17:48
Благодарил (а): 1562 раз.
Поблагодарили: 1752 раз.
Телевизор: LG OLED 55C9

bscpylgtv - управление телевизором LG по локальной сети

Спонсор » 16 май 2024, 12:12

Реклама показывается только незарегистрированным пользователям. Войти или Зарегистрироваться
Спонсор

 
Сообщения: 100
Зарегистрирован: 15 июл 2014, 18:43
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: bscpylgtv - управление телевизором LG по локальной сети

Сообщение JackSparrow » 17 май 2024, 21:20

Небольшое руководство по установке и использованию bscpylgtv от автора приложения

Первым делом на телевизоре:

  • разрешите включение телевизора с помощью мобильного устройства в разделе настроек General - Devices - External Devices (Общие - Устройства - Внешние устройства) ;
  • запишите свой IPv4-адрес из раздела Общие - Сеть.
Затем установите исполняемые файлы под Windows:
- скачайте, например, lite-версию приложения, распакуйте ее в папку, затем откройте окно командной строки (cmd) из каталога bscpylgtv (в дальнейшем его нужно постоянно запускать из этого каталога) ;
- единожды запустите эту команду, указав в ней IPv4-адрес из настроек телевизора:

Код: Выделить всё
bscpylgtvcommand 192.168.1.18 button INFO

на телевизоре появится запрос на сопряжение, который нужно принять, затем появится информационный экран (не со встроенными приложениями).
Если всё сработает, далее можно запустить эту команду для отображения наработки часов в разделе настроек Общие -> Устройства -> Управление ТВ (General -> Devices -> TV Management):

Код: Выделить всё
bscpylgtvcommand 192.168.1.18 set_configs "{\"tv.conti.supportUsedTime\": true}"

Замечания по поводу использования исполняемых файлов для Windows:
- они не требуют установки Python (конечно, тогда вы не сможете писать сценарии на Python, но вы можете писать сценарии в пакетных файлах Windows) ;
- они полностью переносимы, то есть вы можете поместить их в любой каталог;
- можно иметь lite-версию в одной директории и полную версию в другой;
- если не планируете писать сценарии на Python или заниматься разработкой используйте версию lite для всех операций, кроме задач калибровки, где требуется полная версия;
- можно добавить ключ командной строки -p к каждому запросу, чтобы указать ключевой файл db и поместить этот ключевой файл db только в одно место, например: "D:\config\.aiopylgtv.sqlite".
- настоящую мощь дает пакетный скриптинг Windows, когда он работает в паре с другими утилитами (см. начало readme).
JackSparrow

 
Сообщения: 10224
Зарегистрирован: 10 июн 2018, 17:48
Благодарил (а): 1562 раз.
Поблагодарили: 1752 раз.
Телевизор: LG OLED 55C9

Re: bscpylgtv - управление телевизором LG по локальной сети

Сообщение JackSparrow » 20 май 2024, 13:39

Правильное смягчение черного цвета, поднятого Dolby Vision (DoVi), путём загрузки 1D LUT (с правильной калибровкой или без нее)

При использовании этого метода мы все равно немного подавляем детализацию теней (66 не видно на шаблонах, а 68 уже видно), но это не так "больно", как другие методы, которые имеют серьезные побочные эффекты (лучший метод находится в верхней части списка):

  • установка WB 2pt Low на -2: затемняет нижнюю часть гаммы, которую нельзя исправить с помощью регуляторов WB 22pt High
  • установка уровня черного на 49: сужает динамический диапазон (аналогично переключению уровня источника в madvr)
  • установка контрастности на 99: изменяет оттенок
В продолжение этого поста о реальной причине проблемы, теперь у нас есть инструменты для ее правильного устранения.
Вам нужна последняя полная версия bscpylgtv (руководство для начинающих).
Этот метод можно использовать на всех затронутых моделях, поддерживающих API калибровки, и если он работает правильно.

  1. Сбросьте настройки пользовательского интерфейса на значения по умолчанию в предустановке DoVi Кинотеатр, чтобы иметь "чистый" 1dlut (он все равно подвергается постобработке)
  2. Получите 1dlut с телевизора в файл "dovi_cinema_factory.1dlut":

    Код: Выделить всё
    bscpylgtvcommand 192.168.1.18 start_calibration dolby_cinema_dark
    # Reset any uploaded 1dlut, just in case
    bscpylgtvcommand 192.168.1.18 upload_1d_lut []
    bscpylgtvcommand 192.168.1.18 get_1d_lut "dovi_cinema_factory.1dlut"

    Обратите внимание на команду start_calibration: она автоматически устанавливает цветовую температуру на Warm (50)! Если вы используете предустановку Cool в SM, то перед командой get_1d_lut вам нужно изменить ее обратно на Cold (50)!
  3. Преобразуйте его в cal-файл формата 23pt ArgyllCMS, который можно использовать вместе с CS и PGenerator:

    Код: Выделить всё
    bscpylgtvcommand 192.168.1.18 convert_1dlut_to_cal "dovi_cinema_factory.1dlut" "dovi_cinema_factory.cal"

  4. Откалибруйте его с помощью CS и PGenerator: измените значения RGB (2-4-й столбцы) в калибровочном файле 1 на 1 (так же, как вы бы сделали с 22pt WB High controls), затем загрузите его, проверьте и повторите:

    Код: Выделить всё
    bscpylgtvcommand 192.168.1.18 upload_1d_lut_from_file "dovi_cinema_calibrated.cal"

  5. Конвертируйте окончательный калиброванный файл в формат 1dlut (чтобы иметь возможность легко изменять в нем значения).

    Код: Выделить всё
    bscpylgtvcommand 192.168.1.18 convert_cal_to_1dlut "dovi_cinema_calibrated.cal" "dovi_cinema_calibrated.1dlut"

  6. Создайте копию калиброванного файла 1dlut (например, "dovi_cinema_calibrated-mod.1dlut" ;), измените в нем вручную первые пару значений RGB, пробуя разные значения в абсолютно черной комнате и проверяя с помощью паттернов/образцов полного черного, какие из них дают правильный черный цвет, загрузив его, прополощите и повторите:

    Код: Выделить всё
    bscpylgtvcommand 192.168.1.18 upload_1d_lut_from_file "dovi_cinema_calibrated-mod.1dlut"

  7. Выйдите из режима калибровки, как только добьетесь желаемого результата:

    Код: Выделить всё
    bscpylgtvcommand 192.168.1.18 end_calibration
    # set color gamut back to native from wide
    bscpylgtvcommand 192.168.1.18 set_current_picture_settings "{\"colorGamut\": \"native\"}"

Что касается шага 5. В случае автора данной методики мне пришлось изменить 3 значения (2-4-е) в каждом цвете RBG, чтобы получить идеальный черный цвет:

Код: Выделить всё
0 7 7 30...
0 7 7 29...
0 5 6 20...

И это были исходные значения для них (из шага 4.):

Код: Выделить всё
0 33 65 98...
0 31 61 92...
0 24 48 71...

Для начала попробуйте вывести на 0 все 3 значения (2-4-е) в каждом цвете (всего их 9), чтобы посмотреть, как поведет себя ваша панель, а затем можно начать двигать значения вверх.
Если я устанавливаю "0 8 8 8... " для всех цветов, то уже виден поднятый черный цвет, поэтому 2-е и 3-е значения в каждом цвете должны быть <=7 в моем случае.

Если кто-то не хочет калибровать дисплей, а хочет только исправить рельефный черный, то просто оставьте шаги 2-4 в процессе.
А исправленный 1dlut можно загрузить в другие пресеты DoVi (dolby_cinema_bright, dolby_game).

Примечание: если 1D LUT загружается через API калибровки в данный пресет DoVi, то всплывающее окно обновления конфигурации DoVi через USB отключается. Необходимо либо обновить конфигурацию заранее, либо сбросить пресет в пользовательском интерфейсе (или через API калибровки), обновить конфигурацию DoVi через USB, а затем снова загрузить 1D LUT.

И последнее замечание: как автор уже описал в этом посте, он все еще убежден, что это проблема несоответствия между обработкой 1dlut и движком DoVi: ведущие 0 в каждом цвете не должны давать никакого вывода, но они дают.
Я не понимаю, как эта ошибка появляется каждый год или все еще существует после всех этих лет...

Вы можете найти примеры файлов в zip-архиве:
dovi_cinema_fix_G2.zip
(24.67 КБ) Скачиваний: 56


Источник инструкции: https://www.avsforum.com/threads/2022-l ... t-63041123
JackSparrow

 
Сообщения: 10224
Зарегистрирован: 10 июн 2018, 17:48
Благодарил (а): 1562 раз.
Поблагодарили: 1752 раз.
Телевизор: LG OLED 55C9


Вернуться в Телевизоры LG - Приложения



 


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение