Package: bscpylgtv
bscpylgtvLibrary to control webOS based LG TV devices. Enhanced and faster version ofaiopylgtv, it can be installed without calibration functionality,
optimized for command line usage (it looks for the same.aiopylgtv.sqlitekey config file).RequirementsPython >= 3.8Install from package# Install lite package without calibration functionalitypipinstallbscpylgtv# Instal full package with calibration functionality (requires numpy package)pipinstallbscpylgtv[with_calibration]Install from SourceRun the following command inside this folder:# Install lite package without calibration functionalitypipinstall--upgrade.# Instal full package with calibration functionality (requires numpy package)pipinstall--upgrade.[with_calibration]Windows binariesPortable Windows binaries can be found underreleases, along withFirst useguide.ExamplesAvailable settings can be found indocsdirectory, also availablebuttons.# Get list of apps (including hidden ones as well)bscpylgtvcommand192.168.1.18get_apps_alltrue# Push info buttonbscpylgtvcommand192.168.1.18buttonINFO# Switch to HDMI2 inputbscpylgtvcommand192.168.1.18set_inputHDMI_2# Get values of backlight and contrast of the current picture preset (using list)bscpylgtvcommand192.168.1.18get_picture_settings"[\"backlight\", \"contrast\"]"true# Swtich to SDR ISF Expert Dark picture presetbscpylgtvcommand192.168.1.18set_current_picture_modeexpert2# Set values of backlight and contrast of the current picture preset (using JSON)bscpylgtvcommand192.168.1.18set_current_picture_settings"{\"backlight\": 0, \"contrast\": 85}"# Turn hdrDynamicToneMapping on in the current HDR10 picture preset (using JSON)bscpylgtvcommand192.168.1.18set_current_picture_settings"{\"hdrDynamicToneMapping\": \"on\"}"# Set colorGamut to "auto" in the current picture preset (using JSON)bscpylgtvcommand192.168.1.18set_current_picture_settings"{\"colorGamut\": \"auto\"}"# Set mpegNoiseReduction off in the current picture preset (using JSON)bscpylgtvcommand192.168.1.18set_current_picture_settings"{\"mpegNoiseReduction\": \"off\"}"# Turn AI Picture Pro on in the current picture preset (using JSON)bscpylgtvcommand192.168.1.18set_current_picture_settings"{\"ai_Picture\": \"on\"}"aiPicture# Setting EOTF in HDMI Signal Override menu, values: auto, sdrGamma, hdrGamma, st2084, hlg (using JSON)bscpylgtvcommand192.168.1.18set_other_settings"{\"eotf\": \"hlg\"}"# Turn PC Mode on/off for HDMI2bscpylgtvcommand192.168.1.18set_device_infoHDMI_2pcPC
bscpylgtvcommand192.168.1.18set_device_infoHDMI_2hometheater"Home Theatre"# Launch and close screensaverbscpylgtvcommand192.168.1.18launch_appcom.webos.app.screensaver
bscpylgtvcommand192.168.1.18close_appcom.webos.app.screensaver# Turn screen off/on: turn_screen_off [webos_version] (e.g. for older WebOS: turn_screen_off 4)bscpylgtvcommand192.168.1.18turn_screen_off
bscpylgtvcommand192.168.1.18turn_screen_on# Display current picture mode settingsbscpylgtvcommand192.168.1.18launch_app_with_paramscom.palm.app.settings"{\"target\": \"PictureMode\"}"# Launch installation app hidden menu (Hotel Mode, Password change, USB Cloning, Set ID setup, IP Control)bscpylgtvcommand192.168.1.18launch_appcom.webos.app.installation# Display 3x MUTE button hidden menu (AVReset, Customer Support, etc)bscpylgtvcommand192.168.1.18launch_app_with_paramscom.webos.app.tvhotkey"{\"activateType\": \"mute-hidden-action\"}"# Display 7x GREEN button hidden Freesync infobscpylgtvcommand192.168.1.18launch_app_with_paramscom.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 firmwaresbscpylgtvcommand192.168.1.18launch_appcom.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)bscpylgtvcommand192.168.1.18launch_app_with_paramscom.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, gsrbscpylgtvcommand192.168.1.18enable_tpc_or_gsrtpcfalse# Set White Balance in Ez-Adjust Service Menu (on 2020 and newer models), values of color_temp: cool, medium, warmbscpylgtvcommand192.168.1.18set_sm_white_balancewarm192169111# Launch In-Start Service Menu (code: 0413) (using JSON)bscpylgtvcommand192.168.1.18launch_app_with_paramscom.webos.app.factorywin"{\"id\":\"executeFactory\", \"irKey\":\"inStart\"}"# Launch Ez-Adjust Service Menu (code: 0413) (using JSON)bscpylgtvcommand192.168.1.18launch_app_with_paramscom.webos.app.factorywin"{\"id\":\"executeFactory\", \"irKey\":\"ezAdjust\"}"# Enable full Service Menu on newer modelsbscpylgtvcommand192.168.1.18set_other_settings"{\"svcMenuFlag\": false}"# Get config values of "tv.model" category (using list)bscpylgtvcommand192.168.1.18get_configs"[\"tv.model.*\"]"true# Activate "OLED Motion Pro" on C9 (using JSON)bscpylgtvcommand192.168.1.18set_configs"{\"tv.model.motionProMode\": \"OLED Motion Pro\"}"# Display Total Power On Time under TV Information on EU models where it's hidden (using JSON)bscpylgtvcommand192.168.1.18set_configs"{\"tv.conti.supportUsedTime\": true}"# Take screenshotbscpylgtvcommand192.168.1.18take_screenshot# Soft reboot the TV in case it is malfunctioning: reboot_soft [webos_version] (e.g. for older WebOS: reboot_soft 4)bscpylgtvcommand192.168.1.18reboot_soft# Turn the TV off (standby)bscpylgtvcommand192.168.1.18power_offOptional command line switches# -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"]bscpylgtvcommand192.168.1.18upload_3d_lut_bt2020_from_fileexpert1"test3d-2.cube"-s
bscpylgtvcommand-s"[\"software_info\"]"192.168.1.18upload_3d_lut_bt2020_from_fileexpert1"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.18upload_3d_lut_bt2020_from_fileexpert1"test3d-2.cube"# -o : getting hello info (e.g. to get unique deviceUUID)bscpylgtvcommand-o192.168.1.18get_hello_infotrue# -w : connecting without SSLbscpylgtvcommand-w192.168.1.18buttonINFO# -k <client_key> : specifying a client keybscpylgtvcommand-kef6858b2133d68854612831e3df8e495192.168.1.18buttonINFO# -p <path_to_key_file> : specifying path to key filebscpylgtvcommand-p"D:\config\.aiopylgtv.sqlite"192.168.1.18buttonINFO# -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 numberbscpylgtvcommand-vBasic Scripting ExampleimportasynciofrombscpylgtvimportWebOsClientasyncdefrunloop():client=awaitWebOsClient.create('192.168.1.18',ping_interval=None,states=[])awaitclient.connect()apps=awaitclient.get_apps_all()forappinapps:print(app)awaitclient.disconnect()asyncio.run(runloop())Subscribed State Updates ExampleimportasynciofrombscpylgtvimportWebOsClientasyncdefon_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)asyncdefrunloop():client=awaitWebOsClient.create('192.168.1.18',get_hello_info=True)awaitclient.register_state_update_callback(on_state_change)awaitclient.connect()ret=awaitclient.volume_up()print(ret)awaitasyncio.sleep(30)awaitclient.disconnect()asyncio.run(runloop())Using external storage class via scriptingReplacing built-inStorageSqliteDictkey storage with customStorageMyclass that implementsmethodsofStorageProtoclass:importasynciofrombscpylgtvimportWebOsClientfromstorage_myimportStorageMyasyncdefrunloop():storage=awaitStorageMy.create("file_path")client=awaitWebOsClient.create('192.168.1.18',ping_interval=None,states=[],storage=storage)awaitclient.connect()info=awaitclient.get_software_info()print(info)awaitclient.disconnect()asyncio.run(runloop())More useful examples can be found indocs/scriptsdirectory.Calibration functionality (in full version)WARNING:Messing with the calibration data COULD brick your TV in some circumstances, requiring a mainboard replacement. All of the currently implemented functions SHOULD be safe (although they have only been extensively tested for the 2018 Alpha 7/9, 2019/2021/2022 Alpha 9 models), but no guarantees.On LG WebOS TVs with Alpha 7 and Alpha 9 chipsets, upload to internal 1D/3D LUTs, resetting factory calibration data uploaded via calibration API, uploading custom tone mapping parameters (>=2019 models), using internal test pattern generator (iTPG, >=2019 models), writing Dolby Vision config file and other calibration commands are supported.Calibration commandsHere is a simplified version of theimage processing pipeline(there may be other not fully known/understood changes).Calibration commands can only be run while in calibration mode (controlled bystart_calibrationandend_calibration).
Some of the calibration commands aren't used (question mark behind the name of the method) depending on the model/firmware.
Most of the commands can be run in any mode, except forset_tonemap_paramsthat is only for HDR10+HLG andset_dolby_vision_config_datathat is only for Dolby Vision.
Only 3D LUT and Dolby Vision config related commands require-s(states) command line switch (or the use of-c(calibration_info) instead for unsuppported chip types if other calibration commands work fine, but be very careful!).
In general,set_1d_en_*(de-gamma, re-gamma) andset_3by3_gamut_data_*(3x3 color matrices) commands should only be used with unity/custom 3D LUT.The following commands are supported via calibration 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!)Combined commands for setting bypass modes and resetting factory data:set_bypass_modes_sdr, set_bypass_modes_hdr10, set_bypass_modes_dovi,
reset_factory_data_sdr, reset_factory_data_hdr10, reset_factory_data_doviCalibration data is specific to each picture mode, and picture modes are independent for SDR, HDR10+HLG, and Dolby Vision.
Picture modes from each of the three groups are only accessible when the TV is in the appropriate mode. Ie to upload calibration data for HDR10 picture modes, one has to send the TV an HDR10 signal or play an HDR10 file, and similarly for Dolby Vision.Known supportedpicture_modestrings are: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_gameFor SDR and HDR10 modes there are two 3D LUTs which will be automatically selected depending on the colorspace flags of the signal or content. In principle almost all SDR content should be BT709 and HDR10 content should be BT2020 but there could be nonstandard cases where this is not true.
For Dolby Vision the BT709 3D LUT seems to be active and the only one used.The supported input formats for LUTs are IRIDAS.cubeformat for both 1D and 3D LUTs, and ArgyllCMS.calfiles for 1D LUTs.
Models with Alpha 9 use 33 point 3D LUTs, while those with Alpha 7 use 17 points.When uploading any 1D LUT data, service menu white balance settings are ignored, and gamma, colorspace, and white balance settings in the user menu are greyed out and inaccessible. From 2019 models white balance 2pt values can be set.
While in calibration mode for HDR10 tone mapping is bypassed.Calibration examplesModifying expert1 SDR preset (ISF Expert Bright Room):# Switch to HDMI2 inputbscpylgtvcommand192.168.1.18set_inputHDMI_2# Start calibration modebscpylgtvcommand192.168.1.18start_calibrationexpert1# Set oled light to 39, contrast to 85, brightness and color to 50bscpylgtvcommand192.168.1.18set_oled_light39bscpylgtvcommand192.168.1.18set_contrast
bscpylgtvcommand192.168.1.18set_brightness
bscpylgtvcommand192.168.1.18set_color# Set SDR bypass mode (also known as DDC reset) including uploading unity 1DLUTbscpylgtvcommand192.168.1.18set_bypass_modes_sdrtrue-s# Upload custom 1DLUT from filebscpylgtvcommand192.168.1.18upload_1d_lut_from_file"test.cal"# Upload custom 3DLUT from file into BT709 slotbscpylgtvcommand192.168.1.18upload_3d_lut_bt709_from_file"test3d-1.cube"-s# Upload custom 3DLUT from file into bt2020 slotbscpylgtvcommand192.168.1.18upload_3d_lut_bt2020_from_file"test3d-2.cube"-s# End calibration modebscpylgtvcommand192.168.1.18end_calibrationSame calibration session via scripting:importasynciofrombscpylgtvimportWebOsClientasyncdefrunloop():client=awaitWebOsClient.create('192.168.1.18',states=["software_info"])awaitclient.connect()awaitclient.set_input("HDMI_2")awaitclient.start_calibration(picture_mode="expert1")awaitclient.set_oled_light(value=39)awaitclient.set_contrast()awaitclient.set_brightness()awaitclient.set_color()awaitclient.set_bypass_modes_sdr(unity_1d_lut=True)awaitclient.upload_1d_lut_from_file(filename="test.cal")awaitclient.upload_3d_lut_bt709_from_file(filename="test3d-1.cube")awaitclient.upload_3d_lut_bt2020_from_file(filename="test3d-2.cube")awaitclient.end_calibration()awaitclient.disconnect()asyncio.run(runloop())Uploading bypass values (also known as DDC reset)The following commands are supported via calibration API beside of the the combinedset_bypass_modes_*commands: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 (?),Example usage (all the supported commands have the same syntax):# Start calibration modebscpylgtvcommand192.168.1.18start_calibrationhdr_game# Upload unity 1DLUT (no extra parameter is required)bscpylgtvcommand192.168.1.18upload_1d_lut# End calibration modebscpylgtvcommand192.168.1.18end_calibrationResetting factory calibration data uploaded via calibration APIIt's possible to reset individual factory calibration data (previously a picture preset reset or factory reset was required for this)
or reset all/most of them with the combinedreset_factory_data_*commands.
The following commands are supported via calibration 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!)Example usage (all the supported commands have the same syntax except for those that require apicture_mode):# Start calibration modebscpylgtvcommand192.168.1.18start_calibrationhdr_game# Restore factory 1DLUT after custom 1DLUT was uploaded (by specifying empty list)bscpylgtvcommand192.168.1.18upload_1d_lut[]# Restore factory tonemapping parameters after custom ones were uploaded (by specifying empty list)bscpylgtvcommand192.168.1.18set_tonemap_paramshdr_game[]# End calibration modebscpylgtvcommand192.168.1.18end_calibrationGet calibration commandsNOTE: they can be partially or completely broken (depending on firmware version, picture preset, etc)they can be used inside or outside of calibration mode as wellthey return the data of the currently active picture modein case of factory LUTs (sometimes even with custom LUTs as well), they return the post-processed LUTs with all customizations factored in (including customizations via the user settings menu or service menu)The following commands are supported via calibration 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_lutExample usage (all the supported commands have the same syntax):# Get 3x3 color matrix (no extra parameter is required)bscpylgtvcommand192.168.1.18get_3by3_gamut_dataBackup and restore 1D/3D LUTs and 3x3 color matricesIt's possible to backup and resture 1D/3D LUTs and 3x3 color matrices (if the getter interface of the calibration API works fine).Example usage for backuping:# Backup 3x3 color matrixbscpylgtvcommand192.168.1.18get_3by3_gamut_data"hdr_cinema_3x3.matrix"# Backup 1D LUTbscpylgtvcommand192.168.1.18get_1d_lut"hdr_cinema.1dlut"# Backup 3D LUTbscpylgtvcommand192.168.1.18get_3d_lut"hdr_cinema.3dlut"-sExample usage for restoring:# Start calibration modebscpylgtvcommand192.168.1.18start_calibrationhdr_cinema# Restore 3x3 color matrixbscpylgtvcommand192.168.1.18set_3by3_gamut_data_from_file"bt2020""hdr_cinema_3x3.matrix"# Restore 1D LUTbscpylgtvcommand192.168.1.18upload_1d_lut_from_file"hdr_cinema.1dlut"# Restore 3D LUTbscpylgtvcommand192.168.1.18upload_3d_lut_bt2020_from_file"hdr_cinema.3dlut"-s# End calibration modebscpylgtvcommand192.168.1.18end_calibrationConverting 1D LUT files to ArgyllCMScalfiles and vica versaIt's also possible to convert 1D LUT files to ArgyllCMScalfiles and vica versa.
Note that the conversion is lossy due to rounding errors and misalignment of points in 1D LUT and I values in cal file.Example usage for converting:# Convert 1DLUT file to ArgyllCMS cal filebscpylgtvcommand192.168.1.18convert_1dlut_to_cal"dovi_cinema.1dlut""dovi_cinema.cal"# Convert ArgyllCMS cal file to 1DLUT filebscpylgtvcommand192.168.1.18convert_cal_to_1dlut"dovi_cinema.cal""dovi_cinema.1dlut"Uploading custom tonemapping parameters for HDR10 presetsavailable only on supported models (>=2019)parameters (in this order): picture_mode, peak luminance, mastering_peak_1, rolloff_point_1, mastering_peak_2, rolloff_point_2, mastering_peak_3, rolloff_point_3# Start calibration modebscpylgtvcommand192.168.1.18start_calibrationhdr_cinema# Upload custom tonemapping parameters for HDR10 Cinema presetbscpylgtvcommand192.168.1.18set_tonemap_paramshdr_cinema7601000754000601000050# Or upload custom tonemapping parameters to disable internal tonemapping entirelybscpylgtvcommand192.168.1.18set_tonemap_paramshdr_cinema7601000100400010010000100# End calibration modebscpylgtvcommand192.168.1.18end_calibrationWriting Dolby Vision config file for USB uploadCopy the generated configDolbyVision_UserDisplayConfiguration.txtfile into the root of a thumbdrive, plug it into the TV, then play a DoVi content (e.g. with a built-in app), the DoVi config update popup will appear.Note: the DoVi config update popup is disabled via USB if any data (e.g. custom 1D LUT) is uploaded via the calibration API to a given DoVi preset. Either you have to update the config beforehand or reset the preset on the UI (or via calibration API), update DoVi config via USB, then upload the data (e.g. custom 1D LUT) again if necessary.picture modes: dolby_cinema_bright - 1 (DoVi Cinema Home), dolby_cinema_dark - 2 (DoVi Cinema), dolby_game - 4 (DoVi Game)primaries (in this order): xr, yr, xg, yg, xb, ybdefault value of black_level: 0.0001config of 2018 models is different from newer models (>=2019)# Writing DoVi config for one preset (DoVi Cinema)bscpylgtvcommand192.168.1.18write_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 databscpylgtvcommand192.168.1.18write_dolby_vision_config_file"[{\"white_level\": 750, \"primaries\": [0.6796, 0.3187, 0.2595, 0.6849, 0.1448, 0.0494]}]"trueD:\temp-s# Writing DoVi config for all the presets (DoVi Cinema Home, Cinema, Game) by specifying them separatelybscpylgtvcommand192.168.1.18write_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]}]"-sUsing the internal Test Pattern Generator (iTPG)it can be used inside or outside of calibration mode as wellit can be broken in many defferent ways in a given firmware version / picture mode / etcavailable only on supported (>=2019) models2019 models require Full Range 10 bit values (0-1023) using HDR10, while >=2020 models Limited Range 10 bit values (64-940)all suported models require Full Range 10 bit values (0-1023) using DoVimore useful example can be found indocs/scriptsdirectory.# Set full screen black window in the backgroundbscpylgtvcommand192.168.1.18set_itpg_patch_window00003840216000# Set 5% window green patch on top of the backgroundbscpylgtvcommand192.168.1.18set_itpg_patch_window0102301# Display the 2 set patchesbscpylgtvcommand192.168.1.18toggle_itpgtrue2# Disable the 2 set patchesbscpylgtvcommand192.168.1.18toggle_itpgfalse0# Or using "overlay" 5% window green patch on top of the contentbscpylgtvcommand192.168.1.18set_itpg_patch_window0102300# Display the set patchbscpylgtvcommand192.168.1.18toggle_itpgtrue1# Disable the set patchbscpylgtvcommand192.168.1.18toggle_itpgfalse0Displaying gradation window:# Set black to white gradation window for vertical typebscpylgtvcommand192.168.1.18set_itpg_gradation_window03000111# Display vertical gradation barsbscpylgtvcommand192.168.1.18toggle_itpgtrue11# Set black to white gradation window for horizontal typebscpylgtvcommand192.168.1.18set_itpg_gradation_window01000111# Display horizontal gradation barsbscpylgtvcommand192.168.1.18toggle_itpgtrue12# Display 2 colored vertical gradation bars at the same timebscpylgtvcommand192.168.1.18set_itpg_gradation_window03610520230111bscpylgtvcommand192.168.1.18set_itpg_gradation_window136105023111bscpylgtvcommand192.168.1.18toggle_itpgtrue21# Disable gradation windowbscpylgtvcommand192.168.1.18toggle_itpgfalse0Calibration guidesA collection of calibration guides can be found underdocs directory.Development ofbscpylgtvAdding available settings for newer modelsA collection of useful commands and scripts are available underdocs/utilsdirectory to add support for new firmwares in the future and make PRs easier to do.Adding new chip typeOnly 3D LUT and Dolby Vision config related calibration commands require chip type to be present to work properly, utilisingcalibration_support_infomethod.
Themodel_namefield of the response ofget_software_infomethod contains the chip type:bscpylgtvcommand192.168.1.18get_software_infotrueUnit testingRequired extra packages:pipinstallnumpypytestpytest-asynciopytest-mockRunning unit tests against the installed package:# Run all the tests in all files in tests/ directorypytesttests# Run all the tests in one filepytesttests/test_webos_client_lite.py# Run a specific test in one filepytesttests/test_webos_client_calibration.py-ktest_set_ui_data_methodsForumForumtopic.AcknowledgementThanks to the following people:TheRealLinkfor the original implementationbendavidfor lot of modification, especially with calibration functionalityMaassoftfor useful ideasHifi4Vision for his invaluable calibration knowledge