Skip to content

Commit 10b6317

Browse files
Prepare for Alpha.10 (#1272)
* Update Changelog for Alpha.10 * Address lgtm findings * Correct some texts * Improve Password handling * search for turbojpeg only if MF is enabled * Chnagelog updates * Fix LED layout overwrite for previously save LEDs * LED Device- Fix default selection for selected network devices * Sreengrabber - Select default fps * Update database migration steps Co-authored-by: Markus <16664240+Paulchen-Panther@users.noreply.github.com>
1 parent a25f069 commit 10b6317

23 files changed

+278
-95
lines changed

CHANGELOG.md

Lines changed: 100 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,118 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.0-alpha.9...HEAD)
88

9+
The focus of this release is on user experience.
10+
We tried as much as possible supporting you in getting valid setup done, as well as providing enough room for expert users to tweak configurations here and there.
11+
The reworked dashboard provides you now with the ability to control individual components, jump to key configuration items, as well as to switch between LED instances easily.
12+
The refined color coding in the user-interfaces, helps you to quickly identify instance specific and global configuration items.
13+
14+
Of course, the release brings new features (e.g. USB Capture on Windows), as well as minor enhancements and a good number of fixes.
15+
16+
Note:
17+
18+
- Hyperion packages can now be installed under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
19+
Details about the installation can be found in the [installation.md](https://github.com/hyperion-project/hyperion.ng/blob/master/Installation.md) and at [apt.hyperion-project.org](apt.hyperion-project.org).
20+
- Find here more details on [supported platforms and configuration sets](https://github.com/hyperion-project/hyperion.ng/blob/master/doc/development/SupportedPlatforms.md)
21+
922
### Breaking
1023

1124
### Added
12-
- LED-Devices: basic support for Hue Play Gradient Lightstrip
1325

14-
- WLED: Support of ["live" property] (https://github.com/Aircoookie/WLED/issues/1308), addresses #1095
15-
- WLED: Support storing/restoring state, fixes #1101
16-
- LED-Devices: Allow to get properties for Atmo and Karatedevices to limit LED numbers configurable
17-
- LED-Devices: Add timeouts for REST-API calls
18-
- new Flags: Russia, Cameroon, Great Britain, England, Scotland
26+
- The Dashboard is now a one-stop control element to control instances and link into configuration areas
27+
- LED Instance independent configuration objects (e.g. capturing hardware) are now separated out in the menu
28+
- New menu item "Sources" per LED instances configuration to enable/disable screen or usb grabber per instance
29+
30+
#### Grabbers
31+
- Windows Media Foundation USB grabber (incl. Media Foundation transform/Turbo-JPEG scaling)
32+
- Linux V4L2 Grabber now supports the following formats: NV12, YUV420
33+
- Image flipping ability in ImageResampler/Turbo-JPEG
34+
- UI: Simplified screens for non-expert usage, do only show elements relevant
35+
- Discover available Grabbers (incl. their capabilities for selection), not supported grabbers are not presented. Note: Screen capturing on Wayland is not supported (given the Wayland security architecture)
36+
- USB Grabber: New ability to configure hardware controls (brightness, contrast, saturation, hue), as well as populating defaults
37+
- Configuration item ranges are automatically adopted based on grabber capabilities,
38+
- Grabbers can only be saved with a valid configuration
39+
- Standalone grabbers: Added consistent options/capabilities for standalone grabbers, debug logging support
40+
- Screen grabbers: Allow to set capture frequency, size decimation and cropping across all grabber types
41+
- Screen grabber: QT-Grabber allows to capture individual displays or all displays in a multi-display setup
42+
- Display Signal Detection area in preview (expert users)
43+
- UI: Only show CEC detection, if supported by platform
44+
45+
#### LED-Devices
46+
- Select device from list of available devices (UI Optimization - Select device from list of available devices #1053) - Cololight, Nanoleaf, Serial Devices (e.g. Adalight), SPI-Device, Pi-Blaster
47+
- Get device properties for automatic configuration of number of LEDs and initial layout (WLED, Cololight, Nanoleaf)
48+
- Identify/Test device (WLED, Cololight, Nanoleaf, Adalight)
49+
- For selected devices a default layout configuration is created, if the user chooses "Overwrite" (WLED, Cololight, Nanoleaf, all serial devices, all spi device, pi-blaster)
50+
- Ensure Hardware LED count matches number of lights (Philips Hue, Yeelight, Atmo Orb)
51+
- User is presented a warning/error, if there is a mismatch between configured LED number and available hardware LEDs
52+
- Add udev support for Serial-Devices
53+
- Allow to get properties for Atmo and Karatedevices to limit LED numbers configurable
54+
- Philips Hue: Add basic support for the Play Gradient Lightstrip
55+
- WLED: Support of ["live" property] (https://github.com/Aircoookie/WLED/issues/1308) (#1095)
56+
- WLED: Brightness overwrite control by configuration
57+
- WLED: Allow to disable WLED synchronization when streaming via hyperion
58+
- WLED: Support storing/restoring state (#1101)
59+
- Adalight: Fix LED Num for non analogue output in arduino firmware
60+
61+
- Allow to blacklist LEDs in layout via UI
62+
- Live Video image to LedLayout preview (#1136)
63+
64+
#### Other
65+
66+
- Effects: Support Custom Effect Templates in UI for custom effect creation and configuration
67+
- Effects: Custom effect separation in the systray menu
68+
69+
- New languages - Portuguese (Std/Brazil) & Norwegian (Bokmål)
70+
- New Flags: Russia, Cameroon, Great Britain, England, Scotland
71+
72+
- Provide cross compilation on x86_64 for developers using docker. This includes the ability to use local code, as well as build incrementally
1973

2074
### Changed
21-
- Updated dependency rpi_ws281x to latest upstream
22-
- Fix High CPU load (RPI3B+) (#1013)
23-
- Nanoleaf: Consider Nanoleaf-Shape Controlers
75+
76+
- Grabbers use now precise timings for better timing accuracy
77+
78+
- Nanoleaf: Consider Nanoleaf-Shape Controllers
2479
- LED-Devices: Show HW-Ledcount in all setting levels
2580

26-
- Documentation: Add link to [Hyperion-py](https://github.com/dermotduffy/hyperion-py)
81+
- System Log Screen: Support to copy loglines, system info and status of the current instance to the clipboard (to share it for investigation)
82+
83+
- Updated dependency rpi_ws281x to latest upstream
84+
- Fix High CPU load (RPI3B+) (#1013)
2785

2886
### Fixed
2987

30-
- Fix issue #1127: LED-Devices: Correct total packet count in tpm2net implementation
31-
- LED-Hue: Proper black in Entertainement mode if min brightness is set
88+
- Active grabbers are displayed correctly after updating the WebUI
89+
- Issue Crop values are checked against decimated resolution (#1160)
90+
- Framebuffer grabber is deactivated in case of error
91+
- Fix/no signal detection (#1087)
92+
93+
- Fix that global settings were not correctly reflected across instances after updates in other non default instance (#1131,#1186,#1188)
94+
- Fix UI: Handle error scenario properly, when last instance number used does not exist any longer.
95+
- UI Allow to have password handled by Password-Manager (#1263)
96+
97+
- Fixed effect freezing during startup
98+
- Effects were not started from tray (#1199)
99+
- Interrupt effect on timeout (#1013)
100+
- Fixed color and effect handling and duplicate priorities (#993,#1113,#1216)
101+
- Stop background effect, when it gets out of scope (to not use resources unnecessarily)
102+
- Custom Effect Templates (schemas) are now loaded
103+
- Effects: Uploaded images were not found executing custom image effects
104+
- "LED Test" effect description is in wrong order (#1229)
105+
106+
- LED-Devices: Only consider Hardware LED count (#673)
107+
- LED-Devices: Correct total packet count in tpm2net implementation (#1127)
108+
- LED-Hue: Proper black in Entertainment mode if min brightness is set
32109
- LED-Hue: Minor fix of setColor command
33-
- Nanoleaf: Fix,if external control mode cannot be set
34-
- Fix issue #1229: "LED Test" effect description is in wrong order
110+
- Nanoleaf: Fixed behaviour, if external control mode cannot be set
111+
112+
- System Log Screen: Fixed Auto-Scrolling, Update Look & Feel, Works across multiple Browser tabs/windows, as log stream is not stopped by a new UI
113+
114+
- Rename Instance and Change Password: Modal did not close
115+
- Read-Only mode was not handled in the SysInfo function
116+
117+
- WebSockets: Handling of fragmented frames fixed
118+
- Fixed libcec dependencies
119+
120+
- General language and grammar updates
35121

36122
### Removed
37123

assets/webconfig/content/login.html

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ <h3 class="panel-title">Login</h3>
88
<div class="panel-body">
99
<form>
1010
<div class="form-group">
11-
<input type="hidden" name="username" class="form-control" type="text" id="username" value="hyperion"/>
12-
<input name="password" class="form-control" type="password" id="password" placeholder="Password" autocomplete="off" />
11+
<input type="name="username" class="form-control" type="text" id="username" value="Hyperion" disabled/></br>
12+
<input name="password" class="form-control" type="password" id="password" placeholder="Password" autocomplete="off"/>
1313
<input name="show_pw" type="checkbox" id="show_pw" /><label for="show_pw">Show/Hide Password</label>
1414
</div>
1515
<div class="form-group">
16-
<button type="submit" class="btn btn-sm btn-success" id="btn_password" onclick="requestAuthorization(document.getElementById('password').value); return false;" disabled><i class="fa fa-fw fa-unlock"></i>Login</button>
16+
<button type="submit" class="btn btn-sm btn-success" id="btn_password" onclick="requestAuthorization(document.getElementById('password').value); return false;"><i class="fa fa-fw fa-unlock"></i>Login</button>
1717
</div>
1818
</form>
1919
</div>
@@ -26,8 +26,12 @@ <h3 class="panel-title">Login</h3>
2626
removeOverlay();
2727

2828
$('#password').off().on('input', function (e) {
29-
if (e.currentTarget.value.length >= 8)
30-
$('#btn_password').removeAttr('disabled');
29+
if (e.currentTarget.value.length >= 8) {
30+
$('#btn_password').prop('disabled', false);
31+
}
32+
else {
33+
$('#btn_password').prop('disabled', true);
34+
}
3135
});
3236

3337
$('#show_pw').off().on('change', function (e) {

assets/webconfig/i18n/en.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
"InfoDialog_nowrite_text": "Hyperion can't write to your current loaded configuration file. Please repair the file permissions to proceed.",
1212
"InfoDialog_nowrite_title": "write permission error!",
1313
"infoDialog_password_current_text": "Current password",
14+
"infoDialog_password_minimum_length": "Passwords must be minimum 8 characters.",
1415
"infoDialog_password_new_text": "New password",
16+
"infoDialog_username_text": "Username",
1517
"about_3rd_party_licenses": "3rd party licenses",
1618
"about_3rd_party_licenses_error": "We had trouble collecting 3rd party licenses information from web. <br />Please follow this link to the GitHub Resource.",
1719
"about_build": "Build",
@@ -464,17 +466,17 @@
464466
"edt_conf_v4l2_flip_expl": "This allows you to flip the image horizontally, vertically, or both.",
465467
"edt_conf_v4l2_flip_title": "Image flip",
466468
"edt_conf_v4l2_fpsSoftwareDecimation_title": "Software frame skipping",
467-
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "To save resources every n'th frame will be processed only. For ex. if grabber is set to 30FPS with this option set to 5 the final result will be around 6FPS (1 - disabled)",
469+
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "To save resources every n'th frame will be processed only. For ex. if grabber is set to 30fps with this option set to 5 the final result will be around 6fps",
468470
"edt_conf_v4l2_encoding_title": "Encoding format",
469471
"edt_conf_v4l2_encoding_expl": "Force video encoding for multiformat capable grabbers",
470472
"edt_conf_v4l2_hardware_brightness_title": "Hardware brightness control",
471-
"edt_conf_v4l2_hardware_brightness_expl": "Set hardware brightness if device supports it, check logs (0=disabled)",
473+
"edt_conf_v4l2_hardware_brightness_expl": "Set hardware brightness",
472474
"edt_conf_v4l2_hardware_contrast_title": "Hardware contrast control",
473-
"edt_conf_v4l2_hardware_contrast_expl": "Set hardware contrast if device supports it, check logs (0=disabled)",
475+
"edt_conf_v4l2_hardware_contrast_expl": "Set hardware contrast",
474476
"edt_conf_v4l2_hardware_hue_title": "Hardware hue control",
475-
"edt_conf_v4l2_hardware_hue_expl": "Set hardware hue if device supports it, check logs (0=disabled)",
477+
"edt_conf_v4l2_hardware_hue_expl": "Set hardware hue",
476478
"edt_conf_v4l2_hardware_saturation_title": "Hardware saturation control",
477-
"edt_conf_v4l2_hardware_saturation_expl": "Set hardware saturation if device supports it, check logs (0=disabled)",
479+
"edt_conf_v4l2_hardware_saturation_expl": "Set hardware saturation",
478480
"edt_conf_v4l2_hardware_set_defaults": "Default hardware controls",
479481
"edt_conf_v4l2_hardware_set_defaults_tip": "Set device's default values for brightness, contrast, hue and saturation",
480482
"edt_conf_v4l2_noSignalCounterThreshold_title": "Signal Counter Threshold",

assets/webconfig/js/content_colors.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ $(document).ready(function () {
2222
//blackborder
2323
$('#conf_cont').append(createRow('conf_cont_blackborder'));
2424
$('#conf_cont_blackborder').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
25-
$('#conf_cont_blackborder').append(createHelpTable(window.schema.blackborderdetector.properties, $.i18n("edt_conf_bb_heading_title"), "blackborderHelpPanelId"))
25+
$('#conf_cont_blackborder').append(createHelpTable(window.schema.blackborderdetector.properties, $.i18n("edt_conf_bb_heading_title"), "blackborderHelpPanelId"));
2626
}
2727
else {
2828
$('#conf_cont').addClass('row');

assets/webconfig/js/content_dashboard.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ $(document).ready(function () {
1010
instances_html += '<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">';
1111
instances_html += '<div id="active_instance_friendly_name"></div>';
1212
instances_html += '<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0;margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>';
13-
instances_html += '</a><ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>'
13+
instances_html += '</a><ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>';
1414
instances_html += '</div></div>';
1515

1616
instances_html += '<div class="panel-body">';
@@ -114,7 +114,7 @@ $(document).ready(function () {
114114

115115
var jsonPort = window.serverConfig.jsonServer.port;
116116
$('#dash_jsonPort').html(jsonPort);
117-
var wsPorts = window.serverConfig.webConfig.port + ' | ' + window.serverConfig.webConfig.sslPort
117+
var wsPorts = window.serverConfig.webConfig.port + ' | ' + window.serverConfig.webConfig.sslPort;
118118
$('#dash_wsPorts').html(wsPorts);
119119

120120
$('#dash_currv').html(window.currentVersion);

assets/webconfig/js/content_grabber.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ $(document).ready(function () {
205205
if (enumVals.length > 0) {
206206
if (deviceSelected === configuredDevice) {
207207
var configuredResolutionText = window.serverConfig.framegrabber.width + "x" + window.serverConfig.framegrabber.height;
208-
var idx = $.inArray(configuredResolutionText, enumTitelVals)
208+
var idx = $.inArray(configuredResolutionText, enumTitelVals);
209209
if (idx != -1) {
210210
enumDefaultVal = idx.toString();
211211
}
@@ -266,6 +266,10 @@ $(document).ready(function () {
266266
if ($.inArray(configuredFps, enumVals) != -1) {
267267
enumDefaultVal = configuredFps;
268268
}
269+
} else if (deviceProperties.hasOwnProperty('default') && !jQuery.isEmptyObject(deviceProperties.default.video_input)) {
270+
if (deviceProperties.default.video_input.resolution.fps) {
271+
enumDefaultVal = deviceProperties.default.video_input.resolution.fps;
272+
}
269273
}
270274
updateJsonEditorSelection(conf_editor_screen, 'root.framegrabber',
271275
'framerates', addSchemaElements, enumVals, [], enumDefaultVal, false);
@@ -413,7 +417,7 @@ $(document).ready(function () {
413417
contrast: { current: window.serverConfig.grabberV4L2.hardware_contrast },
414418
saturation: { current: window.serverConfig.grabberV4L2.hardware_saturation },
415419
hue: { current: window.serverConfig.grabberV4L2.hardware_hue }
416-
}
420+
};
417421
deviceProperties.properties = properties;
418422
}
419423
}
@@ -551,7 +555,7 @@ $(document).ready(function () {
551555
if (enumVals.length > 0) {
552556
if (deviceSelected === configuredDevice) {
553557
var configuredResolutionText = window.serverConfig.grabberV4L2.width + "x" + window.serverConfig.grabberV4L2.height;
554-
var idx = $.inArray(configuredResolutionText, enumTitelVals)
558+
var idx = $.inArray(configuredResolutionText, enumTitelVals);
555559
if (idx != -1) {
556560
enumDefaultVal = idx.toString();
557561
}
@@ -719,7 +723,7 @@ $(document).ready(function () {
719723
updateJsonEditorSelection(conf_editor_screen, 'root.framegrabber',
720724
'available_devices', {}, enumVals, enumTitelVals, enumDefaultVal, addSelect, false);
721725
}
722-
}
726+
};
723727

724728
// build dynamic video input enum
725729
var updateVideoSourcesList = function (type, discoveryInfo) {
@@ -763,7 +767,7 @@ $(document).ready(function () {
763767
else {
764768
discoveryResult = {
765769
"video_sources": []
766-
}
770+
};
767771
}
768772

769773
switch (type) {

assets/webconfig/js/content_leds.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,8 @@ $(document).ready(function () {
884884
break;
885885
default:
886886
conf_editor.getEditor(specOptPath + "host").disable();
887+
//Reset host value, to trigger getProperties via host value
888+
conf_editor.getEditor(specOptPath + "host").setValue("");
887889
conf_editor.getEditor(specOptPath + "host").setValue(val);
888890
break;
889891
}
@@ -1199,7 +1201,8 @@ function saveLedConfig(genDefLayout = false) {
11991201
result.smoothing = { enable: false };
12001202

12011203
if (genDefLayout === true) {
1202-
if (devicesProperties[ledType][host].modelType === "Strip") {
1204+
1205+
if (!jQuery.isEmptyObject(devicesProperties) && devicesProperties[ledType][host].modelType === "Strip") {
12031206
ledConfig = {
12041207
"classic": {
12051208
"top": hardwareLedCount / 2,
@@ -1269,8 +1272,6 @@ function saveLedConfig(genDefLayout = false) {
12691272
break;
12701273
}
12711274

1272-
1273-
12741275
//Rewrite whole LED & Layout configuration, in case changes were done accross tabs and no default layout
12751276
if (genDefLayout !== true) {
12761277
result.ledConfig = getLedConfig();
@@ -1283,7 +1284,6 @@ function saveLedConfig(genDefLayout = false) {
12831284

12841285
// build dynamic enum
12851286
var updateSelectList = function (ledType, discoveryInfo) {
1286-
12871287
// Only update, if ledType is equal of selected controller type and discovery info exists
12881288
if (ledType !== $("#leddevices").val() || !discoveryInfo.devices) {
12891289
return;
@@ -1369,19 +1369,18 @@ var updateSelectList = function (ledType, discoveryInfo) {
13691369
else {
13701370
enumTitelVals.push(host);
13711371
}
1372+
}
13721373

1373-
addCustom = true;
1374-
1375-
// Select configured device
1376-
var configuredDeviceType = window.serverConfig.device.type;
1377-
var configuredHost = window.serverConfig.device.hostList;
1378-
if (ledType === configuredDeviceType && $.inArray(configuredHost, enumVals) != -1) {
1379-
enumDefaultVal = configuredHost;
1380-
}
1381-
else {
1382-
addSelect = true;
1383-
addCustom = true;
1384-
}
1374+
//Always allow to add custom configuration
1375+
addCustom = true;
1376+
// Select configured device
1377+
var configuredDeviceType = window.serverConfig.device.type;
1378+
var configuredHost = window.serverConfig.device.hostList;
1379+
if (ledType === configuredDeviceType && $.inArray(configuredHost, enumVals) != -1) {
1380+
enumDefaultVal = configuredHost;
1381+
}
1382+
else {
1383+
addSelect = true;
13851384
}
13861385
}
13871386
break;

assets/webconfig/js/ledsim.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ $(document).ready(function () {
1717

1818
var activeComponent = "";
1919

20-
const image = new Image()
21-
image.src = "img/hyperion/logo_negativ.png",
20+
const image = new Image();
21+
image.src = "img/hyperion/logo_negativ.png";
2222

2323
/// add prototype for simple canvas clear() method
2424
CanvasRenderingContext2D.prototype.clear = function () {

0 commit comments

Comments
 (0)