Compare commits

...

198 Commits

Author SHA1 Message Date
LordGrey cd22d4454d
Philips Hue APIv2 support (#1637)
* Support Philips Hue APIv2 and refactoring

* Fix MDNSBrower - if timeout during host resolvment occurs

* Hue API v2 - Migrate database

* Fix macOS build

* Handle network timeout before any other error

* Address CodeQL findings

* Clean-up and Fixes

* Only getProperties, if username is available

* Option to layout by entertainment area center

* Fix Wizard

---------

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2023-10-03 20:33:11 +02:00
dependabot[bot] 33722c9a09
Bump crazy-max/ghaction-import-gpg from 5.3.0 to 6.0.0 (#1644)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.3.0 to 6.0.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.3.0...v6.0.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:06:39 +02:00
dependabot[bot] 41bffecc0b
Bump peter-evans/repository-dispatch from 2.1.1 to 2.1.2 (#1645)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v2.1.1...v2.1.2)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:04:26 +02:00
dependabot[bot] f49e1a2c0b
Bump actions/checkout from 3 to 4 (#1646)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:03:57 +02:00
LordGrey 08dc59c885
Fix #1630 - Audio Capture settings are ignored (#1640)
* Fix macOS build

* Update minimum cmake version

* Correct compile errorswith Qt6.7

* Update minimum cmake version (2)

* Use C++17

* Correct compile errors with Qt6.7

* Replace unsupported Lambda UniqueConnection

* Support UTF-8 Output on console

* Fix #1630
2023-10-01 21:56:53 +02:00
LordGrey 48cea4ad9b
Focus on relevant PRs 2023-09-30 18:00:38 +02:00
LordGrey 7909997398
Update install_pr.sh
Only run named  'Hyperion PR Build' have artifacts
2023-09-06 20:08:20 +02:00
LordGrey a5bb7e905b
Fix non image updates ignore blacklisted leds (#1635)
* Fix #1634

* Refactor to process blacklisted LEDs with less resources
2023-08-26 11:12:43 +02:00
LordGrey d1879c2e39
ws281x - Update logic to identify is user is admin (#1623) 2023-08-03 22:40:25 +02:00
LordGrey c0dc08b0c0
Update to Protobuf 23.4.0 (#1626)
* Update to protobuf v23.4.0

* Add defines for 3rd party sub-modules used by protobuf

* Check out sub-modules recursively
2023-07-29 19:28:51 +02:00
LordGrey 5bf25c98ad
Update mbedTLS to v3.4.0 (#1625) 2023-07-29 19:28:39 +02:00
LordGrey da275dd448
Update flatbuffers to v23.5.26 (#1624) 2023-07-29 19:28:28 +02:00
Paulchen-Panther 1257cfff70 Set OpenSSL to 1.1.1 (Windows) 2023-07-21 18:59:23 +00:00
LordGrey 42c98da470
Update platforms (#1617)
* Remove stretch, bionic, add lunar

* Fix CEC CMakeList for Ubuntu 23.04

* Fix git version identification when run in docker and local code

* Update SYSTEM_LIBS_SKIP list

* Updates after Ubuntu Server 20.04, latest PI OS Light and CoreElec 20

* Update year

* Skip List working with Fedora38 Server (x86) and libreElec 11 (x86)

* Update platform tag handling

* Show error, if ssl lib cannot be found

* Update supported platforms

* Script to install selected Pull Requests

* Fix misspelled explanation + improve description

* Correct run-id evaluation

* Support python3 and python2

* Support to copy existing config for PR testing
2023-07-21 16:45:37 +02:00
LordGrey 64642a4457
Fix WLED UI handling non supported segment streaming (#1610) 2023-07-10 20:39:35 +02:00
Christoph Pohl af1a31b842
Update dependencies for Debian Bookworm (#1613) 2023-06-25 10:34:47 +02:00
dependabot[bot] a7ce0f8a4c
Bump crazy-max/ghaction-import-gpg from 5.2.0 to 5.3.0 (#1608)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-11 20:42:35 +02:00
Paulchen-Panther 00ce3ff089
Update Discord Invite 2023-05-29 21:43:28 +02:00
Paulchen-Panther 54d03b8065 added workflow_dispatch
to allow the bot to create the APT repository itself
2023-05-14 16:29:57 +02:00
lsellens 2a17de37f1
fix for matrix effect (#1602) 2023-05-11 21:11:33 +02:00
LordGrey 5535b884bf
Fixes (#1605)
* Correct misleading Error messages

* Fix that Audio Capture is not shown when there is no screen nor video grabber

* Fix - Audio Capture enabled after reboot automatically (#1581)
2023-05-07 14:04:45 +02:00
Hyperion-Bot 79b31e16e0 Update submodule rpi_ws281x 2023-04-26 00:22:19 +00:00
dependabot[bot] e3496eb4dc
Bump SamKirkland/FTP-Deploy-Action from 4.3.3 to 4.3.4 (#1598)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.3 to 4.3.4.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.3...v4.3.4)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-05 17:25:49 +02:00
Paulchen-Panther 08e7c7d8c2 [HotFix] Supplement to the PR #1570 - Fix Issue #1596 2023-03-27 20:54:34 +02:00
Paulchen-Panther e0060eb406 cleanup 2023-03-26 15:22:06 +02:00
dependabot[bot] 2f09f9a0b8
Bump actions/upload-artifact from 2.2.0 to 3.1.2 (#1583)
GitHub Actions Update
2023-03-16 21:38:08 +01:00
Portisch 85eb62f314
Fix missing Include (#1585)
'std::numeric_limits' do need '#include <limits>'
2023-03-09 08:38:05 +01:00
Hyperion-Bot c73f8623b8 Update submodule rpi_ws281x 2023-03-07 00:26:14 +00:00
Harald e59e456b00
fix python version on Debian bookworm (fix #1579) (#1580)
the package wanted the dependency libpython3.9
but the executable expects libpython3.10
2023-02-27 17:04:34 +01:00
Rastafabisch a393f6211c
Update Info.plist.in (#1575)
Hide Hyperion from the Dock.
2023-02-21 17:39:18 +01:00
LordGrey b2fcea3bbd Rollover to 2.0.16-beta.1 2023-02-20 07:38:01 +01:00
LordGrey 24a00e3b0b
Prep Release 2.0.15 (#1571)
* Readd import Collections to show JSON validation failures details

* Editorial update

* Audiograbber - Remove config for not implemented feature

* Smoothing - Update defaults and range

* Version 2.0.15
2023-02-19 13:24:43 +01:00
Hyperion-Bot bfba0d6137 Update de.json (POEditor.com) 2023-02-19 11:41:47 +01:00
Hyperion-Bot fd82f58269 Update de.json (POEditor.com) 2023-02-19 11:05:25 +01:00
Michael Rochelle acdf733936
Audio Grabber Feature (#1570)
* Creating Audio Grabber

Creating Audio Grabber

Creating Audio Grabber.

Successfully began capturing audio in windows. Starting to implement a hard-coded UV Visualizer.

Got Windows DirectSound Implementation working.
Hardcoded basic VU Meter.

Begin working on linux audio grabber implementation.

Finished Linux Draft Implementation.
Minor Mods to windows implementation.

Windows:
 - Free memory used by device id.
 - Prevent starting audio if the grabber is disabled
 - More debug logging

Linux:
 - Prevent starting audio if the grabber is disabled

Added strings to english
Removed "custom" from device selection
Made hard-coded visualizer values configurable.
wrote values to imageData with BGR priority to enable configurable values to be set in RGB format.
created logic to support "Automatic" to enable the API to select the default device.

Add language key for audio in "Remote Control" section.
Removed audio configuration for number of channels. This was causing an error with some devices.

Fixed logic to update capture while its active.
Optimizing code .

UI Tweaks
Destructuring.

Fixed build error on linux.

Custom Effects - Clean-ups and Enhancements (#1163)

* Cleanup EffectFileHandler

* Support Custom Effect Schemas and align EffectFileHandler

* Change back to colon prefix for system effects

* WebSockets - Fix error in handling fragmented frames

* Correct missing colon updates

* Update json with image file location for custom gif effects

* Image effect deletion - considere full filename is stored in JSON

* Correct selection lists indentions

Creating Audio Grabber

Creating Audio Grabber

Creating Audio Grabber.

Successfully began capturing audio in windows. Starting to implement a hard-coded UV Visualizer.

Got Windows DirectSound Implementation working.
Hardcoded basic VU Meter.

Begin working on linux audio grabber implementation.

Finished Linux Draft Implementation.
Minor Mods to windows implementation.

Windows:
 - Free memory used by device id.
 - Prevent starting audio if the grabber is disabled
 - More debug logging

Linux:
 - Prevent starting audio if the grabber is disabled

Added strings to english
Removed "custom" from device selection
Made hard-coded visualizer values configurable.
wrote values to imageData with BGR priority to enable configurable values to be set in RGB format.
created logic to support "Automatic" to enable the API to select the default device.

Add language key for audio in "Remote Control" section.
Removed audio configuration for number of channels. This was causing an error with some devices.

Fixed logic to update capture while its active.
Optimizing code .

UI Tweaks
Destructuring.

Fixed build error on linux.

Commented setVideoMode from AudioGrabber.

Linux Threading changes.

Implementing new API

Continuing to implement audio into new APIs

Fixed Audio Grabber for DirectSound on Windows
Fixed UI for Audio Grabber Configuration
Default AUDIO to off unless specified.

fixed missing #ifdef for audio grabber.

Added logic to calculate a dynamic multiplier from the signal input.

Updating linux api for discovering devices.

Fixed HTML/JS issues with view.
Fixed NPE in Windows.
Disabled setting thread priority in linux.

updated the schema options check to pass through hidden states and commented the change.

Updated grabber start conditions
Updated Audio grabber to instantiate similar to video grabber

Updated windows grabber to set "started" flag to false when shutting down.
Removed "tryStart" to prevent enabling audio capture unnecessarily.

Fixing instance audio grabber device configuration

Added configurable resolution
Reduced tolerance to 5%
Fixed issue where grabber failed for additional instances when "start" was called multiple times.

Fixed resolution calculation

Change averaging algorithm to prevent overflowing the sum.

Updated logic to stop audio grabber when disabled.

Fix integer casting and rounding.

Restart grabber on configuration change.
Fix missing include/grabber/AudioGrabber.
Disable tolerance.

Added configurable tolerance.
Fixed tolerance algorithm.
reset multiplier on configuration change.

Line Endings

Proposed change and questions/request to fix

implementing more of LordGrey's suggestions.

Fix mode for snd_pcm_open. Latest ALSA uses SND_PCM_NONBLOCK instead of SND_PCM_OPEN_NONBLOCK
defaulted multiplier to 0 "auto"
defaulted tolerance to 20%

changed 100 to 100.0 for pixel value percentage calculation to fix value from being 0.

missed a 100 as a double so precision isn't lost during math operation.

Fix Windows grabber and further cleanups

Enable Audio grabbing in standard build

Remove empty methods

Fix audio capture priority setting

Remove unused code

Clean-up default config

Allow additional json-editor attributes

Allow multiple effects and resetting to defaults

Correct default values

Allow to build for Qt < 5.14

Update CodeQL build dependency

Update build dependencies

Remove effect1 placeholder

* Renamed uvMeter to VU Meter (Volume Unit)
- Fixed issues flagged by code scanning bot.

* Moved stop call into destructor of implementing class.

* Removed commented linux audio channel configuration logic.

---------

Co-authored-by: Michael Rochelle <michael@j2inn.com>
2023-02-19 09:36:39 +01:00
LordGrey a1bfa63343
Update schema-webConfig.json 2023-02-17 17:09:12 +01:00
Hyperion-Bot 21c5c6a122 Update de.json (POEditor.com) 2023-02-17 16:12:11 +01:00
LordGrey 1ae37d151e
Dominant Color support (#1569)
* Dominant Color and Mean Color Squared

* Workaround - Suppress empty LED updates

* Add missing text

* Dominant Colors advanced

* Test with fixed initial colors

* Test with fixed initial colors

* Support new processing values via API

* ImageToLED - Add reduced pixel processing, make dominant color advanced configurable

* Updates on Grabber fps setting

* ImageToLedMap - Remove maptype and update test

* Update dynamic cluster array allocation
2023-02-17 16:02:51 +01:00
Hyperion-Bot 093361d3e4 Update sv.json (POEditor.com) 2023-02-17 15:19:10 +01:00
Hyperion-Bot f4391a512b Update es.json (POEditor.com) 2023-02-17 15:19:09 +01:00
Hyperion-Bot f062aa71c5 Update ru.json (POEditor.com) 2023-02-17 15:19:07 +01:00
Hyperion-Bot 6251b58ff9 Update pl.json (POEditor.com) 2023-02-17 15:19:06 +01:00
Hyperion-Bot dea0a17df4 Update it.json (POEditor.com) 2023-02-17 15:19:04 +01:00
Hyperion-Bot 22fa008c4b Update fr.json (POEditor.com) 2023-02-17 15:19:03 +01:00
LordGrey bf418686e3
Fix WLED & Smoothing (#1567)
* WLED - Fix empty segment element in DB

* WLED - Fix to not overwrite on state when not isStayOnAfterStreaming

* Refactor ProviderRestApi, increase default timeout

* Fix Smoothing - Fix empty updates, consider smoothing configs for effects

* UI - Fix not removed priority

* Add missing header and code updates

* setRedirectPolicy was only introduced in Qt 5.9

* Adalight - Align to HyperSerial v9.0.0

* HyperSerial Hyperion with awa protocol v8.0.0

* Correct line-endings
2023-02-12 21:20:50 +01:00
LordGrey a57bcbc2b8
WLED segment streaming support (#1556)
* WLED segment streaming support

* Address CodeQL findings

* WLED - Remove that interim color is shown when WLED is powered off

* Allow LEDDevice to stay on after streaming

* Apply stayOn on segment streamed to

* Fix LED-Matrix Layout: Add Cabling direction selection element again
2023-02-07 08:15:22 +01:00
LordGrey ef7ceb0bbf
Update to Mbed TLS 3.3.0 (#1558)
* Convert mbedtls to subproject

* Align cmake to subproject and mbedtls 3.3.0

* mdebtls 3.3.0

* Add cxx_std_20 for Windows build
2023-02-05 15:19:25 +01:00
dependabot[bot] f327b5063e
Bump actions/download-artifact from 3.0.1 to 3.0.2 (#1562)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3.0.1...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-02 19:15:29 +01:00
LordGrey fa7a5b6b56
Various Fixes/Updates (#1549)
* Update FindWindowsSDK.cmake

* cmake support libcec without version

* Ensure Light-Ids are strings

* Fix type - do not have dbus as requried

* Fixing #1544

* Cleanup

* CleanupFix #1551

* Consistently return instance number with JSON replies (#1504)

* hyperion-remote- Fix extracting reply for configGet request

* Qt 6.6 - Fix iterator finds

* Fix test_image2ledsmap

* Ensure window.currentHyperionInstanceName is set, cleanup system/log clipboard report

* Address protobuf cmake warning

* Update License

* Update ChangeLog

* Address CodeQL and clang findings
2023-01-16 12:01:28 +01:00
LordGrey f665f1e1b6
Update to Protocol Buffers 3.21.12 (#1557) 2023-01-15 22:25:39 +01:00
dependabot[bot] e3a82b2890
Bump peter-evans/repository-dispatch from 2.1.0 to 2.1.1 (#1553)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 11:26:58 +01:00
dependabot[bot] 09d1ef4883
Bump SamKirkland/FTP-Deploy-Action from 4.3.2 to 4.3.3 (#1552)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.2...4.3.3)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 11:26:47 +01:00
LordGrey 6fa7bab6f7
Add CodeQL for GitHub code scanning (#1548)
* Create codeql.yml

* Addressing codeql findings
2022-12-27 08:36:10 +01:00
LordGrey 1189f86c1a
Add Suspend/Resume support (#1535)
* Add Suspend/Resume support

* Support Suspend/Resume/Restart via API, UI and Systray

* Support screen lock/unlock scenario

* Handle idle scenario

* Align with fix for #1368

* Update Windows build

* Refactor SuspendHandler to maintain state

* Do not start BG-Effect, if system goes into suspend mode

* Correct Idle and Resume interaction
2022-12-22 12:40:39 +01:00
LordGrey 2217135336
Fixing outstanding issues (#1537)
* Correct stopEnableAttemptsTimer thread affinity

* Restart correctly, if running as service

* Add instance# in API response

* Qt6 updates

* Update fallthrough guide

* Update Compile warning
2022-12-19 14:04:35 +01:00
LordGrey 10b755b2ec
Refactor for Python 3.11 deprecated functions (#1538) 2022-12-19 13:14:35 +01:00
LordGrey c4e681f6b3
Rollover version 2022-12-03 22:22:24 +01:00
LordGrey b109703189 Version 2.0.14 2022-11-27 17:26:54 +01:00
LordGrey a2db590d2a
Fixes - Smoothing, Color-Calibration (#1532)
* Smoothing Remove ouputrate as duplicate to update frequency

* Serial LDEDDevices -Increase writeBlack to overcome issues on high baud rates

* Serial LED-Devices - Support device feedback, show statistics provided by HyperSerial

* Fix - Update Color Calibration on Remote Control when settings saved

* Serial LED-Devices - Support device feedback, show statistics provided by HyperSerial
2022-11-27 15:47:54 +01:00
Hyperion-Bot 46f996310d Update el.json (POEditor.com) 2022-11-26 17:30:36 +01:00
Hyperion-Bot dc8dc566e0 Update tr.json (POEditor.com) 2022-11-26 17:30:35 +01:00
Hyperion-Bot 4d0c3723de Update tr.json (POEditor.com) 2022-11-26 17:23:05 +01:00
Hyperion-Bot 29db3ba593 Update ca.json (POEditor.com) 2022-11-26 17:23:04 +01:00
Hyperion-Bot 6b17123259 Update tr.json (POEditor.com) 2022-11-26 17:23:03 +01:00
Hyperion-Bot 5098a7a11e Update sv.json (POEditor.com) 2022-11-26 17:23:01 +01:00
Hyperion-Bot 905515c46f Update es.json (POEditor.com) 2022-11-26 17:23:00 +01:00
Hyperion-Bot 1d12fe45ca Update de.json (POEditor.com) 2022-11-26 17:22:59 +01:00
Hyperion-Bot 1127087b52 Update fr.json (POEditor.com) 2022-11-26 17:22:58 +01:00
LordGrey 547a976000
New languages -Catalan & Greek (#1533) 2022-11-26 16:44:59 +01:00
xkns 7a31e2bb6d
Oklab: Fix rollover error (#1529)
* oklab: Removed unnecessary type conversions

* oklab: Fixed rollover error in color conversion
2022-11-24 18:15:10 +01:00
LordGrey 80aafa22ec Update for install-qt-action@v3 2022-11-07 22:00:58 +01:00
dependabot[bot] 1848744e6e
Bump peter-evans/repository-dispatch from 2.0.0 to 2.1.0 (#1523)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:12:08 +01:00
dependabot[bot] 97e5e01a27
Bump actions/download-artifact from 3.0.0 to 3.0.1 (#1524)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:11:54 +01:00
dependabot[bot] b1fe042a9f
Bump geekyeggo/delete-artifact from 1 to 2 (#1525)
Bumps [geekyeggo/delete-artifact](https://github.com/geekyeggo/delete-artifact) from 1 to 2.
- [Release notes](https://github.com/geekyeggo/delete-artifact/releases)
- [Commits](https://github.com/geekyeggo/delete-artifact/compare/v1...v2)

---
updated-dependencies:
- dependency-name: geekyeggo/delete-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:11:39 +01:00
dependabot[bot] 0ea1522000
Bump crazy-max/ghaction-import-gpg from 5.1.0 to 5.2.0 (#1526)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Changelog](https://github.com/crazy-max/ghaction-import-gpg/blob/v5.2.0/CHANGELOG.md)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 20:11:13 +01:00
LordGrey 06091b0786 Cleanup APT-builds 2022-11-07 16:57:08 +01:00
dependabot[bot] 49b83abcdf
Bump SamKirkland/FTP-Deploy-Action from 4.3.1 to 4.3.2 (#1517)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.1...4.3.2)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-05 23:01:21 +01:00
LordGrey 9df21b9ddd
Adalight - HyperSerial Support (#1515)
* HyperSerial support

* Migrate Adalight records to new structure

* Serial Devices - Select baud rate and allow providing a custom one
2022-09-30 17:02:40 +02:00
LordGrey e8fc8a9855
Add libjpeg-dev to test LIBJPEG_TURBO_VERSION_NUMBER (#1516) 2022-09-29 20:38:32 +02:00
LordGrey cb76afa4d9
Fix v4l2 MJPEG Processing (#1512)
* Fix MJPEG 3D and transform memory leak

* In 3D Crop only half to maintain ratio

* Support turbojpeg v1 and v2
2022-09-27 08:57:19 +02:00
LordGrey 9d23d9e2d6 Fix APT builds - Readd tarball 2022-09-07 08:12:13 +02:00
dependabot[bot] d219dac36c
Bump SamKirkland/FTP-Deploy-Action from 4.3.0 to 4.3.1 (#1508)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.3.0...4.3.1)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-06 14:03:20 +02:00
LordGrey 95e53b4720 Fix APT builds 2022-09-06 12:58:29 +02:00
LordGrey 9f6704118e
Fix - Logo should say "Lighting" not "Lightning" (#1510)
* Fix #1505 - Logo should say "Lighting" not "Lightning"

* Address LGTM findings

* Specify an image theme using html, as fragmented approach
2022-09-05 23:53:41 +02:00
Drzony 2008e2c3d7
Fix SEGFAULT in V4L2Grabber (#1503) 2022-08-19 10:22:10 +02:00
xkns 2fb2fc9dd7
Saturation & Brightness/Value Gain using Oklab color space (#1477)
* Imported Oklab reference implementation

* Add Okhsv conversions

* Fixed formatting error

* Add saturation and value gain to schemas

* Add english translation for saturation, value gain

* Created OkhsvTransform

* Make OkhsvTransform configurable

* Apply OkhvsTransform

* Clamped values during transform

* Precalculate isIdentity in OkhsvTransform

* Skip OkhsvTransform if it is the identity function

* Added changelog message

* Allow for full desaturation

* Imported recommended changes by LordGrey

* Fixed typo in constant

* Fixed anti-pattern in ok_color.h

* Correct indentions

* Correct remote-control

* Limited maximum gain settings to practical range

* Renane valueGain to brightnessGain for clarity and understanding

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
2022-08-17 23:26:19 +02:00
LordGrey a2266b177f
Improve Led Device on/off and background effect (#1502)
* Queue On-Off calls

* Do not switch-off LED-device when Background effect is enabled

* Fix LGTM Warnings

* Address LGTM findings
2022-08-14 23:02:30 +02:00
dependabot[bot] e17ce6cd4e
Bump crazy-max/ghaction-import-gpg from 5.0.0 to 5.1.0 (#1501)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Changelog](https://github.com/crazy-max/ghaction-import-gpg/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-01 16:21:34 +02:00
dependabot[bot] cef70af78d
Bump actions/upload-artifact from 2 to 3 (#1500)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-01 16:21:24 +02:00
dependabot[bot] ec553985b9
Bump actions/checkout from 2 to 3 (#1499)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-01 16:21:13 +02:00
LordGrey c7a1fc6b32
Fix Smoothing configuration (#1476)
* Fix Smoothing out of sync when saving

* Only force Smoothing for new devices

* Re-Add Max/Min Brightness titles

* UI - Fix: Correctly lookup current Instance Name in case instance IDs are not in order

* Fix/Update AtmoOrb Firmware images
2022-07-30 17:32:12 +02:00
LordGrey 8000c3e8b7 Align inputs names to crazy-max/ghaction-import-gpg v5 2022-07-25 07:44:10 +02:00
tuxuser abde114dc4
dependencies: Pin mbedtls to tagged version v3.1.0 (#1494)
* dependencies: Pin mbedtls to tagged version v3.1.0

* Update CMakeLists.txt

Remove extra space

Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
2022-07-24 21:54:58 +02:00
dependabot[bot] c47a3054d2
Bump SamKirkland/FTP-Deploy-Action from 4.1.0 to 4.3.0 (#1492)
Bumps [SamKirkland/FTP-Deploy-Action](https://github.com/SamKirkland/FTP-Deploy-Action) from 4.1.0 to 4.3.0.
- [Release notes](https://github.com/SamKirkland/FTP-Deploy-Action/releases)
- [Commits](https://github.com/SamKirkland/FTP-Deploy-Action/compare/4.1.0...4.3.0)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:44 +02:00
dependabot[bot] 19711f71fa
Bump crazy-max/ghaction-import-gpg from 3.1.0 to 5.0.0 (#1491)
Bumps [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) from 3.1.0 to 5.0.0.
- [Release notes](https://github.com/crazy-max/ghaction-import-gpg/releases)
- [Changelog](https://github.com/crazy-max/ghaction-import-gpg/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crazy-max/ghaction-import-gpg/compare/v3.1.0...v5.0.0)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-import-gpg
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:38 +02:00
dependabot[bot] 6946794680
Bump actions/download-artifact from 2.0.10 to 3.0.0 (#1490)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2.0.10 to 3.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2.0.10...v3.0.0)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:29 +02:00
dependabot[bot] 975f5cc309
Bump actions/cache from 2 to 3 (#1489)
Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:22 +02:00
dependabot[bot] e25d0a61a6
Bump peter-evans/repository-dispatch from 1.1.3 to 2.0.0 (#1488)
Bumps [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) from 1.1.3 to 2.0.0.
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v1.1.3...v2.0.0)

---
updated-dependencies:
- dependency-name: peter-evans/repository-dispatch
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-19 10:23:12 +02:00
James de41f014ec
Autoupdate github action (#1486)
This will keep stuff like `- uses: actions/checkout@v2` updated (v3 is latest) in Github Actions
2022-07-18 21:43:14 +02:00
Hyperion-Bot a608c336dc Update submodule rpi_ws281x 2022-06-28 02:05:32 +00:00
LordGrey 359618a4ee
Update Ubuntu Builds -2 2022-06-01 08:10:05 +02:00
LordGrey 400fa78679
Update Ubuntu Builds (#1474)
* Update builds for Ubuntu
* Update Compile HowTo
2022-05-31 12:29:49 +02:00
LordGrey ec496ed457
Allow forwarding of flat-/proto buffer input (#1471)
* Typo

* Address compiler Warnings

* Allow forwarding of flat-/proto buffer input
2022-05-29 17:47:08 +02:00
tuxuser 7c76322215 CMake: build-time test - backwards compatibility with older glibc (#1467) 2022-05-25 12:46:46 +02:00
LordGrey fdab2586a5 Rollover version and change-log after release 2022-05-23 11:21:16 +02:00
LordGrey 5dc696b8dc
Update version to 2.0.13 2022-05-22 13:18:53 +02:00
Hyperion-Bot 858e2bbff0 Update sv.json (POEditor.com) 2022-05-22 13:18:02 +02:00
Hyperion-Bot f0c0262dec Update ru.json (POEditor.com) 2022-05-22 13:18:01 +02:00
LordGrey ec71772f98
Fix OSX Bundling (#1465)
* Fix OSX Bundling

* Fix OSX Bundling - Refined

* editorial updates

* Update change log

* Update version references

* Update Link

* Test

* Pass ENABLE_EFFECTENGINE to install code, correct output messages
2022-05-22 08:01:49 +02:00
Hyperion-Bot 2ac8f30bb1 Update sv.json (POEditor.com) 2022-05-19 22:26:57 +02:00
Hyperion-Bot 62990974f5 Update hu.json (POEditor.com) 2022-05-19 22:26:56 +02:00
LordGrey 8f65f34247
Fix #1430 (#1464)
* Fix #1430 - ensure all config and sysinfo response are there before reloading the page

* Fix printout

* fix typo

* PriorityMuxer: Remove emit out of QMutableMapIteratorion

* Test - Build aarch64
2022-05-10 22:29:22 +02:00
imgbot[bot] 988ea97346
[ImgBot] Optimize images (#1463)
*Total -- 476.82kb -> 271.59kb (43.04%)

/doc/development/LedDevice_Flows.png -- 411.85kb -> 213.78kb (48.09%)
/resources/icons/restart.svg -- 0.60kb -> 0.47kb (22.17%)
/cmake/osxbundle/Background.png -- 64.36kb -> 57.34kb (10.92%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>

Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2022-05-10 22:28:44 +02:00
Hyperion-Bot a4b7490ed1 Update sv.json (POEditor.com) 2022-05-09 15:32:16 +02:00
Hyperion-Bot 3dc81e1a0c Update es.json (POEditor.com) 2022-05-09 15:32:15 +02:00
Hyperion-Bot 1311dc9d87 Update pt-br.json (POEditor.com) 2022-05-09 15:32:13 +02:00
Hyperion-Bot 3a15f35740 Update pl.json (POEditor.com) 2022-05-09 15:32:12 +02:00
Hyperion-Bot c7afa35127 Update hu.json (POEditor.com) 2022-05-09 15:32:10 +02:00
Hyperion-Bot 83c5b7fb4a Update da.json (POEditor.com) 2022-05-09 15:32:09 +02:00
Hyperion-Bot d5e796208b Update zh-CN.json (POEditor.com) 2022-05-09 15:32:08 +02:00
Hyperion-Bot e055fb9e15 Update de.json (POEditor.com) 2022-05-01 21:13:37 +02:00
LordGrey e9936e131b
mDNS Support (#1452)
* Allow build, if no grabbers are enabled

* Align available functions to right Qt version

* Update to next development version

* Align available functions to right Qt version

* fix workflows (apt/nightly)

* Disable QNetworkConfigurationManager deprecation warnings

* Initial go on Smart Pointers

* Add Deallocation

* Correct QT_WARNING_DISABLE_DEPRECATED (available since 5.9)

* Cluster Build Variables

* Hyperion Light

* Address build warnings

* Hyperion Light - UI

* Update Protobuf to latest master

* Removed compiler warnings

* Added restart ability to systray

* Correct Protobuf

* Ignore 'no-return' warning on protobuf build

* hyperion-remote: Fix auto discovery of hyperion server

* Fix Qt version override

* Update changelog

* Remove Grabber Components, if no Grabber exists

* Standalone Grabber - Fix fps default

* Remote Control - Have Source Selction accrosswhole screen

* Enable Blackborder detection only, if relevant input sources available

* Enable Blackborder detection only, if relevant input sources available

* Remote UI - rearrange containers

* Checkout

* Fix compilation on windows

* Re-added qmdnsengine template cmake

* chrono added for linux

* Removed existing AVAHI/Bonjour, allow to enable/disable mDNS

* hyperiond macos typo fix

* Fix macOS Bundle build

* Fix macOS bundle info details

* Correct CMake files

* Removed existing AVAHI/Bonjour (2)

* Share hyperion's services via mDNS

* Add mDNS Browser and mDNS for LED-Devices

* Support mDNS discovery for standalone grabbers

* Remove ZLib Dependency & Cleanup

* mDNS - hanle 2.local2 an ".local." domains equally

* Hue - Link discovery to bridge class, workaround port 443 for mDNS discovery

* Fix save button state when switching between devices

* Removed sessions (of other hyperions)

* mDNS Publisher - Simplify service naming

* mDNS refactoring & Forwarder discovery

* mDNS Updates to use device service name

* Consistency of standalone grabbers with mDNS Service Registry

* Merge branch 'hyperion-project:master' into mDNS

* Start JSON and WebServers only after Instance 0 is available

* Remove bespoke qDebug Output again

* MDNS updates and refactor Forwarder

* Minor updates

* Upgrade to CMake 3.1

* typo

* macOS fix

* Correct merge

* - Remove dynamic linker flag from standalone dispmanX Grabber
- Added ability to use system qmdns libs

* Cec handler library will load at runtime

* typo fix

* protobuf changes

* mDNS changes for Windows/macOS

* test window build qmdnsengine

* absolute path to protobuf cmake dir

* Rework Hue Wizard supporting mDNS

* LED-Devices - Retry support + Refactoring (excl. Hue)

* LED-Devices - Refactoring/Retry support Hue + additional alignments

* Address LGTM findings

* Fix CI-Build, revert test changes

* Build Windows in Release mode to avoid python problem

* Correct that WebServerObject is available earlier

* Ensure that instance name in logs for one instance are presented

* Update content LEDs

* Rework mDNS Address lookup

* Fix LED UI

* Fix for non mDNS Services (ignore default port)

* Disbale device when now input is available

* Revert back some updates, ensure last color is updated when switched on

* Handle reopening case and changed IP, port for API-calls

* Add UPD-DDP Device

* WLED support for DDP

* Fix printout

* LEDDevice - Allow more retries, udapte defaults

* LED-Net Devices - Select Custom device, if configured

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-05-01 19:42:47 +02:00
LordGrey 3ef4ebc1a4
New language: Japanese (#1462)
* New language: Japanese

* About - Add new libaries used
2022-05-01 19:17:53 +02:00
Paulchen-Panther f27010088d
WebUI fixes & Draggable LEDs (#1444)
* WebUI fixes & Draggable LEDs

* Correct some keystone issues

* Fix lgtm warnings (thx @Lord-Grey)

* Change of LGTM badge (code quality)

* Log output and LED preview window can be maximized

* Rework

* z-index of the corners corrected

* migrated to animate.css v4.1.1

* Fix collapsing & add gap constraints

* Address LGTM findings

* design refactor

* Typo fix (thx @Lord-Grey)

* Avoid overlap during keystone correction

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
2022-04-30 22:20:58 +02:00
Aaron Godfrey f721240e58
Fixed documentation link (#1461) 2022-04-30 20:30:04 +02:00
ShalokShalom 613ae7c922
add hardware support (#1457) 2022-04-27 17:46:36 +02:00
Hyperion-Bot 7f174b2872 Update submodule rpi_ws281x 2022-04-12 01:45:33 +00:00
LordGrey 2388044a93
Fix Iterator issue on Windows (#1450) 2022-04-11 08:54:09 +02:00
Markus addff6f7ef
Dynamic loading of the Dispmanx Grabber (#1440)
* BCM dynamic loading

* cleanup

* better handle start of dispmanx

* set GrabberWrapper pointer to null on exit

* Update DispmanxFrameGrabber.cpp
2022-03-20 14:42:21 +01:00
LordGrey f32db90c12
Fix Effects and refactor Smoothing (#1442) 2022-03-16 09:28:00 +01:00
LordGrey 62829d9bf8
Allow to disable switching LEDs on during startup (#1443) 2022-03-16 09:27:37 +01:00
Paulchen Panther c75c98e252 Update flatbuffers submodule 2022-03-15 20:41:28 +01:00
LordGrey 3e8c6f3b25
Update UI JS Libraries (#1441)
* Update Gijgo to 1.9.13

* Update DOMPurify 2.3.6

* Update Marked 4.0.12

* Update metismenu 3.0.7

* Issue Update Priority, if first LED changes for COLOR update (to reflect color correctly in UI)

* Add Yeelight W3 MultiColor

* Update to jquery 3.6.0
2022-03-13 16:38:28 +01:00
Paulchen Panther f9a5772aa5 Correction of the flatbuffer submodule
Automatic update only of submodule rpi_ws281x
2022-03-09 17:43:45 +01:00
Hyperion-Bot 4c472d50ca Update submodules 2022-03-09 01:23:58 +00:00
Paulchen Panther 15015a4257 Update submodules automatically at midnight 2022-03-08 20:19:01 +01:00
LordGrey 320ec00108
Quick Fix - SPI Device is excluded from build 2022-03-06 08:14:13 +01:00
LordGrey 5cd3881067
Hyperion Light updates (#1434)
* Hyperion Light - Allow hyperion remote as component

* Fix missing guard

* NSIS installation via Choco removed because already installed on windows server 2022

* Correct CMAKEList defaults

* Align package creation with build rules for components

* Fix Copy/Paste issue

Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-03-05 15:18:01 +01:00
tuxuser 14b6a114bb
libsrc/utils: Do not catch SIGILL signal (#1435)
libcrypto performs cpu feature checks on ARM platforms, by calling `OPENSSL_cpuid_setup`.
In there, it tries to call various instructions and traps `illegal instructions` aka. non-existing instructions itself.

However, as hyperion.ng also tries to trap all signals, the call inside libcrypto is propagated and hyperiond gets killed by itself.

This patch lets execution proceed, even when `SIGILL` occurs.

References:
- libcrypto OPENSSL_cpuid_setup: 954f45ba4c/crypto/armcap.c (L183)
2022-03-02 19:56:12 +01:00
LordGrey 160c5d0b3a
UI and Web updates (#1421)
* Stop Web-Capture when priority changes

* Remote control UI: Treat duration=0 as endless

* Stop Web-Capture on non-Image events changes

* LED Matrix Layout - Support vertical cabling direction

* Additional Yeelight models

* Treat http headers case insensitive

* Update change log

* Treat http headers case insensitive (consider Qt version)

* API - Consider provided format when setImage

* UI - Support Boblight configuration per LED instance

* Support multiple Boblight clients with different priorities

* Update changelog

* Simplify isGUI rules allowing for QT only builds

* Sysinfo: Fix indents

* LED-Devices: Show warning, if get properties failed

* Qt-Grabber: Fixed position handling of multiple monitors

* LED layout: Remove indention limitations

* Yeelight: Test YLTD003

* hyperion-remote: Provide image filename to muxer/UI

* Refactor PriorityMuxer and related

* Temp: Build under Windows 2019

* Yeelight: Remove YLTD003 as it is not working without additional changes

* Test Windows-latest with out removing redistributables/new MSVC

* correct workflows

* correct CI script

* Build Windows with Qt 5.15.2

* Priority Muxer: Updates after testing

* Fix Typo

* Update BGHandler

* QTGrabber - Reactivate windows code to avoid cursor issues

* Emit prioritiesChanged when autoselect was changed by user

Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-02-22 20:58:59 +01:00
Hyperion-Bot 0a3df596cf Update hu.json (POEditor.com) 2022-02-20 10:49:04 +01:00
Hyperion-Bot 51a1044787 Update sv.json (POEditor.com) 2022-02-15 20:58:16 +01:00
Hyperion-Bot f2d0857798 Update es.json (POEditor.com) 2022-02-15 20:58:15 +01:00
Hyperion-Bot 518e15a129 Update ru.json (POEditor.com) 2022-02-15 20:58:14 +01:00
Hyperion-Bot a14d9d1af5 Update pt-br.json (POEditor.com) 2022-02-15 20:58:12 +01:00
Hyperion-Bot 7651c71b63 Update pl.json (POEditor.com) 2022-02-15 20:58:10 +01:00
LordGrey 5078688dc8
Hyperion Light 2 (#1428)
* Hyperion Light - Have EffectEngine as component

* Hyperion light - Build switches for LED Devices (Serial, Network)

* Fix file uri generation

* Fix missing guard for Windows

* Fix file uri generation

* Update jsonschema and checkschema

* Allow to provide cmake build args to docker build
2022-02-11 20:36:15 +01:00
Paulchen Panther 9e4b58d5c6 Update submodule rpi_ws281x 2022-02-09 19:45:36 +01:00
Paulchen Panther da64ab58d5 update license and add privacy police 2022-02-08 17:23:54 +01:00
Markus a8342b4a6a
Reference reusable workflow locally 2022-01-27 21:14:04 +01:00
LordGrey 2efc03b612
Logging enhancement / fixes (#1419)
* Instance in logging output

* Fix: Trigger that previous log lines are shown in the Log UI
2022-01-22 17:48:03 +01:00
Markus 98654e48f6
Flatbuffer/Protobuf now able to receive rgba data (#1399)
* Flatbuffer/Protobuf now able to receive rgba data

* Proto/Flat schema comment added

* Prevent diveded by zero

* Address LGTM findings

* Fix EncoderThread & cleanup

Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
2022-01-09 17:23:50 +01:00
LordGrey 2f573a117f
Hyperion "Light", Build improvements and minor fixes (#1400)
* Allow build, if no grabbers are enabled

* Align available functions to right Qt version

* Update to next development version

* Align available functions to right Qt version

* fix workflows (apt/nightly)

* Disable QNetworkConfigurationManager deprecation warnings

* Initial go on Smart Pointers

* Add Deallocation

* Correct QT_WARNING_DISABLE_DEPRECATED (available since 5.9)

* Cluster Build Variables

* Hyperion Light

* Address build warnings

* Hyperion Light - UI

* Update Protobuf to latest master

* Removed compiler warnings

* Added restart ability to systray

* Correct Protobuf

* Ignore 'no-return' warning on protobuf build

* hyperion-remote: Fix auto discovery of hyperion server

* Fix Qt version override

* Update changelog

* Remove Grabber Components, if no Grabber exists

* Standalone Grabber - Fix fps default

* Remote Control - Have Source Selction accrosswhole screen

* Enable Blackborder detection only, if relevant input sources available

* Enable Blackborder detection only, if relevant input sources available

* Remote UI - rearrange containers

* - QT5/6 path for arm64 added
- Remove ZLib Dependency
- Fix macOS bundle info details
- Cleanup

Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
2022-01-07 14:47:51 +01:00
Jamie Burchell c38ec60208
Use direct URL of GIF file rather than HTML page (#1392) 2021-12-14 07:57:11 +01:00
LordGrey fcd0fb0c52
Fix #967 (#1378)
* Fix #967

* Start Smoothing in pause mode to avoid resource usage, if hyperion is started without active priority

* Update Changelog
2021-12-14 07:55:34 +01:00
LordGrey 442fab9c59
Fix/Workaround set-music error when music is already off (#1379)
* Fix/Workaround set-music error when music is already off

* Do not ignore error when setting music mode
2021-12-14 07:54:53 +01:00
Paulchen Panther a0d4efc10d fix workflows (apt/nightly) 2021-12-13 20:07:45 +01:00
LordGrey 17582ac38a
Correct isGUIApp tests 2021-12-04 18:00:20 +01:00
Markus 7840317cc0 Readme slightly improved 2021-12-03 12:17:43 +00:00
LordGrey e3b494428a
Fix standalone grabbers (#1384)
* Fix too much copy/paste
* Fix typo
* Commandlineoptions: Additional error details for Int and Double ranges
* Standalone grabbers: Show fps range on error, fix default host address
2021-11-29 18:51:03 +01:00
Markus 926a58de9c README dark/light mode 2021-11-24 18:32:02 +00:00
Markus df149583d3 Release 2.0.12 2021-11-21 13:26:17 +00:00
LordGrey 72d99a1121
Prep 2.0.12 Release (#1377)
* APA102 - Migrate ColorOrder to align with fix
* Address LGTM findings
* Updated Changelog with updates since last release
2021-11-20 16:20:01 +01:00
LordGrey 7311c3e424
Support MBEDTLS 3 (#1374)
* Support MBEDTLS 3

* mbedTLS 2 & 3 support (incl. System libs)

Co-authored-by: Markus <16664240+Paulchen-Panther@users.noreply.github.com>
2021-11-18 21:58:56 +01:00
Hyperion-Bot f156f52123 Update de.json (POEditor.com) 2021-11-18 21:53:51 +01:00
Hyperion-Bot c7e91c8c6d Update hu.json (POEditor.com) 2021-11-18 21:51:25 +01:00
Hyperion-Bot a5f970b975 Update da.json (POEditor.com) 2021-11-18 21:51:24 +01:00
LordGrey d395e0a3b1
New languages - Danish & Hungarian (#1376)
* New languages, Danish and Hungarian

* Yeelight Wizard - Ensure correct hostname
2021-11-18 21:48:11 +01:00
Hyperion-Bot ac941aebe1 Update de.json (POEditor.com) 2021-11-18 20:54:00 +01:00
Hyperion-Bot 06d72adbca Update sv.json (POEditor.com) 2021-11-18 20:42:03 +01:00
Hyperion-Bot 6181360785 Update es.json (POEditor.com) 2021-11-18 20:42:02 +01:00
Hyperion-Bot d8cb6b5479 Update ru.json (POEditor.com) 2021-11-18 20:42:00 +01:00
Hyperion-Bot fbf6886dfe Update pl.json (POEditor.com) 2021-11-18 20:41:59 +01:00
Hyperion-Bot 4c7ce6e509 Update nb.json (POEditor.com) 2021-11-18 20:41:58 +01:00
Hyperion-Bot 7d33d93b32 Update de.json (POEditor.com) 2021-11-18 20:41:57 +01:00
Hyperion-Bot 3c361cb2a2 Update fr.json (POEditor.com) 2021-11-18 20:41:55 +01:00
Markus dd3229d582
Nightly build fix 2021-11-18 17:18:34 +01:00
LordGrey 80ec037832
SettingsManager - Fix Migration Scenario 2021-11-17 22:38:15 +01:00
LordGrey ad293b2fb6
IPv6 support (#1369)
* hyperion-remote - Support IPv6

* LEDDevices - Remove IPv6 limitations

* Separate JsonEditorHostValidation

* Standalone grabbers & JSON/Flatbuffer forwarder: IPv6 support

* remote: Fix setting multiple colors via Hex, add standard logging

* IPv6 Updates -Add db migration activities

* Addressing non-Windows compile issues

* Code cleanup, address clang feedback

* Update address (hostname, IPv4/IPv6) help text

* Apply migration steps to "old" configurations imported

* Show user the UI-Url, if hyperion is already running, address clang findings

* Windows Cmake OpenSLL output

* Minor Text update
2021-11-17 21:30:43 +01:00
Markus b33466d392
APT update / Submodule updates / added updateHyperionUser script again (#1366)
* Test new APT builds

* test build

* final changes for bookworm and jammy

* - Include updateHyperionUser script again
- Update package dependencies for APT builds

* Installation guide updated

* Removed alpha notes and added arm64 APT builds

* update docker-compile script

* Overwrite CMAKE_SYSTEM_PROCESSOR on Windows builds
2021-11-17 20:35:28 +01:00
LordGrey 67280b8566
Razor Chroma Support - Initial version (#1054)
* Razor Chroma Support - Initial version

* Address clang and lgtm findings

* Razer Fixes

* Merge branch 'master' into Razer_Chroma_Support

# Conflicts:
#	assets/webconfig/i18n/en.json
#	assets/webconfig/js/content_leds.js
#	libsrc/leddevice/dev_net/ProviderRestApi.cpp
#	libsrc/leddevice/dev_net/ProviderRestApi.h

* Corrections

* Set default config for Razer

* Simplify

* Razer - Support individual LEDs and have default layout per device type

* Differentiate between HWLEDCount and LayoutLEDCount

* Revert "Differentiate between HWLEDCount and LayoutLEDCount"

This reverts commit b147b215a5.

* Correct LGTM finding

* Disable verbose mode
2021-11-17 20:34:49 +01:00
LordGrey 25d79a9f3f
Qt6 support (#1363)
* Initial Qt6 config

* Change Package order to reingfence missing packages

* Update to QT 6.2.0

* Qt 6.2.0 updates

* macOS fix

* Simplify handling QT5 & Qt6 in parallel

* Updates for Windows

* Fix macos build

* macOS linker fix

* General support of QTDIR, update docu

* MaxOS add default qt directories

* Fix merge typo

* Update default CMakeSettings.json with installation path options

* Add additional libs required by Qt6 to CompileHowTo

* Fix Qt5 items

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2021-11-16 18:12:56 +01:00
LordGrey 3b1ca20b10
Update restart.html 2021-11-07 18:11:17 +01:00
LordGrey b8bb1adbba
Update docker-compile.sh 2021-11-07 17:47:01 +01:00
LordGrey b0c529c05d
EffectModule - Fix 2021-11-04 09:40:12 +01:00
LordGrey 954112a88e
APA102 protocol fix (#1352) (#1361)
* Fix APA102 protocoll

* Minor clean-ups

* Revert updates
2021-10-28 19:54:54 +02:00
Markus ba32b875ab nightly build fix 2021-10-26 17:55:33 +00:00
LordGrey e51a42dc14
Update content_index.js (#1360) 2021-10-20 21:21:25 +02:00
Markus 8b1267d059
Fixed 3rd Party License on About Page 2021-10-17 21:44:05 +02:00
Markus 3761ff47d2 Alpha phase is completed. New version 2.0.12 2021-10-17 11:29:20 +00:00
Markus a1dee08195
Drag'n Drop for macOS / Fix #1109 / ... (#1353) 2021-10-16 14:07:36 +02:00
LordGrey c9a7258160
Fix API Subscription initialisation (#1354)
* Fix #1352,#1351

* Fix/Add details on client address
2021-10-16 13:55:23 +02:00
LordGrey 532ac7e330
Fix Database migration version handling (#1356) 2021-10-16 13:54:18 +02:00
Markus ac1dad77e3
Run nightly build not on forks 2021-10-10 12:24:03 +02:00
Markus 23470ac90a Commit check for nightly build workflow 2021-10-09 11:31:07 +00:00
Markus 084e28f0ca Commit check for nightly builds 2021-10-09 11:10:55 +00:00
Markus 788e843846 Changed workflow process
Added nightly build workflow for APT
Debian prerm script corrected
2021-10-08 20:29:58 +00:00
LordGrey 4db8afda87
Update CHANGELOG.md 2021-10-06 09:38:57 +02:00
505 changed files with 46011 additions and 20737 deletions

View File

@ -3,6 +3,7 @@
# detect CI
if [ "$HOME" != "" ]; then
# GitHub Actions
echo "Github Actions detected"
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
CI_BUILD_DIR="$GITHUB_WORKSPACE"
else
@ -20,8 +21,11 @@ else
PLATFORM=${PLATFORM}-dev
fi
echo "Platform: ${PLATFORM}, build type: ${BUILD_TYPE}, CI_NAME: $CI_NAME, docker image: ${DOCKER_IMAGE}, docker type: ${DOCKER_TAG}"
# Build the package on osx or linux
if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
echo "Compile Hyperion on OSX or Darwin"
# compile prepare
mkdir build || exit 1
cd build
@ -31,12 +35,13 @@ if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ $CI_NAME == *"mingw64_nt"* || "$CI_NAME" == 'windows_nt' ]]; then
echo "Compile Hyperion on Windows"
# compile prepare
echo "Number of Cores $NUMBER_OF_PROCESSORS"
mkdir build || exit 1
cd build
cmake -G "Visual Studio 16 2019" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2
cmake --build . --target package --config Release -- -nologo -v:m -maxcpucount || exit 3
cmake -G "Visual Studio 17 2022" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE="Release" ../ || exit 2
cmake --build . --target package --config "Release" -- -nologo -v:m -maxcpucount || exit 3
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ "$CI_NAME" == 'linux' ]]; then

View File

@ -1,76 +0,0 @@
# Hyperion.NG .codedocs Configuration File
#---------------------------------------------------------------------------
# CodeDocs Configuration
#---------------------------------------------------------------------------
# Include the Doxygen configuration from another file.
# The file must be a relative path with respect to the root of the repository.
DOXYFILE =
# Specify external repository to link documentation with.
# This is similar to Doxygen's TAGFILES option, but will automatically link to
# tags of other repositories already using CodeDocs. List each repository to
# link with by giving its location in the form of owner/repository.
# For example:
# TAGLINKS = doxygen/doxygen CodeDocs/osg
# Note: these repositories must already be built on CodeDocs.
TAGLINKS =
#---------------------------------------------------------------------------
# Doxygen Configuration
#---------------------------------------------------------------------------
# Doxygen configuration may also be placed in this file.
# Currently, the following Doxygen configuration options are available. Refer
# to http://doxygen.org/manual/config.html for detailed explanation of the
# options. To request support for more options, contact support@codedocs.xyz.
#
# ABBREVIATE_BRIEF =
# ALIASES =
# ALPHABETICAL_INDEX =
# ALWAYS_DETAILED_SEC =
# CASE_SENSE_NAMES =
# CLASS_DIAGRAMS =
# DISABLE_INDEX =
# DISTRIBUTE_GROUP_DOC =
# EXAMPLE_PATH =
EXCLUDE = .ci/ \
assets/ \
bin/
config/ \
effects/ \
test/ \
# EXCLUDE_PATTERNS =
# EXCLUDE_SYMBOLS =
# EXTENSION_MAPPING =
# EXTRACT_LOCAL_CLASSES =
# FILE_PATTERNS =
# GENERATE_TAGFILE =
# GENERATE_TREEVIEW =
# HIDE_COMPOUND_REFERENCE =
# HIDE_SCOPE_NAMES =
# HIDE_UNDOC_CLASSES =
# HIDE_UNDOC_MEMBERS =
# HTML_TIMESTAMP =
# INLINE_GROUPED_CLASSES =
# INPUT_ENCODING =
# INTERNAL_DOCS =
# OPTIMIZE_OUTPUT_FOR_C =
PROJECT_BRIEF = "The successor to Hyperion aka Hyperion Next Generation"
PROJECT_NAME = "Hyperion.NG"
# PROJECT_NUMBER =
# SHORT_NAMES =
# SHOW_FILES =
# SHOW_INCLUDE_FILES =
# SHOW_NAMESPACES =
# SORT_BRIEF_DOCS =
# SORT_BY_SCOPE_NAME =
# SORT_MEMBER_DOCS =
# STRICT_PROTO_MATCHING =
# TYPEDEF_HIDES_STRUCT =
USE_MDFILE_AS_MAINPAGE = README.md
# VERBATIM_HEADERS =
#

View File

@ -16,5 +16,5 @@
},
},
"forwardPorts": [8090, 8092],
"postCreateCommand": "git submodule update --recursive --init && sudo apt-get update && sudo apt-get install -y git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev zlib1g-dev"
"postCreateCommand": "git submodule update --recursive --init && sudo apt-get update && sudo apt-get install -y git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev"
}

4
.github/config/codeql.yml vendored Normal file
View File

@ -0,0 +1,4 @@
name: "CodeQL config"
paths-ignore:
- 'dependencies/external/'
- 'assets/webconfig/js/lib'

7
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

View File

@ -1,17 +1,20 @@
PullRequest:
opened: |
Hello @$AUTHOR :wave:
Hello @$AUTHOR :wave:
I'm your friendly neighborhood bot and would like to say thank you for
submitting a pull request to Hyperion!
I'm the Hyperion Project Bot and I want to thank you for
contributing to Hyperion with your pull requests!
So that you and other users can test your changes more quickly,
you can find your workflow artifacts [here](https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID).
To help you and other users test your pull requests faster,
I'll create a link for you to your workflow artifacts.
If you make changes to your PR, i create a new link to your workflow artifacts.
:link: https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID
Of course, if you make changes to your PR, I will create a new link.
Best regards,
Hyperion-Project
Hyperion Project
synchronize: |
[Here](https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID) is your new link to your workflow artifacts.
Hey @$AUTHOR I created a new link to your workflow artifacts:
:link: https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID

View File

@ -1,82 +0,0 @@
{
"include":
[
{
"distribution": "Bionic",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls10, libturbojpeg, libcec4",
"description": "Ubuntu 18.04 (Bionic Beaver) (amd64)"
},
{
"distribution": "Focal",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec4",
"description": "Ubuntu 20.04 (Focal Fossa) (amd64)"
},
{
"distribution": "Groovy",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec6",
"description": "Ubuntu 20.10 (Groovy Gorilla) (amd64)"
},
{
"distribution": "Hirsute",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec6",
"description": "Ubuntu 21.04 (Hirsute Hippo) (amd64)"
},
{
"distribution": "Impish",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg, libcec6",
"description": "Ubuntu 21.10 (Impish Indri) (amd64)"
},
{
"distribution": "Stretch",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl1.0-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls10, libturbojpeg0, libcec4",
"description": "Debian 9.x (Stretch) (amd64)"
},
{
"distribution": "Stretch",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, zlib1g-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls10, libturbojpeg0, libcec4",
"description":"Debian 9.x (Stretch) (armhf)"
},
{
"distribution": "Buster",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec4",
"description": "Debian 10.x (Buster) (amd64)"
},
{
"distribution": "Buster",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, zlib1g-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec4",
"description": "Debian 10.x (Buster) (armhf)"
},
{
"distribution": "Bullseye",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, libturbojpeg0-dev, libssl-dev, zlib1g-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec6",
"description": "Debian 11.x (Bullseye) (amd64)"
},
{
"distribution": "Bullseye",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libavahi-core-dev, libavahi-compat-libdnssd-dev, zlib1g-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libmbedtls-dev",
"package-depends": "libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libavahi-compat-libdnssd1, libmbedtls12, libturbojpeg0, libcec6",
"description": "Debian 11.x (Bullseye) (armhf)"
}
]
}

View File

@ -1,22 +1,48 @@
name: Hyperion APT Build
on:
push:
branches:
- '**'
tags:
- '*'
workflow_call:
inputs:
head_sha:
type: string
description: The branch, tag or SHA to checkout
required: true
secrets:
APT_GPG:
required: true
APT_USER:
required: true
APT_PASSWORD:
required: true
APT_DRAFT:
required: true
workflow_dispatch:
inputs:
head_sha:
type: string
description: The branch, tag or SHA to checkout
required: true
secrets:
APT_GPG:
required: true
APT_USER:
required: true
APT_PASSWORD:
required: true
APT_DRAFT:
required: true
jobs:
setup:
name: Setup APT build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set APT matrix
id: apt-ppa
run: |
APT=$(echo $(cat .github/workflows/apt.json) | jq --compact-output .)
echo "::set-output name=apt::$APT"
APT=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
echo "apt=$APT" >> $GITHUB_OUTPUT
outputs:
apt-matrix: ${{ steps.apt-ppa.outputs.apt }}
@ -28,49 +54,67 @@ jobs:
matrix: ${{ fromJson(needs.setup.outputs.apt-matrix) }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.head_sha || github.event.client_payload.head_sha }}
submodules: true
- name: Generate environment variables
run: |
tr -d '\n' < .version > temp && mv temp .version
VERSION=$(cat .version)
echo VERSION=${VERSION} >> $GITHUB_ENV
if [[ $VERSION == *"-"* ]]; then
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
else
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
fi
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build package
shell: bash
run: |
tr -d '\n' < .version > temp && mv temp .version
mkdir -p "${GITHUB_WORKSPACE}/deploy"
docker run --rm \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
ghcr.io/hyperion-project/${{ matrix.architecture }}:$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') \
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
/bin/bash -c "cd /source && \
mkdir -p debian/source && echo '3.0 (quilt)' > debian/source/format && \
dch --create --distribution $(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') --package 'hyperion' -v '$(cat .version)~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]')' '${{ github.event.commits[0].message }}' && \
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
cp -fr LICENSE debian/copyright && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g' debian/control.in > debian/control && \
tar cf ../hyperion_2.0.0.orig.tar . && \
xz -9 ../hyperion_2.0.0.orig.tar && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
debuild --no-lintian -uc -us && \
cp ../hyperion_* /deploy"
cp ../hyperion_*.deb /deploy"
- name: Upload package artifact
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2.2.4
if: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
path: deploy
retention-days: 1
publish:
name: Publish APT packages
if: startsWith(github.event.ref, 'refs/tags')
if: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}
needs: [setup, build]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.head_sha || github.event.client_payload.head_sha }}
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v3.1.0
uses: crazy-max/ghaction-import-gpg@v6.0.0
with:
gpg-private-key: ${{ secrets.APT_GPG }}
gpg_private_key: ${{ secrets.APT_GPG }}
- name: Install reprepro
run: sudo apt -y install reprepro
@ -87,11 +131,11 @@ jobs:
reprepro -Vb apt export
- name: Download artifacts
uses: actions/download-artifact@v2.0.10
uses: actions/download-artifact@v3.0.2
- name: Include artifacts into the package source
run: |
for file in artifact/*.deb; do
for file in artifact/hyperion_*.deb; do
if [ -f "$file" ]; then
dist=${file#*~}
dist=${dist%_*}
@ -99,26 +143,12 @@ jobs:
fi
done
- name: Upload packages to APT server
uses: SamKirkland/FTP-Deploy-Action@4.0.0
- name: Upload packages to APT server (DRAFT)
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: apt.hyperion-project.org
username: ${{ secrets.APT_USER }}
password: ${{ secrets.APT_PASSWORD }}
local-dir: "./apt/"
server-dir: "./"
hyperbian:
name: Update HyperBian Release
if: startsWith(github.event.ref, 'refs/tags')
needs: [setup, build, publish]
runs-on: ubuntu-latest
steps:
# Dispatch event to build new HyperBian image
- name: Dispatch HyperBian build
uses: peter-evans/repository-dispatch@v1
if: ${{ github.repository_owner == 'hyperion-project'}}
with:
repository: hyperion-project/HyperBian
token: ${{ secrets.HYPERION_BOT_TOKEN }}
event-type: hyperion_push
server-dir: ${{ secrets.APT_DRAFT }}
dangerous-clean-slate: true

58
.github/workflows/apt/amd64.json vendored Normal file
View File

@ -0,0 +1,58 @@
[
{
"distribution": "Focal",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (amd64)"
},
{
"distribution": "Jammy",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (amd64)"
},
{
"distribution": "Kinetic",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (amd64)"
},
{
"distribution": "Lunar",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 23.04 (Lunar Lobster) (amd64)"
},
{
"distribution": "Buster",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (amd64)"
},
{
"distribution": "Bullseye",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (amd64)"
},
{
"distribution": "Bookworm",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (amd64)"
}
]

51
.github/workflows/apt/arm64.json vendored Normal file
View File

@ -0,0 +1,51 @@
[
{
"distribution": "Focal",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (arm64)"
},
{
"distribution": "Jammy",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (arm64)"
},
{
"distribution": "Kinetic",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (arm64)"
},
{
"distribution": "Buster",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (arm64)"
},
{
"distribution": "Bullseye",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (arm64)"
},
{
"distribution": "Bookworm",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (arm64)",
"exclude" : true
}
]

51
.github/workflows/apt/armhf.json vendored Normal file
View File

@ -0,0 +1,51 @@
[
{
"distribution": "Focal",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (armhf)"
},
{
"distribution": "Jammy",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (armhf)"
},
{
"distribution": "Kinetic",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (armhf)"
},
{
"distribution": "Buster",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl1.0-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (armhf)"
},
{
"distribution": "Bullseye",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (armhf)"
},
{
"distribution": "Bookworm",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (armhf)",
"exclude" : true
}
]

View File

@ -1,5 +1,6 @@
name: Clean artifacts
# Run cleanup workflow at the end of every day
on:
schedule:
- cron: '0 0 * * *'

76
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,76 @@
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: "36 18 * * 4"
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ python, javascript, cpp ]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Packages (cpp)
if: ${{ matrix.language == 'cpp' }}
run: |
sudo apt-get update
sudo apt-get install --yes git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
config-file: ./.github/config/codeql.yml
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{ matrix.language }}"
upload: False
output: sarif-results
- name: Filter SARIF
uses: advanced-security/filter-sarif@v1
with:
patterns: |
-**/dependencies/**
-**/moc_*.cpp
-**/libsrc/flatbufserver/hyperion_request_generated.h
-**/libsrc/protoserver/message.pb.cc
-**/libsrc/protoserver/message.pb.h
input: sarif-results/${{ matrix.language }}.sarif
output: sarif-results/${{ matrix.language }}.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: sarif-results/${{ matrix.language }}.sarif
- name: Upload loc as a Build Artifact
uses: actions/upload-artifact@v3
with:
name: sarif-results
path: sarif-results
retention-days: 1

187
.github/workflows/nightly.yml vendored Normal file
View File

@ -0,0 +1,187 @@
name: Nightly build
# Create nightly builds at the end of every day
on:
schedule:
- cron: '0 0 * * *'
repository_dispatch:
types: [hyperion_nightly_push]
jobs:
update:
name: Update Submodule rpi_ws281x
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
submodules: recursive
- name: Update Submodule rpi_ws281x
id: update
run: git submodule update --remote --recursive dependencies/external/rpi_ws281x
- name: Check git status
id: status
run: echo "status=$(git status -s)" >> $GITHUB_OUTPUT
- name: Add and commit changes
if: ${{ steps.status.outputs.status }}
run: |
git config --local user.email "20935312+Hyperion-Bot@users.noreply.github.com"
git config --local user.name "Hyperion-Bot"
git config --local diff.ignoreSubmodules dirty
git commit -am "Update submodule rpi_ws281x"
- name: Push changes
if: ${{ steps.status.outputs.status }}
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.HYPERION_BOT_TOKEN }}
branch: ${{ github.ref }}
check:
name: Compare local <-> nightly
needs: [update]
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check if commit has changed
id: build-necessary
run: |
if wget --spider "https://nightly.apt.hyperion-project.org/$(git rev-parse --short HEAD)" 2>/dev/null; then
echo "commit-has-changed=false" >> $GITHUB_OUTPUT
else
echo "commit-has-changed=true" >> $GITHUB_OUTPUT
fi
outputs:
build-nightly: ${{ steps.build-necessary.outputs.commit-has-changed }}
setup:
name: Setup nightly build
needs: [check]
if: ${{ needs.check.outputs.build-nightly == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set nightly matrix
id: nightly-ppa
run: |
NIGHTLY=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
echo "nightly=$NIGHTLY" >> $GITHUB_OUTPUT
outputs:
nightly-matrix: ${{ steps.nightly-ppa.outputs.nightly }}
build:
name: ${{ matrix.description }}
needs: [setup]
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.nightly-matrix) }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Generate environment variables
run: |
echo "$(tr -d '\n' < .version)+nightly$(date '+%Y%m%d')$(git rev-parse --short HEAD)" > .version
VERSION=$(cat .version)
echo VERSION=${VERSION} >> $GITHUB_ENV
if [[ $VERSION == *"-"* ]]; then
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
else
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
fi
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build package
shell: bash
run: |
mkdir -p "${GITHUB_WORKSPACE}/deploy"
docker run --rm \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
/bin/bash -c "cd /source && \
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
cp -fr LICENSE debian/copyright && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
debuild --no-lintian -uc -us && \
cp ../hyperion_*.deb /deploy"
- name: Upload package artifact
uses: actions/upload-artifact@v3
with:
path: deploy
retention-days: 1
publish:
name: Publish nightly packages
needs: [setup, build]
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6.0.0
with:
gpg_private_key: ${{ secrets.APT_GPG }}
- name: Install reprepro
run: sudo apt -y install reprepro
- name: Make build folders, export public GPG key, copy distributions file and create short sha file for nightly build check
run: |
mkdir -p nightly/{conf,dists,db}
gpg --armor --output nightly/hyperion.pub.key --export 'admin@hyperion-project.org'
cp debian/distributions nightly/conf/distributions
touch "nightly/$(git rev-parse --short HEAD)"
- name: Create initial structure/packages files and symbolic links
run: |
reprepro -Vb nightly createsymlinks
reprepro -Vb nightly export
- name: Download artifacts
uses: actions/download-artifact@v3.0.2
- name: Include artifacts into the package source
run: |
for file in artifact/*.deb; do
if [ -f "$file" ]; then
dist=${file#*~}
dist=${dist%_*}
reprepro -Vb nightly/ includedeb "$dist" "$file"
fi
done
- name: Upload packages to nightly server
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: nightly.apt.hyperion-project.org
username: ${{ secrets.NIGHTLY_USER }}
password: ${{ secrets.NIGHTLY_PASSWORD }}
local-dir: "./nightly/"
server-dir: "./"
dangerous-clean-slate: true
- name: Remove intermediate artifacts
uses: geekyeggo/delete-artifact@v2
with:
name: artifact
failOnError: false

View File

@ -18,23 +18,23 @@ jobs:
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
include:
- dockerImage: x86_64
dockerName: Debian Stretch (x86_64)
dockerName: Debian Buster (x86_64)
platform: x11
- dockerImage: armv6l
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
dockerName: Debian Buster (Raspberry Pi v1 & ZERO)
platform: rpi
- dockerImage: armv7l
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
dockerName: Debian Buster (Raspberry Pi 2 & 3)
platform: rpi
- dockerImage: aarch64
dockerName: Debian Stretch (Generic AARCH64)
dockerName: Debian Buster (Generic AARCH64)
platform: amlogic
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# Append PR number to .version
- name: Append PR number to version
@ -47,7 +47,7 @@ jobs:
- name: Build packages
env:
DOCKER_IMAGE: ${{ matrix.dockerImage }}
DOCKER_TAG: stretch
DOCKER_TAG: buster
DOCKER_NAME: ${{ matrix.dockerName }}
PLATFORM: ${{ matrix.platform }}
shell: bash
@ -59,15 +59,13 @@ jobs:
run: |
mkdir -p ${{ matrix.dockerImage }}
mv deploy/*.tar.gz ${{ matrix.dockerImage }}
if: matrix.dockerImage != 'aarch64'
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.dockerImage }}
path: ${{ matrix.dockerImage }}
if: matrix.dockerImage != 'aarch64'
######################
###### macOS #########
@ -78,9 +76,9 @@ jobs:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# Append PR number to .version
- name: Append PR number to version
@ -106,11 +104,11 @@ jobs:
shell: bash
run: |
mkdir -p macOS
mv build/*.tar.gz macOS
mv build/*.dmg macOS
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: macOS
path: macOS
@ -121,15 +119,15 @@ jobs:
windows:
name: Windows
runs-on: windows-latest
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
QT_VERSION: 5.15.0
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 5.15.2
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# Append PR number to .version
- name: Append PR number to version
@ -138,37 +136,31 @@ jobs:
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
- name: Cache Qt
uses: actions/cache@v2
id: cache-qt-windows
with:
path: ${{ runner.workspace }}/Qt
key: ${{ runner.os }}-Qt.${{ env.QT_VERSION }}
- name: Install Qt
uses: jurplel/install-qt-action@v2
uses: jurplel/install-qt-action@v3
with:
version: ${{env.QT_VERSION}}
target: 'desktop'
arch: 'win64_msvc2019_64'
cached: ${{ steps.cache-qt-windows.outputs.cache-hit }}
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: Cache Chocolatey downloads
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}-chocolatey
- name: "Remove Redistributable"
shell: cmd
run: |
MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
# - name: Install Python
# shell: powershell
# run: |
# choco install --no-progress python -y
- name: Install Python, NSIS, OpenSSL, DirectX SDK
- name: Install OpenSSL, DirectX SDK
shell: powershell
run: |
choco install --no-progress python nsis openssl directx-sdk -y
choco install --no-progress openssl --version=1.1.1.2100 -y
choco install --no-progress directx-sdk -y
- name: Install libjpeg-turbo
run: |
@ -195,7 +187,7 @@ jobs:
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: windows
path: windows

View File

@ -8,9 +8,9 @@ on:
jobs:
######################
###### Linux #########
######################
###################
###### Linux ######
###################
Linux:
name: ${{ matrix.dockerName }}
@ -20,118 +20,112 @@ jobs:
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
include:
- dockerImage: x86_64
dockerName: Debian Stretch (x86_64)
dockerName: Debian Buster (x86_64)
platform: x11
- dockerImage: armv6l
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
dockerName: Debian Buster (Raspberry Pi v1 & ZERO)
platform: rpi
- dockerImage: armv7l
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
dockerName: Debian Buster (Raspberry Pi 2 & 3)
platform: rpi
- dockerImage: aarch64
dockerName: Debian Stretch (Generic AARCH64)
dockerName: Debian Buster (Generic AARCH64)
platform: amlogic
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# build process
# Build process
- name: Build packages
env:
DOCKER_IMAGE: ${{ matrix.dockerImage }}
DOCKER_TAG: stretch
DOCKER_TAG: buster
DOCKER_NAME: ${{ matrix.dockerName }}
PLATFORM: ${{ matrix.platform }}
shell: bash
run: ./.ci/ci_build.sh
# upload artifacts (only on tagged commit)
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
path: deploy/Hyperion-*
######################
###### macOS #########
######################
###################
###### macOS ######
###################
macOS:
name: macOS
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
with:
submodules: true
submodules: recursive
# install dependencies
# Install dependencies
- name: Install dependencies
shell: bash
run: ./.ci/ci_install.sh
# build process
# Build process
- name: Build packages
env:
PLATFORM: osx
shell: bash
run: ./.ci/ci_build.sh
# upload artifacts (only on tagged commit)
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
path: build/Hyperion-*
######################
###### Windows #######
######################
#####################
###### Windows ######
#####################
windows:
name: Windows
runs-on: windows-latest
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
QT_VERSION: 5.15.0
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 5.15.2
steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v4
with:
submodules: true
- name: Cache Qt
uses: actions/cache@v2
id: cache-qt-windows
with:
path: ${{ runner.workspace }}/Qt
key: ${{ runner.os }}-Qt.${{ env.QT_VERSION }}
submodules: recursive
- name: Install Qt
uses: jurplel/install-qt-action@v2
uses: jurplel/install-qt-action@v3
with:
version: ${{ env.QT_VERSION }}
version: ${{env.QT_VERSION}}
target: 'desktop'
arch: 'win64_msvc2019_64'
cached: ${{ steps.cache-qt-windows.outputs.cache-hit }}
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: Cache Chocolatey downloads
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}-chocolatey
- name: "Remove Redistributable"
shell: cmd
run: |
MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
# - name: Install Python
# shell: powershell
# run: |
# choco install --no-progress python -y
- name: Install Python, NSIS, OpenSSL, DirectX SDK
- name: Install OpenSSL, DirectX SDK
shell: powershell
run: |
choco install --no-progress python nsis openssl directx-sdk -y
choco install --no-progress openssl --version=1.1.1.2100 -y
choco install --no-progress directx-sdk -y
- name: Install libjpeg-turbo
run: |
@ -149,16 +143,17 @@ jobs:
shell: bash
run: ./.ci/ci_build.sh
# upload artifacts (only on tagged commit)
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
path: build/Hyperion-*
retention-days: 1
#######################################
###### Publish GitHub Releases ########
#######################################
#####################################
###### Publish GitHub Releases ######
#####################################
github_publish:
name: Publish GitHub Releases
@ -167,27 +162,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
# generate environment variables
# Generate environment variables
- name: Generate environment variables from .version and tag
run: |
echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
echo "VERSION=$(tr -d '\n' < .version)" >> $GITHUB_ENV
echo "preRelease=false" >> $GITHUB_ENV
# If version contains alpha or beta, mark draft release as pre-release
- name: Mark release as pre-release
if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta')
run: echo "preRelease=true" >> $GITHUB_ENV
# Download artifacts from previous build process
- name: Download artifacts
uses: actions/download-artifact@v2
uses: actions/download-artifact@v3.0.2
with:
path: artifacts
# create draft release and upload artifacts
# Create draft release and upload artifacts
- name: Create draft release
uses: softprops/action-gh-release@v1
with:
@ -195,6 +184,18 @@ jobs:
tag_name: ${{ env.TAG }}
files: "artifacts/**"
draft: true
prerelease: ${{ env.preRelease }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
##########################
###### APT workflow ######
##########################
apt_build:
name: APT Build GitHub Releases
if: startsWith(github.event.ref, 'refs/tags')
needs: [Linux, macOS, windows]
uses: ./.github/workflows/apt.yml
secrets: inherit
with:
head_sha: master

18
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,18 @@
name: Release Actions
on:
release:
types: [published]
jobs:
hyperbian:
name: Let HyperBian create
runs-on: ubuntu-latest
steps:
# Dispatch event to build new HyperBian image
- name: Dispatch HyperBian build
uses: peter-evans/repository-dispatch@v2.1.2
if: ${{ github.repository_owner == 'hyperion-project'}}
with:
repository: hyperion-project/HyperBian
token: ${{ secrets.HYPERION_BOT_TOKEN }}
event-type: hyperion_push

4
.gitignore vendored
View File

@ -30,8 +30,12 @@ libsrc/flatbufserver/hyperion_request_generated.h
# Ignore
.vs/*
CMakeSettings.json
/out
# Allow
!.vs/launch.vs.json
# LedDevice 'File' output
NULL
# Docker deploy folder
deploy/*

9
.gitmodules vendored
View File

@ -8,5 +8,10 @@
branch = master
[submodule "dependencies/external/protobuf"]
path = dependencies/external/protobuf
url = https://github.com/hyperion-project/protobuf.git
branch = master
url = https://github.com/protocolbuffers/protobuf
[submodule "dependencies/external/qmdnsengine"]
path = dependencies/external/qmdnsengine
url = https://github.com/nitroshare/qmdnsengine.git
[submodule "dependencies/external/mbedtls"]
path = dependencies/external/mbedtls
url = ../../Mbed-TLS/mbedtls.git

View File

@ -1,27 +0,0 @@
extraction:
cpp:
prepare:
packages:
- "git"
- "cmake"
- "build-essential"
- "qtbase5-dev"
- "libqt5serialport5-dev"
- "libqt5sql5-sqlite"
- "libqt5svg5-dev"
- "libqt5x11extras5-dev"
- "libusb-1.0-0-dev"
- "python3-dev"
- "libcec-dev"
- "libxcb-image0-dev"
- "libxcb-util0-dev"
- "libxcb-shm0-dev"
- "libxcb-render0-dev"
- "libxcb-randr0-dev"
- "libxrandr-dev"
- "libxrender-dev"
- "libavahi-core-dev"
- "libavahi-compat-libdnssd-dev"
- "libturbojpeg0-dev"
- "libssl-dev"
- "zlib1g-dev"

View File

@ -1 +1 @@
2.0.0-alpha.11
2.0.16-beta.1

View File

@ -16,7 +16,6 @@
"ms-vscode.cmake-tools",
"spmeesseman.vscode-taskexplorer",
"yzhang.markdown-all-in-one",
"CoenraadS.bracket-pair-colorizer",
"vscode-icons-team.vscode-icons",
"editorconfig.editorconfig"
]

12
.vscode/launch.json vendored
View File

@ -33,6 +33,18 @@
"cwd": "${workspaceFolder}",
"environment": [],
"console": "internalConsole"
},
{
"name": "(macOS) Hyperion.app",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/Hyperion.app/Contents/MacOS/Hyperion",
"args": ["-d"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "internalConsole",
"MIMode": "lldb"
}
]
}

View File

@ -458,6 +458,44 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
===========
Animate.css
===========
Animate.css Copyright 2021 Daniel Eden (“Licensor”)
Hippocratic License Version Number: 2.1.
Purpose. The purpose of this License is for the Licensor named above to permit the Licensee (as defined below) broad permission, if consistent with Human Rights Laws and Human Rights Principles (as each is defined below), to use and work with the Software (as defined below) within the full scope of Licensors copyright and patent rights, if any, in the Software, while ensuring attribution and protecting the Licensor from liability.
Permission and Conditions. The Licensor grants permission by this license (“License”), free of charge, to the extent of Licensors rights under applicable copyright and patent law, to any person or entity (the “Licensee”) obtaining a copy of this software and associated documentation files (the “Software”), to do everything with the Software that would otherwise infringe (i) the Licensors copyright in the Software or (ii) any patent claims to the Software that the Licensor can license or becomes able to license, subject to all of the following terms and conditions:
* Acceptance. This License is automatically offered to every person and entity subject to its terms and conditions. Licensee accepts this License and agrees to its terms and conditions by taking any action with the Software that, absent this License, would infringe any intellectual property right held by Licensor.
* Notice. Licensee must ensure that everyone who gets a copy of any part of this Software from Licensee, with or without changes, also receives the License and the above copyright notice (and if included by the Licensor, patent, trademark and attribution notice). Licensee must cause any modified versions of the Software to carry prominent notices stating that Licensee changed the Software. For clarity, although Licensee is free to create modifications of the Software and distribute only the modified portion created by Licensee with additional or different terms, the portion of the Software not modified must be distributed pursuant to this License. If anyone notifies Licensee in writing that Licensee has not complied with this Notice section, Licensee can keep this License by taking all practical steps to comply within 30 days after the notice. If Licensee does not do so, Licensees License (and all rights licensed hereunder) shall end immediately.
* Compliance with Human Rights Principles and Human Rights Laws.
1. Human Rights Principles.
(a) Licensee is advised to consult the articles of the United Nations Universal Declaration of Human Rights and the United Nations Global Compact that define recognized principles of international human rights (the “Human Rights Principles”). Licensee shall use the Software in a manner consistent with Human Rights Principles.
(b) Unless the Licensor and Licensee agree otherwise, any dispute, controversy, or claim arising out of or relating to (i) Section 1(a) regarding Human Rights Principles, including the breach of Section 1(a), termination of this License for breach of the Human Rights Principles, or invalidity of Section 1(a) or (ii) a determination of whether any Law is consistent or in conflict with Human Rights Principles pursuant to Section 2, below, shall be settled by arbitration in accordance with the Hague Rules on Business and Human Rights Arbitration (the “Rules”); provided, however, that Licensee may elect not to participate in such arbitration, in which event this License (and all rights licensed hereunder) shall end immediately. The number of arbitrators shall be one unless the Rules require otherwise.
Unless both the Licensor and Licensee agree to the contrary: (1) All documents and information concerning the arbitration shall be public and may be disclosed by any party; (2) The repository referred to under Article 43 of the Rules shall make available to the public in a timely manner all documents concerning the arbitration which are communicated to it, including all submissions of the parties, all evidence admitted into the record of the proceedings, all transcripts or other recordings of hearings and all orders, decisions and awards of the arbitral tribunal, subject only to the arbitral tribunal's powers to take such measures as may be necessary to safeguard the integrity of the arbitral process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3) Article 26(6) of the Rules shall not apply.
2. Human Rights Laws. The Software shall not be used by any person or entity for any systems, activities, or other uses that violate any Human Rights Laws. “Human Rights Laws” means any applicable laws, regulations, or rules (collectively, “Laws”) that protect human, civil, labor, privacy, political, environmental, security, economic, due process, or similar rights; provided, however, that such Laws are consistent and not in conflict with Human Rights Principles (a dispute over the consistency or a conflict between Laws and Human Rights Principles shall be determined by arbitration as stated above). Where the Human Rights Laws of more than one jurisdiction are applicable or in conflict with respect to the use of the Software, the Human Rights Laws that are most protective of the individuals or groups harmed shall apply.
3. Indemnity. Licensee shall hold harmless and indemnify Licensor (and any other contributor) against all losses, damages, liabilities, deficiencies, claims, actions, judgments, settlements, interest, awards, penalties, fines, costs, or expenses of whatever kind, including Licensors reasonable attorneys fees, arising out of or relating to Licensees use of the Software in violation of Human Rights Laws or Human Rights Principles.
* Failure to Comply. Any failure of Licensee to act according to the terms and conditions of this License is both a breach of the License and an infringement of the intellectual property rights of the Licensor (subject to exceptions under Laws, e.g., fair use). In the event of a breach or infringement, the terms and conditions of this License may be enforced by Licensor under the Laws of any jurisdiction to which Licensee is subject. Licensee also agrees that the Licensor may enforce the terms and conditions of this License against Licensee through specific performance (or similar remedy under Laws) to the extent permitted by Laws. For clarity, except in the event of a breach of this License, infringement, or as otherwise stated in this License, Licensor may not terminate this License with Licensee.
* Enforceability and Interpretation. If any term or provision of this License is determined to be invalid, illegal, or unenforceable by a court of competent jurisdiction, then such invalidity, illegality, or unenforceability shall not affect any other term or provision of this License or invalidate or render unenforceable such term or provision in any other jurisdiction; provided, however, subject to a court modification pursuant to the immediately following sentence, if any term or provision of this License pertaining to Human Rights Laws or Human Rights Principles is deemed invalid, illegal, or unenforceable against Licensee by a court of competent jurisdiction, all rights in the Software granted to Licensee shall be deemed null and void as between Licensor and Licensee. Upon a determination that any term or provision is invalid, illegal, or unenforceable, to the extent permitted by Laws, the court may modify this License to affect the original purpose that the Software be used in compliance with Human Rights Principles and Human Rights Laws as closely as possible. The language in this License shall be interpreted as to its fair meaning and not strictly for or against any party.
* Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM.
This Hippocratic License is an Ethical Source license (https://ethicalsource.dev) and is offered for use by licensors and licensees at their own risk, on an “AS IS” basis, and with no warranties express or implied, to the maximum extent permitted by Laws.
===========
Flatbuffers
===========
@ -704,9 +742,9 @@ trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**
============
=====================
Material Design Icons
============
=====================
Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), with Reserved Font Name Material Design Icons.
@ -788,6 +826,58 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
==============
PlainDraggable
==============
MIT License
Copyright (c) 2021 anseki
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
==========
LeaderLine
==========
MIT License
Copyright (c) 2021 anseki
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
======
HIDAPI
======
@ -802,6 +892,35 @@ HIDAPI
long as the copyright notice in the source files
remains intact.
========
HyperHDR
========
MIT License
Copyright (c) 2021 awawa-dev
Project homesite: https://github.com/awawa-dev/HyperHDR
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
===========
JSON-Editor
===========
@ -892,6 +1011,7 @@ all code is your original work. `</legalese>`
## Marked
Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
Permission is hereby granted, free of charge, to any person obtaining a copy
@ -932,7 +1052,7 @@ metismenu
The MIT License (MIT)
Copyright (c) 2014-2018 Osman Nuri Okumuş
Copyright (c) 2014-2021 Osman Nuri Okumuş
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
@ -1755,3 +1875,26 @@ POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
==========================================
Oklab Color Space Reference Implementation
==========================================
Copyright (c) 2021 Björn Ottosson
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.0-alpha.10.1...HEAD)
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.15...HEAD)
### Breaking
@ -13,10 +13,198 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
### Fixed
- Fixed missing Include limits in QJsonSchemaChecker
- Fixed dependencies for deb packages in Debian Bookworm
### Removed
## Removed
## [2.0.0-alpha.10.1](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.10.1) - 2021-10-03
## [2.0.15](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.15) - 2023-02
### Added
- Audio Grabber to add audio visualization support for both Windows and Linux.
- Support streaming to individual WLED segments (requires WLED 0.13.3+).
To allow segment streaming, enable "Realtime - Use main segment only" in WLED's Sync Interfaces setup screen
- Allow to keep WLED powered on after streaming and restoring state
- Allow to Disable / Enable all instances (#970) by
- Suspend/Resume support for Linux and Windows (#1493,#1282, #978).
Suspend/Resume/Restart is supported via API, UI, Systray and hyperion-remote
- Idle scenario via Screen Locking (Linux/Windows), Screensaver invokation (Linux), hyperion-remote or API
In Idle, all instances, components will be disabled besides the output processing (LED-Devices, smoothing).
The current priorities will be cleared and the background effect per instance will be executed, if enabled.
- Commands toogleSuspend and toggleIdle allow to flip between modes, e.g. might be used to trigger modes by a remote
- Reduced pixel processing to reduce resources on big assignment areas
- Support for squared mean color processing
- Support for dominant color processing on assigned LED areas (#1382). A simple and advanced way is provided. Advanced and high accuracy might be combined with reduced pixel processing to lower CPU usage.
- Add instance# in API response (#1504)
### Changed
- REST API - Increased default timeout to address "Operation cancelled" errors
- LED Devices: Allow to differentiate between recoverable/unrecoverable errors
- Renamed LED area assignment naming to provide clarity on the processing algorithms
### Fixed
- Effects/Smoothing: Effects with dedicated smoothing settings will now run with those settings (even if general smoothing is off)
- No interim color update after streaming and turning off WLED
- LED-Matrix Layout: Add Cabling direction selection element again (#1566)
- Restart correctly, if running as service (#1368)
- Hue-Wizard: In case auto discovery failed, port 80 was not used as default (#1544)
- Send only one reply per Start Instance request (#1551)
- Add instance# in JSON-API replies (aligning to Add instance in websocket response to a subscription #1504 behaviour)
- hyperion-remote: Extracting reply for a configGet request correctly (#1555)
- Grabber fps setting was not applied correctly
- Smoothing: No empty updates
### Technical
- Add CodeQL for GitHub code scanning
- Update to Protocol Buffers 3.21.12
- Update to Mbed TLS 3.3.0
- Qt6 alignments
- cmake support of libcec without version in lib-name
- Refactor for Python 3.11 deprecated functions
## Removed
## [2.0.14](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.14) - 2022-11
Hyperion's November release is not too big, but provides you with the latest updates and fixes. Many thanks to all contributors providing code (xkns, drzony) or translations.
### Added
- New color processing settings: Saturation gain and brightness/value gain. They allow compensating washed out HDR colors on LEDs (#822, #1092, #1142 partially).
- New languages: Catalan & Greek
- USB Capture: Support 3D processing for MJPEG
- Forwarding: Support flat-/proto buffer input
- Adalight: HyperSerial support (High speed protocol by awawa-dev) and support device feedback, show statistics provided by HyperSerial (modified by LordGrey) sketch
- AtmoOrb: Firmware image for Particle/Photon
### Changed
- Serial LED-devices: Ability to select standard Baud rates, as well as defining a custom one
- LED-devices: Do not switch-off device, if background effect is configured and will kick-in soon
### Fixed
- USB-Grabber: Fixed a SEGFAULT when compiled on Ubuntu Server 22.04
- USB Grabber: Fixed memory leak when transforming MJPEG
- ImageResampler: Apply only half crop for 3D to maintain crop ratio
- Remote Control: Update Color calibration values when calibration settings were saved
- Fixed Smoothing got out of sync when saving configuration
- Smoothing: Removed "outputrate" as duplicate to update frequency
- Queue LED-device on/off signals
- UI: Correctly lookup current Instance Name
- Fixed AtmoOrb firmware image
## [2.0.13](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.13) - 2022-05-22
### Added
- Allow to build a "light" version of Hyperion, i.e. no grabbers, or services like flat-/proto buffers, boblight, CEC
- Allow to restart Hyperion via Systray
- mDNS support for all platforms inkl. Windows (#740)
- Forwarder: mDNS discovery support and ease of configuration of other Hyperion instances
- Grabber: mDNS discovery for standalone grabbers
- Grabber: Dynamic loading of the Dispmanx Grabber (#1418)
- Flatbuffer/Protobuf are now able to receive RGBA data
- Added the instance number as part of the logline (#910). In the UI Log the instance is presented as a readable name.
- New language: Japanese
##### LED-Devices
- Support retry attempts enabling devices, e.g. to open devices after network or a device itself got available (#1302). Fixes that devices got "stuck", if initial open failed e.g. for WLED, Hue
- New UDP-DDP (Distributed Display Protocol) device to overcome the 490 LEDs limitation of UDP-RAW
- mDNS discovery support and ease of configuration (Cololight, Nanoleaf, Philips-Hue, WLED, Yeelight); removes the need to configure IP-Address, as address is resolved automatically.
- Allow to disable switching LEDs on during startup (#1390)
- Support additional Yeelight models
- Show warning, if get properties failed (Network devices: indication that network device is not reachable)
- LED Layout Classic: Support keystone correction via draggable corner LEDs
- LED Layout Matrix: Support vertical cabling direction (#1420)
### Changed
- Color Smoothing is started in pause mode to save resources, when Hyperion starts with no active source
- Boblight: Support multiple Boblight clients with different priorities
- UI: LED Preview has been given a touch of Ambilight.
- UI: Allow configuration of a Boblight server per LED-instance
- UI: LED Layout - Removed limitations on indention
- UI: Log output and LED preview window can be maximized
- mDNS Publisher: Aligned Hyperion mDNS names to general conventions and simplified naming
##### LED-Devices
- Refactored Philips Hue wizard and LED-Device
- WLED's default streaming protocol is now UDP-DDP. More than 490 LEDs are supported now (requires minimum WLED 0.11.0). UDP-RAW is still supported in parallel (via expert settings).
- Present all serial/TTY devices during discovery in expert mode; no filtering on existing vendor-identifier (Adalight serial USB does not show up in GUI #1458)
### Fixed
- UI: Ensure all configuration and system info response are there before reloading the page (#1430)
- UI: Show all previous log lines in the Log UI (was only working for Debug before)
- UI: Remote control: Treat duration=0 as endless
- UI: Stop Web-Browser capture when user triggers other activities
- Effects: Fix image URL in Matrix effect
- Effects: Fix that start effect is stuck on UI
- Effects: Fixed that effect specific smoothing setup was not applied when effect is started from available- or effects under configuration
- Qt-Grabber: Fixed position handling of multiple monitors (#1320, #1403)
- Standalone grabbers: Improved fps help/error text, fixed default address and port, fixed auto discovery of Hyperion server in hyperion-remote
- hyperion-remote: Show image filename in UI for images sent
- Reworked PriorityMuxer and Subscriptions
- PriorityMuxer: Fix crash when running fore- and background effect in parallel during start-up
- Update Priority, if first LED changes for COLOR update (to reflect color correctly in UI)
- Start JSON and WebServer only, if Hyperion's instance 0 is available
- Treat http headers case insensitive (RFC 2616)
- Fixed: Signal detection does not switch off all instances (#1281)
- Do not kill application on SIGILL-signal (#1435)
- Fixed Qt version override, e.g. set via QTDIR
- Update jsonschema and checkschema to allow checking hyperion.config.json.default on Windows
##### LED-Devices
- Fixes that the Led-Device output flow was interrupted, by an enabling API request on an already enabled device (#967)
- Yeelight - Workaround: Ignore error when setting music mode = off, but the music-mode is already off (#1372)
- Fixed: Hue Entertainment mode does not resume after no signal (#930)
## Removed
- UI: Removed sessions (of other Hyperions)
- Replaced existing AVAHI/Bonjour code by QMdnsEngine
## [2.0.12](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.12) - 2021-11-20
Hyperion's November release brings you some new features, removed IPv6 address related limitations, as well as fixing a couple of issues.
Hyperion packages can be installed now under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
Details about the installation can be found in the installation.md and at apt.hyperion-project.org.
### Added
- New LED-device type: Razor Chroma.
Note: Due to Chroma Razer API limitations, only one device can be configured.
- APA102 - Support setting maximum brightness level (1-31)
- New installation method (Drag'n Drop) for macOS.
- hyperion-remote & standalone grabbers: IPv6 support
- New languages: Danish & Hungarian
### Changed
- LED-Devices: Removed IPv6 limitations
- Philips-Hue Wizard optimizations
- JSON/Flatbuffer forwarder: Removed IPv6 limitations
- Allow to import configurations from previous versions
Note: Existing configurations are migrated to new structures automatically
### Fixed
- Fixed API Subscription (e.g. as used by HomeAssistant) (#1351)
- Fixed APA102 protocol aligning to the standard defined, removed Latch-Time as not required by APA102 protocol (#1352, #1132)
- Fixed hyperion-remote when sending multiple Hex-Colors with "Set Color" option
- UI: Fixed "Selected Hyperion instance isn't running" issue (#1357)
- Fixed Database migration version handling
- Fixed Python ModuleNotFoundError (#1109)
### Technical
- Added Qt6 support
- Migrated to MBEDTSL 3
## [2.0.0-alpha.11](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.11) - 2021-10-06
The release is primarily fixing issues introduced with alpha 10, but covering other findings too.
Thanks to everybody highlighting real problem areas, as well as to those proactively providing fixes for integration via pull requests.
@ -28,7 +216,7 @@ We did not weaken security, but provide you with an easy to use script to switch
### Added:
- Script to change the user Hyperion is executed with.
To run Hyperion with root privileges (e.g. for WS281x) execute <br> `sudo updateHyperionUser -u root`
- Gif effects can source Gifs via URLs in addition to local files as input
- Gif effects can source Gifs via URLs in addition to local files as input
- System info screen: Added used config path and "is run under root/admin"
- LED-Device enhancements
@ -60,7 +248,7 @@ To run Hyperion with root privileges (e.g. for WS281x) execute <br> `sudo update
- Escape XSS payload to avoid execution (#1292)
- Include libqt5sql5-sqlite packaging dependency
- Fixed embedded Python location (#1109)
- LED-Devices
- Fixed Philips Hue wizard (#1276)
- Fixed AtmoOrb wizard
@ -86,12 +274,12 @@ The refined color coding in the user-interfaces, helps you to quickly identify i
Of course, the release brings new features (e.g. USB Capture on Windows), as well as minor enhancements and a good number of fixes.
Note:
Note:
- **IMPORTANT:** Due to the rework of the grabbers, both screen- and video grabbers are disabled after the upgrade to the new version.
Please, re-enable the grabber of choice via the UI, validate the configuration and save the setup. The grabber should the restart.
- Hyperion packages can now be installed under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
- Hyperion packages can now be installed under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
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).
- Find here more details on [supported platforms and configuration sets](https://github.com/hyperion-project/hyperion.ng/blob/master/doc/development/SupportedPlatforms.md)

View File

@ -1,7 +1,19 @@
cmake_minimum_required(VERSION 3.0.0)
cmake_minimum_required(VERSION 3.5.0)
message( STATUS "CMake Version: ${CMAKE_VERSION}" )
macro(addIndent text)
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(APPEND CMAKE_MESSAGE_INDENT ${text})
endif()
endmacro()
macro(removeIndent)
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(POP_BACK CMAKE_MESSAGE_INDENT)
endif()
endmacro()
PROJECT(hyperion)
# Parse semantic version of version file and write version to config
@ -19,10 +31,6 @@ set(CMAKE_AUTOMOC ON)
# auto prepare .qrc files
set(CMAKE_AUTORCC ON)
if ( POLICY CMP0026 )
CMAKE_POLICY( SET CMP0026 OLD )
endif()
# Configure CCache if available
find_program(CCACHE_FOUND ccache)
if ( CCACHE_FOUND )
@ -30,55 +38,90 @@ if ( CCACHE_FOUND )
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)
if ("${CMAKE_VERSION}" VERSION_LESS "3.12.0")
set(Python_ADDITIONAL_VERSIONS 3.5)
find_package(PythonInterp 3.5 REQUIRED)
else()
find_package(Python3 3.5 COMPONENTS Interpreter Development REQUIRED)
if(Python3_FOUND)
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
# enable C++17
if(APPLE)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("Werror=unguarded-availability" REQUIRED_UNGUARDED_AVAILABILITY)
if(REQUIRED_UNGUARDED_AVAILABILITY)
list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "Werror=unguarded-availability")
endif()
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Set build variables
# Grabber
SET ( DEFAULT_AMLOGIC OFF )
SET ( DEFAULT_BOBLIGHT ON )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_DX OFF )
SET ( DEFAULT_MF OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_QT ON )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_AUDIO ON )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_XCB OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_WS281XPWM OFF )
SET ( DEFAULT_AVAHI ON )
SET ( DEFAULT_USE_SHARED_AVAHI_LIBS ON )
# Input
SET ( DEFAULT_BOBLIGHT_SERVER ON )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FLATBUF_SERVER ON )
SET ( DEFAULT_PROTOBUF_SERVER ON )
# Output
SET ( DEFAULT_FORWARDER ON )
SET ( DEFAULT_FLATBUF_CONNECT ON )
# LED-Devices
SET ( DEFAULT_DEV_NETWORK ON )
SET ( DEFAULT_DEV_SERIAL ON )
SET ( DEFAULT_DEV_SPI OFF )
SET ( DEFAULT_DEV_TINKERFORGE OFF )
SET ( DEFAULT_DEV_USB_HID OFF )
SET ( DEFAULT_DEV_WS281XPWM OFF )
# Services
SET ( DEFAULT_EFFECTENGINE ON )
SET ( DEFAULT_EXPERIMENTAL OFF )
SET ( DEFAULT_MDNS ON )
SET ( DEFAULT_REMOTE_CTL ON )
# Build
SET ( DEFAULT_JSONCHECKS ON )
SET ( DEFAULT_DEPLOY_DEPENDENCIES ON )
SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_QMDNS_LIBS OFF )
SET ( DEFAULT_TESTS OFF )
SET ( DEFAULT_EXPERIMENTAL OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_DEPLOY_DEPENDENCIES ON )
# Build Hyperion with a reduced set of functionality, overwrites other default values
SET ( DEFAULT_HYPERION_LIGHT OFF )
IF ( ${CMAKE_SYSTEM} MATCHES "Linux" )
SET ( DEFAULT_V4L2 ON )
SET ( DEFAULT_SPIDEV ON )
SET ( DEFAULT_TINKERFORGE ON )
SET ( DEFAULT_FB ON )
SET ( DEFAULT_USB_HID ON )
SET ( DEFAULT_CEC ON )
SET ( DEFAULT_FB ON )
SET ( DEFAULT_V4L2 ON )
SET ( DEFAULT_DEV_SPI ON )
SET ( DEFAULT_DEV_TINKERFORGE ON )
SET ( DEFAULT_DEV_USB_HID ON )
SET ( DEFAULT_CEC ON )
ELSEIF ( WIN32 )
SET ( DEFAULT_DX ON )
SET ( DEFAULT_MF ON )
ELSE()
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_SPIDEV OFF )
SET ( DEFAULT_TINKERFORGE OFF )
SET ( DEFAULT_USB_HID OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_DEV_SPI OFF )
SET ( DEFAULT_DEV_TINKERFORGE OFF )
SET ( DEFAULT_DEV_USB_HID OFF )
SET ( DEFAULT_CEC OFF )
ENDIF()
if ( NOT DEFINED PLATFORM )
@ -112,49 +155,50 @@ MACRO(FIRSTSUBDIR result curdir)
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
LIST(APPEND dirlist "${curdir}/${child}")
BREAK()
ENDIF()
IF(IS_DIRECTORY ${curdir}/${child})
LIST(APPEND dirlist "${curdir}/${child}")
BREAK()
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
ENDMACRO()
if ( "${PLATFORM}" MATCHES "osx" )
# specify the min version of the target platform
SET ( CMAKE_OSX_DEPLOYMENT_TARGET "10.15" )
# add specific prefix paths
FIRSTSUBDIR(SUBDIRQT "/usr/local/Cellar/qt")
FIRSTSUBDIR(SUBDIRPY "/usr/local/opt/python3/Frameworks/Python.framework/Versions")
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRQT} ${SUBDIRPY} "/usr/local/opt/qt5" )
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRPY})
include_directories("/opt/X11/include/")
SET ( DEFAULT_OSX ON )
SET ( DEFAULT_USB_HID ON )
SET ( DEFAULT_OSX ON )
SET ( DEFAULT_AUDIO OFF )
SET ( DEFAULT_DEV_USB_HID ON )
elseif ( "${PLATFORM}" MATCHES "rpi" )
SET ( DEFAULT_DISPMANX ON )
SET ( DEFAULT_WS281XPWM ON )
elseif ( "${PLATFORM}" STREQUAL "amlogic" )
SET ( DEFAULT_DEV_WS281XPWM ON )
elseif ( "${PLATFORM}" MATCHES "^amlogic" )
SET ( DEFAULT_AMLOGIC ON )
elseif ( "${PLATFORM}" STREQUAL "amlogic-dev" )
SET ( DEFAULT_AMLOGIC ON )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_CEC OFF )
elseif ( "${PLATFORM}" STREQUAL "amlogic64" )
SET ( DEFAULT_AMLOGIC ON )
elseif ( "${PLATFORM}" MATCHES "x11" )
if ( "${PLATFORM}" MATCHES "-dev$" )
SET ( DEFAULT_AMLOGIC ON )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_CEC OFF )
endif()
elseif ( "${PLATFORM}" MATCHES "^x11" )
SET ( DEFAULT_X11 ON )
SET ( DEFAULT_XCB ON )
if ( "${PLATFORM}" STREQUAL "x11-dev" )
if ( "${PLATFORM}" MATCHES "-dev$" )
SET ( DEFAULT_AMLOGIC ON)
SET ( DEFAULT_WS281XPWM ON )
SET ( DEFAULT_DEV_WS281XPWM ON )
endif()
elseif ( "${PLATFORM}" STREQUAL "imx6" )
SET ( DEFAULT_FB ON )
elseif (WIN32)
SET ( DEFAULT_AVAHI OFF)
endif()
# enable tests for -dev builds
if ( "${PLATFORM}" MATCHES "-dev" )
if ( "${PLATFORM}" MATCHES "-dev$" )
SET ( DEFAULT_TESTS ON )
endif()
@ -164,114 +208,240 @@ ADD_DEFINITIONS( ${PLATFORM_DEFINE} )
# set the build options
option(ENABLE_BOBLIGHT "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT} )
message(STATUS "ENABLE_BOBLIGHT = ${ENABLE_BOBLIGHT}")
option(HYPERION_LIGHT "Build Hyperion with a reduced set of functionality" ${DEFAULT_HYPERION_LIGHT} )
message(STATUS "HYPERION_LIGHT = ${HYPERION_LIGHT}")
if (HYPERION_LIGHT)
message(STATUS "HYPERION_LIGHT: Hyperion is build with a reduced set of functionality.")
# Disable Grabbers
SET ( DEFAULT_AMLOGIC OFF )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_DX OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_MF OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_AUDIO OFF )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_XCB OFF )
# Disable Input Servers
SET ( DEFAULT_BOBLIGHT_SERVER OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FLATBUF_SERVER OFF )
SET ( DEFAULT_PROTOBUF_SERVER OFF )
# Disable Output Connectors
SET ( DEFAULT_FORWARDER OFF )
SET ( DEFAULT_FLATBUF_CONNECT OFF )
# Disable Services
SET ( DEFAULT_EFFECTENGINE OFF )
endif()
message(STATUS "Grabber options:")
addIndent(" - ")
option(ENABLE_AMLOGIC "Enable the AMLOGIC video grabber" ${DEFAULT_AMLOGIC} )
message(STATUS "ENABLE_AMLOGIC = ${ENABLE_AMLOGIC}")
if (ENABLE_AMLOGIC)
SET(ENABLE_FB ON)
else()
option(ENABLE_FB "Enable the framebuffer grabber" ${DEFAULT_FB} )
endif()
message(STATUS "ENABLE_FB = ${ENABLE_FB}")
option(ENABLE_DISPMANX "Enable the RPi dispmanx grabber" ${DEFAULT_DISPMANX} )
message(STATUS "ENABLE_DISPMANX = ${ENABLE_DISPMANX}")
option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX} )
message(STATUS "ENABLE_OSX = ${ENABLE_OSX}")
option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} )
message(STATUS "ENABLE_SPIDEV = ${ENABLE_SPIDEV}")
option(ENABLE_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_TINKERFORGE})
message(STATUS "ENABLE_TINKERFORGE = ${ENABLE_TINKERFORGE}")
option(ENABLE_V4L2 "Enable the V4L2 grabber" ${DEFAULT_V4L2})
message(STATUS "ENABLE_V4L2 = ${ENABLE_V4L2}")
option(ENABLE_MF "Enable the Media Foundation grabber" ${DEFAULT_MF})
message(STATUS "ENABLE_MF = ${ENABLE_MF}")
option(ENABLE_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_WS281XPWM} )
message(STATUS "ENABLE_WS281XPWM = ${ENABLE_WS281XPWM}")
option(ENABLE_AVAHI "Enable Zeroconf" ${DEFAULT_AVAHI})
message(STATUS "ENABLE_AVAHI = " ${ENABLE_AVAHI})
option(ENABLE_USB_HID "Enable the libusb and hid devices" ${DEFAULT_USB_HID} )
message(STATUS "ENABLE_USB_HID = ${ENABLE_USB_HID}")
option(ENABLE_CEC "Enable the libcec and CEC control" ${DEFAULT_CEC} )
message(STATUS "ENABLE_CEC = ${ENABLE_CEC}")
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB})
message(STATUS "ENABLE_XCB = ${ENABLE_XCB}")
option(ENABLE_QT "Enable the Qt grabber" ${DEFAULT_QT})
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
option(ENABLE_DX "Enable the DirectX grabber" ${DEFAULT_DX})
message(STATUS "ENABLE_DX = ${ENABLE_DX}")
option(ENABLE_TESTS "Compile additional test applications" ${DEFAULT_TESTS})
message(STATUS "ENABLE_TESTS = ${ENABLE_TESTS}")
if (ENABLE_AMLOGIC)
SET(ENABLE_FB ON)
else()
option(ENABLE_FB " Enable the framebuffer grabber" ${DEFAULT_FB} )
endif()
message(STATUS "ENABLE_FB = ${ENABLE_FB}")
option(ENABLE_PROFILER "enable profiler capabilities - not for release code" OFF)
message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
option(ENABLE_MF "Enable the Media Foundation grabber" ${DEFAULT_MF})
message(STATUS "ENABLE_MF = ${ENABLE_MF}")
option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX} )
message(STATUS "ENABLE_OSX = ${ENABLE_OSX}")
option(ENABLE_QT "Enable the Qt grabber" ${DEFAULT_QT})
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
option(ENABLE_V4L2 "Enable the V4L2 grabber" ${DEFAULT_V4L2})
message(STATUS "ENABLE_V4L2 = ${ENABLE_V4L2}")
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
option(ENABLE_AUDIO "Enable the AUDIO grabber" ${DEFAULT_AUDIO})
message(STATUS "ENABLE_AUDIO = ${ENABLE_AUDIO}")
option(ENABLE_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_WS281XPWM} )
message(STATUS "ENABLE_WS281XPWM = ${ENABLE_WS281XPWM}")
option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB})
message(STATUS "ENABLE_XCB = ${ENABLE_XCB}")
removeIndent()
message(STATUS "Input options:")
addIndent(" - ")
option(ENABLE_BOBLIGHT_SERVER "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT_SERVER} )
message(STATUS "ENABLE_BOBLIGHT_SERVER = ${ENABLE_BOBLIGHT_SERVER}")
option(ENABLE_CEC "Enable the libcec and CEC control" ${DEFAULT_CEC} )
message(STATUS "ENABLE_CEC = ${ENABLE_CEC}")
option(ENABLE_FLATBUF_SERVER "Enable Flatbuffers server" ${DEFAULT_FLATBUF_SERVER} )
message(STATUS "ENABLE_FLATBUF_SERVER = ${ENABLE_FLATBUF_SERVER}")
option(ENABLE_PROTOBUF_SERVER "Enable Protocol Buffers server" ${DEFAULT_PROTOBUF_SERVER} )
message(STATUS "ENABLE_PROTOBUF_SERVER = ${ENABLE_PROTOBUF_SERVER}")
removeIndent()
message(STATUS "Output options:")
addIndent(" - ")
option(ENABLE_FORWARDER "Enable Hyperion forwarding" ${DEFAULT_FORWARDER} )
message(STATUS "ENABLE_FORWARDER = ${ENABLE_FORWARDER}")
if (ENABLE_FORWARDER)
SET(ENABLE_FLATBUF_CONNECT ON)
else()
option(ENABLE_FLATBUF_CONNECT "Enable Flatbuffers connecting remotely" ${DEFAULT_FLATBUF_CONNECT} )
endif()
message(STATUS "ENABLE_FLATBUF_CONNECT = ${ENABLE_FLATBUF_CONNECT}")
removeIndent()
message(STATUS "LED-Device options:")
addIndent(" - ")
option(ENABLE_DEV_NETWORK "Enable the Network devices" ${DEFAULT_DEV_NETWORK} )
message(STATUS "ENABLE_DEV_NETWORK = ${ENABLE_DEV_NETWORK}")
option(ENABLE_DEV_SERIAL "Enable the Serial devices" ${DEFAULT_DEV_SERIAL} )
message(STATUS "ENABLE_DEV_SERIAL = ${ENABLE_DEV_SERIAL}")
option(ENABLE_DEV_SPI "Enable the SPI device" ${DEFAULT_DEV_SPI} )
message(STATUS "ENABLE_DEV_SPI = ${ENABLE_DEV_SPI}")
option(ENABLE_DEV_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_DEV_TINKERFORGE})
message(STATUS "ENABLE_DEV_TINKERFORGE = ${ENABLE_DEV_TINKERFORGE}")
option(ENABLE_DEV_USB_HID "Enable the libusb and hid devices" ${DEFAULT_DEV_USB_HID} )
message(STATUS "ENABLE_DEV_USB_HID = ${ENABLE_DEV_USB_HID}")
option(ENABLE_DEV_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_DEV_WS281XPWM} )
message(STATUS "ENABLE_DEV_WS281XPWM = ${ENABLE_DEV_WS281XPWM}")
removeIndent()
message(STATUS "Services options:")
addIndent(" - ")
option(ENABLE_EFFECTENGINE "Enable Effect-Engine" ${DEFAULT_EFFECTENGINE})
message(STATUS "ENABLE_EFFECTENGINE = ${ENABLE_EFFECTENGINE}")
option(ENABLE_EXPERIMENTAL "Compile experimental features" ${DEFAULT_EXPERIMENTAL})
message(STATUS "ENABLE_EXPERIMENTAL = ${ENABLE_EXPERIMENTAL}")
option(ENABLE_MDNS "Enable mDNS (aka Zeroconf)" ${DEFAULT_MDNS})
message(STATUS "ENABLE_MDNS = ${ENABLE_MDNS}")
option(ENABLE_REMOTE_CTL "Enable Hyperion remote control" ${DEFAULT_REMOTE_CTL})
message(STATUS "ENABLE_REMOTE_CTL = ${ENABLE_REMOTE_CTL}")
removeIndent()
message(STATUS "Build options:")
addIndent(" - ")
option(ENABLE_JSONCHECKS "Validate json schema files" ${DEFAULT_JSONCHECKS})
message(STATUS "ENABLE_JSONCHECKS = ${ENABLE_JSONCHECKS}")
option(ENABLE_DEPLOY_DEPENDENCIES "Deploy with dependencies" ${DEFAULT_DEPLOY_DEPENDENCIES})
message(STATUS "ENABLE_DEPLOY_DEPENDENCIES = ${ENABLE_DEPLOY_DEPENDENCIES}")
if(ENABLE_FLATBUF_SERVER OR ENABLE_FLATBUF_CONNECT)
message(STATUS "DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS = ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS}")
endif()
if(ENABLE_PROTOBUF_SERVER)
message(STATUS "DEFAULT_USE_SYSTEM_PROTO_LIBS = ${DEFAULT_USE_SYSTEM_PROTO_LIBS}")
endif()
message(STATUS "DEFAULT_USE_SYSTEM_MBEDTLS_LIBS = ${DEFAULT_USE_SYSTEM_MBEDTLS_LIBS}")
if (ENABLE_MDNS)
message(STATUS "DEFAULT_USE_SYSTEM_QMDNS_LIBS = ${DEFAULT_USE_SYSTEM_QMDNS_LIBS}")
endif()
option(ENABLE_PROFILER "enable profiler capabilities - not for release code" OFF)
message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
option(ENABLE_TESTS "Compile additional test applications" ${DEFAULT_TESTS})
message(STATUS "ENABLE_TESTS = ${ENABLE_TESTS}")
removeIndent()
SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf )
SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
SET ( PROTOBUF_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/proto )
SET ( PROTOBUF_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/proto )
# check all json files
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
SET( JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS})
if(ENABLE_JSONCHECKS OR ENABLE_EFFECTENGINE)
if ("${CMAKE_VERSION}" VERSION_LESS "3.12.0")
set(Python_ADDITIONAL_VERSIONS 3.5)
find_package(PythonInterp 3.5 REQUIRED)
else()
find_package(Python3 3.5 COMPONENTS Interpreter Development REQUIRED)
if(Python3_FOUND)
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
endif()
endif()
endif()
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED
)
IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF ()
if(ENABLE_JSONCHECKS)
# check all json files
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
SET( JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS})
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED
)
IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF ()
# for python 3 the checkschema.py file must be rewritten
# TODO on windows it can't resolve the path inside the file (Das System kann den angegebenen Pfad nicht finden: '\\schema\\schema-general.json')
IF (NOT WIN32)
EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkschema.py ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED
)
IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF ()
if(ENABLE_EFFECTENGINE)
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED
)
IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF ()
endif()
EXECUTE_PROCESS (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkschema.py ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_CONFIG_FAILED
)
ENDIF()
IF ( ${CHECK_CONFIG_FAILED} )
MESSAGE (FATAL_ERROR "check of json default config failed" )
ENDIF ()
IF ( ${CHECK_CONFIG_FAILED} )
MESSAGE (FATAL_ERROR "check of json default config failed" )
ENDIF ()
endif(ENABLE_JSONCHECKS)
# Add project specific cmake modules (find, etc)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
@ -297,26 +467,6 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
# Prefer static linking over dynamic
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
# enable C++11; MSVC doesn't have c++11 feature switch
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
if (CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
endif()
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "No support for C++11 detected. Compilation will most likely fail on your compiler")
endif()
endif()
# MSVC options
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
# Search for Windows SDK
@ -324,44 +474,6 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
message(STATUS "WINDOWS SDK: ${WINDOWSSDK_LATEST_DIR} ${WINDOWSSDK_LATEST_NAME}")
message(STATUS "MSVC VERSION: ${MSVC_VERSION}")
# Qt5 default install path with msvc2017 64bit component
# The Qt5_DIR should point to Qt5Config.cmake -> C:/Qt/5.xx/msvc2017_64/lib/cmake/Qt5
# The CMAKE_PREFIX_PATH should point to the install directory -> C:/Qt/5.xx/msvc2017_64
#
# Alternatively, use Qt5_BASE_DIR environment variable to point to Qt version to be used
# In MSVC19 add into CMakeSettings.json
#
# "environments": [
# {
# "Qt5_BASE_DIR": "D:/Qt/5.15.1/msvc2019_64"
# }
# ]
if (NOT DEFINED ENV{Qt5_BASE_DIR})
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${SUBDIRQT}/msvc2019_64")
else()
message(STATUS "Qt5_BASE_DIR: $ENV{Qt5_BASE_DIR}")
message(STATUS "Add Qt5_BASE_DIR: $ENV{Qt5_BASE_DIR} to CMAKE_PREFIX_PATH")
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "$ENV{Qt5_BASE_DIR}")
endif()
if (NOT DEFINED ENV{Qt5_DIR})
if (NOT DEFINED ENV{Qt5_BASE_DIR})
SET (qt_module_path "${SUBDIRQT}/msvc2019_64/lib/cmake/Qt5")
else ()
SET (qt_module_path "$ENV{Qt5_BASE_DIR}/lib/cmake/Qt5")
endif()
else()
SET (qt_module_path "$ENV{Qt5_DIR}")
endif()
message(STATUS "Add ${qt_module_path} to CMAKE_MODULE_PATH")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${qt_module_path}")
#message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
#message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
# Search for DirectX9
if (ENABLE_DX)
find_package(DirectX9 REQUIRED)
@ -370,60 +482,90 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
endif()
# Use GNU gold linker if available
if (NOT WIN32)
if (NOT WIN32 AND NOT APPLE)
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
endif()
if (ENABLE_DEPLOY_DEPENDENCIES)
# Don't create new dynamic tags (RUNPATH)
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
endif()
# setup -rpath to search for shared libs in BINARY/../lib folder
if (UNIX AND NOT APPLE)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif ()
# Don't create new dynamic tags (RUNPATH) and setup -rpath to search for shared libs in BINARY/../lib folder (only for Unix)
if (ENABLE_DEPLOY_DEPENDENCIES AND UNIX AND NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif ()
# add QT5 dependency
IF ( CMAKE_CROSSCOMPILING )
file(GLOB QT_BIN ${QT_BIN_PATH})
set(QT_MOC_EXECUTABLE ${QT_BIN}/moc)
add_executable(Qt5::moc IMPORTED)
set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_MOC_EXECUTABLE})
set(QT_RCC_EXECUTABLE ${QT_BIN}/rcc)
add_executable(Qt5::rcc IMPORTED)
set_property(TARGET Qt5::rcc PROPERTY IMPORTED_LOCATION ${QT_RCC_EXECUTABLE})
message(STATUS "QT_BIN_PATH = ${QT_BIN}")
message(STATUS "QT_MOC_EXECUTABLE = ${QT_MOC_EXECUTABLE}")
message(STATUS "QT_RCC_EXECUTABLE = ${QT_RCC_EXECUTABLE}")
ENDIF()
SET(QT_MIN_VERSION "5.5.0")
find_package(Qt5 COMPONENTS Core Gui Network SerialPort Sql REQUIRED)
message( STATUS "Found Qt Version: ${Qt5Core_VERSION}" )
IF ( "${Qt5Core_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
ENDIF()
# Add libusb and pthreads
find_package(libusb-1.0 REQUIRED)
find_package(Threads REQUIRED)
add_definitions(${QT_DEFINITIONS})
if(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "-framework CoreGraphics")
endif()
find_package(Threads REQUIRED)
# Allow to overwrite QT base directory
# Either supply QTDIR as -DQTDIR=<path> to cmake or set and environment variable QTDIR pointing to the Qt installation
# For Windows and OSX, the default Qt installation path are tried to resolved automatically
if (NOT DEFINED QTDIR)
if (DEFINED ENV{QTDIR})
set(QTDIR $ENV{QTDIR})
else()
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
if (NOT ${SUBDIRQT} STREQUAL "")
set(QTDIR "${SUBDIRQT}/msvc2019_64")
endif()
elseif ( "${PLATFORM}" MATCHES "osx" )
# QT6 x86_64 location
if (EXISTS /usr/local/opt/qt6)
set(QTDIR "/usr/local/opt/qt6")
# QT6 arm64 location
elseif (EXISTS /opt/homebrew/opt/qt@6)
set(QTDIR "/opt/homebrew/opt/qt@6")
# QT5 x86_64 location
elseif (EXISTS /usr/local/opt/qt5)
set(QTDIR "/usr/local/opt/qt5")
# QT5 arm64 location
elseif (EXISTS /opt/homebrew/opt/qt@5)
set(QTDIR "/opt/homebrew/opt/qt@5")
endif()
endif()
endif()
endif()
if (DEFINED QTDIR)
message(STATUS "Add QTDIR: ${QTDIR} to CMAKE_PREFIX_PATH")
list(PREPEND CMAKE_PREFIX_PATH ${QTDIR} "${QTDIR}/lib")
endif()
if (CMAKE_PREFIX_PATH)
message( STATUS "CMAKE_PREFIX_PATH used: ${CMAKE_PREFIX_PATH}" )
endif()
# find QT libs
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Network Sql Widgets REQUIRED)
message( STATUS "Found Qt Version: ${QT_VERSION}" )
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6 )
SET(QT_MIN_VERSION "6.2.2")
else()
SET(QT_MIN_VERSION "5.5.0")
endif()
if ( "${QT_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
endif()
find_package(Qt${QT_VERSION_MAJOR} ${QT_VERSION} COMPONENTS Core Gui Network Sql Widgets REQUIRED)
message( STATUS "Qt version used: ${QT_VERSION}" )
if (APPLE AND (${QT_VERSION_MAJOR} GREATER_EQUAL 6) )
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl)
endif()
# Add libusb and pthreads
find_package(libusb-1.0 REQUIRED)
add_definitions(${QT_DEFINITIONS})
# Add the source/lib directories
add_subdirectory(dependencies)
add_subdirectory(libsrc)
@ -437,10 +579,16 @@ add_subdirectory(resources)
# remove generated files on make cleaan too
LIST( APPEND GENERATED_QRC
${CMAKE_BINARY_DIR}/EffectEngine.qrc
${CMAKE_BINARY_DIR}/WebConfig.qrc
${CMAKE_BINARY_DIR}/HyperionConfig.h
)
if(ENABLE_EFFECTENGINE)
LIST( APPEND GENERATED_QRC
${CMAKE_BINARY_DIR}/EffectEngine.qrc
)
endif ()
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_QRC}" )
# uninstall target

46
CMakeSettings.json Normal file
View File

@ -0,0 +1,46 @@
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\build-${name}",
"installRoot": "${projectDir}\\install-${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
// Replace path with your TurboJPEG installation path
//{ "name": "TurboJPEG_INCLUDE_DIRS", "type": "PATH", "value": "YourTurboJPEGPath/libjpeg-turbo64/include" },
//{ "name": "TurboJPEG_LIBRARY", "value": "YourTurboJPEGPath/libjpeg-turbo64/lib/turbojpeg.lib", "type": "FILEPATH" }
],
"environments": [
// Replace path with your installation path
//{ "QTDIR": "C:/Qt/6.2.2/msvc2019_64/" },
//{ "VULKAN_SDK": "C:/VulkanSDK/1.2.182.0" }
]
},
{
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "Release",
"buildRoot": "${projectDir}\\build-${name}",
"installRoot": "${projectDir}\\install-${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "package",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ],
"variables": [
// Replace path with your TurboJPEG installation path
//{ "name": "TurboJPEG_INCLUDE_DIRS", "type": "PATH", "value": "YourTurboJPEGPath/libjpeg-turbo64/include" },
//{ "name": "TurboJPEG_LIBRARY", "value": "YourTurboJPEGPath/libjpeg-turbo64/lib/turbojpeg.lib", "type": "FILEPATH" }
],
"environments": [
// Replace path with your installation path
//{ "QTDIR": "C:/Qt/6.2.2/msvc2019_64/" },
//{ "VULKAN_SDK": "C:/VulkanSDK/1.2.182.0" }
]
}
]
}

View File

@ -1,62 +1,93 @@
// Generated config file
// Define to enable the DispmanX grabber
#cmakedefine ENABLE_DISPMANX
// Define to enable the V4L2 grabber
#cmakedefine ENABLE_V4L2
// Define to enable the Media Foundation grabber
#cmakedefine ENABLE_MF
// Define to enable the Framebuffer grabber
#cmakedefine ENABLE_FB
// Define to enable the AMLogic grabber
#cmakedefine ENABLE_AMLOGIC
// Define to enable the DispmanX grabber
#cmakedefine ENABLE_DISPMANX
// Define to enable the DirectX grabber
#cmakedefine ENABLE_DX
// Define to enable the framebuffer grabber
// Define to enable the Audio grabber
#cmakedefine ENABLE_AUDIO
// Define to enable the Framebuffer grabber
#cmakedefine ENABLE_FB
// Define to enable the Media Foundation grabber
#cmakedefine ENABLE_MF
// Define to enable the OSX grabber
#cmakedefine ENABLE_OSX
// Define to enable the Qt grabber
#cmakedefine ENABLE_QT
// Define to enable the V4L2 grabber
#cmakedefine ENABLE_V4L2
// Define to enable the X11 grabber
#cmakedefine ENABLE_X11
// Define to enable the XCB grabber
#cmakedefine ENABLE_XCB
// Define to enable the Qt grabber
#cmakedefine ENABLE_QT
// Define to enable the DirectX grabber
#cmakedefine ENABLE_DX
// Define to enable the SPI-Device
#cmakedefine ENABLE_SPIDEV
// Define to enable the WS281x-PWM-via-DMA-device using jgarff's library
#cmakedefine ENABLE_WS281XPWM
// Define to enable the Tinkerforge device
#cmakedefine ENABLE_TINKERFORGE
// Define to enable AVAHI
#cmakedefine ENABLE_AVAHI
// Define to enable boblight server
#cmakedefine ENABLE_BOBLIGHT_SERVER
// Define to enable CEC
#cmakedefine ENABLE_CEC
// Define to enable boblight server
#cmakedefine ENABLE_BOBLIGHT
// Define to enable flatbuffer server
#cmakedefine ENABLE_FLATBUF_SERVER
// Define to enable protocol buffer server
#cmakedefine ENABLE_PROTOBUF_SERVER
// Define to enable hyperion forwarding
#cmakedefine ENABLE_FORWARDER
// Define to enable enable flatbuffer connect
#cmakedefine ENABLE_FLATBUF_CONNECT
// Define to enable protocol buffer connect
#cmakedefine ENABLE_PROTOBUF_CONNECT
// Define to enable the network devices
#cmakedefine ENABLE_DEV_NETWORK
// Define to enable the Serial devices
#cmakedefine ENABLE_DEV_SERIAL
// Define to enable the SPI devices
#cmakedefine ENABLE_DEV_SPI
// Define to enable the Tinkerforge devices
#cmakedefine ENABLE_DEV_TINKERFORGE
// Define to enable the USB / HID devices
#cmakedefine ENABLE_USB_HID
#cmakedefine ENABLE_DEV_USB_HID
// Define to enable profiler for development purpose
#cmakedefine ENABLE_PROFILER
// Define to enable the WS281x-PWM-via-DMA-device using jgarff's library
#cmakedefine ENABLE_DEV_WS281XPWM
// Define to enable MDNS
#cmakedefine ENABLE_MDNS
// Define to enable EFFECTENGINE
#cmakedefine ENABLE_EFFECTENGINE
// Define to enable experimental features
#cmakedefine ENABLE_EXPERIMENTAL
// Define to enable Hyperion remote control
#cmakedefine ENABLE_REMOTE_CTL
// Define to enable profiler for development purpose
#cmakedefine ENABLE_PROFILER
// Define to enable deploy dependencies to packages
#cmakedefine ENABLE_DEPLOY_DEPENDENCIES

View File

@ -1,28 +1,35 @@
# Installation
This page contains general installation steps for Hyperion.
This page contains general installation steps for Hyperion. For Linux please follow the instructions below. For Windows is an installation file available on our [Release page](https://github.com/hyperion-project/hyperion.ng/releases).
## Windows & macOS
For Windows and macOS is an installation file available on our [Release page](https://github.com/hyperion-project/hyperion.ng/releases).
## Linux:
On the following operating systems, Hyperion can currently be installed/updated using the method listed below:
- Raspbian Stretch/Raspberry Pi OS and later (armhf)
- Debian Stretch (9) and later (armhf/x64)
- Ubuntu 18.04 and later (x64)
- Raspbian Buster/Raspberry Pi OS and later (armhf/arm64)
- Debian Buster(10) and later (armhf/arm64/x86_64)
- Ubuntu 20.04 and later (armhf/arm64/x86_64)
***
### Install Hyperion:
1. Add Hyperions official GPG key:
1. Add necessary packages for the installation:
```bash
sudo apt-get update && sudo apt-get install wget gpg apt-transport-https lsb-release
```
2. Add Hyperions official GPG key:
```bash
wget -qO- https://apt.hyperion-project.org/hyperion.pub.key | sudo gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg
```
2. Add Hyperion-Project to your APT sources:
3. Add Hyperion-Project to your APT sources:
```bash
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hyperion.list
```
3. Update your local package index and install Hyperion:
4. Update your local package index and install Hyperion:
```bash
sudo apt-get update && sudo apt-get install hyperion
```

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2014-2021 Hyperion Project
Copyright (c) 2014-2023 Hyperion Project
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

46
PRIVACY.md Normal file
View File

@ -0,0 +1,46 @@
# Privacy Policy
Hyperion-Project takes your privacy seriously. To better protect your privacy we provide this privacy policy notice
explaining the way your personal or technical information is collected and used.
## Collection of Routine Information
This application does not collect or transmit any user's personally identifiable information.
No personal information is used, stored, secured or disclosed by services this application works with.
Limited technical information is sent (such as IP addresses included in the HTTP/S calls the application makes) but none of that is used or stored.
## Cookies
Where necessary, this app uses cookies to store information about a visitors preferences and history
in order to better serve the user and/or present the user with customized content.
## Links to Third Party Websites
We have included links on this app for your use and reference. We are not responsible for the privacy policies on these websites.
You should be aware that the privacy policies of these websites may differ from our own.
## Security
The security of your personal information is important to us. That is the reason we do not collect any information,
but remember that no method of transmission over the Internet, or method of electronic storage,
is 100% secure. While we strive to use commercially acceptable means to protect your personal information,
we cannot guarantee its absolute security.
## Changes To This Privacy Policy
This Privacy Policy is effective as of February 2022 and will remain in effect except with respect to any changes in its provisions in the future,
which will be in effect immediately after being posted on this page.
We reserve the right to update or change our Privacy Policy at any time and you should check this Privacy Policy periodically.
If we make any material changes to this Privacy Policy, we will notify you by placing a prominent notice on our app.
## Contact Information
For any questions or concerns regarding the privacy policy, please open up an issue on our GitHub
https://github.com/hyperion-project/hyperion.ng

View File

@ -1,14 +1,20 @@
![Hyperion](doc/logo.png)
<picture>
<source media="(prefers-color-scheme: dark)" srcset="doc/logo_dark.png">
<source media="(prefers-color-scheme: light)" srcset="doc/logo_light.png">
<img alt="Hyperion" src="doc/logo_light.png">
</picture>
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases)](https://github.com/hyperion-project/hyperion.ng/releases)
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases&label=Latest%20Release&logo=github&logoColor=white&color=0f83e7)](https://github.com/hyperion-project/hyperion.ng/releases)
[![GitHub Actions](https://github.com/hyperion-project/hyperion.ng/workflows/Hyperion%20CI%20Build/badge.svg?branch=master)](https://github.com/hyperion-project/hyperion.ng/actions)
[![LGTM](https://img.shields.io/lgtm/alerts/g/hyperion-project/hyperion.ng.svg)](https://lgtm.com/projects/g/hyperion-project/hyperion.ng/alerts/)
[![Documentation](https://codedocs.xyz/hyperion-project/hyperion.ng.svg)](https://codedocs.xyz/hyperion-project/hyperion.ng/)
[![made-with-love](https://img.shields.io/badge/Made%20with-&#9829;-ff0000.svg)](#)
[![CodeQL Analysis](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml/badge.svg)](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml)
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
[![Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
[![Discord](https://img.shields.io/discord/785578322167463937?label=Discord&logo=discord&logoColor=white&color=4bc51d)](https://discord.gg/XtVTb3HEKS)
![made-with-love](https://img.shields.io/badge/Made%20With-&#9829;-ff0000.svg)
## About Hyperion
[Hyperion](https://github.com/hyperion-project/hyperion.ng) is an opensource [Bias or Ambient Lighting](https://en.wikipedia.org/wiki/Bias_lighting) implementation which you might know from TV manufacturers. It supports many LED devices and video grabbers. The project is still in a alpha development stage (no stable release available).
[Hyperion](https://github.com/hyperion-project/hyperion.ng) is an opensource [Bias or Ambient Lighting](https://en.wikipedia.org/wiki/Bias_lighting) implementation which you might know from TV manufacturers. It supports many LED devices and video grabbers.
![Screenshot](doc/screenshot.png)
@ -22,38 +28,48 @@
* A scriptable (Python) effect engine with 39 build-in effects for your inspiration
* A multi language web interface to configure and remote control hyperion
### Supported Hardware
You can find a list of supported hardware [here](https://docs.hyperion-project.org/en/user/leddevices/).
If you need further support please open a topic at the forum!<br>
[![Hyperion webpage/forum](https://img.shields.io/website/https/hyperion-project.org.svg?down_color=red&down_message=offline&up_color=green&up_message=online)](https://www.hyperion-project.org)
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
## Contributing
Contributions are welcome! Feel free to join us! We are looking always for people who wants to participate.<br>
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg?label=Contributors&logo=github&logoColor=white)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
For an example, you can participate in the translation.<br>
[![Join Translation](https://img.shields.io/badge/POEditor-translate-green.svg)](https://poeditor.com/join/project/Y4F6vHRFjA)
[![Join Translation](https://img.shields.io/badge/POEditor-4bc51d.svg?label=Join%20Translation)](https://poeditor.com/join/project/Y4F6vHRFjA)
## Supported Platforms
Find here more details on [supported platforms and configuration sets](doc/development/SupportedPlatforms.md)
## Documentation
Covers these topics (WorkInProgress)
- Installation
- Configuration
- Effect development
- JSON API
Covers these topics:
- [Installation](https://docs.hyperion-project.org/en/user/Installation.html)
- [Configuration](https://docs.hyperion-project.org/en/user/Configuration.html)
- [Effect development](https://docs.hyperion-project.org/en/effects/#effect-files)
- [JSON API](https://docs.hyperion-project.org/en/json/)
[![Visit Documentation](https://img.shields.io/website?down_message=offline&label=Documentation%20%20&up_message=online&url=https%3A%2F%2Fdocs.hyperion-project.org)](https://docs.hyperion-project.org)
[![Visit Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
## Changelog
Released and unreleased changes at [Changelog.md](CHANGELOG.md)
Released and unreleased changes at [CHANGELOG.md](CHANGELOG.md)
## Building
See [CompileHowto](doc/development/CompileHowto.md).
See [CompileHowto.md](doc/development/CompileHowto.md).
## Installation
See [Documentation](https://docs.hyperion-project.org/en/user/Installation.html) or at [Installation.md](Installation.md).
## Download
Alpha releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
Releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
## Privacy Policy
See [PRIVACY.md](PRIVACY.md).
## License
The source is released under MIT-License (see https://opensource.org/licenses/MIT).<br>

View File

@ -0,0 +1,655 @@
#include <NeoPixelBus.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION STARTS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
#define THIS_IS_RGBW // RGBW SK6812, otherwise comment it
#define COLD_WHITE // for RGBW (THIS_IS_RGBW enabled) select COLD version, comment it if NEUTRAL
const bool skipFirstLed = false; // if set the first led in the strip will be set to black (for level shifters using sacrifice LED)
const int serialSpeed = 2000000; // serial port speed
#define DATA_PIN 2 // PIN: data output for LED strip
const bool reportStats = false; // Send back processing statistics
const int reportStatInterval_s = 10; // Send back processing every interval in seconds
/* Statistics breakdown:
FPS: Updates to the LEDs per second
F-FPS: Frames identified per second
S: Shown (Done) updates to the LEDs per given interval
F: Frames identified per interval (garbled grames cannot be counted)
G: Good frames identified per interval
B: Total bad frames of all types identified per interval
BF: Bad frames identified per interval
BS: Skipped incomplete frames
BC: Frames failing CRC check per interval
BFL Frames failing Fletcher content validation per interval
*/
//Developer configs
#define ENABLE_STRIP
#define ENABLE_CHECK_FLETCHER
const int SERIAL_SIZE_RX = 4096;
#ifndef ENABLE_STRIP
const int serial2Speed = 460800;
const bool reportInput = false;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION ENDS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
const String version = "8.0";
#ifdef THIS_IS_RGBW
float whiteLimit = 1.0f;
#ifdef COLD_WHITE
uint8_t rCorrection = 0xA0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xA0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0xA0; // adjust blue -> white in 0-0xFF range
#else
uint8_t rCorrection = 0xB0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xB0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0x70; // adjust blue -> white in 0-0xFF range
#endif
#endif
int ledCount = 0; // This is dynamic, don't change it
int pixelCount = 0; // This is dynamic, don't change it
#ifdef THIS_IS_RGBW
#define LED_TYPE NeoGrbwFeature
#if defined(ARDUINO_LOLIN_S2_MINI)
#define LED_METHOD NeoEsp32I2s0Sk6812Method
#else
#define LED_METHOD NeoEsp32I2s1Sk6812Method
#endif
#else
#define LED_TYPE NeoGrbFeature
#if defined(ARDUINO_LOLIN_S2_MINI)
#define LED_METHOD NeoEsp32I2s0Ws2812xMethod
#else
#define LED_METHOD NeoEsp32I2s1Ws2812xMethod
#endif
#endif
#define LED_DRIVER NeoPixelBus<LED_TYPE, LED_METHOD>
uint8_t* ledBuffer;
int ledBufferSize;
#ifdef ENABLE_STRIP
LED_DRIVER* strip = NULL;
#endif
enum class AwaProtocol
{
HEADER_A,
HEADER_w,
HEADER_a,
HEADER_HI,
HEADER_LO,
HEADER_CRC,
CHANNELCALIB_GAIN,
CHANNELCALIB_RED,
CHANNELCALIB_GREEN,
CHANNELCALIB_BLUE,
PIXEL,
FLETCHER1,
FLETCHER2,
FLETCHER_EXT
};
AwaProtocol state = AwaProtocol::HEADER_A;
const int headerSize = 6;
const int trailerSize = 3;
const int calibInfoSize = 4;
int bytesRead = 0;
bool isVersion2 = false;
bool isChannelCalib = false;
uint8_t CRC = 0;
int count = 0;
int currentPixel = 0;
uint16_t fletcher1 = 0;
uint16_t fletcher2 = 0;
uint16_t fletcherExt = 0;
#ifdef THIS_IS_RGBW
RgbwColor inputColor;
uint8_t wChannel[256];
uint8_t rChannel[256];
uint8_t gChannel[256];
uint8_t bChannel[256];
#else
RgbColor inputColor;
#endif
bool ledsComplete = false;
// statistics
const int reportStatInterval_ms = reportStatInterval_s * 1000;
unsigned long curTime;
unsigned long stat_start = 0;
uint16_t stat_shown = 0;
uint16_t stat_frames = 0;
uint16_t stat_good = 0;
uint16_t stat_bad = 0;
uint16_t stat_bad_frame = 0;
uint16_t stat_bad_skip = 0;
uint16_t stat_bad_crc = 0;
uint16_t stat_bad_fletcher = 0;
uint16_t stat_final_shown = 0;
uint16_t stat_final_frames = 0;
uint16_t stat_final_good = 0;
uint16_t stat_final_bad = 0;
uint16_t stat_final_bad_frame = 0;
uint16_t stat_final_bad_skip = 0;
uint16_t stat_final_bad_crc = 0;
uint16_t stat_final_bad_fletcher = 0;
//Debugging
String inputString;
String inputErrorString;
String debugString;
void printStringHex(String string)
{
#ifndef ENABLE_STRIP
Serial2.println(string.length());
for (int i = 0; i < string.length(); ++i)
{
if (i % 36 == 0)
{
Serial2.println();
Serial2.print("[");
Serial2.print(i);
Serial2.print("] ");
}
if (string[i] < 16)
Serial2.print("0");
Serial2.print(string[i], HEX);
Serial2.print(":");
}
#endif
}
inline void showMe()
{
#ifdef ENABLE_STRIP
if (strip != NULL && strip->CanShow())
{
stat_shown++;
strip->Show();
}
#endif
}
// statistics
inline void showStats()
{
if (reportStats)
{
if (stat_frames > 0)
{
stat_final_shown = stat_shown;
stat_final_frames = stat_frames;
stat_final_good = stat_good;
stat_final_bad = stat_bad;
stat_final_bad_frame = stat_bad_frame;
stat_final_bad_skip = stat_bad_skip;
stat_final_bad_crc = stat_bad_crc;
stat_final_bad_fletcher = stat_bad_fletcher;
}
stat_start = curTime;
stat_shown = 0;
stat_frames = 0;
stat_good = 0;
stat_bad = 0;
stat_bad_frame = 0;
stat_bad_skip = 0;
stat_bad_crc = 0;
stat_bad_fletcher = 0;
String summary = String("FPS: ") + (stat_final_shown / reportStatInterval_s) +
" F-FPS: " + (stat_final_frames / reportStatInterval_s) +
" S: " + stat_final_shown +
" F: " + stat_final_frames +
" G: " + stat_final_good +
" B: " + stat_final_bad +
" (BF: " + stat_final_bad_frame +
" BS: " + stat_final_bad_skip +
" BC: " + stat_final_bad_crc +
" BFL: " + stat_final_bad_fletcher +
")";
#ifdef ENABLE_STRIP
Serial.println(summary);
#else
Serial2.println(summary);
#endif
}
}
void InitLeds(uint16_t ledCount, int pixelCount, bool channelCalibration = false)
{
if (ledBuffer != NULL)
delete ledBuffer;
ledBufferSize = pixelCount + (channelCalibration ? calibInfoSize : 0);
ledBuffer = new uint8_t[ledBufferSize];
#ifdef ENABLE_STRIP
if (strip != NULL)
delete strip;
strip = new LED_DRIVER(ledCount, DATA_PIN);
strip->Begin();
#endif
}
inline void processSerialData()
{
while (Serial.available()) {
char input = Serial.read();
++bytesRead;
#ifndef ENABLE_STRIP
if (reportInput)
inputString += input;
#endif
switch (state)
{
case AwaProtocol::HEADER_A:
if (input == 'A')
{
state = AwaProtocol::HEADER_w;
}
break;
case AwaProtocol::HEADER_w:
if (input == 'w')
state = AwaProtocol::HEADER_a;
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_a:
if (input == 'a')
{
isVersion2 = false;
state = AwaProtocol::HEADER_HI;
}
else if (input == 'A')
{
state = AwaProtocol::HEADER_HI;
isVersion2 = true;
}
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_HI:
stat_frames++;
count = input << 8;
CRC = input;
fletcher1 = 0;
fletcher2 = 0;
fletcherExt = 0;
state = AwaProtocol::HEADER_LO;
break;
case AwaProtocol::HEADER_LO:
count += input + 1;
if (ledCount != count || isChannelCalib != isVersion2)
{
ledCount = count;
isChannelCalib = isVersion2;
pixelCount = ledCount * 3;
if (isChannelCalib)
prepareCalibration();
InitLeds(ledCount, pixelCount, isChannelCalib);
}
CRC = CRC ^ input ^ 0x55;
state = AwaProtocol::HEADER_CRC;
break;
case AwaProtocol::HEADER_CRC:
// Check, if incomplete package information was skipped, set bytesread to headersize and skip wrong input
if (bytesRead != headerSize)
{
stat_bad_skip++;
bytesRead = headerSize;
}
currentPixel = 0;
if (CRC == input)
{
state = AwaProtocol::PIXEL;
}
else
{
// CRC failure
stat_bad++;
stat_bad_crc++;
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::PIXEL:
ledBuffer[currentPixel++] = input;
if (currentPixel == pixelCount)
{
if (isChannelCalib)
state = AwaProtocol::CHANNELCALIB_GAIN;
else
state = AwaProtocol::FLETCHER1;
}
break;
case AwaProtocol::CHANNELCALIB_GAIN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_RED;
break;
case AwaProtocol::CHANNELCALIB_RED:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_GREEN;
break;
case AwaProtocol::CHANNELCALIB_GREEN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_BLUE;
break;
case AwaProtocol::CHANNELCALIB_BLUE:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::FLETCHER1;
break;
case AwaProtocol::FLETCHER1:
fletcher1 = input;
state = AwaProtocol::FLETCHER2;
break;
case AwaProtocol::FLETCHER2:
fletcher2 = input;
state = AwaProtocol::FLETCHER_EXT;
break;
case AwaProtocol::FLETCHER_EXT:
fletcherExt = input;
ledsComplete = true;
state = AwaProtocol::HEADER_A;
break;
}
}
}
void setup()
{
// Init serial port
int bufSize = Serial.setRxBufferSize(SERIAL_SIZE_RX);
Serial.begin(serialSpeed);
Serial.setTimeout(50);
#ifndef ENABLE_STRIP
Serial2.begin(serial2Speed);
Serial2.println();
Serial2.println("Welcome!");
Serial2.println("Hyperion Awa driver " + version);
Serial2.println("!!! Debug Output !!!");
#endif
// Display config
Serial.println();
Serial.println("Welcome!");
Serial.println("Hyperion Awa driver " + version);
Serial.print("(Build: ");
Serial.print(__DATE__);
Serial.print(" ");
Serial.print(__TIME__);
Serial.println(")");
// first LED info
if (skipFirstLed)
Serial.println("First LED: disabled");
else
Serial.println("First LED: enabled");
// RGBW claibration info
#ifdef THIS_IS_RGBW
#ifdef COLD_WHITE
Serial.println("Default color mode: RGBW cold");
#else
Serial.println("Default color mode: RGBW neutral");
#endif
prepareCalibration();
#else
Serial.println("Color mode: RGB");
#endif
InitLeds(ledCount, pixelCount);
}
void prepareCalibration()
{
#ifdef THIS_IS_RGBW
// prepare LUT calibration table, cold white is much better than "neutral" white
for (uint32_t i = 0; i < 256; i++)
{
// color calibration
float red = rCorrection * i; // adjust red
float green = gCorrection * i; // adjust green
float blue = bCorrection * i; // adjust blue
wChannel[i] = (uint8_t)round(min(whiteLimit * i, 255.0f));
rChannel[i] = (uint8_t)round(min(red / 0xFF, 255.0f));
gChannel[i] = (uint8_t)round(min(green / 0xFF, 255.0f));
bChannel[i] = (uint8_t)round(min(blue / 0xFF, 255.0f));
}
Serial.write("RGBW calibration. White limit(%): ");
Serial.print(whiteLimit * 100.0f);
Serial.write(" %, red: ");
Serial.print(rCorrection);
Serial.write(" , green: ");
Serial.print(gCorrection);
Serial.write(" , blue: ");
Serial.print(bCorrection);
Serial.println();
#endif
}
void loop()
{
curTime = millis();
#ifdef __AVR__
// nothing , USART Interrupt is implemented
ESPserialEvent();
#else
// ESP8266 polling
ESPserialEvent();
#endif
if (ledsComplete)
{
#ifndef ENABLE_STRIP
if (reportInput)
{
Serial2.println();
Serial2.print("<input> L: ");
printStringHex(inputString);
Serial2.println("<\input>");
inputString = "";
Serial2.print("bytesRead: ");
Serial2.print(bytesRead);
Serial2.print(" , currentPixel: ");
Serial2.print(currentPixel);
Serial2.print(" ,pixelCount: ");
Serial2.print(pixelCount);
Serial2.println();
}
#endif
int frameSize = headerSize + ledBufferSize + trailerSize;
if (bytesRead > frameSize)
{
//Add number of frames ignored on top of frame
int frames = bytesRead / frameSize;
stat_frames += frames;
//Count frame plus frames ignored as bad frames
int badFrames = frames + 1;
stat_bad += badFrames;
stat_bad_frame += badFrames;
}
else
{
#ifdef ENABLE_CHECK_FLETCHER
//Test if content is valid
uint16_t item = 0;
uint16_t fletch1 = 0;
uint16_t fletch2 = 0;
uint16_t fletchExt = 0;
while (item < ledBufferSize)
{
fletch1 = (fletch1 + (uint16_t)ledBuffer[item]) % 255;
fletch2 = (fletch2 + fletch1) % 255;
fletcherExt = (fletcherExt + ((uint16_t)ledBuffer[item] ^ (item))) % 255;
++item;
}
if ((fletch1 == fletcher1) && (fletch2 == fletcher2) && (ledBuffer[item-1] == (fletcherExt != 0x41) ? fletcherExt : 0xaa))
{
#endif
stat_good++;
uint16_t startLed = 0;
if (skipFirstLed)
{
#ifdef ENABLE_STRIP
#ifdef THIS_IS_RGBW
strip->SetPixelColor(startLed, RgbwColor(0, 0, 0, 0));
#else
strip->SetPixelColor(startLed, RgbColor(0, 0, 0));
#endif
#endif
startLed = 1;
}
for (uint16_t led = startLed; led < ledCount; ++led)
{
inputColor.R = ledBuffer[led * 3];
inputColor.G = ledBuffer[led * 3 + 1];
inputColor.B = ledBuffer[led * 3 + 2];
#ifdef THIS_IS_RGBW
inputColor.W = min(rChannel[inputColor.R],
min(gChannel[inputColor.G],
bChannel[inputColor.B]));
inputColor.R -= rChannel[inputColor.W];
inputColor.G -= gChannel[inputColor.W];
inputColor.B -= bChannel[inputColor.W];
inputColor.W = wChannel[inputColor.W];
#endif
#ifdef ENABLE_STRIP
strip->SetPixelColor(led, inputColor);
#endif
}
showMe();
yield();
#ifdef THIS_IS_RGBW
if (isChannelCalib)
{
uint8_t incoming_gain = ledBuffer[pixelCount];
uint8_t incoming_red = ledBuffer[pixelCount + 1];
uint8_t incoming_green = ledBuffer[pixelCount + 2];
uint8_t incoming_blue = ledBuffer[pixelCount + 3];
float final_limit = (incoming_gain != 255) ? incoming_gain / 255.0f : 1.0f;
if (rCorrection != incoming_red || gCorrection != incoming_green || bCorrection != incoming_blue || whiteLimit != final_limit)
{
rCorrection = incoming_red;
gCorrection = incoming_green;
bCorrection = incoming_blue;
whiteLimit = final_limit;
prepareCalibration();
}
}
#endif
#ifdef ENABLE_CHECK_FLETCHER
}
else
{
stat_bad++;
stat_bad_fletcher++;
}
#endif
}
bytesRead = 0;
state = AwaProtocol::HEADER_A;
ledsComplete = false;
}
if ((curTime - stat_start > reportStatInterval_ms))
{
if (stat_frames > 0)
{
showStats();
}
}
}
#ifdef __AVR__
void serialEvent()
{
processSerialData();
}
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
void ESPserialEvent()
{
processSerialData();
}
#endif

View File

@ -0,0 +1,646 @@
#include <NeoPixelBus.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION STARTS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
#define THIS_IS_RGBW // RGBW SK6812, otherwise comment it
#define COLD_WHITE // for RGBW (THIS_IS_RGBW enabled) select COLD version, comment it if NEUTRAL
const bool skipFirstLed = false; // if set the first led in the strip will be set to black (for level shifters using sacrifice LED)
const int serialSpeed = 2000000; // serial port speed
const bool reportStats = false; // Send back processing statistics
const int reportStatInterval_s = 10; // Send back processing every interval in seconds
/* Statistics breakdown:
FPS: Updates to the LEDs per second
F-FPS: Frames identified per second
S: Shown (Done) updates to the LEDs per given interval
F: Frames identified per interval (garbled grames cannot be counted)
G: Good frames identified per interval
B: Total bad frames of all types identified per interval
BF: Bad frames identified per interval
BS: Skipped incomplete frames
BC: Frames failing CRC check per interval
BFL Frames failing Fletcher content validation per interval
*/
//Developer configs
#define ENABLE_STRIP
#define ENABLE_CHECK_FLETCHER
const int SERIAL_SIZE_RX = 4096;
#ifndef ENABLE_STRIP
const int serial2Speed = 460800;
const bool reportInput = false;
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// CONFIG SECTION ENDS /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
const String version = "8.0";
#ifdef THIS_IS_RGBW
float whiteLimit = 1.0f;
#ifdef COLD_WHITE
uint8_t rCorrection = 0xA0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xA0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0xA0; // adjust blue -> white in 0-0xFF range
#else
uint8_t rCorrection = 0xB0; // adjust red -> white in 0-0xFF range
uint8_t gCorrection = 0xB0; // adjust green -> white in 0-0xFF range
uint8_t bCorrection = 0x70; // adjust blue -> white in 0-0xFF range
#endif
#endif
int ledCount = 0; // This is dynamic, don't change it
int pixelCount = 0; // This is dynamic, don't change it
#ifdef THIS_IS_RGBW
#define LED_TYPE NeoGrbwFeature
#define LED_METHOD NeoEsp8266Uart1Sk6812Method
#else
#define LED_TYPE NeoGrbFeature
#define LED_METHOD NeoEsp8266Uart1Ws2812xMethod
#endif
#define LED_DRIVER NeoPixelBus<LED_TYPE, LED_METHOD>
uint8_t* ledBuffer;
int ledBufferSize;
#ifdef ENABLE_STRIP
LED_DRIVER* strip = NULL;
#endif
enum class AwaProtocol
{
HEADER_A,
HEADER_w,
HEADER_a,
HEADER_HI,
HEADER_LO,
HEADER_CRC,
CHANNELCALIB_GAIN,
CHANNELCALIB_RED,
CHANNELCALIB_GREEN,
CHANNELCALIB_BLUE,
PIXEL,
FLETCHER1,
FLETCHER2,
FLETCHER_EXT
};
AwaProtocol state = AwaProtocol::HEADER_A;
const int headerSize = 6;
const int trailerSize = 3;
const int calibInfoSize = 4;
int bytesRead = 0;
bool isVersion2 = false;
bool isChannelCalib = false;
uint8_t CRC = 0;
int count = 0;
int currentPixel = 0;
uint16_t fletcher1 = 0;
uint16_t fletcher2 = 0;
uint16_t fletcherExt = 0;
#ifdef THIS_IS_RGBW
RgbwColor inputColor;
uint8_t wChannel[256];
uint8_t rChannel[256];
uint8_t gChannel[256];
uint8_t bChannel[256];
#else
RgbColor inputColor;
#endif
bool ledsComplete = false;
// statistics
const int reportStatInterval_ms = reportStatInterval_s * 1000;
unsigned long curTime;
unsigned long stat_start = 0;
uint16_t stat_shown = 0;
uint16_t stat_frames = 0;
uint16_t stat_good = 0;
uint16_t stat_bad = 0;
uint16_t stat_bad_frame = 0;
uint16_t stat_bad_skip = 0;
uint16_t stat_bad_crc = 0;
uint16_t stat_bad_fletcher = 0;
uint16_t stat_final_shown = 0;
uint16_t stat_final_frames = 0;
uint16_t stat_final_good = 0;
uint16_t stat_final_bad = 0;
uint16_t stat_final_bad_frame = 0;
uint16_t stat_final_bad_skip = 0;
uint16_t stat_final_bad_crc = 0;
uint16_t stat_final_bad_fletcher = 0;
//Debugging
String inputString;
String inputErrorString;
String debugString;
void printStringHex(String string)
{
#ifndef ENABLE_STRIP
Serial2.println(string.length());
for (int i = 0; i < string.length(); ++i)
{
if (i % 36 == 0)
{
Serial2.println();
Serial2.print("[");
Serial2.print(i);
Serial2.print("] ");
}
if (string[i] < 16)
Serial2.print("0");
Serial2.print(string[i], HEX);
Serial2.print(":");
}
#endif
}
inline void showMe()
{
#ifdef ENABLE_STRIP
if (strip != NULL && strip->CanShow())
{
stat_shown++;
strip->Show();
}
#endif
}
// statistics
inline void showStats()
{
if (reportStats)
{
if (stat_frames > 0)
{
stat_final_shown = stat_shown;
stat_final_frames = stat_frames;
stat_final_good = stat_good;
stat_final_bad = stat_bad;
stat_final_bad_frame = stat_bad_frame;
stat_final_bad_skip = stat_bad_skip;
stat_final_bad_crc = stat_bad_crc;
stat_final_bad_fletcher = stat_bad_fletcher;
}
stat_start = curTime;
stat_shown = 0;
stat_frames = 0;
stat_good = 0;
stat_bad = 0;
stat_bad_frame = 0;
stat_bad_skip = 0;
stat_bad_crc = 0;
stat_bad_fletcher = 0;
String summary = String("FPS: ") + (stat_final_shown / reportStatInterval_s) +
" F-FPS: " + (stat_final_frames / reportStatInterval_s) +
" S: " + stat_final_shown +
" F: " + stat_final_frames +
" G: " + stat_final_good +
" B: " + stat_final_bad +
" (BF: " + stat_final_bad_frame +
" BS: " + stat_final_bad_skip +
" BC: " + stat_final_bad_crc +
" BFL: " + stat_final_bad_fletcher +
")";
#ifdef ENABLE_STRIP
Serial.println(summary);
#else
Serial2.println(summary);
#endif
}
}
void InitLeds(uint16_t ledCount, int pixelCount, bool channelCalibration = false)
{
if (ledBuffer != NULL)
delete ledBuffer;
ledBufferSize = pixelCount + (channelCalibration ? calibInfoSize : 0);
ledBuffer = new uint8_t[ledBufferSize];
#ifdef ENABLE_STRIP
if (strip != NULL)
delete strip;
strip = new LED_DRIVER(ledCount);
strip->Begin();
#endif
}
inline void processSerialData()
{
while (Serial.available()) {
char input = Serial.read();
++bytesRead;
#ifndef ENABLE_STRIP
if (reportInput)
inputString += input;
#endif
switch (state)
{
case AwaProtocol::HEADER_A:
if (input == 'A')
{
state = AwaProtocol::HEADER_w;
}
break;
case AwaProtocol::HEADER_w:
if (input == 'w')
state = AwaProtocol::HEADER_a;
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_a:
if (input == 'a')
{
isVersion2 = false;
state = AwaProtocol::HEADER_HI;
}
else if (input == 'A')
{
state = AwaProtocol::HEADER_HI;
isVersion2 = true;
}
else
{
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::HEADER_HI:
stat_frames++;
count = input << 8;
CRC = input;
fletcher1 = 0;
fletcher2 = 0;
fletcherExt = 0;
state = AwaProtocol::HEADER_LO;
break;
case AwaProtocol::HEADER_LO:
count += input + 1;
if (ledCount != count || isChannelCalib != isVersion2)
{
ledCount = count;
isChannelCalib = isVersion2;
pixelCount = ledCount * 3;
if (isChannelCalib)
prepareCalibration();
InitLeds(ledCount, pixelCount, isChannelCalib);
}
CRC = CRC ^ input ^ 0x55;
state = AwaProtocol::HEADER_CRC;
break;
case AwaProtocol::HEADER_CRC:
// Check, if incomplete package information was skipped, set bytesread to headersize and skip wrong input
if (bytesRead != headerSize)
{
stat_bad_skip++;
bytesRead = headerSize;
}
currentPixel = 0;
if (CRC == input)
{
state = AwaProtocol::PIXEL;
}
else
{
// CRC failure
stat_bad++;
stat_bad_crc++;
state = AwaProtocol::HEADER_A;
}
break;
case AwaProtocol::PIXEL:
ledBuffer[currentPixel++] = input;
if (currentPixel == pixelCount)
{
if (isChannelCalib)
state = AwaProtocol::CHANNELCALIB_GAIN;
else
state = AwaProtocol::FLETCHER1;
}
break;
case AwaProtocol::CHANNELCALIB_GAIN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_RED;
break;
case AwaProtocol::CHANNELCALIB_RED:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_GREEN;
break;
case AwaProtocol::CHANNELCALIB_GREEN:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::CHANNELCALIB_BLUE;
break;
case AwaProtocol::CHANNELCALIB_BLUE:
ledBuffer[currentPixel++] = input;
state = AwaProtocol::FLETCHER1;
break;
case AwaProtocol::FLETCHER1:
fletcher1 = input;
state = AwaProtocol::FLETCHER2;
break;
case AwaProtocol::FLETCHER2:
fletcher2 = input;
state = AwaProtocol::FLETCHER_EXT;
break;
case AwaProtocol::FLETCHER_EXT:
fletcherExt = input;
ledsComplete = true;
state = AwaProtocol::HEADER_A;
break;
}
}
}
void setup()
{
// Init serial port
int bufSize = Serial.setRxBufferSize(SERIAL_SIZE_RX);
Serial.begin(serialSpeed);
Serial.setTimeout(50);
#ifndef ENABLE_STRIP
Serial2.begin(serial2Speed);
Serial2.println();
Serial2.println("Welcome!");
Serial2.println("Hyperion Awa driver " + version);
Serial2.println("!!! Debug Output !!!");
#endif
// Display config
Serial.println();
Serial.println("Welcome!");
Serial.println("Hyperion Awa driver " + version);
Serial.print("(Build: ");
Serial.print(__DATE__);
Serial.print(" ");
Serial.print(__TIME__);
Serial.println(")");
// first LED info
if (skipFirstLed)
Serial.println("First LED: disabled");
else
Serial.println("First LED: enabled");
// RGBW claibration info
#ifdef THIS_IS_RGBW
#ifdef COLD_WHITE
Serial.println("Default color mode: RGBW cold");
#else
Serial.println("Default color mode: RGBW neutral");
#endif
prepareCalibration();
#else
Serial.println("Color mode: RGB");
#endif
InitLeds(ledCount, pixelCount);
}
void prepareCalibration()
{
#ifdef THIS_IS_RGBW
// prepare LUT calibration table, cold white is much better than "neutral" white
for (uint32_t i = 0; i < 256; i++)
{
// color calibration
float red = rCorrection * i; // adjust red
float green = gCorrection * i; // adjust green
float blue = bCorrection * i; // adjust blue
wChannel[i] = (uint8_t)round(min(whiteLimit * i, 255.0f));
rChannel[i] = (uint8_t)round(min(red / 0xFF, 255.0f));
gChannel[i] = (uint8_t)round(min(green / 0xFF, 255.0f));
bChannel[i] = (uint8_t)round(min(blue / 0xFF, 255.0f));
}
Serial.write("RGBW calibration. White limit(%): ");
Serial.print(whiteLimit * 100.0f);
Serial.write(" %, red: ");
Serial.print(rCorrection);
Serial.write(" , green: ");
Serial.print(gCorrection);
Serial.write(" , blue: ");
Serial.print(bCorrection);
Serial.println();
#endif
}
void loop()
{
curTime = millis();
#ifdef __AVR__
// nothing , USART Interrupt is implemented
ESPserialEvent();
#else
// ESP8266 polling
ESPserialEvent();
#endif
if (ledsComplete)
{
#ifndef ENABLE_STRIP
if (reportInput)
{
Serial2.println();
Serial2.print("<input> L: ");
printStringHex(inputString);
Serial2.println("<\input>");
inputString = "";
Serial2.print("bytesRead: ");
Serial2.print(bytesRead);
Serial2.print(" , currentPixel: ");
Serial2.print(currentPixel);
Serial2.print(" ,pixelCount: ");
Serial2.print(pixelCount);
Serial2.println();
}
#endif
int frameSize = headerSize + ledBufferSize + trailerSize;
if (bytesRead > frameSize)
{
//Add number of frames ignored on top of frame
int frames = bytesRead / frameSize;
stat_frames += frames;
//Count frame plus frames ignored as bad frames
int badFrames = frames + 1;
stat_bad += badFrames;
stat_bad_frame += badFrames;
}
else
{
#ifdef ENABLE_CHECK_FLETCHER
//Test if content is valid
uint16_t item = 0;
uint16_t fletch1 = 0;
uint16_t fletch2 = 0;
uint16_t fletchExt = 0;
while (item < ledBufferSize)
{
fletch1 = (fletch1 + (uint16_t)ledBuffer[item]) % 255;
fletch2 = (fletch2 + fletch1) % 255;
fletcherExt = (fletcherExt + ((uint16_t)ledBuffer[item] ^ (item))) % 255;
++item;
}
if ((fletch1 == fletcher1) && (fletch2 == fletcher2) && (ledBuffer[item-1] == (fletcherExt != 0x41) ? fletcherExt : 0xaa))
{
#endif
stat_good++;
uint16_t startLed = 0;
if (skipFirstLed)
{
#ifdef ENABLE_STRIP
#ifdef THIS_IS_RGBW
strip->SetPixelColor(startLed, RgbwColor(0, 0, 0, 0));
#else
strip->SetPixelColor(startLed, RgbColor(0, 0, 0));
#endif
#endif
startLed = 1;
}
for (uint16_t led = startLed; led < ledCount; ++led)
{
inputColor.R = ledBuffer[led * 3];
inputColor.G = ledBuffer[led * 3 + 1];
inputColor.B = ledBuffer[led * 3 + 2];
#ifdef THIS_IS_RGBW
inputColor.W = min(rChannel[inputColor.R],
min(gChannel[inputColor.G],
bChannel[inputColor.B]));
inputColor.R -= rChannel[inputColor.W];
inputColor.G -= gChannel[inputColor.W];
inputColor.B -= bChannel[inputColor.W];
inputColor.W = wChannel[inputColor.W];
#endif
#ifdef ENABLE_STRIP
strip->SetPixelColor(led, inputColor);
#endif
}
showMe();
yield();
#ifdef THIS_IS_RGBW
if (isChannelCalib)
{
uint8_t incoming_gain = ledBuffer[pixelCount];
uint8_t incoming_red = ledBuffer[pixelCount + 1];
uint8_t incoming_green = ledBuffer[pixelCount + 2];
uint8_t incoming_blue = ledBuffer[pixelCount + 3];
float final_limit = (incoming_gain != 255) ? incoming_gain / 255.0f : 1.0f;
if (rCorrection != incoming_red || gCorrection != incoming_green || bCorrection != incoming_blue || whiteLimit != final_limit)
{
rCorrection = incoming_red;
gCorrection = incoming_green;
bCorrection = incoming_blue;
whiteLimit = final_limit;
prepareCalibration();
}
}
#endif
#ifdef ENABLE_CHECK_FLETCHER
}
else
{
stat_bad++;
stat_bad_fletcher++;
}
#endif
}
bytesRead = 0;
state = AwaProtocol::HEADER_A;
ledsComplete = false;
}
if ((curTime - stat_start > reportStatInterval_ms))
{
if (stat_frames > 0)
{
showStats();
}
}
}
#ifdef __AVR__
void serialEvent()
{
processSerialData();
}
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
void ESPserialEvent()
{
processSerialData();
}
#endif

View File

@ -153,10 +153,9 @@ to this service over the network.
srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind(('0.0.0.0', args.localport)) # lgtm [py/bind-socket-all-network-interfaces]
srv.bind(('0.0.0.0', args.localport))
try:
intentional_exit = False
while True:
try:
while True:
@ -180,7 +179,7 @@ to this service over the network.
# probably got disconnected
break
except KeyboardInterrupt:
intentional_exit = True
# intentional_exit
raise
except socket.error as msg:
if args.develop:
@ -190,6 +189,7 @@ to this service over the network.
ser_to_net.socket = None
sys.stderr.write('Disconnected\n')
except KeyboardInterrupt:
# do not handle exceptions
pass
sys.stderr.write('\n--- exit ---\n')

View File

@ -15,7 +15,7 @@
#include <FastLED.h>
#define NUM_LEDS 24 // Number of leds
#define DATA_PIN 7 // Data pin for leds (the default pin 7 might correspond to pin 13 on some boards)
#define DATA_PIN D7 // Data pin for leds (the default pin 7 might correspond to pin 13 on some boards)
#define SERIAL_DEBUG 0 // Serial debugging (0=Off, 1=On)
#define ID 1 // Id of this lamp
@ -348,7 +348,7 @@ void identify()
{
FastLED.showColor(CRGB::LemonChiffon);
delay(500);
FastLED.showColor(CRGB::Black);
FastLED.showColor(CRGB::Black);
delay(500);
}
}

View File

@ -0,0 +1,313 @@
#include <FastLED.h>
FASTLED_USING_NAMESPACE;
SYSTEM_THREAD(ENABLED);
#if FASTLED_VERSION < 3001000
#error "Requires FastLED 3.1 or later; check github for latest code."
#endif
// WiFi
#define timeout 30000
#define reconnect_delay 5000
// UDP
#define SERVER_PORT 49692
#define DISCOVERY_PORT 49692
UDP client;
IPAddress multicastIP(239, 15, 18, 2);
// ORB
unsigned int orbID = 1;
#define SERIAL_DEBUG 0 // Serial debugging (0=Off, 1=On)
// LED
#define DATA_PIN 6
#define NUM_LEDS 24
CRGB leds[NUM_LEDS];
// UDP
#define BUFFER_SIZE 8 // 5 + 3 channels for 1 LED
#define BUFFER_SIZE_DISCOVERY 5
#define TIMEOUT_MS 500
uint8_t buffer[BUFFER_SIZE];
uint8_t bufferDiscovery[BUFFER_SIZE_DISCOVERY];
unsigned long lastWiFiCheck = 0;
// SMOOTHING
#define SMOOTH_STEPS 50 // Steps to take for smoothing colors
#define SMOOTH_DELAY 4 // Delay between smoothing steps
#define SMOOTH_BLOCK 0 // Block incoming colors while smoothing
byte nextColor[3];
byte prevColor[3];
byte currentColor[3];
byte smoothStep = SMOOTH_STEPS;
unsigned long smoothMillis;
// CUSTOM COLOR CORRECTIONS
#define RED_CORRECTION 255
#define GREEN_CORRECTION 255
#define BLUE_CORRECTION 255
#include "Particle.h"
void setup()
{
// Leds - choose one correction method
// 1 - Custom color correction
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS).setCorrection(CRGB(RED_CORRECTION, GREEN_CORRECTION, BLUE_CORRECTION));
// Set color
//setColor(40, 21, 0);
// Uncomment the below lines to dim the single built-in led to 2%
::RGB.control(true);
::RGB.brightness(2);
::RGB.control(false);
// WiFi
lastWiFiCheck = millis();
initWiFi();
// 2 - FastLED predefined color correction
//FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS).setCorrection(TypicalSMD5050);
}
void initWiFi()
{
// Delays added UDP client creation, required for WiFi reconnects as takes a bit for resources to be full available
// Wait for WiFi connection
delay(500);
waitFor(WiFi.ready, timeout);
delay(reconnect_delay);
// Multicast UDP
if(WiFi.ready())
{
#if SERIAL_DEBUG == 1
Serial.println("");
Serial.print(F("Connected to "));
Serial.println(WiFi.SSID());
Serial.print(F("IP address: "));
Serial.println(WiFi.localIP());
#endif
client.begin(SERVER_PORT);
delay(reconnect_delay);
client.joinMulticast(multicastIP);
#if SERIAL_DEBUG == 1
Serial.print(F("Listening to Multicast at "));
Serial.print(multicastIP);
Serial.print(F(":"));
Serial.println(SERVER_PORT);
#endif
}
}
void loop(){
if (Network.listening())
{
// If we are in listening mode (blinking dark blue), don't
// output by USB serial, because it can conflict with
// serial commands.
return;
}
if(WiFi.ready() == false) {
#if SERIAL_DEBUG == 1
Serial.print(F("Lost connection to "));
Serial.print(WiFi.SSID());
Serial.println(F("."));
Serial.println(F("Trying to reconnect."));
#endif
initWiFi();
}
int packetSize = client.parsePacket();
if(packetSize == BUFFER_SIZE){
#if SERIAL_DEBUG == 1
Serial.print(F("Packet size: "));
Serial.println(packetSize);
#endif
client.read(buffer, BUFFER_SIZE);
//client.flush();
#if SERIAL_DEBUG == 1
Serial.print(F("UDP Packet from "));
Serial.println(client.remoteIP());
for (int i = 0; i < BUFFER_SIZE; i++)
{
Serial.print(buffer[i]);
Serial.print(F(" "));
}
Serial.println("");
#endif
unsigned int i = 0;
// Look for 0xC0FFEE
if(buffer[i++] == 0xC0 && buffer[i++] == 0xFF && buffer[i++] == 0xEE)
{
byte commandOptions = buffer[i++];
byte rcvOrbID = buffer[i++];
byte red = buffer[i++];
byte green = buffer[i++];
byte blue = buffer[i++];
// Command options
// 1 = force off
// 2 = use lamp smoothing and validate by Orb ID
// 4 = validate by Orb ID
// 8 = discovery
// 9 = light-up Orb to identify by Orb ID
if(commandOptions == 1)
{
// Orb ID 0 = turn off all lights
// Otherwise turn off selectively
if(rcvOrbID == 0 || rcvOrbID == orbID)
{
smoothStep = SMOOTH_STEPS;
forceLedsOFF();
}
return;
}
else if(commandOptions == 2)
{
if(rcvOrbID != orbID)
{
return;
}
setSmoothColor(red, green, blue);
}
else if(commandOptions == 4)
{
if(rcvOrbID != orbID)
{
return;
}
smoothStep = SMOOTH_STEPS;
setColor(red, green, blue);
setSmoothColor(red, green, blue);
return;
}
else if(commandOptions == 8)
{
#if SERIAL_DEBUG == 1
Serial.print(F("Announce myself. OrbID: "));
Serial.println(orbID);
#endif
// Respond to remote IP address with Orb ID
IPAddress remoteIP = client.remoteIP();
bufferDiscovery[0] = orbID;
client.sendPacket(bufferDiscovery, BUFFER_SIZE_DISCOVERY, remoteIP, DISCOVERY_PORT);
// Clear buffer
memset(bufferDiscovery, 0, sizeof(bufferDiscovery));
return;
}
else if(commandOptions == 9)
{
if(rcvOrbID == 0 || rcvOrbID == orbID)
{
#if SERIAL_DEBUG == 1
Serial.print(F("Identify myself. OrbID: "));
Serial.println(orbID);
#endif
identify();
}
return;
}
}
}else if(packetSize > 0){
// Got malformed packet
}
if (smoothStep < SMOOTH_STEPS && millis() >= (smoothMillis + (SMOOTH_DELAY * (smoothStep + 1))))
{
smoothColor();
}
}
// Set color
void setColor(byte red, byte green, byte blue)
{
for (byte i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(red, green, blue);
}
FastLED.show();
}
// Set a new color to smooth to
void setSmoothColor(byte red, byte green, byte blue)
{
if (smoothStep == SMOOTH_STEPS || SMOOTH_BLOCK == 0)
{
if (nextColor[0] == red && nextColor[1] == green && nextColor[2] == blue)
{
return;
}
prevColor[0] = currentColor[0];
prevColor[1] = currentColor[1];
prevColor[2] = currentColor[2];
nextColor[0] = red;
nextColor[1] = green;
nextColor[2] = blue;
smoothMillis = millis();
smoothStep = 0;
}
}
// Display one step to the next color
void smoothColor()
{
smoothStep++;
currentColor[0] = prevColor[0] + (((nextColor[0] - prevColor[0]) * smoothStep) / SMOOTH_STEPS);
currentColor[1] = prevColor[1] + (((nextColor[1] - prevColor[1]) * smoothStep) / SMOOTH_STEPS);
currentColor[2] = prevColor[2] + (((nextColor[2] - prevColor[2]) * smoothStep) / SMOOTH_STEPS);
setColor(currentColor[0], currentColor[1], currentColor[2]);
}
// Force all leds OFF
void forceLedsOFF()
{
setColor(0,0,0);
clearSmoothColors();
}
// Clear smooth color byte arrays
void clearSmoothColors()
{
memset(prevColor, 0, sizeof(prevColor));
memset(currentColor, 0, sizeof(nextColor));
memset(nextColor, 0, sizeof(nextColor));
}
void identify()
{
for (byte i = 0; i < 3; i++)
{
FastLED.showColor(CRGB::LemonChiffon);
delay(500);
FastLED.showColor(CRGB::Black);
delay(500);
}
}

View File

@ -22,7 +22,7 @@
performTranslation();
var si = window.sysInfo.hyperion;
var libs = { "Bootstrap 3": "https://getbootstrap.com/", "JQuery": "https://jquery.com/", "Bootstrap Colorpicker": "https://itsjavi.com/bootstrap-colorpicker/", "Bootstrap Toggle": "https://www.bootstraptoggle.com/", "Bootstrap Select": "https://developer.snapappointments.com/bootstrap-select/", "JSON-Editor": "https://www.jeremydorn.com/json-editor", "jQuery.i18n": "https://github.com/wikimedia/jquery.i18n", "metisMenu": "https://mm.onokumus.com/index.html", "download.js": "https://github.com/rndme/download", "gijgo": "https://gijgo.com/" };
var libs = { "Bootstrap 3": "https://getbootstrap.com/", "JQuery": "https://jquery.com/", "Bootstrap Colorpicker": "https://itsjavi.com/bootstrap-colorpicker/", "Bootstrap Toggle": "https://www.bootstraptoggle.com/", "Bootstrap Select": "https://developer.snapappointments.com/bootstrap-select/", "JSON-Editor": "https://www.jeremydorn.com/json-editor", "jQuery.i18n": "https://github.com/wikimedia/jquery.i18n", "metisMenu": "https://mm.onokumus.com/index.html", "download.js": "https://github.com/rndme/download", "Gijgo": "https://gijgo.com/", "DOMPurify" : "https://github.com/cure53/DOMPurify", "Marked": "https://github.com/markedjs/marked", "PlainDraggable": "https://github.com/anseki/plain-draggable", "LeaderLine": "https://github.com/anseki/leader-line", "Animate.css": "https://github.com/animate-css/animate.css"};
var libh = "";
var lang = [];
var dcount = 0;
@ -58,21 +58,18 @@
initRestart();
});
var url = 'https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/3RD_PARTY_LICENSES';
fetch(url)
.then(function (response) {
if (!response.ok) {
$("#3rdpartylicenses").html('<a href="' + url + '">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
}
else {
response.text().then(function (text) {
$("#3rdpartylicenses").html('<code>' + text + '</code>');
});
}
})
.catch(function (rejected) {
$("#3rdpartylicenses").html('<a href="' + url + '">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
});
$.ajax({
url:'3RD_PARTY_LICENSES',
dataType: "text",
success: function(data)
{
$("#3rdpartylicenses").html('<code>' + data + '</code>');
},
error: function()
{
$("#3rdpartylicenses").html('<a href="https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/3RD_PARTY_LICENSES">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
}
});
removeOverlay();
</script>

View File

@ -2,7 +2,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h3>
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_instcapture_conf_token">Capturing Hardware</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">

View File

@ -62,7 +62,7 @@
<div class="row">
<div class="col-lg-12" id="layout_intro"></div>
<div class="col-lg-6 col-md-12">
<div class="col-lg-6 col-md-12" id="layout_type">
<div class="panel-group" id="accordion">
<div class="panel panel-primary">
<div class="panel-heading headcollapse" id="classic_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
@ -149,9 +149,13 @@
</tbody>
</table>
<div class="panel panel-default">
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3">
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3" id="advanced_settings">
<h4 class="panel-title">
<a><span data-i18n="conf_leds_layout_advanced">Advanced settings</span></a>
<a>
<i class="fa fa-fw fa-cogs"></i>
<span data-i18n="conf_leds_layout_advanced">Advanced settings</span>
<i class="fa fa-angle-down pull-right" id="advanced_settings_right_icon"></i>
</a>
</h4>
</div>
<div id="collapse3" class="panel-collapse collapse">
@ -199,14 +203,14 @@
<label class="ltdlabel" for="ip_cl_ptl" data-i18n="conf_leds_layout_ptl">Point Top Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptlh" type="number" value="0" min="0" max="40" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_ptlh" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%h</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptlv" type="number" value="0" min="0" max="40" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_ptlv" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%v</div>
</td>
</tr>
@ -215,14 +219,14 @@
<label class="ltdlabel" for="ip_cl_ptr" data-i18n="conf_leds_layout_ptr">Point Top Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptrh" type="number" value="100" min="60" max="100" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_ptrh" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_ptrv" type="number" value="0" min="0" max="40" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_ptrv" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
@ -231,14 +235,14 @@
<label class="ltdlabel" for="ip_cl_pbr" data-i18n="conf_leds_layout_pbr">Point Bottom Right</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pbrh" type="number" value="100" min="60" max="100" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_pbrh" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pbrv" type="number" value="100" min="60" max="100" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_pbrv" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
@ -247,14 +251,14 @@
<label class="ltdlabel" for="ip_cl_pbl" data-i18n="conf_leds_layout_pbl">Point Bottom Left</label>
</td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pblh" type="number" value="0" min="0" max="40" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_pblh" type="number" value="0" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
</td>
</tr>
<tr>
<td class="ltd"></td>
<td class="itd input-group">
<input class="form-control ledCLconstr" id="ip_cl_pblv" type="number" value="100" min="60" max="100" step="1"></input>
<input class="form-control ledCLconstr" id="ip_cl_pblv" type="number" value="100" min="0" max="100" step="1"></input>
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
</td>
</tr>
@ -318,6 +322,17 @@
</select>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_direction" data-i18n="conf_leds_layout_ma_direction">Cabling</label>
</td>
<td class="itd">
<select class="form-control ledMAconstr" id="ip_ma_direction">
<option value="horizontal" data-i18n="conf_leds_layout_ma_opthoriz">Horizontal</option>
<option value="vertical" data-i18n="conf_leds_layout_ma_optvert">Vertical</option>
</select>
</td>
</tr>
<tr>
<td class="ltd">
<label class="ltdlabel" for="ip_ma_start" data-i18n="conf_leds_layout_ma_position">Input</label>
@ -373,10 +388,16 @@
</div>
</div>
</div> <!-- accordion -->
<div class="col-lg-6 col-md-12">
<div class="col-lg-6 col-md-12" id="layout_preview">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_peview">LED Layout preview</span></h4>
<h4 class="panel-title">
<i class="fa fa-search fa-fw"></i>
<span data-i18n="conf_leds_layout_peview">LED Layout preview</span>
<a href="#" class='fullscreen-btn' role="button" title="Toggle fullscreen">
<i class="fa fa-expand fa-fw pull-right"></i>
</a>
</h4>
</div>
<div class="panel-body">
<p id="previewcreator" style="font-weight:bold"></p>
@ -385,13 +406,15 @@
<div id="led_vis_help"></div>
<div class="col-lg-12 st_helper" style="position:relative; padding-left:0px; padding-right:0px">
<canvas id="image_preview" style="position:absolute; z-index:0"></canvas>
<div id="keystone_correction_area" style="position: absolute; z-index: 20;"></div>
<div id="leds_preview"></div>
</div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-danger" id="leds_prev_toggle_num"><i class="fa fa-info fa-fw"></i><span data-i18n="main_ledsim_btn_togglelednumber">toggle led numbers</span></button>
<button type="button" class="btn btn-danger" id="leds_prev_toggle_live_video"><i class="fa fa-fw fa-television"></i><span data-i18n="main_ledsim_btn_togglelivevideo">toggle live video</span></button>
<button type="button" class="btn btn-primary" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">toggle led numbers</span></button>
<button type="button" class="btn btn-danger" id="leds_prev_toggle_keystone_correction_area" style="display:none;"><i class="mdi mdi-vector-square" style="margin-right:5px;"></i><span data-i18n="conf_leds_layout_btn_keystone">toggle keystone correction</span></button>
<button type="button" class="btn btn-primary pull-right" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">show checklist</span></button>
</div>
</div>
</div>
@ -402,3 +425,4 @@
<script src="/js/content_leds.js"></script>

View File

@ -7,7 +7,15 @@
</div>
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-book fa-fw"></i><span data-i18n="conf_logging_logoutput"></span></div>
<div class="panel-heading">
<h4 class="panel-title">
<i class="fa fa-book fa-fw"></i>
<span data-i18n="conf_logging_logoutput"></span>
<a href="#" class='fullscreen-btn' role="button" title="Toggle fullscreen">
<i class="fa fa-expand fa-fw pull-right"></i>
</a>
</h4>
</div>
<div class="panel-body">
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
</div>

View File

@ -16,7 +16,7 @@
<span id="dash_config_status">Status</span>
</div>
<div class="panel-body">
<table class="table borderless">
<table id="dash_capture_hw" class="table borderless">
<thead>
<tr>
<th colspan="3">
@ -26,7 +26,7 @@
</tr>
</thead>
<tbody>
<tr>
<tr id="dash_screen_grabber_row">
<td></td>
<td data-i18n="edt_conf_fg_heading_title">Screen-Grabber</td>
<td style="text-align: right; padding-right: 0">
@ -34,7 +34,7 @@
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_screengrabber')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr>
<tr id="dash_video_grabber_row">
<td></td>
<td data-i18n="edt_conf_v4l2_heading_title">Video-Grabber</td>
<td style="text-align: right; padding-right: 0">
@ -42,9 +42,17 @@
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_videograbber')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr id="dash_audio_grabber_row">
<td></td>
<td data-i18n="edt_conf_audio_heading_title">Audio-Grabber</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_audio_grabber">disabled</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_audiograbber')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
</tbody>
</table>
<table class="table borderless">
<table id="dash_ports" class="table borderless">
<thead>
<tr>
<th colspan="3">
@ -54,7 +62,15 @@
</tr>
</thead>
<tbody>
<tr>
<tr id="dash_ports_flat_row">
<td></td>
<td data-i18n="dashboard_infobox_label_port_flat">flat</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_fbPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_fbserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr id="dash_ports_proto_row">
<td></td>
<td data-i18n="dashboard_infobox_label_port_proto">proto</td>
<td style="text-align: right; padding-right: 0">
@ -62,12 +78,12 @@
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_protoserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr>
<tr id="dash_ports_boblight_row">
<td></td>
<td data-i18n="dashboard_infobox_label_port_flat">flat</td>
<td data-i18n="dashboard_infobox_label_port_boblight">proto</td>
<td style="text-align: right; padding-right: 0">
<span id="dash_fbPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_fbserver')" style="text-decoration: none; cursor: pointer"></a>
<span id="dash_boblightPort">unknown</span>
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemInstCapture', 'editor_container_boblightserver')" style="text-decoration: none; cursor: pointer"></a>
</td>
</tr>
<tr>
@ -127,6 +143,7 @@
</div>
<!-- /.row -->
</div>
</div>
<!-- /.container-fluid -->
<script src="/js/content_dashboard.js"></script>

View File

@ -1,7 +1,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
@ -15,50 +15,51 @@
</div>
</div>
<div id="intro_effc">
</div>
<div class="row">
<div class="col-lg-6">
<div class="panel panel-default" >
<div class="panel-heading">
<label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div>
<div class="panel-body">
<div id="eff_desc"></div>
<table style="margin-bottom:8px" id="effc_nametable">
<tbody>
<tr>
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
<td class="itd"><input class="form-control" type="text" id="name-input" /></td>
</tr>
</tbody>
</table>
<div id="editor_container" />
</div>
<div class="panel-footer" id="eff_footer">
<button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
<button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
<button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="panel panel-default" >
<div class="panel-heading">
<label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div>
<div class="panel-body">
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="intro_effc">
</div>
<div class="row">
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading">
<label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
</div>
<div class="panel-body">
<div id="eff_desc"></div>
<table style="margin-bottom:8px" id="effc_nametable">
<tbody>
<tr>
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
<td class="itd"><input class="form-control" type="text" id="name-input"></td>
</tr>
</tbody>
</table>
<div id="editor_container"></div>
</div>
<div class="panel-footer" id="eff_footer">
<button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
<button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
<button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading">
<label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
</div>
<div class="panel-body">
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_effectsconfigurator.js"></script>

View File

@ -1,104 +1,107 @@
<div class="container-fluid">
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div class="panel panel-default" style="border:0px;">
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
<div class="dropdown">
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
<div id="active_instance_friendly_name"></div>
<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>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<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>
</a>
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-lg-8 col-xxl-7">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
<div class="panel-body">
<div id="sstcont"></div>
<div id="auto_btn"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-lg-8 col-xxl-8">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
<div class="panel-body">
<div id="sstcont"></div>
<div id="auto_btn"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
<div class="panel-body" id="comp_intro">
<div id="componentsbutton"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 col-xxl-4">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
<div class="panel-body" id="comp_intro">
<div id="componentsbutton"></div>
</div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-4">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
<div class="panel-body" id="color_intro">
<table class="table borderless">
<tbody>
<tr>
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
<td>
<div id="cp2" class="colorpicker-component input-group">
<input type="text" id="cpeff" class="form-control"/>
<span class="input-group-addon"><i></i></span>
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</div>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
<td class="input-group">
<select id="effect_select" class="form-control"></select>
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_input_img" data-i18n="remote_effects_label_picture" >Picture:</label></td>
<td class="input-group custom-file">
<input class="form-control" id="remote_input_img" type="file" accept="image/*" />
<span class="input-group-addon" id="remote_input_repimg" title="Repeat Image" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
<td class="input-group">
<input id="remote_duration" type="number" class="form-control" value="0" min="0"/>
<span class="input-group-addon" data-i18n="edt_append_s"></span>
</td>
</tr>
</tbody>
</table>
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-3">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
<div class="panel-body" id="maptype_intro">
<div id="mappingsbutton"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_videoMode_label"></span></div>
<div class="panel-body" id="videomode_intro">
<div id="videomodebtns"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default" >
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
<div class="panel-body" id="adjust_content">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 col-lg-6 col-xxl-4">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
<div class="panel-body" id="color_intro">
<table class="table borderless">
<tbody>
<tr>
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
<td>
<div id="cp2" class="colorpicker-component input-group">
<input type="text" id="cpeff" class="form-control" />
<span class="input-group-addon"><i></i></span>
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</div>
</td>
</tr>
<tr id="effect_row">
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
<td class="input-group">
<select id="effect_select" class="form-control"></select>
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_input_img" data-i18n="remote_effects_label_picture">Picture:</label></td>
<td class="input-group custom-file">
<input class="form-control" id="remote_input_img" type="file" accept="image/*" />
<span class="input-group-addon" id="remote_input_repimg" title="Repeat Image" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
</td>
</tr>
<tr>
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
<td class="input-group">
<input id="remote_duration" type="number" class="form-control" value="0" min="0" />
<span class="input-group-addon" data-i18n="edt_append_s"></span>
</td>
</tr>
</tbody>
</table>
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-3">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
<div class="panel-body" id="maptype_intro">
<div id="mappingsbutton"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_videoMode_label"></span></div>
<div class="panel-body" id="videomode_intro">
<div id="videomodebtns"></div>
</div>
</div>
</div>
<div class="col-md-6 col-lg-6 col-xxl-5">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
<div class="panel-body" id="adjust_content">
</div>
</div>
</div>
</div>
</div>
<script src="/js/content_remote.js" ></script>
<script src="/js/content_remote.js"></script>

View File

@ -5,7 +5,7 @@
<h3 data-i18n="info_restart_title"></h3>
<h4 data-i18n="info_restart_rightback"></h4>
<p data-i18n="info_restart_contus"></p>
<a href="https://forum.hyperion-project.org?pk_campaign=WebUI&pk_kwd=failedrestart" data-i18n="info_restart_contusa"></a>
<a href="https://hyperion-project.org/forum/" data-i18n="info_restart_contusa"></a>
</div>
</center>
</div>

View File

@ -4,7 +4,7 @@
<h3 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h3>
<div class="introd">
<h4 data-i18n="update_label_intro">Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4>
<h4> At the moment the install buttons are not working. Development is still ongoing here. </h4>
<h4> At the moment the respective install button is disabled. Development is still ongoing here. </h4>
<hr />
</div>
<h4 id="update_currver"></h4>
@ -49,12 +49,12 @@ $(document).ready( function(error) {
danger = 'default';
type = 'Stable';
}
matches++;
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked.parse(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"disabled") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
}
$('#update_currver').append($.i18n('update_versreminder', currentVersion));
if (matches == 0)
$('#versionlist').append($.i18n('update_no_updates_for_branch'));
}

8
assets/webconfig/css/animate.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -274,6 +274,10 @@ select.form-control {
color: #DDDDDD;
}
.keystone_correction_corners {
border:1px solid white;
}
.checkbox label::before {
border-color: #616161;
background-color: #212121;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.gj-draggable{cursor:move}.gj-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;z-index:1203}.gj-dialog-bootstrap [data-role=title],.gj-dialog-bootstrap4 [data-role=title]{display:inline}.gj-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.gj-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.gj-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.gj-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.gj-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.gj-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.gj-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.gj-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.gj-dialog-footer{position:absolute;bottom:0;width:100%;margin-top:0}.gj-dialog-scrollable [data-role=body]{overflow-x:hidden;overflow-y:scroll}.gj-dialog-bootstrap,.gj-dialog-bootstrap4,.gj-dialog-md{overflow:hidden;z-index:1202}.gj-dialog-bootstrap [data-role=close]{line-height:1.42857143}.gj-dialog-bootstrap4 [data-role=close]{line-height:1.5}.gj-dialog-md{background-color:#FFF;border:none;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);box-sizing:border-box;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.gj-dialog-md-header{padding:24px 24px 0;font-family:Roboto,Helvetica,Arial,sans-serif}.gj-dialog-md-title{margin:0;font-weight:400;display:inline;line-height:28px;font-size:20px}.gj-dialog-md-close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0;float:right;line-height:28px;font-size:28px}.gj-dialog-md-body{padding:20px 24px 24px;color:rgba(0,0,0,.54);font-family:Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:20px}.gj-dialog-md-footer{padding:8px 8px 8px 24px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;box-sizing:border-box}.gj-dialog-md-footer>:first-child{margin-right:0}.gj-dialog-md-footer>*{margin-right:8px;height:36px}

File diff suppressed because it is too large Load Diff

View File

@ -1,64 +0,0 @@
/*
* metismenu - v1.1.3
* Easy menu jQuery plugin for Twitter Bootstrap 3
* https://github.com/onokumus/metisMenu
*
* Made by Osman Nuri Okumus
* Under MIT License
*/
.arrow {
float: right;
line-height: 1.42857;
}
.glyphicon.arrow:before {
content: "\e079";
}
.active > a > .glyphicon.arrow:before {
content: "\e114";
}
/*
* Require Font-Awesome
* http://fortawesome.github.io/Font-Awesome/
*/
.fa.arrow:before {
content: "\f104";
}
.active > a > .fa.arrow:before {
content: "\f107";
}
.plus-times {
float: right;
}
.fa.plus-times:before {
content: "\f067";
}
.active > a > .fa.plus-times {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.plus-minus {
float: right;
}
.fa.plus-minus:before {
content: "\f067";
}
.active > a > .fa.plus-minus:before {
content: "\f068";
}

View File

@ -0,0 +1,7 @@
/*!
* metismenu https://github.com/onokumus/metismenu#readme
* A collapsible jQuery menu plugin
* @version 3.0.6
* @author Osman Nuri Okumus <onokumus@gmail.com> (https://github.com/onokumus)
* @license: MIT
*/.metismenu .arrow{float:right;line-height:1.42857}*[dir=rtl] .metismenu .arrow{float:left}.metismenu .glyphicon.arrow:before{content:""}.metismenu .mm-active>a>.glyphicon.arrow:before{content:""}.metismenu .fa.arrow:before{content:""}.metismenu .mm-active>a>.fa.arrow:before{content:""}.metismenu .ion.arrow:before{content:""}.metismenu .mm-active>a>.ion.arrow:before{content:""}.metismenu .plus-times{float:right}*[dir=rtl] .metismenu .plus-times{float:left}.metismenu .fa.plus-times:before{content:""}.metismenu .mm-active>a>.fa.plus-times{transform:rotate(45deg)}.metismenu .plus-minus{float:right}*[dir=rtl] .metismenu .plus-minus{float:left}.metismenu .fa.plus-minus:before{content:""}.metismenu .mm-active>a>.fa.plus-minus:before{content:""}.metismenu .mm-collapse:not(.mm-show){display:none}.metismenu .mm-collapsing{position:relative;height:0;overflow:hidden;transition-timing-function:ease;transition-duration:.35s;transition-property:height,visibility}.metismenu .has-arrow{position:relative}.metismenu .has-arrow::after{position:absolute;content:"";width:.5em;height:.5em;border-width:1px 0 0 1px;border-style:solid;border-color:initial;right:1em;transform:rotate(-45deg) translate(0, -50%);transform-origin:top;top:50%;transition:all .3s ease-out}*[dir=rtl] .metismenu .has-arrow::after{right:auto;left:1em;transform:rotate(135deg) translate(0, -50%)}.metismenu .mm-active>.has-arrow::after,.metismenu .has-arrow[aria-expanded=true]::after{transform:rotate(-135deg) translate(0, -50%)}*[dir=rtl] .metismenu .mm-active>.has-arrow::after,*[dir=rtl] .metismenu .has-arrow[aria-expanded=true]::after{transform:rotate(225deg) translate(0, -50%)}/*# sourceMappingURL=metisMenu.min.css.map */

View File

@ -0,0 +1,61 @@
{
"dashboard_alert_message_confedit": "La teva configuració d'Hyperion s'ha modificat. Per aplicar-la, reinicia Hyperion.",
"dashboard_alert_message_confedit_t": "Configuració modificada",
"dashboard_alert_message_confsave_success_t": "Configuració guardada",
"dashboard_alert_message_disabled_t": "Instància de maquinari LED deshabilitada",
"dashboard_componentbox_label_comp": "Component",
"dashboard_componentbox_label_status": "Estat",
"dashboard_componentbox_label_title": "Estat del component",
"dashboard_infobox_label_currenthyp": "La teva versió d'Hyperion:",
"dashboard_infobox_label_disableh": "Desactivar instància: 1 $",
"dashboard_infobox_label_enableh": "Activar instància: 1 $",
"dashboard_infobox_label_instance": "Instànica:",
"dashboard_infobox_label_latesthyp": "La darrera versió d'Hyperion:",
"dashboard_infobox_label_platform": "Plataforma:",
"dashboard_infobox_label_ports": "Ports:",
"dashboard_infobox_label_smartacc": "Accés intel·ligent",
"dashboard_infobox_label_statush": "Estat d'Hyperion:",
"dashboard_infobox_label_title": "Informació",
"dashboard_infobox_message_updatesuccess": "Estàs executant la darrera versió d'Hyperion.",
"dashboard_infobox_message_updatewarning": "Hi ha una nova versió d'Hyperion disponible! (1 $)",
"dashboard_label_intro": "El panell de control et dona una vista ràpida de l'estat d'Hyperion",
"dashboard_newsbox_label_title": "Bloc d'Hyperion",
"dashboard_newsbox_readmore": "Llegeix més",
"dashboard_newsbox_visitblog": "Visita el bloc d'Hyperion",
"general_access_advanced": "Avançat",
"general_access_default": "Per defecte",
"general_access_expert": "Expert",
"general_btn_back": "Tornar",
"general_btn_cancel": "Cancel.la",
"general_btn_continue": "Continuar",
"general_btn_next": "Següent",
"general_btn_off": "Off",
"general_btn_ok": "OK",
"general_btn_on": "On",
"general_btn_restarthyperion": "Reinicia Hyperion",
"general_btn_save": "Guarda",
"general_btn_saveandreload": "Guarda i recarrega",
"general_btn_yes": "Sí",
"general_button_savesettings": "Guarda la configuració",
"general_col_blue": "blau",
"general_col_green": "verd",
"general_col_red": "vermell",
"general_comp_BLACKBORDER": "Bandes fosques",
"general_comp_GRABBER": "Captura Pantalla",
"general_comp_LEDDEVICE": "Sortida LED",
"general_comp_SMOOTHING": "Suavitzat",
"general_comp_V4L": "Captura l'entrada USB",
"general_country_de": "Alemany",
"general_country_es": "Espanya",
"general_country_fr": "França",
"general_country_it": "Itàlia",
"general_country_nl": "Països Baixos",
"general_country_uk": "Regne Unit",
"general_country_us": "Estats Units",
"general_speech_cs": "Txec",
"general_speech_de": "Alemany",
"general_speech_en": "Anglès",
"general_speech_es": "Espanyol",
"general_speech_it": "Italià",
"general_webui_title": "Hyperion - Configuració Web"
}

View File

@ -0,0 +1,49 @@
{
"dashboard_infobox_label_currenthyp": "Din Hyperion version:",
"dashboard_infobox_label_latesthyp": "Seneste Hyperion version:",
"dashboard_infobox_label_platform": "Platform:",
"dashboard_infobox_label_title": "Information",
"dashboard_label_intro": "Dashboardet giver dig en hurtig oversigt over status af Hyperion",
"general_access_advanced": "Avanceret",
"general_access_default": "Standart",
"general_access_expert": "Ekspert",
"general_btn_back": "Tilbage",
"general_btn_cancel": "Annullere",
"general_btn_continue": "Fortsæt",
"general_btn_iswitch": "Skift",
"general_btn_next": "Næste",
"general_btn_off": "Fra",
"general_btn_ok": "OK",
"general_btn_on": "Til",
"general_btn_restarthyperion": "Genstart Hyperion",
"general_btn_save": "Gem",
"general_btn_saveandreload": "Gem og genindlæs",
"general_btn_yes": "Ja",
"general_button_savesettings": "Gem indstillinger",
"general_col_blue": "blå",
"general_col_green": "grøn",
"general_col_red": "rød",
"general_comp_BLACKBORDER": "Blackbar Detektion",
"general_comp_BOBLIGHTSERVER": "Boblight Server",
"general_comp_FLATBUFSERVER": "Flatbuffers Server",
"general_comp_FORWARDER": "Forwarder",
"general_comp_GRABBER": "Optag skærm",
"general_comp_LEDDEVICE": "LED output",
"general_comp_PROTOSERVER": "Protocol Buffers Server",
"general_comp_SMOOTHING": "Udjævning",
"general_comp_V4L": "Optag USB-input",
"general_country_de": "Tyskland",
"general_country_es": "Spanien",
"general_country_fr": "Frankrig",
"general_country_it": "Italien",
"general_country_nl": "Holland",
"general_country_uk": "England",
"general_country_us": "USA",
"general_speech_cs": "Tjekkisk",
"general_speech_de": "Tysk",
"general_speech_en": "Engelsk",
"general_speech_es": "Spansk",
"general_speech_it": "Italiensk",
"general_webui_title": "Hyperion - Webkonfiguration",
"general_wiki_moreto": "Mere information om \"$1\" på vores Wiki"
}

View File

@ -10,6 +10,9 @@
"InfoDialog_nowrite_foottext": "Die Webkonfiguration wird automatisch wieder freigegeben, sobald das Problem behoben wurde!",
"InfoDialog_nowrite_text": "Hyperion hat keinen Schreibzugriff auf die aktuell geladene Konfiguration. Bitte korrigiere die Dateizugriffsrechte, um fortzufahren.",
"InfoDialog_nowrite_title": "Fehler beim Schreibzugriff!",
"InfoDialog_systemRestart_title": "Neustart",
"InfoDialog_systemResume_title": "Aktivieren",
"InfoDialog_systemSuspend_title": "Ruhezustand",
"about_3rd_party_licenses": "Drittanbieter Lizenzen",
"about_3rd_party_licenses_error": "Wir hatten Probleme beim Laden der Drittanbieter Lizenzen aus dem Internet. <br />Klicke hier, um die Datei auf GitHub aufzurufen.",
"about_build": "Build",
@ -41,6 +44,7 @@
"conf_general_inst_title": "LED-Hardware Instanzverwaltung",
"conf_general_intro": "Grundsätzliche Einstellungen zu Hyperion oder WebUI, die in keine andere Kategorie passen.",
"conf_general_label_title": "Allgemeine Einstellungen",
"conf_grabber_audio_intro": "Bei der Audioerfassung wird ein Audioeingabegerät als Quelle für die Visualisierung verwendet.",
"conf_grabber_fg_intro": "Bildschirm Aufnahme ist das lokale System auf dem Hyperion installiert wurde, welches als Bildquelle dient.",
"conf_grabber_inst_grabber_config_info": "Konfiguriere deine Aufnahmegeräte bevor du sie in einer LED-Instanz benutzt.",
"conf_grabber_v4l_intro": "USB-Aufnahme ist ein Gerät, welches via USB angeschlossen ist und als Bildquelle dient.",
@ -51,9 +55,13 @@
"conf_leds_contr_label_contrtype": "Steuerungstyp:",
"conf_leds_device_info_log": "Falls die LEDs nicht leuchten, schaue hier ob es einen Fehler gab: ",
"conf_leds_device_intro": "Wähle eine Methode zur Steuerung deiner LEDs aus, sie sind unterteilt in verschiedene Kategorien. Neben den allgemeinen Optionen die für alle gültig sind, gibt es auch spezifische, die sich unterscheiden je nach Wahl.",
"conf_leds_error_get_properties_text": "Auf die Geräteeigenschaften kann nicht zugegriffen werden - Überprüfe die Konfiguration.",
"conf_leds_error_get_properties_title": "Geräteeigenschaften",
"conf_leds_error_hwled_gt_layout": "Die Zahl der gegebenen Hardware LEDs ($1) ist größer, als die Anzahl der im LED-Layout definierten ($2), $3 {{plural:$3|LED wird|LEDs werden}} schwarz bleiben.",
"conf_leds_error_hwled_gt_maxled": "Die Zahl der gegebenen Hardware LEDs ($1) ist größer, als die Anzahl der durch den LED-Steuerungstyp unterstützen ($2). <br>Die Anzahl Hardware LEDs wir auf ($3) gesetzt.",
"conf_leds_error_hwled_gt_maxled": "Die Zahl der gegebenen Hardware LEDs ($1) ist größer, als die Anzahl der durch den LED-Steuerungstyp unterstützen ($2). <br>Die Anzahl Hardware LEDs wird auf ($3) gesetzt.",
"conf_leds_error_hwled_gt_maxled_protocol": "Die Anzahl der Hardware-LEDs ($1) ist größer als die maximale Anzahl der vom Streaming-Protokoll unterstützten LEDs ($2).<br> Das Streaming-Protokoll wird auf ($3) geändert.",
"conf_leds_error_hwled_lt_layout": "Die Zahl der gegebenen Hardware LEDs ($1) ist kleiner, als die Anzahl der im LED-Layout definierten ($2). <br> Im LED-Layout dürfen nicht mehr LEDs konfiguriert sein, als vorhanden.",
"conf_leds_error_wled_segment_missing": "Das aktuell konfigurierte Segment ($1) ist in WLED-Gerät nicht konfiguriert.<br> Überprüfe die WLED-Konfiguration!<br>Die Konfigurationsseite zeigt die aktuelle WLED-Einstellung.",
"conf_leds_info_ws281x": "Hyperion muss mit 'root' Rechten für diesen LED-Steuerungstyp laufen!",
"conf_leds_layout_advanced": "Erweiterte Optionen",
"conf_leds_layout_blacklist_num_title": "LED-Anzahl",
@ -62,6 +70,7 @@
"conf_leds_layout_blacklist_start_title": "Start-LED",
"conf_leds_layout_blacklistleds_title": "Auszuschließende LEDs",
"conf_leds_layout_btn_checklist": "Zeige Checkliste",
"conf_leds_layout_btn_keystone": "Trapezkorrektur",
"conf_leds_layout_button_savelay": "Speichere Layout",
"conf_leds_layout_button_updsim": "Aktualisiere Vorschau",
"conf_leds_layout_checkp1": "Die schwarze eingefärbte LED ist die erste LED. Das ist der Punkt, an dem die Daten eingespeist werden.",
@ -72,7 +81,7 @@
"conf_leds_layout_cl_bottomleft": "Unten Links (Ecke)",
"conf_leds_layout_cl_bottomright": "Unten Rechts (Ecke)",
"conf_leds_layout_cl_cornergap": "Eckabstand",
"conf_leds_layout_cl_edgegap": "Rahmenabstand",
"conf_leds_layout_cl_edgegap": "Eckenabstand",
"conf_leds_layout_cl_gaglength": "Lückenlänge",
"conf_leds_layout_cl_gappos": "Lückenposition",
"conf_leds_layout_cl_hleddepth": "Horizontale LED-Tiefe",
@ -81,6 +90,16 @@
"conf_leds_layout_cl_leftbottom": "Links unten (50% bis 100%)",
"conf_leds_layout_cl_leftmiddle": "Links mitte (25% bis 75%)",
"conf_leds_layout_cl_lefttop": "Links oben (0% bis 50%)",
"conf_leds_layout_cl_lightPosBottomLeft11": "Link unten (75% bis 100%)",
"conf_leds_layout_cl_lightPosBottomLeft112": "Link unten (0% bis 50%)",
"conf_leds_layout_cl_lightPosBottomLeft12": "Link unten (25% bis 50%)",
"conf_leds_layout_cl_lightPosBottomLeft121": "Link unten (50% bis 100%)",
"conf_leds_layout_cl_lightPosBottomLeft14": "Link unten (0% bis 25%)",
"conf_leds_layout_cl_lightPosBottomLeft34": "Link unten (50 bis 75%)",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Link unten (25% bis 75%)",
"conf_leds_layout_cl_lightPosTopLeft112": "Link oben (0% bis 50%)",
"conf_leds_layout_cl_lightPosTopLeft121": "Link oben (50% bis 100%)",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Link oben (25% bis 75%)",
"conf_leds_layout_cl_overlap": "Überlappung",
"conf_leds_layout_cl_reversdir": "Richtung umkehren",
"conf_leds_layout_cl_right": "Rechts",
@ -93,8 +112,9 @@
"conf_leds_layout_cl_vleddepth": "Vertikale LED-Tiefe",
"conf_leds_layout_frame": "Klassisches Layout (Rahmen)",
"conf_leds_layout_generatedconf": "Generierte/Aktuelle LED-Konfiguration",
"conf_leds_layout_intro": "Du benötigst ebenfalls ein LED-Layout, welches deine LED-Positionen wiederspiegelt. Das klassische Layout wird für gewöhnlichen für TVs verwendet, Hyperion unterstützt aber auch LED-Wände (Matrix). Die Ansicht des Layouts ist die Perspektive VOR dem Fernseher, nicht dahinter.",
"conf_leds_layout_intro": "Du benötigst ebenfalls ein LED-Layout, welches deine LED-Positionen widerspiegelt. Das klassische Layout wird üblicherweise für TVs verwendet, Hyperion unterstützt aber auch LED-Wände (Matrix). Die Ansicht des Layouts ist die Perspektive VOR dem Fernseher, nicht dahinter.",
"conf_leds_layout_ma_cabling": "Verkabelung",
"conf_leds_layout_ma_direction": "Richtung",
"conf_leds_layout_ma_horiz": "Horizontal",
"conf_leds_layout_ma_optbottomleft": "Unten links",
"conf_leds_layout_ma_optbottomright": "Unten rechts",
@ -181,9 +201,10 @@
"dashboard_infobox_label_instance": "Instanz:",
"dashboard_infobox_label_latesthyp": "Aktuellste Hyperion Version:",
"dashboard_infobox_label_platform": "Bildschirm:",
"dashboard_infobox_label_port_boblight": "Boblight Server:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "JSON-Server:",
"dashboard_infobox_label_port_proto": "\nProtobuffer:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
"dashboard_infobox_label_ports": "Ports",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_smartacc": "Schnellzugriff",
@ -192,7 +213,7 @@
"dashboard_infobox_label_watchedversionbranch": "Ausgewählter Versionszweig:",
"dashboard_infobox_message_updatesuccess": "Du nutzt die aktuellste Version von Hyperion.",
"dashboard_infobox_message_updatewarning": "Eine aktuellere Version von Hyperion ist verfügbar! ($1)",
"dashboard_label_intro": "Das Dashboard zeigt dir Informationen zum Status und ob Updates verfügbar sind.",
"dashboard_label_intro": "Das Dashboard zeigt dir eine Übersicht zum Status der Komponenten von Hyperion an.",
"dashboard_message_default_password": "Das Standardpasswort der WebUI ist gesetzt. Wir empfehlen dringend, dieses zu ändern.",
"dashboard_message_default_password_t": "WebUI Standardpasswort gesetzt",
"dashboard_message_do_not_show_again": "Diese Meldung nicht mehr anzeigen",
@ -203,6 +224,7 @@
"dashboard_newsbox_readmore": "Weiterlesen",
"dashboard_newsbox_visitblog": "Besuche den Hyperion-Blog",
"edt_append_degree": "°",
"edt_append_frames": "Frames",
"edt_append_hz": "Hz",
"edt_append_leds": "LEDs",
"edt_append_ms": "ms",
@ -213,6 +235,27 @@
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/grad",
"edt_conf_audio_device_expl": "Ausgewähltes Audio-Eingabegerät",
"edt_conf_audio_device_title": "Audio-Eingabegerät",
"edt_conf_audio_effect_enum_vumeter": "VU-Meter",
"edt_conf_audio_effect_hotcolor_expl": "Farbe die einen hohen Pegel anzeigt.",
"edt_conf_audio_effect_hotcolor_title": "Farbe hoher Pegel",
"edt_conf_audio_effect_multiplier_expl": "Multiplikator zur Verstärkung des Audiosignals.",
"edt_conf_audio_effect_multiplier_title": "Multiplikator",
"edt_conf_audio_effect_safecolor_expl": "Farbe die einen niedrigen Pegel anzeigt.",
"edt_conf_audio_effect_safecolor_title": "Farbe niedriger Pegel",
"edt_conf_audio_effect_safevalue_expl": "Schwellwert bis zu dem ein niedriger Pegel gegeben ist.",
"edt_conf_audio_effect_safevalue_title": "Schwellwert niedriger Pegel",
"edt_conf_audio_effect_set_defaults": "Zurücksetzen auf Standardwerte",
"edt_conf_audio_effect_tolerance_expl": "Toleranz für die automatische Berechnung eines Signalmultiplikators von 0-100",
"edt_conf_audio_effect_tolerance_title": "Toleranz",
"edt_conf_audio_effect_warncolor_expl": "Farbe die einen mittleren Pegel anzeigt.",
"edt_conf_audio_effect_warncolor_title": "Farbe mittlerer Pegel",
"edt_conf_audio_effect_warnvalue_expl": "Schwellwert bis zu dem ein mittlerer Pegel gegeben ist.",
"edt_conf_audio_effect_warnvalue_title": "Schwellwert mittlerer Pegel",
"edt_conf_audio_effects_expl": "Wähle einen Effekt für die Umwandlung des Audiosignals.",
"edt_conf_audio_effects_title": "Audio-Effekte",
"edt_conf_audio_heading_title": "Audio Aufnahme",
"edt_conf_bb_blurRemoveCnt_expl": "Anzahl an Pixeln, die zusätzlich vom Rand abgeschnitten werden.",
"edt_conf_bb_blurRemoveCnt_title": "Unscharfe Pixel",
"edt_conf_bb_borderFrameCnt_expl": "Anzahl an Bildern bis ein neuer Rand festgelegt wird.",
@ -228,6 +271,8 @@
"edt_conf_bb_unknownFrameCnt_title": "Unbekannte Bilder",
"edt_conf_bge_heading_title": "Hintergrund Effekt/Farbe",
"edt_conf_bobls_heading_title": "Boblight Server",
"edt_conf_color_accuracyLevel_expl": "Stufe, wie genau dominante Farben ausgewertet werden. Eine höhere Stufe erzeugt genauere Ergebnisse, erfordert aber auch mehr Rechenleistung. Sollte mit reduzierter Pixelverarbeitung kombiniert werden.",
"edt_conf_color_accuracyLevel_title": "Genauigkeitsstufe",
"edt_conf_color_backlightColored_expl": "Die Hintergrundbeleuchtung kann mit oder ohne Farbanteile genutzt werden.",
"edt_conf_color_backlightColored_title": "Farbige Hintergrundbeleuchtung",
"edt_conf_color_backlightThreshold_expl": "Eine Beleuchtung die dauerhaft aktiv ist. (Automatisch deaktiviert bei Effekten, Farben oder im Zustand \"Aus\")",
@ -238,6 +283,8 @@
"edt_conf_color_blue_title": "Blau",
"edt_conf_color_brightnessComp_expl": "Kompensiert Unterschiede in der Helligkeit zwischen Rot Grün Blau, Cyan Magenta Gelb und weiß. 100 ist volle Kompensation, 0 keine Kompensation",
"edt_conf_color_brightnessComp_title": "Helligkeitsabgleich",
"edt_conf_color_brightnessGain_expl": "Anpassung der Helligkeit. 1,0 bedeutet keine Änderung, Werte größer 1,0 erhöhen die Helligkeit, kleiner 1,0 verringern diese.",
"edt_conf_color_brightnessGain_title": "Helligkeitsverstärkung",
"edt_conf_color_brightness_expl": "Die gesamte Helligkeit",
"edt_conf_color_brightness_title": "Helligkeit",
"edt_conf_color_channelAdjustment_header_expl": "Passe die Farbkanäle deiner LEDs an",
@ -256,7 +303,7 @@
"edt_conf_color_heading_title": "Farbkalibrierung",
"edt_conf_color_id_expl": "Eine vom Benutzer frei angegebene ID.",
"edt_conf_color_id_title": "ID",
"edt_conf_color_imageToLedMappingType_expl": "Sofern nicht \"Mehrfarbig\", wird dein LED-Layout mit einer anderen Bildzuweisung überschrieben",
"edt_conf_color_imageToLedMappingType_expl": "Sofern nicht \"Durchschnittsfarbe einfach \", wird dein LED-Layout mit einer anderen Bildzuweisung überschrieben",
"edt_conf_color_imageToLedMappingType_title": "LED-Bereich Zuordnungstyp",
"edt_conf_color_leds_expl": "Zugewiesen zu allen (*) LEDs oder nur zu bestimmten LED Nummern (0-17).",
"edt_conf_color_leds_title": "LED-Iindex",
@ -264,6 +311,10 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "Kalibrierter Rotwert.",
"edt_conf_color_red_title": "Rot",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "Es wird nur eine reduzierte Menge von Pixeln pro definiertem LED-Bereich ausgewertet, Niedrig ~25%, Mittel ~10%, Hoch ~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "Reduzierte Pixelverarbeitung",
"edt_conf_color_saturationGain_expl": "Anpassung der Farbsättigung. 1,0 bedeutet keine Änderung, Werte größer 1,0 erhöhen die Sättigung, kleiner 1,0 verringern diese.",
"edt_conf_color_saturationGain_title": "Sättigungsverstärkung",
"edt_conf_color_white_expl": "Kalibrierter Weißwert.",
"edt_conf_color_white_title": "Weiß",
"edt_conf_color_yellow_expl": "Kalibrierter Gelbwert.",
@ -293,6 +344,8 @@
"edt_conf_enum_color": "Farbe",
"edt_conf_enum_custom": "Benutzerdefiniert",
"edt_conf_enum_decay": "Dämpfung",
"edt_conf_enum_delay": "Nur Verzögerung",
"edt_conf_enum_disabled": "Deaktiviert",
"edt_conf_enum_dl_error": "nur Fehler",
"edt_conf_enum_dl_informational": "informativ",
"edt_conf_enum_dl_nodebug": "keine Debugausgabe",
@ -301,9 +354,12 @@
"edt_conf_enum_dl_verbose1": "Stufe 1",
"edt_conf_enum_dl_verbose2": "Stufe 2",
"edt_conf_enum_dl_verbose3": "Stufe 3",
"edt_conf_enum_dominant_color": "Dominante Farbe - pro LED",
"edt_conf_enum_dominant_color_advanced": "Dominante Farbe fortgeschritten - pro LED",
"edt_conf_enum_effect": "Effekt",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "Hoch",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "von links nach rechts",
"edt_conf_enum_linear": "Linear",
@ -311,7 +367,10 @@
"edt_conf_enum_logsilent": "Stille",
"edt_conf_enum_logverbose": "Ausführlich",
"edt_conf_enum_logwarn": "Warnung",
"edt_conf_enum_multicolor_mean": "Mehrfarbig",
"edt_conf_enum_low": "Niedrig",
"edt_conf_enum_medium": "Mittel",
"edt_conf_enum_multicolor_mean": "Durchschnittsfarbe einfach - pro LED",
"edt_conf_enum_multicolor_mean_squared": "Durchschnittsfarbe zum Quadrat - pro LED",
"edt_conf_enum_please_select": "Bitte auswählen",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
@ -319,7 +378,9 @@
"edt_conf_enum_top_down": "von oben nach unten",
"edt_conf_enum_transeffect_smooth": "Gleichmäßig",
"edt_conf_enum_transeffect_sudden": "Sofort",
"edt_conf_enum_unicolor_mean": "Einfarbig",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Durchschnittsfarbe Gesamtbild - auf alle LED angewandt",
"edt_conf_fbs_heading_title": "Flatbuffers Server",
"edt_conf_fbs_timeout_expl": "Wenn für die angegebene Zeit keine Daten empfangen werden, wird die Komponente (vorübergehend) deaktiviert",
"edt_conf_fbs_timeout_title": "Zeitüberschreitung",
@ -347,11 +408,18 @@
"edt_conf_fge_type_title": "Typ",
"edt_conf_fw_flat_expl": "Ein Flatbuffer Ziel pro Zeile. Bestehend aus IP:PORT (Beispiel: 127.0.0.1:19401)",
"edt_conf_fw_flat_itemtitle": "Flatbuffer Ziel",
"edt_conf_fw_flat_services_discovered_expl": "Gefundene Hyperion-Server mit Flatbuffer-Dienst",
"edt_conf_fw_flat_services_discovered_title": "Gefundene Flatbuffer-Ziele",
"edt_conf_fw_flat_title": "Liste von Flatbuffer Zielen",
"edt_conf_fw_heading_title": "Weiterleitung",
"edt_conf_fw_json_expl": "Ein Json Ziel pro Zeile. Bestehend aus IP:PORT (Beispiel: 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Json Ziel",
"edt_conf_fw_json_title": "Liste von Json Zielen",
"edt_conf_fw_json_expl": "Ein JSON-API-Dienst Ziel",
"edt_conf_fw_json_itemtitle": "JSON-API Ziel",
"edt_conf_fw_json_services_discovered_expl": "Gefundene Hyperion-Server mit JSON-API-Dienst",
"edt_conf_fw_json_services_discovered_title": "Gefundene JSON-Ziele",
"edt_conf_fw_json_title": "Liste von JSON-API Zielen",
"edt_conf_fw_remote_service_discovered_none": "Keine anderen Hyperion Dienste gefunden",
"edt_conf_fw_service_name_expl": "Name des remote Hyperiondienstes/-Servers",
"edt_conf_fw_service_name_title": "Dienstname",
"edt_conf_gen_configVersion_title": "Konfiguration per Version",
"edt_conf_gen_heading_title": "Allgemeine Einstellungen",
"edt_conf_gen_name_expl": "Der Name wird verwendet, um Hyperion besser zu identifizieren. (Hilfreich bei mehreren Instanzen)",
@ -371,11 +439,13 @@
"edt_conf_grabber_discovered_title": "Gefundenes Aufnahmegerät",
"edt_conf_grabber_discovered_title_info": "Wähle dein gefundenes Aufnahmegerät aus.",
"edt_conf_grabber_discovery_inprogress": "Suche Aufnahmegeräte",
"edt_conf_instC_audioEnable_expl": "Aktiviert die Audioaufnahme für diese LED Hardware Instanz.",
"edt_conf_instC_audioEnable_title": "Aktivieren der Audioaufnahme",
"edt_conf_instC_screen_grabber_device_expl": "Das verwendet Bildschirmaufnahmegerät",
"edt_conf_instC_screen_grabber_device_title": "Bildschirmaufnahmegerät",
"edt_conf_instC_systemEnable_expl": "Aktiviert die Bildschirm Aufnahme für diese LED Hardware Instanz.",
"edt_conf_instC_systemEnable_title": "Aktiviere Bildschirm Aufnahme",
"edt_conf_instC_v4lEnable_expl": "Aktiviert die USB Aufnahme für diese LED -Hardware Instanz.",
"edt_conf_instC_v4lEnable_expl": "Aktiviert die USB Aufnahme für diese LED Hardware Instanz.",
"edt_conf_instC_v4lEnable_title": "Aktiviere USB-Aufnahme",
"edt_conf_instC_video_grabber_device_expl": "Das verwendete Videoaufnahmegerät.",
"edt_conf_instC_video_grabber_device_title": "Videoaufnahmegerät",
@ -410,8 +480,6 @@
"edt_conf_smooth_heading_title": "Glättung",
"edt_conf_smooth_interpolationRate_expl": "Frequenz in der Zwischenschritte zur Glättung berechnet werden.",
"edt_conf_smooth_interpolationRate_title": "Interpolationsfrequenz",
"edt_conf_smooth_outputRate_expl": "Die Ausgangfrequenz zum LED-Gerät",
"edt_conf_smooth_outputRate_title": "Ausgabefrequenz",
"edt_conf_smooth_time_ms_expl": "Wie lange soll die Glättung Bilder sammeln?",
"edt_conf_smooth_time_ms_title": "Zeit",
"edt_conf_smooth_type_expl": "Algorithmus der Glättung.",
@ -496,8 +564,14 @@
"edt_dev_enum_sub_min_warm_adjust": "Minimale Anpassung: warm",
"edt_dev_enum_subtract_minimum": "Subtrahiere Minimum",
"edt_dev_enum_white_off": "Weiß ist aus",
"edt_dev_general_autostart_title": "Autostart",
"edt_dev_general_autostart_title_info": "Die LEDs werden nach dem Start angeschaltet oder nicht",
"edt_dev_general_colorOrder_title": "RGB Byte Reihenfolge",
"edt_dev_general_colorOrder_title_info": "Die Farbreihenfolge des Gerätes",
"edt_dev_general_enableAttemptsInterval_title": "Wiederholungsintervall",
"edt_dev_general_enableAttemptsInterval_title_info": "Intervall zwischen zwei Verbindungsversuchen.",
"edt_dev_general_enableAttempts_title": "Verbindungsversuche",
"edt_dev_general_enableAttempts_title_info": "Anzahl der Verbindungsversuche bevor das Gerät stoppt.",
"edt_dev_general_hardwareLedCount_title": "Anzahl Hardware LEDs",
"edt_dev_general_hardwareLedCount_title_info": "Die verfügbare LED Anzahl des Gerätes",
"edt_dev_general_heading_title": "Allgemeine Einstellungen",
@ -508,20 +582,22 @@
"edt_dev_spec_FCsetConfig_title": "Wende Fadecandy Konfiguration an",
"edt_dev_spec_LBap102Mode_title": "LightBerry APA102 Modus",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_ada_mode_title": "Adalight - Standard",
"edt_dev_spec_awa_mode_title": "HyperSerial - High speed",
"edt_dev_spec_baudrate_title": "Baudrate",
"edt_dev_spec_blackLightsTimeout_title": "Signal Erkennung Timeout bei schwarz",
"edt_dev_spec_brightnessFactor_title": "Helligkeitsfaktor",
"edt_dev_spec_brightnessMax_title": "Helligkeitsmaximum",
"edt_dev_spec_brightnessMin_title": "Helligkeitsminimum",
"edt_dev_spec_brightnessMax_title": "Helligkeit maximal",
"edt_dev_spec_brightnessMin_title": "Helligkeit minimal",
"edt_dev_spec_brightnessOverwrite_title": "Helligkeit überschreiben",
"edt_dev_spec_brightnessThreshold_title": "Signal Erkennung Helligkeitsminimum",
"edt_dev_spec_brightness_title": "Helligkeit",
"edt_dev_spec_candyGamma_title": "\"Candy\" Modus (doppelte Gammakorrektur)",
"edt_dev_spec_chanperfixture_title": "Kanäle pro Gerät",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Clientkey",
"edt_dev_spec_colorComponent_title": "Farbkomponente",
"edt_dev_spec_debugLevel_title": "Debug Stufe",
"edt_dev_spec_debugStreamer_title": "Streamer Debugging",
"edt_dev_spec_delayAfterConnect_title": "Verzögerung nach Verbindung",
"edt_dev_spec_devices_discovered_none": "Keine Geräte gefunden",
"edt_dev_spec_devices_discovered_title": "Gefundene LED-Geräte",
@ -556,6 +632,8 @@
"edt_dev_spec_networkDeviceName_title": "Gerätename im Netzwerk",
"edt_dev_spec_networkDevicePort_title": "Port",
"edt_dev_spec_numberOfLeds_title": "Anzahl der LEDs",
"edt_dev_spec_onBlackTimeToPowerOff": "Zeit bis zum Ausschalten, wenn das Helligkeitsminimum unterschritten wurde",
"edt_dev_spec_onBlackTimeToPowerOn": "Zeit bis zum Einschalten, wenn ein Signal wieder anliegt",
"edt_dev_spec_orbIds_title": "Orb-ID(s)",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
@ -563,19 +641,34 @@
"edt_dev_spec_panel_start_position": "Startpanel [0-max Panels]",
"edt_dev_spec_panelorganisation_title": "Nummerierungsreihenfolge der Panels",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Port [1-65535] des Dienstes",
"edt_dev_spec_port_title": "Port",
"edt_dev_spec_printTimeStamp_title": "Mit Zeitstempel",
"edt_dev_spec_pwmChannel_title": "PWM Kanal",
"edt_dev_spec_razer_device_title": "Razer Chroma Gerätetyp",
"edt_dev_spec_restoreOriginalState_title": "Originalzustand wiederherstellen",
"edt_dev_spec_restoreOriginalState_title_info": "Bei Deaktivierung, Lampen Originalzustand wiederherstellen",
"edt_dev_spec_rgbw_calibration_blue": "Blau/Weiß-Kanal Aspekt ",
"edt_dev_spec_rgbw_calibration_enable": "Weißkanal-Kalibrierung (nur RGBW)",
"edt_dev_spec_rgbw_calibration_green": "Grün/Weiß-Kanal Aspekt",
"edt_dev_spec_rgbw_calibration_limit": "Grenzwert für Weißkanal",
"edt_dev_spec_rgbw_calibration_red": "Rot/Weiß-Kanal Aspekt",
"edt_dev_spec_segmentId_title": "Segment-ID",
"edt_dev_spec_segmentsOverlapValidation_error": "Korrigiere die WLED-Konfiguration! Das Segment darf sich nicht mit {{Plural:$1|Segment|Segmenten}} überschneiden: \"$2\".",
"edt_dev_spec_segmentsSwitchOffOthers_title": "Abschalten anderer Segmente",
"edt_dev_spec_segments_disabled_title": "Segment-Streaming ist in WLED deaktiviert.",
"edt_dev_spec_segments_title": "Stream zum Segment",
"edt_dev_spec_serial_title": "Seriennummer",
"edt_dev_spec_spipath_title": "SPI Pfad",
"edt_dev_spec_sslHSTimeoutMax_title": "Streamer Handshake maximum Timeout",
"edt_dev_spec_sslHSTimeoutMin_title": "Streamer Handshake minimum Timeout",
"edt_dev_spec_sslReadTimeout_title": "Streamer lese Timeout",
"edt_dev_spec_stayOnAfterStreaming_title": "LED bleiben nach dem Stream an",
"edt_dev_spec_stayOnAfterStreaming_title_info": "Die LEDs bleiben nach dem Streaming oder der Wiederherstellung des Status eingeschaltet.",
"edt_dev_spec_stream_protocol_title": "Streaming-Protokoll",
"edt_dev_spec_switchOffOnBlack_title": "Aus bei schwarz",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Aus bei Minimum",
"edt_dev_spec_syncOverwrite_title": "Deaktivierung der Synchronisierung",
"edt_dev_spec_targetIpHost_expl": "Hostname (DNS/mDNS) oder IP-Adresse (IPv4 oder IPv6)",
"edt_dev_spec_targetIpHost_title": "Rechnername/IP-Adresse",
"edt_dev_spec_targetIpHost_title_info": "Der Rechnername oder die IP-Adresse des Gerätes",
"edt_dev_spec_targetIp_title": "Ziel IP-Adresse",
@ -588,7 +681,7 @@
"edt_dev_spec_useOrbSmoothing_title": "Nutze Orb Glättung",
"edt_dev_spec_useRgbwProtocol_title": "Nutze RGBW Protokoll",
"edt_dev_spec_username_title": "Benutzername",
"edt_dev_spec_verbose_title": "Zeichne alle HUE-Kommandos auf",
"edt_dev_spec_verbose_title": "Protokollierung der HUE-Kommandos",
"edt_dev_spec_vid_title": "VID",
"edt_dev_spec_whiteLedAlgor_title": "Weiß Algorithmus",
"edt_dev_spec_whitepoint_title": "Weißpunkt",
@ -730,6 +823,10 @@
"edt_msg_error_disallow": "Die Eingabe muss vom Typ $1 sein",
"edt_msg_error_disallow_union": "Die Eingabe darf nicht einem der gegebenen Werte entsprechen",
"edt_msg_error_enum": "Die Eingabe muss einem der aufgeführten Werte entsprechen",
"edt_msg_error_hostname": "Ungültiger Hostname",
"edt_msg_error_invalid_epoch": "Datum muss größer als der 1. Januar 1970 sein",
"edt_msg_error_ipv4": "Keine gültige IPv4-Addresse",
"edt_msg_error_ipv6": "Bitte eine gültige IPv6 Adresse angeben",
"edt_msg_error_maxItems": "Das Feld darf höchstens $1 Element(e) beinhalten",
"edt_msg_error_maxLength": "Die Eingabe darf höchstens $1 Zeichen lang sein",
"edt_msg_error_maxProperties": "Das Objekt darf höchstens $1 Attribute habe",
@ -750,6 +847,8 @@
"edt_msg_error_type": "Die Eingabe muss vom Typ $1 sein",
"edt_msg_error_type_union": "Die Eingabe muss einem der gegebenen Typen entsprechen",
"edt_msg_error_uniqueItems": "Das Feld darf nur einzigartige Elemente beinhalten",
"edt_msgcust_error_hostname_ip": "Keine gültige IPv4-, IPv6-Adresse oder ungültiger Hostname",
"edt_msgcust_error_hostname_ip4": "Keine gültige IPv4-Adresse oder ungültiger Hostname",
"effectsconfigurator_button_conttest": "Fortlaufender Test",
"effectsconfigurator_button_deleffect": "Effekt entfernen",
"effectsconfigurator_button_editeffect": "Effekt laden",
@ -788,11 +887,12 @@
"general_col_blue": "blau",
"general_col_green": "grün",
"general_col_red": "rot",
"general_comp_AUDIO": "Audioaufnahme",
"general_comp_BLACKBORDER": "Schwarze Balken Erkennung",
"general_comp_BOBLIGHTSERVER": "Boblight Server",
"general_comp_FLATBUFSERVER": "Flatbuffers Server",
"general_comp_FORWARDER": "Weiterleitung",
"general_comp_GRABBER": "Bildschirm Aufnahme",
"general_comp_GRABBER": "Bildschirmaufnahme",
"general_comp_LEDDEVICE": "LED-Hardware",
"general_comp_PROTOSERVER": "Protocol Buffers Server",
"general_comp_SMOOTHING": "Glättung",
@ -808,12 +908,17 @@
"general_country_us": "Amerika",
"general_disabled": "deaktiviert",
"general_enabled": "aktiviert",
"general_speech_ca": "Katalanisch",
"general_speech_cs": "Tschechisch",
"general_speech_da": "Dänisch",
"general_speech_de": "Deutsch",
"general_speech_el": "Griechisch",
"general_speech_en": "Englisch",
"general_speech_es": "Spanisch",
"general_speech_fr": "Französisch",
"general_speech_hu": "Ungarisch",
"general_speech_it": "Italienisch",
"general_speech_ja": "Japanisch",
"general_speech_nb": "Norwegisch (Bokmål)",
"general_speech_nl": "Niederländisch",
"general_speech_pl": "Polnisch",
@ -906,8 +1011,11 @@
"remote_losthint": "Notiz: Alle Änderungen gehen nach einem Neustart verloren.",
"remote_maptype_intro": "Für gewöhnlich entscheidet dein LED-Layout welcher Bildbereich welche LED zugewiesen bekommt, dies kann hier geändert werden. $1",
"remote_maptype_label": "LED-Bereich Zuordnung",
"remote_maptype_label_multicolor_mean": "Mehrfarbig",
"remote_maptype_label_unicolor_mean": "Einfarbig",
"remote_maptype_label_dominant_color": "Dominante Farbe",
"remote_maptype_label_dominant_color_advanced": "Dominante Farbe fortgeschritten",
"remote_maptype_label_multicolor_mean": "Durchschnittsfarbe einfach",
"remote_maptype_label_multicolor_mean_squared": "Durchschnittsfarbe zum Quadrat",
"remote_maptype_label_unicolor_mean": "Durchschnittsfarbe Gesamtbild",
"remote_optgroup_syseffets": "Mitgelieferte Effekte",
"remote_optgroup_templates_custom": "Nutzer Vorlage",
"remote_optgroup_templates_system": "System Vorlage",
@ -962,7 +1070,7 @@
"wiz_cc_kodidisconlink": "Download Link Bilder:",
"wiz_cc_kodimsg_start": "Test bestanden - Zeit zu beginnen",
"wiz_cc_kodishould": "Kodi sollte jetzt folgendes Bild anzeigen: $1",
"wiz_cc_kwebs": "Kodi Webserver (IP-Adresse:Port)",
"wiz_cc_kwebs": "Kodi Webserver (Hostname oder IP)",
"wiz_cc_lettvshow": "Lass dabei deinen Fernseher folgendes Bild anzeigen: $1",
"wiz_cc_lettvshowm": "Überprüfe dies mithilfe folgender Bilder: $1",
"wiz_cc_link": "Klick mich",
@ -972,6 +1080,7 @@
"wiz_cc_testintrok": "Klicke auf einen Button, um eines der Testvideos abzuspielen.",
"wiz_cc_testintrowok": "Unter folgendem Link findest du ein paar Testvideos zum Herunterladen und Abspielen:",
"wiz_cc_title": "Farbkalibrierungs Assistent",
"wiz_cc_try_connect": "Verbindung wird aufgebaut...",
"wiz_cololight_desc2": "Nun kannst du auswählen, welche der Lampen hinzugefügt werden sollen. Als Hilfe zur Identifizierung kannst du sie mit einem Klick auf den rechten Button kurz aufleuchten lassen.",
"wiz_cololight_intro1": "Dieser Assistent hilft dir bei der Konfiguration von Hyperion für Cololight. Zu den Funktionen zählen ein automatisches Finden der Cololights und weitere Einstellungen von Hyperion automatisch anzupassen. Kurz gesagt: Komplette Einrichtung mit ein paar Klicks.<br />Achtung: Wenn Du ein Cololight Strip benutzt, musst Du ggf. die Anzahl der LEDs und das Layout manuell anpassen.",
"wiz_cololight_noprops": "Auf die Geräteeigenschaften kann nicht zugegriffen werden - Konfiguriere die Anzahl der LEDs manuell.",
@ -980,13 +1089,13 @@
"wiz_hue_blinkblue": "Lasse ID $1 blau aufleuchten",
"wiz_hue_clientkey": "Clientkey:",
"wiz_hue_create_user": "Neuen Benutzer erstellen",
"wiz_hue_desc1": "Es wird automatisch nach der Hue Bridge gesucht, sollte sie nicht gefunden werden, gebe die IP-Adresse an und drücke den \"neu laden\" Button. Danach benötigst du eine gültige Benutzer-ID. Diese kann hier auch erstellt werden.",
"wiz_hue_desc2": "Nun kannst du auswählen, welche der Lampen (IDs) hinzugefügt werden sollen. Mit der Position wählst du aus, wo die jeweilige Lampe \"im Bild\" sitzen soll. Deaktivierte Lampen werden nicht hinzugefügt. Als Hilfe zur Identifizierung kannst du sie mit einem Klick auf den rechten Button kurz aufleuchten lassen.",
"wiz_hue_desc1": "1. Es wird automatisch nach der Hue Bridge gesucht, sollte sie nicht gefunden werden, gebe die IP-Adresse an und drücke den \"neu laden\" Button.<br> 2. Erfasse eine gültige Benutzer-ID. Diese kann hier auch erstellt werden.",
"wiz_hue_desc2": "3. Wähle aus, welche der Lampen (IDs) hinzugefügt werden sollen. Mit der Position wählst du aus, wo die jeweilige Lampe \"im Bild\" sitzen soll. Deaktivierte Lampen werden nicht hinzugefügt. Als Hilfe zur Identifizierung kannst du sie mit einem Klick auf den rechten Button kurz aufleuchten lassen.",
"wiz_hue_e_clientkey_needed": "Für die Verwendung der Entertainment-API, ist ein zum Benutzernamen passender Clientkey erforderlich. Bitte einen vorhandenen eingeben oder über die Schaltflächen unten einen neuen erstellen.",
"wiz_hue_e_create_user": "Neuen Benutzer und Clientkey erstellen",
"wiz_hue_e_desc1": "Es wird automatisch nach der Hue-Bridge gesucht, sollte sie nicht gefunden werden, gebe die IP an und drücke den \"neu laden\" Button. Danach benötigst du eine gültige Benutzer-ID und den dazugehörigen Clientkey, damit die Entertainment API verwendet werden kann. Beides kann hier automatisch erstellt werden.",
"wiz_hue_e_desc2": "Nun kannst du die Entertainment Gruppe auswählen, welche die Lampen zur Verwendung mit Hyperion beinhaltet.",
"wiz_hue_e_desc3": "Nun kannst du auswählen, mit welcher Position die jeweilige Lampe \"im Bild\" sitzen soll. Eine Vorauswahl der Position, wurde Anhand der konfigurierten Positionen der Lampen in der Entertainment Gruppe gewählt. Dies ist nur eine Empfehlung und kann beliebig angepasst werden. Als Hilfe zur Identifizierung kannst du sie mit einem Klick auf den rechten Button kurz aufleuchten lassen und die Auswahl zu verbessern.",
"wiz_hue_e_desc1": "1. Es wird automatisch nach der Hue-Bridge gesucht, sollte sie nicht gefunden werden, gebe die IP an und drücke den \"neu laden\" Button.<br> 2. Erfasse eine gültige Benutzer-ID und den dazugehörigen Clientkey, damit die Entertainment API verwendet werden kann. Beides kann hier automatisch erstellt werden.",
"wiz_hue_e_desc2": "3. Wähle die Entertainment Gruppe aus, welche die Lampen zur Verwendung mit Hyperion beinhaltet.",
"wiz_hue_e_desc3": "4. Wähle aus, an welcher Position die jeweilige Lampe \"im Bild\" sitzen soll. Eine Vorauswahl der Position, wurde Anhand der konfigurierten Positionen der Lampen in der Entertainment Gruppe gewählt. Dies ist nur eine Empfehlung und kann beliebig angepasst werden. Als Hilfe zur Identifizierung kannst du sie mit einem Klick auf den rechten Button kurz aufleuchten lassen und die Auswahl zu verbessern.",
"wiz_hue_e_intro1": "Dieser Assistent hilft dir bei der Konfiguration von Hyperion für Philips Hue Entertainment. Zu den Funktionen zählen ein automatisches finden der Hue-Bridge, einen neuen Benutzer und dazugehörigen Clientkey zum Verwenden der Entertainment-API erstellen, eine Entertainment Gruppenauswahl und die zur Gruppe gehörenden Lampen unterschiedlichen Bereichen im Bild zuzuordnen, sowie weitere Einstellungen von Hyperion automatisch anzupassen. Kurz gesagt: Komplette Einrichtung mit ein paar Klicks.",
"wiz_hue_e_noapisupport": "Der Assistent hat die Entertainment-API Unterstützung deaktiviert und wird mit der klassischen API weitergeführt.",
"wiz_hue_e_noapisupport_hint": "Die Einstellung \"<b>Hue Entertainment-API verwenden</b>\" wurde deaktiviert.",

View File

@ -0,0 +1,646 @@
{
"InfoDialog_access_text": "Ανάλογα με το επίπεδο ρυθμίσεων, μπορείτε να προσαρμόσετε περισσότερες επιλογές ή να αποκτήσετε πρόσβαση σε περισσότερες δυνατότητες. Συνιστάται το επίπεδο \"Προεπιλογή\".",
"InfoDialog_access_title": "Επίπεδα Ρυθμίσεων",
"InfoDialog_changePassword_success": "Ο κωδικός πρόσβασης αποθηκεύτηκε με επιτυχία!",
"InfoDialog_changePassword_title": "Αλλαγή κωδικού",
"InfoDialog_iswitch_text": "Εάν εκτελείτε το Hyperion περισσότερες από μία φορές στο τοπικό σας δίκτυο, μπορείτε να κάνετε εναλλαγή μεταξύ των διαμορφώσεων ιστού. Επιλέξτε την παρουσία Hyperion παρακάτω και αλλάξτε!",
"InfoDialog_nostorage_text": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει τοπική αποθήκευση. Δεν μπορείτε να αποθηκεύσετε μια συγκεκριμένη ρύθμιση γλώσσας (επιστροφή στην «αυτόματη ανίχνευση») και επίπεδο πρόσβασης (επιστροφή στην «προεπιλογή»). Μερικοί μάγοι μπορεί να είναι κρυφοί. Θα μπορούσατε ακόμα να χρησιμοποιήσετε τη διεπαφή ιστού χωρίς περαιτέρω προβλήματα",
"InfoDialog_nowrite_foottext": "Το WebUI θα ξεκλειδωθεί αυτόματα μόλις λύσετε το πρόβλημα!",
"InfoDialog_nowrite_text": "Το Hyperion δεν μπορεί να γράψει στο τρέχον φορτωμένο αρχείο διαμόρφωσης. Επιδιορθώστε τα δικαιώματα του αρχείου για να συνεχίσετε.",
"InfoDialog_nowrite_title": "Σφάλμα άδειας εγγραφής!",
"about_3rd_party_licenses": "Άδεια τρίτου μέρους",
"about_credits": "Πιστώσεις σε όλους αυτούς τους προγραμματιστές!",
"about_resources": "$1 βιβλιοθήκες",
"about_translations": "Μεταφράσεις",
"about_version": "Έκδοση",
"conf_colors_blackborder_intro": "Παραλείψτε τις μαύρες μπάρες όπου κι αν βρίσκονται. Κάθε λειτουργία χρησιμοποιεί έναν άλλο αλγόριθμο ανίχνευσης που είναι συντονισμένος για ειδικές καταστάσεις. Αυξήστε το όριο αν δεν λειτουργεί για εσάς.",
"conf_colors_color_intro": "Δημιουργήστε ένα ή περισσότερα προφίλ βαθμονόμησης, προσαρμόστε κάθε χρώμα, φωτεινότητα, γραμμικοποίηση και άλλα.",
"conf_effect_fgeff_intro": "Καθορίστε ένα εφέ εκκίνησης ή ένα χρώμα, το οποίο εμφανίζεται κατά την εκκίνηση του Hyperion για την καθορισμένη διάρκεια.",
"conf_effect_path_intro": "Φόρτωση εφέ από τις καθορισμένες διαδρομές. Επιπλέον, μπορείτε να απενεργοποιήσετε μεμονωμένα εφέ ονομαστικά για να τα αποκρύψετε από όλες τις λίστες εφέ.",
"conf_general_impexp_expbtn": "Εξαγωγή",
"conf_general_impexp_impbtn": "Εισαγωγή",
"conf_general_impexp_l1": "Εισαγάγετε μια διαμόρφωση επιλέγοντας ένα αρχείο διαμόρφωσης παρακάτω και κάντε κλικ στο \"Εισαγωγή\".",
"conf_general_impexp_l2": "Εξάγετε μια διαμόρφωση κάνοντας κλικ στο \"Εξαγωγή\". Το πρόγραμμα περιήγησής σας ξεκινά μια λήψη.",
"conf_general_impexp_title": "Εισαγωγή/Εξαγωγή διαρύθμισης",
"conf_general_inst_actionhead": "Ενέργεια",
"conf_general_inst_desc": "Χρησιμοποιήστε διαφορετικό υλικό LED ταυτόχρονα. Κάθε στιγμιότυπο εκτελείται ανεξάρτητα το ένα από το άλλο, γεγονός που επιτρέπει διαφορετικές διατάξεις LED και ρυθμίσεις βαθμονόμησης. Οι εμφανίσεις που εκτελούνται είναι διαθέσιμες στην επάνω γραμμή εικονιδίων",
"conf_general_intro": "Βασικές ρυθμίσεις γύρω από το Hyperion και το WebUI που δεν ταιριάζουν σε άλλη κατηγορία.",
"conf_general_label_title": "Γενικές ρυθμίσεις",
"conf_grabber_fg_intro": "Η καταγραφή οθόνης είναι η λήψη του τοπικού σας συστήματος ως πηγή εισόδου, στο οποίο είναι εγκατεστημένο το Hyperion.",
"conf_grabber_v4l_intro": "Η λήψη USB είναι μια συσκευή (λήψης) που συνδέεται μέσω USB και χρησιμοποιείται για την εισαγωγή εικόνων πηγής για επεξεργασία.",
"conf_helptable_expl": "Εξήγηση",
"conf_helptable_option": "Επιλογή",
"conf_leds_contr_label_contrtype": "Είδος χειριστή:",
"conf_leds_device_intro": "Το Hyperion υποστηρίζει πολλούς ελεγκτές για τη μετάδοση δεδομένων στη συσκευή-στόχο σας. Επιλέξτε έναν ελεγκτή LED από την ταξινομημένη λίστα και διαμορφώστε τον. Έχουμε επιλέξει τις καλύτερες προεπιλεγμένες ρυθμίσεις για κάθε συσκευή.",
"conf_leds_error_get_properties_text": "Αποτυχία λήψης των ιδιοτήτων της συσκευής. Ελέγξτε τα στοιχεία διαμόρφωσης.",
"conf_leds_error_get_properties_title": "Ιδιότητες συσκευής",
"conf_leds_layout_advanced": "Προχωρημένες Ρυθμίσεις",
"conf_leds_layout_blacklist_num_title": "Αριθμός LED",
"conf_leds_layout_blacklist_start_title": "Εκκίνηση LED",
"conf_leds_layout_btn_checklist": "Δείξε λίστα ελέγχου",
"conf_leds_layout_button_savelay": "Αποθήκευση Διάταξης",
"conf_leds_layout_button_updsim": "Ενημέρωση Προεπισκόπησης",
"conf_leds_layout_checkp1": "Το μαύρο LED είναι το πρώτο LED, το πρώτο LED είναι το σημείο όπου εισέρχεται το σήμα",
"conf_leds_layout_checkp2": "Η διάταξη είναι πάντα η μπροστινή όψη της τηλεόρασής σας, ποτέ η πίσω όψη.",
"conf_leds_layout_checkp3": "Βεβαιωθείτε ότι η κατεύθυνση είναι σωστή. Τα γκρι LED υποδεικνύουν τον αριθμό LED 2 και 3 για οπτικοποίηση της κατεύθυνσης των δεδομένων.",
"conf_leds_layout_checkp4": "Κενό θήκης: Για να δημιουργήσετε ένα κενό, αγνοήστε το πρώτα όταν ορίζετε Πάνω/Κάτω/Αριστερά/Δεξιά και στη συνέχεια ορίστε το μήκος του διακένου σας για να αφαιρέσετε μια ποσότητα led. Τροποποιήστε τη θέση του κενού μέχρι να ταιριάζει.",
"conf_leds_layout_cl_bottom": "Κάτω",
"conf_leds_layout_cl_bottomleft": "Κάτω αριστερά (Γωνία)",
"conf_leds_layout_cl_bottomright": "Κάτω Δεξιά (Γωνία)",
"conf_leds_layout_cl_gaglength": "Μήκος κενού",
"conf_leds_layout_cl_gappos": "θέση κενού",
"conf_leds_layout_cl_hleddepth": "Οριζόντιο βάθος LED",
"conf_leds_layout_cl_inppos": "Θέση Εισαγωγής",
"conf_leds_layout_cl_left": "Αριστερά",
"conf_leds_layout_cl_leftbottom": "Αριστερά 50% - 100% Κάτω",
"conf_leds_layout_cl_leftmiddle": "Αριστερά 25% - 75% Μέση",
"conf_leds_layout_cl_lefttop": "Αριστερά 0% - 50% Πάνω",
"conf_leds_layout_cl_lightPosBottomLeft11": "Κάτω: 75 - 100% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft112": "Κάτω: 0 - 50% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft12": "Κάτω: 25 - 50% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft121": "Κάτω: 50 - 100% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft14": "Κάτω: 0 - 25% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeft34": "Κάτω: 50 - 75% από Αριστερά",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Κάτω: 25 - 75% από Αριστερά",
"conf_leds_layout_cl_lightPosTopLeft112": "Πάνω: 0 - 50% από Αριστερά",
"conf_leds_layout_cl_lightPosTopLeft121": "Πάνω: 50 - 100% από Αριστερά",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Πάνω: 25 - 75% από Αριστερά",
"conf_leds_layout_cl_overlap": "Αλληλοεπικάλυψη",
"conf_leds_layout_cl_reversdir": "Αντίστροφη κατεύθυνση",
"conf_leds_layout_cl_right": "Δεξιά",
"conf_leds_layout_cl_rightbottom": "Δεξιά 50% - 100% Κάτω",
"conf_leds_layout_cl_rightmiddle": "Δεξιά 25% - 75% Μέση",
"conf_leds_layout_cl_righttop": "Δεξιά 0% - 50% Πάνω",
"conf_leds_layout_cl_top": "Πάνω",
"conf_leds_layout_cl_topleft": "Πάνω αριστερά (Γωνία)",
"conf_leds_layout_cl_topright": "Πάνω Δεξιά (Γωνία)",
"conf_leds_layout_cl_vleddepth": "Κάθετο βάθος LED",
"conf_leds_layout_frame": "Κλασική διάταξη (Κορνίζα LED)",
"conf_leds_layout_generatedconf": "Δημιουργία/Τρέχουσα διαμόρφωση LED",
"conf_leds_layout_intro": "Χρειάζεστε επίσης μια διάταξη LED, η οποία αντικατοπτρίζει τις θέσεις LED σας. Η κλασική διάταξη είναι το συνήθως χρησιμοποιούμενο πλαίσιο τηλεόρασης, αλλά υποστηρίζουμε επίσης τη δημιουργία LED matrix (LED walls). Η προβολή αυτής της διάταξης είναι ΠΑΝΤΑ από το ΜΠΡΟΣΤΑ της τηλεόρασής σας.",
"conf_leds_layout_ma_cabling": "Καλωδίωση",
"conf_leds_layout_ma_direction": "Διεύθυνση",
"conf_leds_layout_ma_horiz": "Οριζόντια",
"conf_leds_layout_ma_optbottomleft": "Κάτω Αριστερά",
"conf_leds_layout_ma_optbottomright": "Κάτω Δεξιά",
"conf_leds_layout_ma_opthoriz": "Οριζόντια",
"conf_leds_layout_ma_optparallel": "Παράλληλα",
"conf_leds_layout_ma_optsnake": "Φιδάκι",
"conf_leds_layout_ma_opttopleft": "Πάνω Αριστερά",
"conf_leds_layout_ma_opttopright": "Πάνω Δεξιά",
"conf_leds_layout_ma_optvert": "Κάθετα",
"conf_leds_layout_ma_order": "Σειρά",
"conf_leds_layout_ma_position": "Εισαγωγή",
"conf_leds_layout_ma_vert": "Κάθετα",
"conf_leds_layout_matrix": "Διάταξη Μήτρας (Τοίχος LED)",
"conf_leds_layout_pbl": "Δείξτε κάτω Αριστερά",
"conf_leds_layout_pbr": "Δείξτε κάτω Δεξιά",
"conf_leds_layout_preview_l1": "Αυτό είναι το πρώτο σας LED (θέση εισόδου)",
"conf_leds_layout_preview_l2": "Αυτό οπτικοποιεί την κατεύθυνση των δεδομένων (δεύτερο/τρίτο LED)",
"conf_leds_layout_preview_ledpower": "Μέγιστη κατανάλωση ενέργειας: $1 Α",
"conf_leds_layout_preview_originCL": "Δημιουργήθηκε από: Κλασική διάταξη (πλαίσιο LED)",
"conf_leds_layout_preview_originMA": "Δημιουργήθηκε από: Διάταξη Μήτρας (τείχος LED)",
"conf_leds_layout_preview_totalleds": "Πλήθος LED: $1",
"conf_leds_layout_ptl": "Δείξτε πάνω Αριστερά",
"conf_leds_layout_ptlh": "Οριζόντια",
"conf_leds_layout_ptln": "Τριπλό σημείο",
"conf_leds_layout_ptlv": "Κάθετα",
"conf_leds_layout_ptr": "Δείξτε πάνω Δεξιά",
"conf_leds_layout_textf1": "Αυτό το πεδίο κειμένου εμφανίζει από προεπιλογή την τρέχουσα φορτωμένη διάταξη και θα αντικατασταθεί εάν δημιουργήσετε μια νέα με τις παραπάνω επιλογές. Προαιρετικά, μπορείτε να πραγματοποιήσετε περαιτέρω επεξεργασίες.",
"conf_leds_nav_label_ledcontroller": "Χειριστής LED",
"conf_leds_nav_label_ledlayout": "Διάταξη LED",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "PRI PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_network": "Δίκτυο",
"conf_leds_optgroup_other": "Άλλο",
"conf_leds_optgroup_usb": "USB/Serial",
"conf_logging_contpolicy": "Αναφορά Πολιτικής Απορρήτου",
"conf_logging_lastreports": "Προηγούμενες αναφορές",
"conf_logging_report": "Αναφορά",
"conf_logging_uplfailed": "Η μεταφόρτωση απέτυχε! Ελέγξτε τη σύνδεσή σας στο Διαδίκτυο!",
"conf_logging_uploading": "Προετοιμασία δεδομένων...",
"conf_logging_uplpolicy": "Κάνοντας κλικ σε αυτό το κουμπί αποδέχεστε το",
"conf_network_forw_intro": "Προωθήστε όλες τις εισόδους σε μια δεύτερη εγκατάσταση Hyperion που θα μπορούσε να οδηγηθεί με άλλο ελεγκτή LED",
"conf_network_tok_cidhead": "Περιγραφή",
"conf_network_tok_desc": "Τα διακριτικά παρέχουν σε άλλες εφαρμογές πρόσβαση στο Hyperion API, μια εφαρμογή μπορεί να ζητήσει ένα διακριτικό όπου πρέπει να το αποδεχτείτε ή να τις δημιουργήσετε μόνοι σας παρακάτω. Αυτά τα διακριτικά απαιτούνται απλώς όταν η \"Εξουσιοδότηση API\" είναι ενεργοποιημένη στις ρυθμίσεις δικτύου.",
"conf_network_tok_grantMsg": "Μια εφαρμογή ζήτησε ένα διακριτικό για να αποκτήσει πρόσβαση στο Hyperion API. Θέλετε να παραχωρήσετε πρόσβαση; Επαληθεύστε τις παρεχόμενες πληροφορίες!",
"conf_network_tok_lastuse": "Τελευταία χρήση",
"conf_network_tok_title": "Διαχείρηση Διακριτικών",
"conf_webconfig_label_intro": "Ρυθμίσεις Webconfiguration. Επεξεργαστείτε με σύνεση.",
"dashboard_alert_message_confedit": "Η διαμόρφωση του Hyperion έχει τροποποιηθεί. Για να το εφαρμόσετε, επανεκκινήστε το Hyperion.",
"dashboard_alert_message_confsave_success": "Η διαμόρφωσή σας στο Hyperion αποθηκεύτηκε επιτυχώς. Οι αλλαγές σας είναι πλέον ενεργές.",
"dashboard_alert_message_confsave_success_t": "Η διαμόρφωση αποθηκεύτηκε",
"dashboard_componentbox_label_comp": "Στοιχείο",
"dashboard_componentbox_label_status": "Κατάσταση",
"dashboard_componentbox_label_title": "Κατάσταση στοιχείου",
"dashboard_infobox_label_currenthyp": "Η έκδοση Hyperion σας:",
"dashboard_infobox_label_disableh": "Απενεργοποίηση Περίπτωσης: $1",
"dashboard_infobox_label_enableh": "Ενεργοποίηση Περίπτωσης: $1",
"dashboard_infobox_label_instance": "Περίπτωση:",
"dashboard_infobox_label_latesthyp": "Η τελευταία έκδοση Hyperion:",
"dashboard_infobox_label_platform": "Πλατφόρμα",
"dashboard_infobox_label_ports": "Θύρες",
"dashboard_infobox_label_smartacc": "Έξυπνη πρόσβαση",
"dashboard_infobox_label_statush": "Κατάσταση Hyperion:",
"dashboard_infobox_label_title": "Πληροφορίες",
"dashboard_infobox_message_updatesuccess": "Τρέχεται την τελευταία έκδοση Hyperion.",
"dashboard_infobox_message_updatewarning": "Μια νεότερη έκδοση του Hyperion είναι διαθέσιμη! (1$)",
"dashboard_label_intro": "Ο πίνακας ελέγχου σας δίνει μια σύντομη περιγραφή για τη κατάσταση του Hyperion",
"dashboard_newsbox_label_title": "Hyperion-Blog",
"dashboard_newsbox_noconn": "Δεν μπορείτε να συνδεθείτε με το Hyperion Server για να ανακτήσετε τις τελευταίες δημοσιεύσεις, λειτουργεί το διαδύκτιο σας;",
"dashboard_newsbox_readmore": "Διαβάστε παραπάνω",
"dashboard_newsbox_visitblog": "Επισκεφτείτε Hyperion-Blog ",
"edt_append_degree": "°",
"edt_append_frames": "καρέ",
"edt_append_hz": "Hz",
"edt_append_leds": "LED",
"edt_append_ms": "ms",
"edt_append_ns": "ns",
"edt_append_percent": "%",
"edt_append_percent_h": "% hori",
"edt_append_percent_v": "% vert",
"edt_append_pixel": "Πίξελ",
"edt_append_s": "s",
"edt_append_sdegree": "s/μοίρα",
"edt_conf_bb_blurRemoveCnt_title": "Θόλωσε πίξελ",
"edt_conf_bb_mode_title": "Τρόπο",
"edt_conf_bb_threshold_title": "Κατώφλι",
"edt_conf_color_black_expl": "Η βαθμονομημένη τιμή μαύρου.",
"edt_conf_color_black_title": "Μαύρο",
"edt_conf_color_blue_expl": "Η βαθμονομημένη τιμή μπλε.",
"edt_conf_color_blue_title": "Μπλε",
"edt_conf_color_channelAdjustment_header_expl": "Δημιουργήστε προφίλ χρωμάτων που θα μπορούσαν να αντιστοιχιστούν σε ένα συγκεκριμένο στοιχείο. Προσαρμόστε χρώμα, γάμμα, φωτεινότητα, αντιστάθμιση και πολλά άλλα.",
"edt_conf_color_channelAdjustment_header_itemtitle": "Προφίλ",
"edt_conf_color_cyan_expl": "Η βαθμονομημένη τιμή κυανού.",
"edt_conf_color_cyan_title": "Κυανό",
"edt_conf_color_green_expl": "Η βαθμονομημένη τιμή πράσινου.",
"edt_conf_color_green_title": "Πράσινο",
"edt_conf_color_heading_title": "Βαθμονόμηση Χρώματος",
"edt_conf_color_id_title": "ID",
"edt_conf_color_imageToLedMappingType_expl": "Αντικαθιστά την εκχώρηση περιοχής LED της διάταξης LED εάν δεν είναι \"πολύχρωμη\"",
"edt_conf_color_leds_expl": "Αντιστοιχίστε αυτήν τη ρύθμιση σε όλα τα LED (*) ή μόνο σε μερικά (0-24).",
"edt_conf_color_leds_title": "Δείκτης LED",
"edt_conf_color_magenta_expl": "Η βαθμονομημένη τιμή ματζέντας.",
"edt_conf_color_magenta_title": "Ματζέντα",
"edt_conf_color_red_expl": "Η βαθμονομημένη τιμή κόκκινου.",
"edt_conf_color_red_title": "Κόκκινο",
"edt_conf_color_saturationGain_expl": "Ρυθμίζει τον κορεσμό των χρωμάτων. 1,0 σημαίνει καμία αλλαγή, πάνω από 1,0 αυξάνει τον κορεσμό, κάτω από 1,0 αποκορεσμένα.",
"edt_conf_color_white_expl": "Η βαθμονομημένη τιμή λευκού.",
"edt_conf_color_white_title": "Λευκό",
"edt_conf_color_yellow_expl": "Η βαθμονομημένη τιμή κίτρινου.",
"edt_conf_color_yellow_title": "Κίτρινο",
"edt_conf_enum_BOTH": "Οριζόντια & Κάθετα",
"edt_conf_enum_HORIZONTAL": "Οριζόντια",
"edt_conf_enum_NO_CHANGE": "Αυτόματο",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Κάθετα",
"edt_conf_enum_automatic": "Αυτόματο",
"edt_conf_enum_bbclassic": "Κλασσικό",
"edt_conf_enum_bbletterbox": "Γραμματοκιβώτιο",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_color": "Χρώμα",
"edt_conf_enum_decay": "Αποσύνθεση",
"edt_conf_enum_dl_error": "Σφάλμα",
"edt_conf_enum_dl_verbose1": "Επίπεδο πολυγλωσσίας 1",
"edt_conf_enum_dl_verbose2": "Επίπεδο πολυγλωσσίας 2",
"edt_conf_enum_dl_verbose3": "Επίπεδο πολυγλωσσίας 3",
"edt_conf_enum_effect": "Εφέ",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_linear": "Γραμμικό",
"edt_conf_enum_logsilent": "Αθόρυβο",
"edt_conf_enum_logwarn": "Προειδοποίση",
"edt_conf_enum_multicolor_mean": "Πολύχρωμο",
"edt_conf_enum_please_select": "Παρακαλώ Επιλέξτε",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
"edt_conf_enum_transeffect_smooth": "Λείο",
"edt_conf_enum_transeffect_sudden": "Απότομο",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Μονοχρωματικό",
"edt_conf_fg_display_title": "Απεικόνηση",
"edt_conf_fg_heading_title": "Καταγραφή Οθόνης",
"edt_conf_fg_height_expl": "Συρρικνώστε την εικόνα σε αυτό το ύψος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
"edt_conf_fg_height_title": "Ύψος",
"edt_conf_fg_type_title": "Είδος",
"edt_conf_fg_width_expl": "Συρρικνώστε την εικόνα σε αυτό το πλάτος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
"edt_conf_fg_width_title": "Πλάτος",
"edt_conf_fge_color_expl": "Εάν ο τύπος είναι \"Χρώμα\", ορίστε ένα χρώμα της επιλογής σας εδώ.",
"edt_conf_fge_color_title": "Χρώμα",
"edt_conf_fge_duration_ms_title": "Διάρκεια.",
"edt_conf_fge_effect_expl": "Εάν ο τύπος είναι \"Εφέ\", ορίστε ένα εφέ της επιλογής σας εδώ.",
"edt_conf_fge_effect_title": "Εφέ",
"edt_conf_fge_type_expl": "Επιλέξτε ανάμεσα σε χρώμα ή εφέ.",
"edt_conf_fge_type_title": "Είδος",
"edt_conf_fw_remote_service_discovered_none": "Δεν ανακαλύφθηκαν απομακρυσμένες υπηρεσίες",
"edt_conf_fw_service_name_expl": "Όνομα του παρόχου υπηρεσιών",
"edt_conf_fw_service_name_title": "Όνομα υπηρεσίας",
"edt_conf_gen_configVersion_title": "Έκδοση διαμόρφωσης",
"edt_conf_gen_heading_title": "Γενικές Ρυθμίσεις",
"edt_conf_gen_name_expl": "Ένα όνομα καθορισμένο από το χρήστη που χρησιμοποιείται για τον εντοπισμό του Hyperion. (Χρήσιμο με περισσότερες από μία περιπτώσεις Hyperion)",
"edt_conf_gen_name_title": "Όνομα διαμόρφωσης",
"edt_conf_gen_showOptHelp_expl": "Εμφάνιση όλων των διαθέσιμων επεξηγήσεων σε κάθε ενότητα. Συνιστάται ανεπιφύλακτα για αρχάριους!",
"edt_conf_gen_showOptHelp_title": "Δείξε παραδείγματα",
"edt_conf_general_port_expl": "Η θύρα που χρησιμοποιείται.",
"edt_conf_general_port_title": "Θύρα",
"edt_conf_net_apiAuth_expl": "Επιβολή όλων των εφαρμογών που χρησιμοποιούν το Hyperion API για έλεγχο ταυτότητας έναντι του Hyperion (Εξαίρεση: βλ. \"Τοπικός έλεγχος ταυτότητας API\"). Υψηλότερη ασφάλεια, καθώς ελέγχετε την πρόσβαση και την ανακαλείτε ανά πάσα στιγμή.",
"edt_conf_net_apiAuth_title": "Αυθεντικοποίηση ΑΡΙ",
"edt_conf_net_heading_title": "Δίκτυο",
"edt_conf_net_ip_itemtitle": "ΙΡ",
"edt_conf_smooth_decay_expl": "Η ταχύτητα της αποσύνθεσης. Το 1 είναι γραμμικό, οι μεγαλύτερες τιμές έχουν ισχυρότερο αποτέλεσμα.",
"edt_conf_smooth_decay_title": "Αποσύνθεση-Δύναμη",
"edt_conf_smooth_dithering_title": "Χρωματική αντιπαράθεση",
"edt_conf_smooth_heading_title": "Λείανση",
"edt_conf_smooth_interpolationRate_expl": "Ταχύτητα υπολογισμού λείων ενδιάμεσων πλαισίων.",
"edt_conf_smooth_interpolationRate_title": "Ρυθμός Παρεμβολής",
"edt_conf_smooth_outputRate_expl": "Η ταχύτητα εξόδου του χειριστή LED σας.",
"edt_conf_smooth_outputRate_title": "Ρυθμός Εξόδου",
"edt_conf_smooth_time_ms_title": "Χρόνος",
"edt_conf_smooth_type_expl": "Είδος λείανσης.",
"edt_conf_smooth_type_title": "Είδος",
"edt_conf_smooth_updateFrequency_title": "Ρυθμός ανανέωσης",
"edt_conf_v4l2_cecDetection_expl": "Εάν είναι ενεργοποιημένο, η λήψη USB θα απενεργοποιηθεί προσωρινά όταν ληφθεί συμβάν αναμονής CEC από το δίαυλο HDMI.",
"edt_conf_v4l2_cecDetection_title": "Ανίχνευση CEC",
"edt_conf_v4l2_cropBottom_title": "Περικοπή κάτω",
"edt_conf_v4l2_cropHeightValidation_error": "Περικοπή πάνω + Περικοπή κάτω δεν μπορεί να είναι μεγαλύτερη από το πλάτος ($1)",
"edt_conf_v4l2_cropLeft_title": "Περικοπή αριστερά",
"edt_conf_v4l2_cropRight_title": "Περικοπή δεξιά",
"edt_conf_v4l2_cropTop_title": "Περικοπή πάνω",
"edt_conf_v4l2_cropWidthValidation_error": "Περικοπή αριστερά + Περικοπή δεξιά δεν μπορεί να είναι μεγαλύτερη από το πλάτος ($1)",
"edt_conf_v4l2_device_title": "Συσκευή",
"edt_conf_v4l2_flip_expl": "Αυτό σας επιτρέπει να αναστρέψετε την εικόνα οριζόντια, κάθετα ή και τα δύο.",
"edt_conf_v4l2_flip_title": "Αναστροφή εικόνας",
"edt_conf_v4l2_framerate_title": "Καρέ ανά δευτερόλεπτο",
"edt_conf_v4l2_resolution_title": "Ανάλυση Συσκευής",
"edt_conf_webc_keyPassPhrase_expl": "Προαιρετικό: Το κλειδί μπορεί να προστατεύεται με κωδικό πρόσβασης",
"edt_conf_webc_keyPassPhrase_title": "Κωδικός πρόσβασης",
"edt_conf_webc_sslport_title": "Θύρα HTTPS",
"edt_dev_enum_sub_min_cool_adjust": "Αφαίρεσε ψυχρό λευκό",
"edt_dev_enum_sub_min_warm_adjust": "Αφαίρεσε θερμό λευκό",
"edt_dev_enum_subtract_minimum": "Αφαίρεση ελάχιστου",
"edt_dev_enum_white_off": "Απενεργοποίηση Λευκού",
"edt_dev_general_autostart_title": "Αυτόματη Εκκίνηση",
"edt_dev_general_enableAttemptsInterval_title": "Διάστημα Επανάληψης",
"edt_dev_general_enableAttempts_title": "Προσπάθεια Σύνδεσης",
"edt_dev_general_enableAttempts_title_info": "Αριθμός προσπαθειών σύνδεσης μιας συσκευής προτού μεταβεί σε κατάσταση σφάλματος.",
"edt_dev_general_heading_title": "Γενικές Ρυθμίσεις",
"edt_dev_general_rewriteTime_title": "Χρόνος Ανανέωσης",
"edt_dev_spec_brightnessMax_title": "Μέγιστη Φωτεινότητα",
"edt_dev_spec_brightnessMin_title": "Ελάχιστη Φωτεινότητα",
"edt_dev_spec_brightness_title": "Φωτεινότητα",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_dmaNumber_title": "Κανάλι DMA",
"edt_dev_spec_gamma_title": "Gamma",
"edt_dev_spec_globalBrightnessControlMaxLevel_title": "Μέγιστο επίπεδο Έντασης",
"edt_dev_spec_gpioMap_title": "Χαρτογράφηση GPIO",
"edt_dev_spec_gpioNumber_title": "Αριθμός GPIO",
"edt_dev_spec_intervall_title": "Διάστημα",
"edt_dev_spec_ledIndex_title": "Δείκτης LED",
"edt_dev_spec_ledType_title": "Είδος LED",
"edt_dev_spec_lightid_itemtitle": "ID",
"edt_dev_spec_lights_itemtitle": "Φως",
"edt_dev_spec_lights_name": "Όνομα",
"edt_dev_spec_lights_title": "Φώτα",
"edt_dev_spec_maximumLedCount_title": "Μέγιστος αριθμός LED",
"edt_dev_spec_networkDevicePort_title": "Θύρα",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_title": "Θύρα",
"edt_dev_spec_razer_device_title": "Συσκευή RΛΖΞR Chroma",
"edt_dev_spec_serial_title": "Σειριακός Αριθμός",
"edt_dev_spec_spipath_title": "Συσκευή SPI",
"edt_dev_spec_targetIpHost_title": "Hostname/Διεύθυνση ΙΡ",
"edt_dev_spec_targetIp_title": "Διεύθυνση ΙΡ",
"edt_dev_spec_transistionTime_title": "Χρόνος Μετάβασης",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_useRgbwProtocol_title": "Χρησιμοπίησε πρωτόκολο RGBW",
"edt_dev_spec_username_title": "Όνομα Χρήστη",
"edt_dev_spec_vid_title": "VID",
"edt_eff_blobcount": "Αριθμός σταγώνων",
"edt_eff_candle_header": "Κερί",
"edt_eff_candle_header_desc": "Λαμπερά κεριά",
"edt_eff_centerx": "Κέντρο Χ-άξονα",
"edt_eff_centery": "Κέντρο Υ-άξονα",
"edt_eff_color": "Χρώμα",
"edt_eff_colorHour": "Χρώμα ώρας",
"edt_eff_colorMinute": "Χρώμα λεπτού",
"edt_eff_colorSecond": "Χρώμα δευτερολέπτου",
"edt_eff_colorcount": "Μήκος χρώματος",
"edt_eff_colorend": "Τέλους χρώματος",
"edt_eff_colorevel": "Επίπεδο χρώματος",
"edt_eff_colorone": "Χρώμα ένα",
"edt_eff_colorrandom": "Τυχαίο χρώμα",
"edt_eff_colorshift": "Μετάβαση Χρώματος",
"edt_eff_colorstart": "Αρχή χρώματος",
"edt_eff_colortwo": "Χρώμα δύο",
"edt_eff_count": "Αριθμός",
"edt_eff_countries": "Χώρες",
"edt_eff_enableSecondSwirl": "Δεύτερος Στροβιλισμός",
"edt_eff_enum_all": "Όλα",
"edt_eff_enum_all-together": "Όλα μαζί",
"edt_eff_enum_list": "Λίστα LED",
"edt_eff_fade_header": "Σβήσιμο",
"edt_eff_fade_header_desc": "Σβήσιμο ανάμεσα σε χρώματα",
"edt_eff_flag_header": "Σημαίες",
"edt_eff_flag_header_desc": "Αφήστε τα LED σας να λάμπουν στα χρώματα της χώρας σας. Μπορείτε να επιλέξετε περισσότερες από μία σημαίες και θα αλλάξουν με βάση το χρονικό διάστημα.",
"edt_eff_fps": "Καρέ ανά δευτερόλεπτο",
"edt_eff_frequency": "Συχνότητα",
"edt_eff_gif_header": "GIF's",
"edt_eff_gif_header_desc": "Αυτό το εφέ αναπαράγει αρχεία .gif, παρέχει ένα απλό βίντεο όπως βρόχο ως εφέ.",
"edt_eff_height": "Ύψος",
"edt_eff_huechange": "Αλλαγή χρώματος",
"edt_eff_image_source_url": "URL",
"edt_eff_knightrider_header": "Knight Rider",
"edt_eff_knightrider_header_desc": "O K.I.T.T επέστρεψε! Ο μπροστινός σαρωτής του γνωστού αυτοκινήτου, αυτή τη φορά όχι μόνο στο κόκκινο.",
"edt_eff_ledlist": "Λίστα LED",
"edt_eff_ledtest_header": "Δοκιμή LED",
"edt_eff_length": "Μήκος",
"edt_eff_lightclock_header_desc": "Ένα πραγματικό ρολόι σαν φως! Προσαρμόστε τα χρώματα των ωρών, λεπτών, και δευτερολέπτων. Διατίθεται επίσης προαιρετικός δείκτης ώρας 3/6/9/12. Σε περίπτωση που το ρολόι είναι λάθος, πρέπει να ελέγξετε το ρολόι του συστήματός σας.",
"edt_eff_max_len": "Μέγιστο μήκος",
"edt_eff_min_len": "Ελάχιστο μήκος",
"edt_eff_moodblobs_header_desc": "Χαλαρώστε το βράδυ με αργή κίνηση και σταγόνες που αλλάζουν χρώμα.",
"edt_eff_pacman_header": "Πακ-Μαν",
"edt_eff_pacman_header_desc": "Μικρό, πεινασμένο και κίτρινο. Ποιος θα επιβιώσει;",
"edt_eff_plasma_header": "Πλάσμα",
"edt_eff_police_header": "Αστυνομία",
"edt_eff_police_header_desc": "Φώτα σαν αστινομικό όχημα σε δράση",
"edt_eff_randomCenter": "Τυχαίο Κέντρο",
"edt_eff_random_header": "Τυχαίο",
"edt_eff_repeat": "Επανάληψη",
"edt_eff_reverseRandomTime": "Ανέστρεψε κάθε",
"edt_eff_reversedirection": "Ανάστροφη κίνηση",
"edt_eff_rotationtime": "Χρόνος περιστροφής",
"edt_eff_showseconds": "Δείξε δευτερόλεπτα",
"edt_eff_snake_header": "Φιδάκι",
"edt_eff_snake_header_desc": "Που υπάρχει κάτι να φάω;",
"edt_eff_sparks_header": "Σπίθες",
"edt_eff_sparks_header_desc": "Αστερική-σπίθα, επιλέξτε ανάμεσα σε ένα στατικό χρώμα ή ένα τυχαίο. Θα μπορούσατε επίσης να ρυθμίσετε τη φωτεινότητα, τον κορεσμό και την ταχύτητα.",
"edt_eff_speed": "Ταχύτητα",
"edt_eff_swirl_header": "στροβιλισμός χρωμάτων",
"edt_eff_swirl_header_desc": "Ένας στροβιλισμός με προσαρμοσμένα χρώματα. Τα χρώματα απλώνονται ακόμη και στις 360°, θα υπολογίζονται οι μετατοπίσεις μεταξύ των χρωμάτων. Επιπλέον, μπορείτε να προσθέσετε ένα δεύτερο στροβιλισμό από πάνω, να γνωρίζετε ότι χρειάζεστε μερική διαφάνεια! Συμβουλή: Η επανάληψη του ίδιου χρώματος έχει ως αποτέλεσμα μια \"υψηλότερη\" περιοχή χρώματος και μια μειωμένη περιοχή μετατόπισης χρώματος.",
"edt_eff_trails_header": "Πεφταστέρι",
"edt_eff_trails_header_desc": "Χρωματιστά αστέρια που πέφτουν από τη κορυφή",
"edt_eff_waves_header": "Κύματα",
"edt_eff_whichleds": "Ποια LEDs",
"edt_eff_whitelevel": "Επίπεδο λευκού",
"edt_eff_x-mas_header": "Χριστούγεννα",
"edt_eff_x-mas_header_desc": "Άγγιγμα Χριστουγέννων",
"edt_msg_button_add_row_title": "Προσθήκη $1",
"edt_msg_button_collapse": "Σύμπτηξη",
"edt_msg_button_delete_all": "Όλα",
"edt_msg_button_delete_all_title": "Διαγραφή Όλων",
"edt_msg_button_delete_last": "Τουλάχιστον $1",
"edt_msg_button_delete_last_title": "Διαγραφή Τελευταίων $1",
"edt_msg_button_delete_row_title": "Διαγραφή $1",
"edt_msg_button_delete_row_title_short": "Διαγραφή",
"edt_msg_button_expand": "Ανέπτυξε",
"edt_msg_button_move_down_title": "Μετακίνησε κάτω",
"edt_msg_button_move_up_title": "Μετακίνησε πάνω",
"edt_msg_error_additionalItems": "Δεν επιτρέπονται επιπλέον στοιχεία σε αυτόν τον πίνακα",
"edt_msg_error_additional_properties": "Δεν επιτρέπονται πρόσθετες ιδιότητες, αλλά η ιδιότητα $1 έχει οριστεί",
"edt_msg_error_dependency": "Πρέπει να έχει την ιδιότητα $1",
"edt_msg_error_disallow": "Η τιμή δεν πρέπει να είναι τύπου $1",
"edt_msg_error_disallow_union": "Η τιμή δεν πρέπει να είναι ένας από τους παρεχόμενους μη επιτρεπόμενους τύπους",
"edt_msg_error_maxItems": "Η τιμή πρέπει να έχει το πολύ $1 αντικείμενα",
"edt_msg_error_maxLength": "Η τιμή πρέπει να έχει το πολύ $1 μήκος χαρακτήρων",
"edt_msg_error_maxProperties": "Το αντικείμενο πρέπει να έχει το πολύ $1 ιδιότητες",
"edt_msg_error_maximum_excl": "Η τιμή πρέπει να είναι λιγότερο του $1",
"edt_msg_error_maximum_incl": "Η τιμή πρέπει να είναι το πολύ $1",
"edt_msg_error_minItems": "Η τιμή πρέπει να έχει τουλάχιστον $1 αντικείμενα",
"edt_msg_error_minLength": "Η τιμή πρέπει να έχει τουλάχιστον $1 μήκος χαρακτήρων",
"edt_msg_error_minProperties": "Το αντικείμενο πρέπει να έχει τουλάχιστον $1 ιδιότητες",
"edt_msg_error_minimum_excl": "Η τιμή πρέπει να είναι μεγαλύτερη του $1",
"edt_msg_error_minimum_incl": "Η τιμή πρέπει να είναι τουλάχιστον $1",
"edt_msg_error_multipleOf": "Η τιμή πρέπει να είναι πολλαπλάσιο του $1",
"edt_msg_error_pattern": "Η τιμή πρέπει να μοιάζει με το μοτίβο",
"edt_msg_error_required": "Από το αντικείμενο λείπει η απαιτούμενη ιδιότητα '$1'",
"edt_msg_error_type": "Η τιμή πρέπει να είναι τύπου $1",
"edt_msg_error_uniqueItems": "Ο πίνακας πρέπει να έχει μοναδικά στοιχεία",
"effectsconfigurator_button_conttest": "Συνεχές τεστ",
"effectsconfigurator_button_deleffect": "Διαγραφή Εφέ",
"effectsconfigurator_button_editeffect": "Φόρτωση Εφέ",
"effectsconfigurator_button_saveeffect": "Αποθήκευση Εφέ",
"effectsconfigurator_button_starttest": "Εκκίνηση τεστ",
"effectsconfigurator_button_stoptest": "Τερματισμός τεστ",
"effectsconfigurator_label_chooseeff": "Επιλέξτε Πρότυπο",
"effectsconfigurator_label_effectname": "Όνομα Εφέ",
"effectsconfigurator_label_intro": "Δημιουργήστε από τα βασικά εφέ νέα εφέ που είναι συντονισμένα σύμφωνα με τις προτιμήσεις σας. Ανάλογα με το Εφέ, υπάρχουν διαθέσιμες επιλογές όπως χρώμα, ταχύτητα, κατεύθυνση και άλλα.",
"general_access_advanced": "Προχωρημένο",
"general_access_default": "Προεπιλεγμένο",
"general_access_expert": "Ειδικό",
"general_btn_back": "Πίσω",
"general_btn_cancel": "Ακύρωση",
"general_btn_continue": "Συνέχεια",
"general_btn_delete": "Διαγραφή",
"general_btn_denyAccess": "Απόρριψη πρόσβασης",
"general_btn_grantAccess": "Παραχώρηση πρόσβασης",
"general_btn_iswitch": "Διακόπτης",
"general_btn_next": "Επόμενο",
"general_btn_off": "Απενεργοποίηση",
"general_btn_ok": "ΟΚ",
"general_btn_on": "Εκκίνηση",
"general_btn_overwrite": "Αντικατάσταση",
"general_btn_rename": "Μεταονόμασε",
"general_btn_restarthyperion": "Επανεκκίνηση Hyperion",
"general_btn_save": "Αποθήκευση",
"general_btn_saveandreload": "Αποθήκευση και επαναφόρτωση",
"general_btn_saverestart": "Αποθήκευση και επανεκκίνηση",
"general_btn_start": "Εκκίνηση",
"general_btn_stop": "Τερματισμός",
"general_btn_yes": "Ναι",
"general_button_savesettings": "Αποθήκευση ρυθμίσεων",
"general_chars_needed": "χρειάζονται περισσότεροι χαρακτήρες",
"general_col_blue": "Μπλε",
"general_col_green": "Πράσινο",
"general_col_red": "Κόκκινο",
"general_comp_BLACKBORDER": "Ανίχνευση μαύρης μπάρας",
"general_comp_GRABBER": "Λήψη Οθόνης",
"general_comp_LEDDEVICE": "Έξοδος LED",
"general_comp_SMOOTHING": "Εξομάλυνση",
"general_comp_V4L": "Λήψη εισόδου-USB",
"general_country_cn": "Κίνα",
"general_country_de": "Γερμανία",
"general_country_es": "Ισπανία",
"general_country_fr": "Γαλλία",
"general_country_it": "Ιταλία",
"general_country_nl": "Ολλανδία",
"general_country_ru": "Ρωσία",
"general_country_uk": "Ηνωμένο Βασίλειο",
"general_country_us": "ΗΠΑ",
"general_disabled": "Απενεργοποιημένο",
"general_enabled": "Ενεργοποιημένο",
"general_speech_cs": "Τσέχικα",
"general_speech_da": "Δανέζικα",
"general_speech_de": "Γερμανικά",
"general_speech_en": "Αγγλικά",
"general_speech_es": "Ισπανικά",
"general_speech_fr": "Γαλλικά",
"general_speech_hu": "Ουγγαρικά",
"general_speech_it": "Ιταλικά",
"general_speech_ja": "Ιαπωνικά",
"general_speech_nb": "Νορβηγικά (Bokmål)",
"general_speech_nl": "Ολλανδικά",
"general_speech_pl": "Πολωνικά",
"general_speech_pt": "Πορτογαλικά",
"general_speech_ro": "Ρουμάνικα",
"general_speech_ru": "Ρωσικά",
"general_speech_sv": "Σουηδικά",
"general_speech_tr": "Τούρκικα",
"general_speech_vi": "Βιετναμέζικα",
"general_speech_zh-CN": "Κινέζικα (απλοποιημένα)",
"general_webui_title": "Hyperion - Διαμόρφωση Ιστού",
"general_wiki_moreto": "Περισσότερες πληροφορίες για \"$1\" στο Wiki μας",
"infoDialog_effconf_created_text": "Το εφέ \"$1\" κατασκευάστηκε επιτυχώς!",
"infoDialog_effconf_deleted_text": "Το εφέ \"$1\" διαγράφτηκε επιτυχώς!",
"infoDialog_general_error_title": "Σφάλμα",
"infoDialog_general_success_title": "Επιτυχία",
"infoDialog_general_warning_title": "Προειδοπίηση",
"infoDialog_import_comperror_text": "Λυπητερό! Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την εισαγωγή. Δοκιμάστε ξανά με άλλο πρόγραμμα περιήγησης.",
"infoDialog_import_confirm_text": "Είστε βέβαιοι ότι θα εισαγάγετε το \"$1\"; Δεν είναι δυνατή η επαναφορά αυτής της διαδικασίας!",
"infoDialog_import_hyperror_text": "Δεν είναι δυνατή η εισαγωγή του επιλεγμένου αρχείου διαμόρφωσης \"$1\". Δεν είναι συμβατό με Hyperion 2.0 και νεότερη έκδοση!",
"infoDialog_import_jsonerror_text": "Το επιλεγμένο αρχείο διαμόρφωσης \"$1\" δεν είναι αρχείο .json ή είναι κατεστραμμένο. Μήνυμα σφάλματος: ($2)",
"infoDialog_password_current_text": "Τωρινός κωδικός",
"infoDialog_password_new_text": "Νέος κωδικός",
"infoDialog_username_text": "Όνομα Χρήστη",
"infoDialog_writeconf_error_text": "Η αποθήκευση της διαμόρφωσής σας απέτυχε.",
"infoDialog_writeimage_error_text": "Το επιλεγμένο αρχείο \"$1\" δεν είναι αρχείο εικόνας ή είναι κατεστραμμένο! Επιλέξτε άλλο αρχείο εικόνας.",
"info_404": "Η σελίδα που ζητήσατε δεν είναι διαθέσιμη!",
"info_conlost_label_autorecon": "Θα επανασυνδεθείτε ξανά αφού το Hyperion είναι διαθέσιμο.",
"info_conlost_label_autorefresh": "Αυτή η σελίδα θα ανανεωθεί αυτόματα.",
"info_conlost_label_reason1": "- Κακή σύνδεση WLAN",
"info_conlost_label_reason2": "- Πραγματοποιήσατε αναβάθμιση",
"info_conlost_label_reason3": "- Το Hyperion δεν τρέχει",
"info_conlost_label_reload": "Η αυτόματη επανασύνδεση διακόπηκε - υπέρβαση του ορίου. Ανανεώστε τη σελίδα ή κάντε κλικ σε εμένα!",
"info_conlost_label_title": "Χάθηκε η σύνδεση με την υπηρεσία Hyperion!",
"info_restart_contus": "Εάν εξακολουθείτε να μένετε εδώ μετά από 20 δευτερόλεπτα και δεν έχετε ιδέα γιατί ανοίξτε ένα νέο θέμα στο φόρουμ υποστήριξής μας...",
"info_restart_contusa": "...με τα τελευταία σου βήματα. Ευχαριστώ!",
"info_restart_rightback": "Ο Hyperion θα επιστρέψει αμέσως!",
"info_restart_title": "Αυτήν τη στιγμή γίνεται επανεκκίνηση...",
"main_ledsim_btn_togglelednumber": "Αριθμός LED",
"main_ledsim_btn_toggleleds": "Δείξε LED",
"main_ledsim_btn_togglelivevideo": "Ζωντανό βίντεο",
"main_ledsim_text": "Ζωντανή απεικόνιση χρωμάτων LED και προαιρετική η τρέχουσα ροή βίντεο της συσκευής λήψης.",
"main_ledsim_title": "Οπτικοποίηση LED",
"main_menu_about_token": "Σχετικά με το Hyperion",
"main_menu_colors_conf_token": "Επεξεργασία εικόνας",
"main_menu_dashboard_token": "Πίνακας Ελέγχου",
"main_menu_effect_conf_token": "Εφέ",
"main_menu_general_conf_token": "Γενικά",
"main_menu_input_selection_token": "Επιλογή εισόδου",
"main_menu_instcapture_conf_token": "Πηγές",
"main_menu_leds_conf_token": "Έξοδος LED",
"main_menu_logging_token": "Καταγράψτε",
"main_menu_remotecontrol_token": "Ασύρματος χειρισμός",
"main_menu_support_token": "Υποστήριξη",
"main_menu_system_token": "Σύστημα",
"main_menu_update_token": "Αναβάθμιση",
"main_menu_webconfig_token": "Διαμόρφωση Ιστού",
"remote_adjustment_label": "Ρύθμιση χρώματος",
"remote_color_button_reset": "Επαναφορά Χρώματος/Εφέ",
"remote_color_intro": "Ορίστε ένα εφέ ή χρώμα. Επίσης παρατίθενται τα εφέ που δημιουργήσατε εσείς (εάν είναι διαθέσιμα). $1",
"remote_color_label": "Χρώματα/Εφέ",
"remote_color_label_color": "Χρώμα:",
"remote_components_intro": "Ενεργοποίηση και απενεργοποίηση στοιχείων του Hyperion κατά τη διάρκεια του χρόνου εκτέλεσης. $1",
"remote_effects_label_effects": "Εφέ:",
"remote_effects_label_picture": "Εικόνα:",
"remote_input_clearall": "Καθαρισμός όλων των Χρωμάτων/Εφέ",
"remote_input_duration": "Διάρκεια:",
"remote_input_intro": "Το Hyperion χρησιμοποιεί ένα σύστημα προτεραιότητας για να επιλέξει μια πηγή. Ό,τι ορίζετε έχει προτεραιότητα (Εφέ/Χρώμα/Λήψη οθόνης/Λήψη USB και πηγές δικτύου). Από προεπιλογή, το Hyperion επιλέγει πηγές ανάλογα με την προτεραιότητα (ο χαμηλότερος αριθμός αντικατοπτρίζει την τρέχουσα ενεργή πηγή). Τώρα έχετε την ευκαιρία να επιλέξετε μόνοι σας πηγές. $1",
"remote_input_ip": "ΙΡ:",
"remote_input_label_autoselect": "Αυτόματη Επιλογή",
"remote_input_origin": "Προέλευση",
"remote_input_owner": "Είδος",
"remote_input_priority": "Προτεραιότητα",
"remote_input_setsource_btn": "Επιλέξτε Πηγή",
"remote_input_sourceactiv_btn": "Πηγή ενεργή",
"remote_input_status": "Κατάσταση/Ενέργεια",
"remote_losthint": "Σημείωση: Όλες οι αλλαγές θα χαθούν μετά από επανεκκίνηση.",
"remote_maptype_intro": "Συνήθως η διάταξη LED καθορίζει ποια LED καλύπτει μια συγκεκριμένη περιοχή εικόνας. Μπορείτε να το αλλάξετε εδώ: $1.",
"remote_maptype_label": "Είδος Χαρτογράφισης",
"remote_maptype_label_multicolor_mean": "Πολύχρωμο",
"remote_maptype_label_unicolor_mean": "Μονοχρωματικό",
"remote_optgroup_syseffets": "Ρυθμίσης Συστήματος",
"remote_optgroup_templates_custom": "Πρότυπα Χρήστη",
"remote_optgroup_templates_system": "Πρότυπα Συστήματος",
"remote_optgroup_usreffets": "Εφέ Χρήστη",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
"remote_videoMode_3DTAB": "3DTAB",
"remote_videoMode_label": "Λειτουργία βίντεο",
"support_label_affinstr1": "Κάντε κλικ στον κατάλληλο σύνδεσμο της χώρας σας",
"support_label_affinstr2": "Ό,τι αγοράζετε (δεν έχει σημασία τι) παίρνουμε μια μικρή χρέωση με βάση τον τζίρο σας",
"support_label_affinstr3": "Πληρώνετε ΠΑΝΤΑ το ίδιο, δεν υπάρχει καμία απολύτως διαφορά. Δοκίμασέ το!",
"support_label_btctext": "Διεύθυνση:",
"support_label_donate": "Δωρίστε ή χρησιμοποιήστε τους συνδέσμους συνεργατών μας",
"support_label_donationpp": "Δωρεά:",
"support_label_fbtext": "Μοιραστείτε τη σελίδα μας στο Hyperion στο Facebook και λάβετε ειδοποίηση όταν κυκλοφορούν νέες ενημερώσεις",
"support_label_forumtext": "Προθήκες, συζητήσεις, βοήθεια και πολλά άλλα",
"support_label_forumtitle": "Φόρουμ",
"support_label_ghtext": "Επισκευτείτε μας στο GitHub",
"support_label_igtext": "Επισκεφθείτε μας στο Instagram για να παρακολουθήσετε τις τελευταίες φωτογραφίες του Hyperion!",
"support_label_intro": "Το Hyperion είναι ένα δωρεάν, μη-κερδοσκοπικό λογισμικό. Μια μικρή ομάδα εργάζεται πάνω σε αυτό και γι' αυτό χρειαζόμαστε τη σταθερή υποστήριξή σας.",
"support_label_spreadtheword": "Διέδωσέ το",
"support_label_title": "Υποστήριξη Hyperion",
"support_label_twtext": "Μοιραστείτε και ακολουθήστε μας στο Twitter, για να είστε πάντα ενημερωμένοι με την τελευταία ανάρτηση σχετικά με την ανάπτυξη του Hyperion",
"support_label_webpagetitle": "Ιστοσελίδα",
"support_label_webrestitle": "Πληροφορίες και βοηθιτικό υλικό",
"support_label_wikitext": "Το Α έως Ω για σχεδόν οτιδήποτε σχετίζεται με το Hyperion",
"support_label_yttext": "Βαρεθήκατε τις φωτογραφίες; Δείτε το κανάλι μας στο YouTube!",
"update_button_install": "Εγκατάσταση",
"update_error_getting_versions": "Παρουσιάστηκε πρόβλημα με τον προσδιορισμό της πιο πρόσφατης διαθέσιμης έκδοσης.",
"update_label_description": "Περιγραφή:",
"update_label_intro": "Επισκόπηση όλων των διαθέσιμων εκδόσεων Hyperion. Επιπλέον, θα μπορούσατε να ενημερώσετε ή να υποβαθμίσετε την έκδοση του Hyperion όποτε θέλετε. Ταξινόμηση από το νεότερο στο παλαιότερο",
"update_label_type": "Τύπος:",
"update_versreminder": "Η έκδοση σας: $1",
"wiz_cc_adjustgamma": "Gamma: Αυτό που πρέπει να κάνετε είναι να προσαρμόσετε τα επίπεδα γάμμα κάθε καναλιού μέχρι να έχετε την ίδια αντιληπτή ποσότητα για κάθε κανάλι. Υπόδειξη: Το ουδέτερο είναι 1,0! Για παράδειγμα, εάν το Γκρι σας είναι λίγο κοκκινωπό, σημαίνει ότι πρέπει να αυξήσετε το κόκκινο γάμμα για να μειώσετε την ποσότητα του κόκκινου (όσο περισσότερο γάμμα, τόσο μικρότερη ποσότητα χρώματος).",
"wiz_cc_adjustit": "Προσαρμόστε το \"$1\" σας, μέχρι να τα καταφέρετε. Λάβετε υπόψη: Όσο περισσότερο προσαρμόζετε μακριά από την προεπιλεγμένη τιμή, το φάσμα χρωμάτων θα είναι περιορισμένο (Επίσης για όλα τα ενδιάμεσα χρώματα). Ανάλογα με το χρωματικό φάσμα της τηλεόρασης/LED, τα αποτελέσματα θα διαφέρουν.",
"wiz_cc_backlight": "Επιπλέον, θα μπορούσατε να ορίσετε έναν οπίσθιο φωτισμό για να ταξινομήσετε τα \"κακά χρώματα\" σε σχεδόν σκοτεινές περιοχές ή εάν δεν σας αρέσει η εναλλαγή μεταξύ χρώματος και απενεργοποίησης κατά την παρακολούθηση. Επιπλέον, θα μπορούσατε να ορίσετε εάν πρέπει να υπάρχει κάποιο χρώμα σε αυτό ή απλώς λευκό. Αυτό είναι απενεργοποιημένο κατά την κατάσταση \"Απενεργοποίηση\" \"Χρώμα\" και \"Εφέ\".",
"wiz_cc_btn_stop": "Σταματήστε το βίντεο",
"wiz_cc_btn_switchpic": "Αλλαγή εικόνας",
"wiz_cc_chooseid": "Ορίστε ένα όνομα για αυτό το προφίλ χρώματος.",
"wiz_cc_kodidiscon": "Το Kodi δεν βρέθηκε, προχωρήστε χωρίς υποστήριξη Kodi (ελέγξτε εάν είναι ενεργοποιημένος ο τηλεχειρισμός από άλλα συστήματα).",
"wiz_cc_kodimsg_start": "Επιτυχία δοκιμής - ώρα να προχωρήσετε!",
"wiz_cc_kodishould": "Το Kodi θα πρέπει να δείχνει την ακόλουθη εικόνα: $1",
"wiz_cc_kwebs": "Kodi webserver (Hostname ή IP)\n",
"wiz_cc_lettvshow": "Αφήστε την τηλεόρασή σας να εμφανίσει την ακόλουθη εικόνα: $1",
"wiz_cc_lettvshowm": "Ελέγξτε αυτό με τις παρακάτω εικόνες: $1",
"wiz_cc_link": "Πάτα με!",
"wiz_cc_morethanone": "Έχετε περισσότερα από ένα προφίλ, επιλέξτε το προφίλ που θέλετε να βαθμονομήσετε.",
"wiz_cc_summary": "Συμπέρασμα των ρυθμίσεών σας. Κατά τη διάρκεια της αναπαραγωγής βίντεο, μπορείτε να αλλάξετε ή να δοκιμάσετε ξανά τις τιμές. Εάν τελειώσετε, κάντε κλικ στην αποθήκευση.",
"wiz_cc_testintro": "Ώρα για ένα πραγματικό τεστ",
"wiz_cc_testintrok": "Πατήστε ένα κουμπί παρακάτω για να ξεκινήσετε ένα δοκιμαστικό βίντεο.",
"wiz_cc_testintrowok": "Δείτε τον παρακάτω σύνδεσμο για να κατεβάσετε δοκιμαστικά βίντεο:",
"wiz_cc_try_connect": "Σύνδεση...",
"wiz_cololight_desc2": "Τώρα επιλέξτε ποια Cololights θα προστεθούν. Για να αναγνωρίσετε μεμονωμένα φώτα, πατήστε το κουμπί στα δεξιά.",
"wiz_cololight_noprops": "Δεν είναι δυνατή η λήψη των ιδιοτήτων της συσκευής - Ορίστε τον αριθμό των LED υλικού με μη αυτόματο τρόπο",
"wiz_guideyou": "Το $1 θα σας καθοδηγήσει στις ρυθμίσεις. Απλά πατήστε το κουμπί!",
"wiz_hue_create_user": "Δημιουργία νέου Χρήστη",
"wiz_hue_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη, εάν δεν έχετε, δημιουργήστε ένα νέο.",
"wiz_hue_desc2": "3. Τώρα επιλέξτε ποιοι λαμπτήρες πρέπει να προστεθούν. Η θέση αντιστοιχίζει τη λάμπα σε μια συγκεκριμένη θέση στην \"εικόνα\" σας. Δεν θα προστεθούν απενεργοποιημένες λάμπες. Για να αναγνωρίσετε μεμονωμένους λαμπτήρες πατήστε το κουμπί στα δεξιά.",
"wiz_hue_e_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη και το κλειδί πελάτη, εάν δεν έχετε και τα δύο, δημιουργήστε νέα.",
"wiz_hue_e_noapisupport": "Ο Wizard έχει απενεργοποιήσει την υποστήριξη API ψυχαγωγίας και θα συνεχίσει σε κλασική λειτουργία.",
"wiz_hue_e_title": "Wizard ψυχαγωγίας Philips Hue",
"wiz_hue_ip": "Hostname ή ΙΡ",
"wiz_hue_title": "Philips Hue Wizard",
"wiz_hue_username": "ID Χρήστη",
"wiz_identify": "Αναγνώρισε",
"wiz_identify_light": "Αναγνώρισε $1",
"wiz_ids_disabled": "Απενεργοποίηση",
"wiz_ids_entire": "Πλήρη εικόνα",
"wiz_noLights": "Δεν βρέθηκε το $1! Συνδέστε τα φώτα στο δίκτυο ή διαμορφώστε τα με μη αυτόματο τρόπο.",
"wiz_pos": "Θέση/Κατάσταση",
"wiz_rgb_expl": "Η χρωματική κουκκίδα αλλάζει κάθε x δευτερόλεπτα το χρώμα (κόκκινο, πράσινο), την ίδια στιγμή που τα LED σας αλλάζουν και το χρώμα. Απαντήστε στις ερωτήσεις στο κάτω μέρος για να ελέγξετε/διορθώσετε τη σειρά των byte.",
"wiz_rgb_q": "Ποιο χρώμα δείχνουν τα LED σας, όταν η έγχρωμη κουκκίδα παραπάνω δείχνει...",
"wiz_rgb_qgend": "...πράσινο;",
"wiz_rgb_qrend": "...κόκινο;",
"wiz_rgb_switchevery": "Αλάξτε χρώμα κάθε...",
"wiz_yeelight_unsupported": "Μη-υποστηριζόμενο"
}

View File

@ -13,6 +13,9 @@
"infoDialog_password_current_text": "Current password",
"infoDialog_password_minimum_length": "Passwords must be minimum 8 characters.",
"infoDialog_password_new_text": "New password",
"InfoDialog_systemSuspend_title": "Suspend",
"InfoDialog_systemResume_title": "Resume",
"InfoDialog_systemRestart_title": "Restart",
"infoDialog_username_text": "Username",
"about_3rd_party_licenses": "3rd party licenses",
"about_3rd_party_licenses_error": "We had trouble collecting 3rd party licenses information from web. <br />Please follow this link to the GitHub Resource.",
@ -46,8 +49,9 @@
"conf_general_intro": "Basic settings around Hyperion and WebUI that don't fit into another category.",
"conf_general_label_title": "General settings",
"conf_grabber_fg_intro": "Screen capture is your local system capture as input source, Hyperion is installed on.",
"conf_grabber_inst_grabber_config_info": "Configure your capturing hardware devices to be used by the instance in advance",
"conf_grabber_inst_grabber_config_info": "Configure your capturing hardware devices to be used by the instance in advance",
"conf_grabber_v4l_intro": "USB capture is a (capture) device connected via USB which is used to input source pictures for processing.",
"conf_grabber_audio_intro": "Audio capture utilizes an audio input device as the source for visualization.",
"conf_helptable_expl": "Explanation",
"conf_helptable_option": "Option",
"conf_leds_config_error": "Error in LED/LED layout configuration",
@ -55,9 +59,13 @@
"conf_leds_contr_label_contrtype": "Controller type:",
"conf_leds_device_info_log": "In case your LEDs do not work, check here for errors:",
"conf_leds_device_intro": "Hyperion supports a lot of controllers to transmit data to your target device. Select a LED controller out of the sorted list and configure it. We have chosen the best default settings for each device.",
"conf_leds_error_get_properties_text": "Failed to get the device's properties. Please check the configuration items.",
"conf_leds_error_get_properties_title": "Device properties",
"conf_leds_error_hwled_gt_layout": "The hardware LED count ($1) is greater than LEDs configured via layout ($2),<br>$3 {{plural:$3|LED|LEDs}} will stay black if you continue.",
"conf_leds_error_hwled_lt_layout": "The hardware LED count ($1) is less than LEDs configured via layout ($2). <br> The number of LEDs configured in the layout must not exceed the available LEDs",
"conf_leds_error_hwled_gt_maxled": "The hardware LED count ($1) is greater than the maximum number of LEDs supported by the device ($2). <br> The hardware LED count is set to ($3).",
"conf_leds_error_hwled_gt_maxled_protocol": "The hardware LED count ($1) is greater than the maximum number of LEDs supported by the streaming protocol ($2). <br> The streaming protocol will be changed to ($3).",
"conf_leds_error_wled_segment_missing": "The currently configured segment ($1) is not configured at your WLED device.<br>You might need to check the WLED configuration!<br>The configuration page represents the current WLED setup.",
"conf_leds_info_ws281x": "Hyperion must run with 'root' privileges for this controller type!",
"conf_leds_layout_advanced": "Advanced Settings",
"conf_leds_layout_blacklist_num_title": "Number of LEDs",
@ -66,6 +74,7 @@
"conf_leds_layout_blacklist_start_title": "Start LED",
"conf_leds_layout_blacklistleds_title": "Blacklist LEDs",
"conf_leds_layout_btn_checklist": "Show checklist",
"conf_leds_layout_btn_keystone": "Keystone correction",
"conf_leds_layout_button_savelay": "Save Layout",
"conf_leds_layout_button_updsim": "Update Preview",
"conf_leds_layout_checkp1": "The black LED is your first LED, the first LED is the point where you input your data signal.",
@ -77,6 +86,8 @@
"conf_leds_layout_cl_bottomright": "Bottom Right (Corner)",
"conf_leds_layout_cl_cornergap": "Corner Gap",
"conf_leds_layout_cl_edgegap": "Edge Gap",
"conf_leds_layout_cl_entertainment": "Entertainment Area",
"conf_leds_layout_cl_entertainment_center": "Entertainment Area Center",
"conf_leds_layout_cl_gaglength": "Gap length",
"conf_leds_layout_cl_gappos": "gap position",
"conf_leds_layout_cl_hleddepth": "Horizontal LED depth",
@ -85,6 +96,16 @@
"conf_leds_layout_cl_leftbottom": "Left 50% - 100% Bottom",
"conf_leds_layout_cl_leftmiddle": "Left 25% - 75% Middle",
"conf_leds_layout_cl_lefttop": "Left 0% - 50% Top",
"conf_leds_layout_cl_lightPosBottomLeft14": "Bottom: 0 - 25% from Left",
"conf_leds_layout_cl_lightPosBottomLeft12": "Bottom: 25 - 50% from Left",
"conf_leds_layout_cl_lightPosBottomLeft34": "Bottom: 50 - 75% from Left",
"conf_leds_layout_cl_lightPosBottomLeft11": "Bottom: 75 - 100% from Left",
"conf_leds_layout_cl_lightPosBottomLeft112": "Bottom: 0 - 50% from Left",
"conf_leds_layout_cl_lightPosBottomLeft121": "Bottom: 50 - 100% from Left",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Bottom: 25 - 75% from Left",
"conf_leds_layout_cl_lightPosTopLeft112": "Top: 0 - 50% from Left",
"conf_leds_layout_cl_lightPosTopLeft121": "Top: 50 - 100% from Left",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Top: 25 - 75% from Left",
"conf_leds_layout_cl_overlap": "Overlap",
"conf_leds_layout_cl_reversdir": "Reverse direction",
"conf_leds_layout_cl_right": "Right",
@ -99,6 +120,7 @@
"conf_leds_layout_generatedconf": "Generated/Current LED Configuration",
"conf_leds_layout_intro": "You also need an LED layout, which reflects your LED positions. The classic layout is the usually used TV frame, but we also support LED matrix (LED walls) creation. The view on this layout is ALWAYS from the FRONT of your TV.",
"conf_leds_layout_ma_cabling": "Cabling",
"conf_leds_layout_ma_direction": "Direction",
"conf_leds_layout_ma_horiz": "Horizontal",
"conf_leds_layout_ma_optbottomleft": "Bottom left",
"conf_leds_layout_ma_optbottomright": "Bottom right",
@ -185,6 +207,7 @@
"dashboard_infobox_label_instance": "Instance:",
"dashboard_infobox_label_latesthyp": "Latest Hyperion version:",
"dashboard_infobox_label_platform": "Platform:",
"dashboard_infobox_label_port_boblight": "Boblight Server:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "JSON-Server:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
@ -207,6 +230,7 @@
"dashboard_newsbox_readmore": "Read more",
"dashboard_newsbox_visitblog": "Visit Hyperion-Blog",
"edt_append_degree": "°",
"edt_append_frames": "frames",
"edt_append_hz": "Hz",
"edt_append_leds": "LEDs",
"edt_append_ms": "ms",
@ -232,6 +256,8 @@
"edt_conf_bb_unknownFrameCnt_title": "Unknown frames",
"edt_conf_bge_heading_title": "Background Effect/Color",
"edt_conf_bobls_heading_title": "Boblight Server",
"edt_conf_color_accuracyLevel_expl": "Level how accurate dominat colors are evaluated. A higher level creates more accurate results, but also requries more processing power. Should to be combined with reduced pixel processing.",
"edt_conf_color_accuracyLevel_title": "Accuracy level",
"edt_conf_color_backlightColored_expl": "Add some color to your backlight.",
"edt_conf_color_backlightColored_title": "Colored backlight",
"edt_conf_color_backlightThreshold_expl": "The minimum amount of brightness (backlight). Disabled during effects, colors and in status \"Off\"",
@ -260,7 +286,7 @@
"edt_conf_color_heading_title": "Color Calibration",
"edt_conf_color_id_expl": "User given name",
"edt_conf_color_id_title": "ID",
"edt_conf_color_imageToLedMappingType_expl": "Overwrites the LED area assignment of your LED layout if it's not \"multicolor\"",
"edt_conf_color_imageToLedMappingType_expl": "Overwrites the LED area assignment of your LED layout if it's not \"Mean Color Simple\"",
"edt_conf_color_imageToLedMappingType_title": "LED area assignment",
"edt_conf_color_leds_expl": "Assign this adjustment to all LEDs (*) or just some (0-24).",
"edt_conf_color_leds_title": "LED index",
@ -268,6 +294,12 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "The calibrated red value.",
"edt_conf_color_red_title": "Red",
"edt_conf_color_saturationGain_expl": "Adjusts the saturation of colors. 1.0 means no change, over 1.0 increases saturation, under 1.0 desaturates.",
"edt_conf_color_saturationGain_title": "Saturation gain",
"edt_conf_color_brightnessGain_expl": "Adjusts the brightness of colors. 1.0 means no change, over 1.0 increases brightness, under 1.0 decreases brightness.",
"edt_conf_color_brightnessGain_title": "Brightness gain",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "Evaluate only a set of pixels per LED area defined, Low ~25%, Medium ~10%, High ~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "Reduced pixel processing",
"edt_conf_color_white_expl": "The calibrated white value.",
"edt_conf_color_white_title": "White",
"edt_conf_color_yellow_expl": "The calibrated yellow value.",
@ -297,6 +329,8 @@
"edt_conf_enum_color": "Color",
"edt_conf_enum_custom": "Custom",
"edt_conf_enum_decay": "Decay",
"edt_conf_enum_delay": "Delay only",
"edt_conf_enum_disabled": "Disabled",
"edt_conf_enum_dl_error": "Error",
"edt_conf_enum_dl_informational": "Informational",
"edt_conf_enum_dl_nodebug": "No Debug output",
@ -305,9 +339,12 @@
"edt_conf_enum_dl_verbose1": "Verbosity level 1",
"edt_conf_enum_dl_verbose2": "Verbosity level 2",
"edt_conf_enum_dl_verbose3": "Verbosity level 3",
"edt_conf_enum_dominant_color": "Dominant Color - per LED",
"edt_conf_enum_dominant_color_advanced": "Dominant Color Advanced - per LED",
"edt_conf_enum_effect": "Effect",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "High",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "Left to right",
"edt_conf_enum_linear": "Linear",
@ -315,7 +352,10 @@
"edt_conf_enum_logsilent": "Silent",
"edt_conf_enum_logverbose": "Verbose",
"edt_conf_enum_logwarn": "Warning",
"edt_conf_enum_multicolor_mean": "Multicolor",
"edt_conf_enum_low": "Low",
"edt_conf_enum_medium": "Medium",
"edt_conf_enum_multicolor_mean": "Mean Color Simple - per LED",
"edt_conf_enum_multicolor_mean_squared": "Mean Color Squared - per LED",
"edt_conf_enum_please_select": "Please Select",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
@ -323,7 +363,9 @@
"edt_conf_enum_top_down": "Top down",
"edt_conf_enum_transeffect_smooth": "Smooth",
"edt_conf_enum_transeffect_sudden": "Sudden",
"edt_conf_enum_unicolor_mean": "Unicolor",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Mean Color Image - applied to all LEDs",
"edt_conf_fbs_heading_title": "Flatbuffers Server",
"edt_conf_fbs_timeout_expl": "If no data is received for the given period, the component will be (soft) disabled.",
"edt_conf_fbs_timeout_title": "Timeout",
@ -349,13 +391,20 @@
"edt_conf_fge_heading_title": "Boot Effect/Color",
"edt_conf_fge_type_expl": "Choose between a color or effect.",
"edt_conf_fge_type_title": "Type",
"edt_conf_fw_flat_expl": "One flatbuffer target per line. Contains IP:PORT (Example: 127.0.0.1:19401)",
"edt_conf_fw_flat_expl": "One flatbuffer target per configuration item",
"edt_conf_fw_flat_itemtitle": "flatbuffer target",
"edt_conf_fw_flat_services_discovered_expl": "Hyperion servers discovered providing flatbuffer services",
"edt_conf_fw_flat_services_discovered_title": "Flatbuffer targets discoverded",
"edt_conf_fw_flat_title": "List of flatbuffer targets",
"edt_conf_fw_heading_title": "Forwarder",
"edt_conf_fw_json_expl": "One json target per line. Contains IP:PORT (Example: 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Json target",
"edt_conf_fw_json_title": "List of json targets",
"edt_conf_fw_json_expl": "One JSON target per configuration item",
"edt_conf_fw_json_itemtitle": "JSON target",
"edt_conf_fw_json_services_discovered_expl": "Hyperion servers discovered providing JSON-API services",
"edt_conf_fw_json_services_discovered_title": "JSON targets discoverded",
"edt_conf_fw_json_title": "List of JSON targets",
"edt_conf_fw_remote_service_discovered_none": "No remote services discovered",
"edt_conf_fw_service_name_expl": "Name of the service provider",
"edt_conf_fw_service_name_title": "Service name",
"edt_conf_gen_configVersion_title": "Configuration version",
"edt_conf_gen_heading_title": "General Settings",
"edt_conf_gen_name_expl": "A user defined name which is used to detect Hyperion. (Helpful with more than one Hyperion instance)",
@ -381,6 +430,8 @@
"edt_conf_instC_systemEnable_title": "Enable screen capture",
"edt_conf_instC_v4lEnable_expl": "Enables the USB capture for this LED hardware instance",
"edt_conf_instC_v4lEnable_title": "Enable USB capture",
"edt_conf_instC_audioEnable_expl": "Enables the Audio capture for this LED hardware instance",
"edt_conf_instC_audioEnable_title": "Enable Audio capture",
"edt_conf_instC_video_grabber_device_expl": "The video capture device used",
"edt_conf_instC_video_grabber_device_title": "Video capture device",
"edt_conf_instCapture_heading_title": "Capture Devices",
@ -414,14 +465,12 @@
"edt_conf_smooth_heading_title": "Smoothing",
"edt_conf_smooth_interpolationRate_expl": "Speed of the calculation of smooth intermediate frames.",
"edt_conf_smooth_interpolationRate_title": "Interpolation Rate",
"edt_conf_smooth_outputRate_expl": "The output speed to your LED controller.",
"edt_conf_smooth_outputRate_title": "Output Rate",
"edt_conf_smooth_time_ms_expl": "How long should the smoothing gather pictures?",
"edt_conf_smooth_time_ms_title": "Time",
"edt_conf_smooth_type_expl": "Type of smoothing.",
"edt_conf_smooth_type_title": "Type",
"edt_conf_smooth_updateDelay_expl": "Delay the output in case your ambient light is faster than your TV.",
"edt_conf_smooth_updateDelay_title": "Update delay",
"edt_conf_smooth_updateDelay_expl": "Delay the output by n updates in case your ambient light is faster than your TV.",
"edt_conf_smooth_updateDelay_title": "Output delay",
"edt_conf_smooth_updateFrequency_expl": "The output speed to your LED controller.",
"edt_conf_smooth_updateFrequency_title": "Update frequency",
"edt_conf_v4l2_blueSignalThreshold_expl": "Darkens low blue values (recognized as black)",
@ -483,6 +532,27 @@
"edt_conf_v4l2_hardware_set_defaults_tip": "Set device's default values for brightness, contrast, hue and saturation",
"edt_conf_v4l2_noSignalCounterThreshold_title": "Signal Counter Threshold",
"edt_conf_v4l2_noSignalCounterThreshold_expl": "Count of frames (check that with grabber's current FPS mode) after which the no signal is triggered",
"edt_conf_audio_device_expl": "Selected audio input device",
"edt_conf_audio_device_title": "Audio Device",
"edt_conf_audio_effects_expl": "Select an effect on how the audio signal is transformed to",
"edt_conf_audio_effects_title": "Audio Effects",
"edt_conf_audio_effect_enum_vumeter": "VU-Meter",
"edt_conf_audio_effect_hotcolor_expl": "Hot Color",
"edt_conf_audio_effect_hotcolor_title": "Hot Color",
"edt_conf_audio_effect_multiplier_expl": "Audio Signal Value multiplier",
"edt_conf_audio_effect_multiplier_title": "Multiplier",
"edt_conf_audio_effect_safecolor_expl": "Safe Color",
"edt_conf_audio_effect_safecolor_title": "Safe Color",
"edt_conf_audio_effect_safevalue_expl": "Safe Threshold",
"edt_conf_audio_effect_safevalue_title": "Safe Threshold",
"edt_conf_audio_effect_set_defaults": "Reset to default values",
"edt_conf_audio_effect_tolerance_expl": "Tolerance used when auto calculating a signal multipler from 0-100",
"edt_conf_audio_effect_tolerance_title": "Tolerance",
"edt_conf_audio_effect_warncolor_expl": "Warning Color",
"edt_conf_audio_effect_warncolor_title": "Warning Color",
"edt_conf_audio_effect_warnvalue_expl": "Warning Threshold",
"edt_conf_audio_effect_warnvalue_title": "Warning Threshold",
"edt_conf_audio_heading_title": "Audio Capture",
"edt_conf_webc_crtPath_expl": "Path to the certification file (format should be PEM)",
"edt_conf_webc_crtPath_title": "Certificate path",
"edt_conf_webc_docroot_expl": "Local webinterface root path (just for webui developer)",
@ -492,7 +562,9 @@
"edt_conf_webc_keyPassPhrase_title": "Key password",
"edt_conf_webc_keyPath_expl": "Path to the key file (format PEM, encrypted with RSA)",
"edt_conf_webc_keyPath_title": "Private key path",
"edt_conf_webc_sslport_expl": "Port oft the HTTPS-Webserver",
"edt_conf_webc_port_expl": "Port for the WebServer, RPC and WebSocket HTTP connections",
"edt_conf_webc_port_title": "HTTP Port",
"edt_conf_webc_sslport_expl": "Port for the WebServer, RPC and WebSocket HTTPS connections",
"edt_conf_webc_sslport_title": "HTTPS Port",
"edt_dev_auth_key_title": "Authentication Token",
"edt_dev_auth_key_title_info": "Authentication Token required to acccess the device",
@ -500,13 +572,21 @@
"edt_dev_enum_sub_min_warm_adjust": "Subtract warm white",
"edt_dev_enum_subtract_minimum": "Subtract minimum",
"edt_dev_enum_white_off": "White off",
"edt_dev_general_autostart_title": "Autostart",
"edt_dev_general_autostart_title_info": "The LED device is switched-on during startup or not",
"edt_dev_general_colorOrder_title": "RGB byte order",
"edt_dev_general_colorOrder_title_info": "The device's color order",
"edt_dev_general_enableAttempts_title": "Connection attempts",
"edt_dev_general_enableAttempts_title_info": "Number of attempts connecting a device before it goes into an error state.",
"edt_dev_general_enableAttemptsInterval_title": "Retry interval",
"edt_dev_general_enableAttemptsInterval_title_info": "Intervall between two connection attempts.",
"edt_dev_general_hardwareLedCount_title": "Hardware LED count",
"edt_dev_general_hardwareLedCount_title_info": "The number of physical LEDs availabe for the given device",
"edt_dev_general_heading_title": "General Settings",
"edt_dev_general_name_title": "Configuration name",
"edt_dev_general_rewriteTime_title": "Refresh time",
"edt_dev_spec_ada_mode_title": "Adalight - Standard",
"edt_dev_spec_awa_mode_title": "HyperSerial - High speed",
"edt_dev_spec_FCledToOn_title": "Fadecandy LED set to on",
"edt_dev_spec_FCmanualControl_title": "Manual control of fadecandy LED",
"edt_dev_spec_FCsetConfig_title": "Set fadecandy configuration",
@ -520,12 +600,12 @@
"edt_dev_spec_brightnessOverwrite_title": "Overwrite brightness",
"edt_dev_spec_brightnessThreshold_title": "Signal detection brightness minimum",
"edt_dev_spec_brightness_title": "Brightness",
"edt_dev_spec_candyGamma_title": "'Candy' mode (double gamma correction)",
"edt_dev_spec_chanperfixture_title": "Channels per Fixture",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Clientkey",
"edt_dev_spec_colorComponent_title": "Colour component",
"edt_dev_spec_debugLevel_title": "Debug Level",
"edt_dev_spec_debugStreamer_title": "Streamer Debug",
"edt_dev_spec_delayAfterConnect_title": "Delay after connect",
"edt_dev_spec_devices_discovered_none": "No Devices Discovered",
"edt_dev_spec_devices_discovered_title": "Devices Discovered",
@ -540,13 +620,13 @@
"edt_dev_spec_gpioBcm_title": "GPIO Pin",
"edt_dev_spec_gpioMap_title": "GPIO mapping",
"edt_dev_spec_gpioNumber_title": "GPIO number",
"edt_dev_spec_groupId_title": "Group ID",
"edt_dev_spec_groupId_title": "Group",
"edt_dev_spec_header_title": "Specific Settings",
"edt_dev_spec_interpolation_title": "Interpolation",
"edt_dev_spec_intervall_title": "Interval",
"edt_dev_spec_invert_title": "Invert signal",
"edt_dev_spec_latchtime_title": "Latch time",
"edt_dev_spec_latchtime_title_info": "Latch time is the time-frame a device requires until the next update can be processed. During that time-frame any updates done via ignored.",
"edt_dev_spec_latchtime_title_info": "Latch time is the time-frame a device requires until the next update can be processed. During that time-frame any updates done are ignored.",
"edt_dev_spec_ledIndex_title": "LED index",
"edt_dev_spec_ledType_title": "LED Type",
"edt_dev_spec_lightid_itemtitle": "ID",
@ -560,6 +640,8 @@
"edt_dev_spec_networkDeviceName_title": "Network devicename",
"edt_dev_spec_networkDevicePort_title": "Port",
"edt_dev_spec_numberOfLeds_title": "Number of LEDs",
"edt_dev_spec_onBlackTimeToPowerOff": "Time to power off the lamp if the black level is triggered",
"edt_dev_spec_onBlackTimeToPowerOn": "Time to power on the lamp if the signal is restored",
"edt_dev_spec_orbIds_title": "Orb ID(s)",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
@ -567,27 +649,43 @@
"edt_dev_spec_panel_start_position": "Start panel [0-max panels]",
"edt_dev_spec_panelorganisation_title": "Panel numbering sequence",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Service Port [1-65535]",
"edt_dev_spec_port_title": "Port",
"edt_dev_spec_printTimeStamp_title": "Add timestamp",
"edt_dev_spec_stream_protocol_title": "Streaming protocol",
"edt_dev_spec_pwmChannel_title": "PWM channel",
"edt_dev_spec_razer_device_title": "Razer Chroma Device",
"edt_dev_spec_restoreOriginalState_title": "Restore lights' state",
"edt_dev_spec_restoreOriginalState_title_info": "Restore the device's original state when device is disabled",
"edt_dev_spec_rgbw_calibration_enable": "White channel calibration (RGBW only)",
"edt_dev_spec_rgbw_calibration_limit": "White channel limit",
"edt_dev_spec_rgbw_calibration_red": "Red/White channel aspect",
"edt_dev_spec_rgbw_calibration_green": "Green/White channel aspect",
"edt_dev_spec_rgbw_calibration_blue": "Blue/White channel aspect",
"edt_dev_spec_segments_disabled_title": "Segment streaming disabled at WLED.",
"edt_dev_spec_segments_title": "Stream to segment",
"edt_dev_spec_segmentId_title": "Segment-ID",
"edt_dev_spec_segmentsSwitchOffOthers_title": "Switch-off other segments",
"edt_dev_spec_segmentsOverlapValidation_error": "Correct the WLED setup! The segment must not overlap with {{plural:$1| segment|segments}}: \"$2\".",
"edt_dev_spec_serial_title": "Serial number",
"edt_dev_spec_spipath_title": "SPI Device",
"edt_dev_spec_sslHSTimeoutMax_title": "Streamer handshake timeout maximum",
"edt_dev_spec_sslHSTimeoutMin_title": "Streamer handshake timeout minimum",
"edt_dev_spec_sslReadTimeout_title": "Streamer read timeout",
"edt_dev_spec_stayOnAfterStreaming_title": "Stay on after streaming",
"edt_dev_spec_stayOnAfterStreaming_title_info": "The device will stay on after streaming or restoring state.",
"edt_dev_spec_switchOffOnBlack_title": "Switch off on black",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Switch-off, below minimum",
"edt_dev_spec_syncOverwrite_title": "Disable synchronisation",
"edt_dev_spec_targetIpHost_title": "Target Hostname/IP-address",
"edt_dev_spec_targetIpHost_expl": "Hostname (DNS/mDNS) or IP-address (IPv4 or IPv6)",
"edt_dev_spec_targetIpHost_title": "Hostname/IP-address",
"edt_dev_spec_targetIpHost_title_info": "The device's hostname or IP-address",
"edt_dev_spec_targetIp_title": "Target IP-address",
"edt_dev_spec_targetIp_title": "IP-address",
"edt_dev_spec_transeffect_title": "Transition effect",
"edt_dev_spec_transistionTimeExtra_title": "Extra time darkness",
"edt_dev_spec_transistionTime_title": "Transition time",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "Universe",
"edt_dev_spec_useAPIv2_title": "Use API v2",
"edt_dev_spec_useEntertainmentAPI_title": "Use Hue Entertainment API",
"edt_dev_spec_useOrbSmoothing_title": "Use orb smoothing",
"edt_dev_spec_useRgbwProtocol_title": "Use RGBW protocol",
@ -653,7 +751,7 @@
"edt_eff_image_source_url": "URL",
"edt_eff_image": "Image file",
"edt_eff_url": "Image adress",
"edt_eff_initial_blink" : "Flash for attention",
"edt_eff_initial_blink": "Flash for attention",
"edt_eff_interval": "Interval",
"edt_eff_knightrider_header": "Knight Rider",
"edt_eff_knightrider_header_desc": "K.I.T.T is back! The front-scanner of the well known car, this time not just in red.",
@ -691,7 +789,7 @@
"edt_eff_reversedirection": "Reverse direction",
"edt_eff_rotationtime": "Rotation time",
"edt_eff_saturation": "Saturation",
"edt_eff_set_post_color" : "Set post color after alam",
"edt_eff_set_post_color": "Set post color after alam",
"edt_eff_showseconds": "Show seconds",
"edt_eff_sleeptime": "Sleep time",
"edt_eff_smooth_custom": "Enable smoothing",
@ -734,6 +832,10 @@
"edt_msg_error_disallow": "Value must not be of type $1",
"edt_msg_error_disallow_union": "Value must not be one of the provided disallowed types",
"edt_msg_error_enum": "Value must be one of the enumerated values",
"edt_msg_error_hostname": "The hostname has the wrong format",
"edt_msg_error_invalid_epoch": "Date must be greater than 1 January 1970",
"edt_msg_error_ipv4": "Value must be a valid IPv4 address in the form of 4 numbers between 0 and 255, separated by dots",
"edt_msg_error_ipv6": "Value must be a valid IPv6 address",
"edt_msg_error_maxItems": "Value must have at most $1 items",
"edt_msg_error_maxLength": "Value must be at most $1 characters long",
"edt_msg_error_maxProperties": "Object must have at most $1 properties",
@ -754,6 +856,8 @@
"edt_msg_error_type": "Value must be of type $1",
"edt_msg_error_type_union": "Value must be one of the provided types",
"edt_msg_error_uniqueItems": "Array must have unique items",
"edt_msgcust_error_hostname_ip": "Not a valid Hostname nor IPv4 nor IPv6",
"edt_msgcust_error_hostname_ip4": "Not a valid Hostname nor IPv4",
"effectsconfigurator_button_conttest": "Continuous test",
"effectsconfigurator_button_deleffect": "Delete Effect",
"effectsconfigurator_button_editeffect": "Load Effect",
@ -801,6 +905,7 @@
"general_comp_PROTOSERVER": "Protocol Buffers Server",
"general_comp_SMOOTHING": "Smoothing",
"general_comp_V4L": "Capture USB-Input",
"general_comp_AUDIO": "Audio Capture",
"general_country_cn": "China",
"general_country_de": "Germany",
"general_country_es": "Spain",
@ -812,12 +917,17 @@
"general_country_us": "United States",
"general_disabled": "disabled",
"general_enabled": "enabled",
"general_speech_ca": "Catalan",
"general_speech_cs": "Czech",
"general_speech_da": "Danish",
"general_speech_de": "German",
"general_speech_el": "Greek",
"general_speech_en": "English",
"general_speech_es": "Spanish",
"general_speech_fr": "French",
"general_speech_hu": "Hungarian",
"general_speech_it": "Italian",
"general_speech_ja": "Japanese",
"general_speech_nb": "Norwegian (Bokmål)",
"general_speech_nl": "Dutch",
"general_speech_pl": "Polish",
@ -906,8 +1016,11 @@
"remote_losthint": "Note: All changes will be lost after a restart.",
"remote_maptype_intro": "Usually the LED layout defines which LED covers a specific picture area. You can change it here: $1.",
"remote_maptype_label": "Mapping type",
"remote_maptype_label_multicolor_mean": "Multicolor",
"remote_maptype_label_unicolor_mean": "Unicolor",
"remote_maptype_label_dominant_color": "Dominant Color",
"remote_maptype_label_dominant_color_advanced": "Dominant Color Advanced",
"remote_maptype_label_multicolor_mean": "Mean Color Simple",
"remote_maptype_label_multicolor_mean_squared": "Mean Color Squared",
"remote_maptype_label_unicolor_mean": "Mean Color Image",
"remote_optgroup_syseffets": "System Effects",
"remote_optgroup_templates_custom": "User Templates",
"remote_optgroup_templates_system": "System Templates",
@ -977,16 +1090,16 @@
"wiz_cololight_noprops": "Not able to get device properties - Define Hardware LED count manually",
"wiz_cololight_title": "Cololight Wizard",
"wiz_guideyou": "The $1 will guide you through the settings. Just press the button!",
"wiz_hue_blinkblue": "Let ID $1 light up blue",
"wiz_hue_clientkey": "Clientkey:",
"wiz_hue_blinkblue": "Let it light up",
"wiz_hue_clientkey": "Clientkey",
"wiz_hue_create_user": "Create new User",
"wiz_hue_desc1": "It searches automatically for a Hue-Bridge, in case it can't find one you need to provide the IP-address and push the reload button on the right. Now you need a user ID, if you don't have one create a new one.",
"wiz_hue_desc2": "Now choose which lamps should be added. The position assigns the lamp to a specific position on your \"picture\". Disabled lamps won't be added. To identify single lamps press the button on the right.",
"wiz_hue_desc1": "1. Hyperion searches automatically for a Hue-Bridge, in case it cannot find one you need to provide the hostname or IP-address and push the reload button. <br> 2. Provide a user ID, if you do not have one create a new one.",
"wiz_hue_desc2": "3. Now choose which lamps should be added. The position assigns the lamp to a specific position on your \"picture\". Disabled lamps won't be added. To identify single lamps press the button on the right.",
"wiz_hue_e_clientkey_needed": "A clientkey that matches the username is required to use the entertainment API. Please enter an existing one or use the button below to create a new one.",
"wiz_hue_e_create_user": "Create new User and clientkey",
"wiz_hue_e_desc1": "It searches automatically for a hue bridge, in case it can't find one you need to provide the ip address and push the reload button on the right. Now you need a user id and the clientkey, if you don't have both, create a new one.",
"wiz_hue_e_desc2": "Now choose your entertainment group, which has all your lights inside for use with Hyperion.",
"wiz_hue_e_desc3": "Now you can choose in which position the respective lamp should be \"in the picture\". A preselection of the position was made based on the configured positions of the lights in the entertainment group. This is just a recommendation and can be customized as desired. You can therefore highlight them briefly by clicking on the right button to improve the selection.",
"wiz_hue_e_desc1": "1. Hyperion searches automatically for a Hue-Bridge, in case it cannot find one you need to provide the hostname or IP-address and push the reload button. <br> 2. Provide a user id and the clientkey, if you do not have both, create new ones.",
"wiz_hue_e_desc2": "3. Choose your entertainment group, which has all your lights inside for use with Hyperion.",
"wiz_hue_e_desc3": "4. Choose in which position the respective lamp should be \"in the picture\". A preselection of the position was made based on the configured positions of the lights in the entertainment group. This is just a recommendation and can be customized as desired. You can therefore highlight them briefly by clicking on the right button to improve the selection.",
"wiz_hue_e_intro1": "This wizards configures Hyperion for the well known Philips Hue Entertainment system. Features are: Hue Bridge auto detection, user and clientkey creation, entertainment group selection, setting group lights to a specific position on your picture and optimise the Hyperion settings automatically! So in short: All you need are some clicks and you are done!",
"wiz_hue_e_noapisupport": "The Wizard has disabled entertainment API support and will continue in classic mode.",
"wiz_hue_e_noapisupport_hint": "The option \"<b>Use Hue Entertainment API</b>\" was unchecked.",
@ -996,15 +1109,15 @@
"wiz_hue_e_use_group": "Use group",
"wiz_hue_e_use_groupid": "Use group ID $1",
"wiz_hue_failure_connection": "Timeout: Please press the bridge button within the period of 30 seconds",
"wiz_hue_failure_ip": "No Bridge found, please type in a valid IP-Address",
"wiz_hue_failure_ip": "No Bridge found, please provide a valid hostname or IP-address",
"wiz_hue_failure_user": "User not found, create a new one with the button below or input a valid user id and press the \"reload\" symbol.",
"wiz_hue_intro1": "This wizards configures Hyperion for the well known Philips Hue system. Features are Hue Bridge auto detection, user creation, set each hue light to a specific position on your picture or disable it and tune the Hyperion settings automatically! So in short: All you need are some clicks and you are done!",
"wiz_hue_ip": "Hue Bridge IP:",
"wiz_hue_ip": "Hostname or IP",
"wiz_hue_noids": "This Hue bridge has no bulbs/stripes, please pair them before with the Hue Apps",
"wiz_hue_press_link": "Please press link button on the Hue Bridge.",
"wiz_hue_searchb": "Searching for bridge...",
"wiz_hue_title": "Philips Hue Wizard",
"wiz_hue_username": "User ID:",
"wiz_hue_username": "User ID",
"wiz_identify": "Identify",
"wiz_identify_tip": "Identify configured device by lighting it up",
"wiz_identify_light": "Identify $1",
@ -1020,6 +1133,7 @@
"wiz_rgb_qrend": "...red?",
"wiz_rgb_switchevery": "Switch color every...",
"wiz_rgb_title": "RGB Byte Order Wizard",
"wiz_cc_try_connect": "Connecting...",
"wiz_wizavail": "Wizard available",
"wiz_yeelight_desc2": "Now choose which lamps should be added. The position assigns the lamp to a specific position on your \"picture\". Disabled lamps won't be added. To identify single lamps press the button on the right.",
"wiz_yeelight_intro1": "This wizards configures Hyperion for the Yeelight system. Features are the Yeelighs' auto detection, setting each light to a specific position on your picture or disable it and tune the Hyperion settings automatically! So in short: All you need are some clicks and you are done!",

View File

@ -10,6 +10,9 @@
"InfoDialog_nowrite_foottext": "¡El WebUI se desbloqueará automáticamente después de haber resuelto el problema!",
"InfoDialog_nowrite_text": "Hyperion no puede escribir en el archivo de configuración cargado actual. Repara los permisos de archivo para continuar.",
"InfoDialog_nowrite_title": "¡Error de permiso de escritura!",
"InfoDialog_systemRestart_title": "Reiniciar",
"InfoDialog_systemResume_title": "Retomar",
"InfoDialog_systemSuspend_title": "Suspender",
"about_3rd_party_licenses": "Licencias de terceros",
"about_3rd_party_licenses_error": "Tuvimos problemas para recopilar información de licencias de terceros a través de la Web. <br />Por favor, sigue este enlace para acceder al Recurso GitHub.",
"about_build": "Build",
@ -40,7 +43,7 @@
"conf_general_inst_renreq_t": "Introduce un nuevo nombre para tu instalación en el campo de abajo.",
"conf_general_inst_title": "Gestión de instalaciones de hardware LED",
"conf_general_intro": "Ajustes básicos de Hyperion y WebUI que no encajan en otra categoría.",
"conf_general_label_title": "Configuración General",
"conf_general_label_title": "Configuración general",
"conf_grabber_fg_intro": "La plataforma de captura es la captura del sistema local como fuente de entrada, en la que Hyperion está instalado.",
"conf_grabber_inst_grabber_config_info": "Configura de antemano los dispositivos de hardware de captura que utilizará la instancia",
"conf_grabber_v4l_intro": "La captura USB es un dispositivo (de captura) conectado a través de USB que se utiliza para introducir imágenes de origen para su procesado.",
@ -51,9 +54,13 @@
"conf_leds_contr_label_contrtype": "Tipo de controladora:",
"conf_leds_device_info_log": "En caso de que tus LEDs no funcionen, comprueba aquí si hay errores:",
"conf_leds_device_intro": "Hyperion soporta una gran cantidad de controladores para transmitir datos a tu dispositivo de destino. Selecciona un controlador LED fuera de la lista ordenada y configúralo. Hemos elegido los mejores ajustes por defecto para cada dispositivo.",
"conf_leds_error_get_properties_text": "No se han podido obtener las propiedades del dispositivo. Por favor, comprueba los elementos de configuración.",
"conf_leds_error_get_properties_title": "Propiedades del dispositivo",
"conf_leds_error_hwled_gt_layout": "El recuento de LEDs por hardware ($1) es mayor que los LEDs configurados a través de la disposición ($2),<br>$3 {{plural:$1|LED|LEDs}} se quedará en negro si continúas.",
"conf_leds_error_hwled_gt_maxled": "El recuento de LEDs por hardware ($1) es mayor que el número máximo de LEDs soportado por el dispositivo ($2). <br> El recuento de LEDs de hardware se establece en ($3).",
"conf_leds_error_hwled_gt_maxled_protocol": "El recuento de LEDs por hardware ($1) es mayor que el número máximo de LEDs soportado por el protocolo de streaming ($2). <br> El protocolo de streaming cambiará a ($3).",
"conf_leds_error_hwled_lt_layout": "El recuento de LEDs por hardware ($1) es menor que los LEDs configurados a través del diseño ($2). <br> El número de LEDs configurados en el esquema no debe superar los LEDs disponibles.",
"conf_leds_error_wled_segment_missing": "El segmento configurado actualmente ($1) no está configurado en tu dispositivo WLED.<br>¡Es posible que tengas que comprobar la configuración del WLED!<br>La página de configuración representa la configuración actual del WLED.",
"conf_leds_info_ws281x": "Hyperion debe ejecutarse con privilegios 'root' para este tipo de controlador.",
"conf_leds_layout_advanced": "Ajustes Avanzados",
"conf_leds_layout_blacklist_num_title": "Número de LEDs",
@ -62,6 +69,7 @@
"conf_leds_layout_blacklist_start_title": "LED de inicio",
"conf_leds_layout_blacklistleds_title": "LEDs de lista negra",
"conf_leds_layout_btn_checklist": "Mostrar lista",
"conf_leds_layout_btn_keystone": "Corrección de la clave",
"conf_leds_layout_button_savelay": "Guardar Disposición",
"conf_leds_layout_button_updsim": "Actualizar Vista Previa",
"conf_leds_layout_checkp1": "El led negro es tu primer led, el primer led es el punto donde introduces tu señal de datos.",
@ -81,6 +89,16 @@
"conf_leds_layout_cl_leftbottom": "Izquierda 50% - 100% Inferior",
"conf_leds_layout_cl_leftmiddle": "Izquierda 25% - 75% Medio",
"conf_leds_layout_cl_lefttop": "Izquierda 0% - 50% Superior",
"conf_leds_layout_cl_lightPosBottomLeft11": "Abajo: 75 - 100% desde la izquierda",
"conf_leds_layout_cl_lightPosBottomLeft112": "Abajo: 0 - 50% desde la izquierda",
"conf_leds_layout_cl_lightPosBottomLeft12": "Abajo: 25 - 50% desde la izquierda",
"conf_leds_layout_cl_lightPosBottomLeft121": "Abajo: 50 - 100% desde la izquierda",
"conf_leds_layout_cl_lightPosBottomLeft14": "Abajo: 0 - 25% desde la izquierda",
"conf_leds_layout_cl_lightPosBottomLeft34": "Abajo: 50 - 75% desde la izquierda",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Abajo: 25 - 75% desde la izquierda",
"conf_leds_layout_cl_lightPosTopLeft112": "Arriba: 0 - 50% desde la izquierda",
"conf_leds_layout_cl_lightPosTopLeft121": "Arriba: 50 - 75% desde la izquierda",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Arriba: 25 - 75% desde la izquierda",
"conf_leds_layout_cl_overlap": "Superposición",
"conf_leds_layout_cl_reversdir": "Dirección inversa",
"conf_leds_layout_cl_right": "Derecha",
@ -95,6 +113,7 @@
"conf_leds_layout_generatedconf": "Configuración LED Generada/Actual",
"conf_leds_layout_intro": "Necesitas también un diseño led, que refleje tus posiciones led. La disposición clásica es el marco generalmente usado de la TV, pero también apoyamos la creación de matriz led (paredes led). La vista en esta disposición es SIEMPRE del FRENTE de tu TV.",
"conf_leds_layout_ma_cabling": "Cableado",
"conf_leds_layout_ma_direction": "Dirección",
"conf_leds_layout_ma_horiz": "Horizontal",
"conf_leds_layout_ma_optbottomleft": "Inferior Izquierda",
"conf_leds_layout_ma_optbottomright": "Inferior Derecha",
@ -112,7 +131,7 @@
"conf_leds_layout_pbr": "Apunta abajo a la derecha",
"conf_leds_layout_peview": "Vista Previa de Configuración LED",
"conf_leds_layout_preview_l1": "Este es tu primer led (posición de entrada)",
"conf_leds_layout_preview_l2": "Esto visualiza la dirección de datos (segundo/tercer led)",
"conf_leds_layout_preview_l2": "Esto visualiza la dirección de datos (segundo/tercer LED)",
"conf_leds_layout_preview_ledpower": "Consumo Máx. de energía: $1 A",
"conf_leds_layout_preview_originCL": "Creado a partir de: Disposición Clásica (Marco LED)",
"conf_leds_layout_preview_originMA": "Creado a partir de: Disposición en Matriz (Pared LED)",
@ -140,7 +159,7 @@
"conf_logging_contpolicy": "Informe de la Política de Privacidad",
"conf_logging_label_intro": "Área para comprobar los mensajes de registro, dependiendo de la configuración de nivel de registro, verás más o menos información.",
"conf_logging_lastreports": "Informes anteriores",
"conf_logging_logoutput": "Resultado del registro",
"conf_logging_logoutput": "Salida del registro",
"conf_logging_nomessage": "No hay mensajes de registro disponibles.",
"conf_logging_report": "Informe",
"conf_logging_uplfailed": "¡Subida fallida! ¡Por favor revise su conexion a internet!",
@ -171,7 +190,7 @@
"dashboard_alert_message_confsave_success": "Su configuración de Hyperion se ha guardado correctamente. Sus modificaciones están ahora activas.",
"dashboard_alert_message_confsave_success_t": "Configuración guardada",
"dashboard_alert_message_disabled": "¡Hyperion está actualmente deshabilitado! Para usarlo de nuevo, habilitalo en el panel de mandos.",
"dashboard_alert_message_disabled_t": "Hyperion deshabilitado",
"dashboard_alert_message_disabled_t": "Instancia de hardware LED desactivada",
"dashboard_componentbox_label_comp": "Estado de los componentes",
"dashboard_componentbox_label_status": "Estado",
"dashboard_componentbox_label_title": "Estado de los componentes",
@ -181,6 +200,7 @@
"dashboard_infobox_label_instance": "Instancia:",
"dashboard_infobox_label_latesthyp": "Última versión de Hyperion:",
"dashboard_infobox_label_platform": "Plataforma:",
"dashboard_infobox_label_port_boblight": "Servidor Boblight:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "Servidor JSON:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
@ -190,19 +210,20 @@
"dashboard_infobox_label_statush": "Estado de Hyperion:",
"dashboard_infobox_label_title": "Información",
"dashboard_infobox_label_watchedversionbranch": "Rama de la versión visualizada:",
"dashboard_infobox_message_updatesuccess": "Ejecutas la última versión de Hyperion.",
"dashboard_infobox_message_updatewarning": Una versión más nueva de Hyperion está disponible! ($1)",
"dashboard_infobox_message_updatesuccess": "Estás ejecutando la última versión de Hyperion.",
"dashboard_infobox_message_updatewarning": Hay disponible una versión más nueva de Hyperion! ($1)",
"dashboard_label_intro": "El cuadro de mandos te ofrece una visión general sobre el estado de Hyperion.",
"dashboard_message_default_password": "La WebUI tiene actualmente la contraseña por defecto. Te recomendamos encarecidamente que la cambies.",
"dashboard_message_default_password_t": "Está establecida la contraseña por defecto de la WebUI",
"dashboard_message_do_not_show_again": "No mostrar este mensaje de nuevo",
"dashboard_message_global_setting": "La configuración de esta página no depende de una instalación específica. Los cambios se almacenarán globalmente para todas las instalaciones.",
"dashboard_message_global_setting_t": "Configuración independiente de la instalación",
"dashboard_newsbox_label_title": "Últimas entradas del Blog",
"dashboard_newsbox_label_title": "Hyperion-Blog",
"dashboard_newsbox_noconn": "No se puede conectar al Servidor Hyperion para recuperar los últimos mensajes, ¿Funciona tu conexión a Internet?",
"dashboard_newsbox_readmore": "Leer más",
"dashboard_newsbox_visitblog": "Visitar Hyperion-Blog",
"edt_append_degree": "º",
"edt_append_frames": "Fotogramas",
"edt_append_hz": "Hz",
"edt_append_leds": "LEDs",
"edt_append_ms": "ms",
@ -216,16 +237,16 @@
"edt_conf_bb_blurRemoveCnt_expl": "Número de píxeles que se eliminan del borde detectado para cortar el desenfoque.",
"edt_conf_bb_blurRemoveCnt_title": "blurRemoveCnt",
"edt_conf_bb_borderFrameCnt_expl": "Número de fotogramas antes de que se establezca un borde detectado consistente.",
"edt_conf_bb_borderFrameCnt_title": "borderFrameCnt",
"edt_conf_bb_borderFrameCnt_title": "Fotogramas de los bordes",
"edt_conf_bb_heading_title": "Detector de bordes negros",
"edt_conf_bb_maxInconsistentCnt_expl": "Número de tramas inconsistentes que se ignoran antes de que una nueva frontera tenga la oportunidad de probar la coherencia.",
"edt_conf_bb_maxInconsistentCnt_title": "maxInconsistentCn",
"edt_conf_bb_maxInconsistentCnt_title": "Fotogramas inconsistentes",
"edt_conf_bb_mode_expl": "Algoritmo para procesamiento. (Ver Wiki)",
"edt_conf_bb_mode_title": "Modo",
"edt_conf_bb_threshold_expl": "Si la detección no funciona, sube el umbral para ajustar en negro \"grisáceo\"",
"edt_conf_bb_threshold_title": "Umbral",
"edt_conf_bb_unknownFrameCnt_expl": "Número de fotogramas sin detección antes de que el borde se establezca en 0.",
"edt_conf_bb_unknownFrameCnt_title": "unknownFrameCnt",
"edt_conf_bb_unknownFrameCnt_title": "Fotogramas desconocidos",
"edt_conf_bge_heading_title": "Efecto/color de fondo",
"edt_conf_bobls_heading_title": "Servidor Boblight",
"edt_conf_color_backlightColored_expl": "Añade un poco de color a tu retroiluminación.",
@ -238,6 +259,8 @@
"edt_conf_color_blue_title": "azul",
"edt_conf_color_brightnessComp_expl": "Compensa las diferencias de brillo entre el rojo, verde, azul, amarillo y blanco. 100 significa compensación total, 0 sin compensación",
"edt_conf_color_brightnessComp_title": "Compensación de brillo",
"edt_conf_color_brightnessGain_expl": "Ajusta el brillo de los colores. 1,0 significa que no hay cambios, más de 1,0 aumenta el brillo, menos de 1,0 disminuye el brillo.",
"edt_conf_color_brightnessGain_title": "Ganancia de brillo",
"edt_conf_color_brightness_expl": "De 0,0 a 0,5 el brillo se lineariza, de 0,5 a 1,0 cian, magenta, amarillo es hasta 2x más brillante y blanco 3x.",
"edt_conf_color_brightness_title": "Brillo máximo",
"edt_conf_color_channelAdjustment_header_expl": "Crear perfiles de color que puedan ser asignados a un componente específico. Ajustar el color, la gama, el brillo, la compensación y más.",
@ -264,6 +287,8 @@
"edt_conf_color_magenta_title": "magenta",
"edt_conf_color_red_expl": "El valor rojo calibrado.",
"edt_conf_color_red_title": "rojo",
"edt_conf_color_saturationGain_expl": "Ajusta la saturación de los colores. 1,0 significa que no hay cambios, más de 1,0 aumenta la saturación, menos de 1,0 disminuye la saturación.",
"edt_conf_color_saturationGain_title": "Ganancia de saturación",
"edt_conf_color_white_expl": "El valor blanco calibrado.",
"edt_conf_color_white_title": "blanco",
"edt_conf_color_yellow_expl": "El valor amarillo calibrado.",
@ -319,15 +344,17 @@
"edt_conf_enum_top_down": "De arriba a abajo",
"edt_conf_enum_transeffect_smooth": "Suave",
"edt_conf_enum_transeffect_sudden": "Repentino",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "En bruto",
"edt_conf_enum_unicolor_mean": "Unicolor",
"edt_conf_fbs_heading_title": "Servidor de Flatbuffers",
"edt_conf_fbs_timeout_expl": "Si no se reciben datos para el período dado, el componente se desactivará (suavemente).",
"edt_conf_fbs_timeout_title": "Tiempo de espera",
"edt_conf_fg_display_expl": "Selecciona qué escritorio debe ser capturado (configuración de varios monitores)",
"edt_conf_fg_display_title": "Visualización",
"edt_conf_fg_frequency_Hz_expl": "Cómo de rápido se capturan las nuevas imágenes",
"edt_conf_fg_frequency_Hz_expl": "La velocidad a la que se capturan las nuevas imágenes, es decir, la frecuencia de muestreo. Nota: El vídeo puede ser reproducido a una velocidad de fotogramas mayor o menor.",
"edt_conf_fg_frequency_Hz_title": "Frecuencia de captura",
"edt_conf_fg_heading_title": "Captura de Plataforma",
"edt_conf_fg_heading_title": "Captura de Pantalla",
"edt_conf_fg_height_expl": "Reducir la imagen a este alto, ya que la imagen en bruto necesita mucho tiempo de CPU.",
"edt_conf_fg_height_title": "Altura",
"edt_conf_fg_pixelDecimation_expl": "Reducir el tamaño de la imagen (factor) basado en el tamaño original. Un factor de 1 significa que no hay cambios",
@ -347,11 +374,18 @@
"edt_conf_fge_type_title": "Tipo",
"edt_conf_fw_flat_expl": "Un destino flatbuffer por línea. Contiene IP:PUERTO (Ejemplo: 127.0.0.1:19446)",
"edt_conf_fw_flat_itemtitle": "Destino flatbuffer",
"edt_conf_fw_flat_services_discovered_expl": "Descubiertos los servidores Hyperion que prestan servicios de flatbuffer",
"edt_conf_fw_flat_services_discovered_title": "Objetivos de Flatbuffer descubiertos",
"edt_conf_fw_flat_title": "Lista de clientes flatbuffer",
"edt_conf_fw_heading_title": "Expedidor",
"edt_conf_fw_json_expl": "Un destino json por línea. Contiene IP:PUERTO (Ejemplo: 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Destino json",
"edt_conf_fw_json_services_discovered_expl": "Servidores Hyperion descubiertos que proporcionan servicios JSON-API",
"edt_conf_fw_json_services_discovered_title": "Objetivos JSON descubiertos",
"edt_conf_fw_json_title": "Lista de clientes JSON",
"edt_conf_fw_remote_service_discovered_none": "No se han descubierto servicios remotos",
"edt_conf_fw_service_name_expl": "Nombre del proveedor de servicios",
"edt_conf_fw_service_name_title": "Nombre del servicio",
"edt_conf_gen_configVersion_title": "Versión de configuración",
"edt_conf_gen_heading_title": "Configuración General",
"edt_conf_gen_name_expl": "Un nombre definido por el usuario que se utiliza para detectar Hyperion. (Útil con más de una instancia de Hyperion)",
@ -373,13 +407,13 @@
"edt_conf_grabber_discovery_inprogress": "Descubrimiento en curso",
"edt_conf_instC_screen_grabber_device_expl": "El dispositivo de captura de pantalla utilizado",
"edt_conf_instC_screen_grabber_device_title": "Dispositivo de captura de pantalla",
"edt_conf_instC_systemEnable_expl": "Permite la captura de la plataforma para esta instalación de hardware Led",
"edt_conf_instC_systemEnable_title": "Habilitar la captura de plataformas",
"edt_conf_instC_systemEnable_expl": "Permite la captura de pantalla para esta instalación de hardware Led",
"edt_conf_instC_systemEnable_title": "Habilitar la captura de pantalla",
"edt_conf_instC_v4lEnable_expl": "Habilita la captura USB para esta instalación de hardware led",
"edt_conf_instC_v4lEnable_title": "Habilitar captura USB",
"edt_conf_instC_video_grabber_device_expl": "El dispositivo de captura de vídeo utilizado",
"edt_conf_instC_video_grabber_device_title": "Dispositivo de captura de vídeo",
"edt_conf_instCapture_heading_title": "Captura de instancias",
"edt_conf_instCapture_heading_title": "Capturar Dispositivos",
"edt_conf_js_heading_title": "Servidor JSON",
"edt_conf_log_heading_title": "Registro",
"edt_conf_log_level_expl": "Dependiendo del nivel de registro verás menos o más mensajes en tu registro.",
@ -410,8 +444,6 @@
"edt_conf_smooth_heading_title": "Suavizado",
"edt_conf_smooth_interpolationRate_expl": "Velocidad de cálculo de los fotogramas intermedios suaves.",
"edt_conf_smooth_interpolationRate_title": "Tasa de interpolación",
"edt_conf_smooth_outputRate_expl": "La velocidad de salida a tu controlador de leds.",
"edt_conf_smooth_outputRate_title": "Tasa de salida",
"edt_conf_smooth_time_ms_expl": "¿Cuánto tiempo debe recoger las imágenes el suavizado?",
"edt_conf_smooth_time_ms_title": "Tiempo",
"edt_conf_smooth_type_expl": "Tipo de suavizado",
@ -422,7 +454,7 @@
"edt_conf_smooth_updateFrequency_title": "Frecuencia de actualización",
"edt_conf_v4l2_blueSignalThreshold_expl": "Oscurece los valores bajos de color azul (reconocidos como negros)",
"edt_conf_v4l2_blueSignalThreshold_title": "Umbral de señal azul",
"edt_conf_v4l2_cecDetection_expl": "Si está activado, la captura usb se desactivará temporalmente cuando el evento de espera de CEC se reciba desde el bus HDMI.",
"edt_conf_v4l2_cecDetection_expl": "Si está activado, la captura USB se desactivará temporalmente cuando el evento de espera de CEC se reciba desde el bus HDMI.",
"edt_conf_v4l2_cecDetection_title": "Detección CEC",
"edt_conf_v4l2_cropBottom_expl": "Cuenta de píxeles en la parte inferior que se quitan de la imagen.",
"edt_conf_v4l2_cropBottom_title": "Cortar abajo",
@ -446,13 +478,13 @@
"edt_conf_v4l2_framerate_title": "Fotogramas por segundo",
"edt_conf_v4l2_greenSignalThreshold_expl": "Oscurece los valores bajos de color verde (reconocidos como negros)",
"edt_conf_v4l2_greenSignalThreshold_title": "Umbral de señal verde",
"edt_conf_v4l2_hardware_brightness_expl": "Establecer el brillo del hardware si el dispositivo lo soporta, comprobar los registros (0=desactivado)",
"edt_conf_v4l2_hardware_brightness_expl": "Establecer el brillo del hardware",
"edt_conf_v4l2_hardware_brightness_title": "Control de brillo por hardware",
"edt_conf_v4l2_hardware_contrast_expl": "Establecer el contraste del hardware si el dispositivo lo soporta, comprobar los registros (0=desactivado)",
"edt_conf_v4l2_hardware_contrast_expl": "Establecer el contraste del hardware",
"edt_conf_v4l2_hardware_contrast_title": "Control de contraste por hardware",
"edt_conf_v4l2_hardware_hue_expl": "Establecer el tono del hardware si el dispositivo lo soporta, comprobar los registros (0=desactivado)",
"edt_conf_v4l2_hardware_hue_expl": "Establecer el tono del hardware",
"edt_conf_v4l2_hardware_hue_title": "Control del tono por hardware",
"edt_conf_v4l2_hardware_saturation_expl": "Establecer la saturación del hardware si el dispositivo lo soporta, comprobar los registros (0=desactivado)",
"edt_conf_v4l2_hardware_saturation_expl": "Establecer la saturación del hardware",
"edt_conf_v4l2_hardware_saturation_title": "Control de la saturación por hardware",
"edt_conf_v4l2_hardware_set_defaults": "Controles de hardware por defecto",
"edt_conf_v4l2_hardware_set_defaults_tip": "Establecer los valores predeterminados del dispositivo para el brillo, el contraste, el tono y la saturación",
@ -496,8 +528,14 @@
"edt_dev_enum_sub_min_warm_adjust": "Min. Ajuste caliente",
"edt_dev_enum_subtract_minimum": "Restar el mínimo",
"edt_dev_enum_white_off": "Blanco apagado",
"edt_dev_general_autostart_title": "Autoinicio",
"edt_dev_general_autostart_title_info": "El dispositivo LED se enciende o no durante el arranque",
"edt_dev_general_colorOrder_title": "Orden de bytes RGB",
"edt_dev_general_colorOrder_title_info": "El orden de los colores del dispositivo",
"edt_dev_general_enableAttemptsInterval_title": "Intervalo de reintentos",
"edt_dev_general_enableAttemptsInterval_title_info": "Intervalo entre dos intentos de conexión.",
"edt_dev_general_enableAttempts_title": "Intentos de conexión",
"edt_dev_general_enableAttempts_title_info": "Número de intentos de conexión de un dispositivo antes de que entre en estado de error.",
"edt_dev_general_hardwareLedCount_title": "Recuento de LEDs de hardware",
"edt_dev_general_hardwareLedCount_title_info": "El número de LEDs físicos disponibles para el dispositivo dado",
"edt_dev_general_heading_title": "Configuración general",
@ -508,6 +546,8 @@
"edt_dev_spec_FCsetConfig_title": "Establecer configuración fadecandy",
"edt_dev_spec_LBap102Mode_title": "Modo LightBerry APA102",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_ada_mode_title": "Adalight - Estándar",
"edt_dev_spec_awa_mode_title": "HyperSerial - Alta velocidad",
"edt_dev_spec_baudrate_title": "Tasa de baudios",
"edt_dev_spec_blackLightsTimeout_title": "Tiempo de detección de la señal en negro",
"edt_dev_spec_brightnessFactor_title": "Factor de brillo",
@ -516,12 +556,12 @@
"edt_dev_spec_brightnessOverwrite_title": "Sobrescribir brillo",
"edt_dev_spec_brightnessThreshold_title": "El brillo de la detección de la señal es mínimo",
"edt_dev_spec_brightness_title": "Brillo",
"edt_dev_spec_candyGamma_title": "Modo \"Candy\" (doble corrección gamma)",
"edt_dev_spec_chanperfixture_title": "Canales por Fixture",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Llave de cliente",
"edt_dev_spec_colorComponent_title": "Componente de color",
"edt_dev_spec_debugLevel_title": "Nivel de depuración de la conexión del Streamer",
"edt_dev_spec_debugStreamer_title": "Depuración de Streamer",
"edt_dev_spec_delayAfterConnect_title": "Retraso después de la conexión",
"edt_dev_spec_devices_discovered_none": "No se han descubierto dispositivos",
"edt_dev_spec_devices_discovered_title": "Dispositivos descubiertos",
@ -553,9 +593,11 @@
"edt_dev_spec_maxPacket_title": "Paquete máximo",
"edt_dev_spec_maximumLedCount_title": "Número máximo de LEDs",
"edt_dev_spec_multicastGroup_title": "Grupo multidifusión",
"edt_dev_spec_networkDeviceName_title": "Nombre de la red",
"edt_dev_spec_networkDeviceName_title": "Nombre del dispositivo de red",
"edt_dev_spec_networkDevicePort_title": "Puerto",
"edt_dev_spec_numberOfLeds_title": "Número de LEDs",
"edt_dev_spec_onBlackTimeToPowerOff": "Tiempo de apagado de la lámpara si se activa el nivel de negro",
"edt_dev_spec_onBlackTimeToPowerOn": "Tiempo de encendido de la lámpara si se restablece la señal",
"edt_dev_spec_orbIds_title": "ID(s) Orb",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
@ -563,22 +605,37 @@
"edt_dev_spec_panel_start_position": "Panel de inicio [0-paneles max]",
"edt_dev_spec_panelorganisation_title": "Secuencia de numeración del panel",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Puerto de Servicio [1-65535]",
"edt_dev_spec_port_title": "Puerto",
"edt_dev_spec_printTimeStamp_title": "Añadir marca de tiempo",
"edt_dev_spec_pwmChannel_title": "Canal PWM",
"edt_dev_spec_razer_device_title": "Dispositivo Razer Chroma",
"edt_dev_spec_restoreOriginalState_title": "Restaurar el estado original de las luces cuando se desactivan",
"edt_dev_spec_restoreOriginalState_title_info": "Restaurar el estado original del dispositivo cuando se desactiva",
"edt_dev_spec_rgbw_calibration_blue": "Aspecto del canal Azul/Blanco",
"edt_dev_spec_rgbw_calibration_enable": "Calibración del canal blanco (sólo RGBW)",
"edt_dev_spec_rgbw_calibration_green": "Aspecto del canal Verde/Blanco",
"edt_dev_spec_rgbw_calibration_limit": "Límite del canal blanco",
"edt_dev_spec_rgbw_calibration_red": "Aspecto del canal Rojo/Blanco",
"edt_dev_spec_segmentId_title": "Segmento-ID",
"edt_dev_spec_segmentsOverlapValidation_error": "¡Corrige la configuración de WLED! El segmento no debe solaparse con {{plural:$1| segmento|segmentos}}: \"$2\".",
"edt_dev_spec_segmentsSwitchOffOthers_title": "Desconectar otros segmentos",
"edt_dev_spec_segments_disabled_title": "Transmisión de segmentos desactivada en WLED.",
"edt_dev_spec_segments_title": "Transmisión a segmento",
"edt_dev_spec_serial_title": "Número de serie",
"edt_dev_spec_spipath_title": "Ruta SPI",
"edt_dev_spec_spipath_title": "Dispositivo SPI",
"edt_dev_spec_sslHSTimeoutMax_title": "Máximo tiempo de espera para el contacto con el Streamer",
"edt_dev_spec_sslHSTimeoutMin_title": "Tiempo mínimo de espera para el contacto con el Streamer",
"edt_dev_spec_sslReadTimeout_title": "Tiempo de lectura del Streamer",
"edt_dev_spec_stayOnAfterStreaming_title": "Permanecer encendido después del streaming",
"edt_dev_spec_stayOnAfterStreaming_title_info": "El dispositivo permanecerá encendido después de transmitir o restaurar el estado.",
"edt_dev_spec_stream_protocol_title": "Protocolo de streaming",
"edt_dev_spec_switchOffOnBlack_title": "Apagar en negro",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Apagado, por debajo del mínimo",
"edt_dev_spec_syncOverwrite_title": "Desactivar la sincronización",
"edt_dev_spec_targetIpHost_title": "IP de destino/nombre de host",
"edt_dev_spec_targetIpHost_expl": "Nombre de host (DNS/mDNS) o dirección-IP (IPv4 o IPv6)",
"edt_dev_spec_targetIpHost_title": "Nombre de host/dirección IP",
"edt_dev_spec_targetIpHost_title_info": "El nombre de anfitrión o la dirección IP del dispositivo",
"edt_dev_spec_targetIp_title": "IP de destino",
"edt_dev_spec_targetIp_title": "Dirección-IP",
"edt_dev_spec_transeffect_title": "Efecto de transición",
"edt_dev_spec_transistionTimeExtra_title": "Oscuridad de tiempo extra",
"edt_dev_spec_transistionTime_title": "Tiempo de transición",
@ -641,9 +698,13 @@
"edt_eff_frequency": "Frecuencia",
"edt_eff_gif_header": "GIFs",
"edt_eff_gif_header_desc": "Este efecto reproduce archivos.gif, proporciona un vídeo simple tipo bucle como efecto.",
"edt_eff_grayscale": "Escala de grises",
"edt_eff_height": "Altura",
"edt_eff_huechange": "Cambio de color",
"edt_eff_image": "Archivo de imagen",
"edt_eff_image_source": "Fuente de la imagen",
"edt_eff_image_source_file": "Archivo local",
"edt_eff_image_source_url": "URL",
"edt_eff_initial_blink": "Flash para llamar la atención",
"edt_eff_interval": "Intervalo",
"edt_eff_knightrider_header": "Coche Fantástico",
@ -701,6 +762,7 @@
"edt_eff_traces_header_desc": "Requiere rediseño",
"edt_eff_trails_header": "Caminos",
"edt_eff_trails_header_desc": "Estrellas de colores que caen de arriba a abajo",
"edt_eff_url": "Localización de la imagen",
"edt_eff_waves_header": "Ondas",
"edt_eff_waves_header_desc": "¡Ondas de color! Elije tus colores, el tiempo de rotación, dirección inversa y más.",
"edt_eff_whichleds": "Qué Leds",
@ -725,6 +787,10 @@
"edt_msg_error_disallow": "El valor no debe ser del tipo $1",
"edt_msg_error_disallow_union": "El valor no debe ser uno de los tipos no permitidos",
"edt_msg_error_enum": "El valor debe ser uno de los valores enumerados",
"edt_msg_error_hostname": "El nombre de host tiene un formato incorrecto",
"edt_msg_error_invalid_epoch": "La fecha debe ser superior al 1 de enero de 1970",
"edt_msg_error_ipv4": "El valor debe ser una dirección IPv4 válida en forma de 4 números entre 0 y 255, separados por puntos",
"edt_msg_error_ipv6": "El valor debe ser una dirección IPv6 válida",
"edt_msg_error_maxItems": "El valor debe tener como máximo $1",
"edt_msg_error_maxLength": "El valor debe tener un máximo de $1 caracteres",
"edt_msg_error_maxProperties": "El objeto debe tener como máximo $1 propiedades",
@ -745,6 +811,8 @@
"edt_msg_error_type": "El valor debe ser del tipo $1",
"edt_msg_error_type_union": "El valor debe ser uno de los tipos proporcionados",
"edt_msg_error_uniqueItems": "Formación debe tener elementos únicos",
"edt_msgcust_error_hostname_ip": "No es un nombre de host válido ni IPv4 ni IPv6",
"edt_msgcust_error_hostname_ip4": "No es un nombre de host válido ni IPv4",
"effectsconfigurator_button_conttest": "Test contínuo",
"effectsconfigurator_button_deleffect": "Eliminar Efecto",
"effectsconfigurator_button_editeffect": "Cargar Efecto",
@ -787,11 +855,11 @@
"general_comp_BOBLIGHTSERVER": "Servidor Boblight",
"general_comp_FLATBUFSERVER": "Servidor de Flatbuffers",
"general_comp_FORWARDER": "JSON/PROTO Progresivo",
"general_comp_GRABBER": "Captura de plataforma",
"general_comp_LEDDEVICE": "Dispositivo LED",
"general_comp_GRABBER": "Captura de pantalla",
"general_comp_LEDDEVICE": "Salida LED",
"general_comp_PROTOSERVER": "Servidor de Buffers de Protocolo",
"general_comp_SMOOTHING": "Suavizado",
"general_comp_V4L": "Captura USB",
"general_comp_V4L": "Captura USB-Entrada",
"general_country_cn": "China",
"general_country_de": "Alemania",
"general_country_es": "España",
@ -803,12 +871,17 @@
"general_country_us": "Estados Unidos",
"general_disabled": "Deshabilitado",
"general_enabled": "Habilitado",
"general_speech_ca": "Catalán",
"general_speech_cs": "Czech",
"general_speech_da": "Danés",
"general_speech_de": "Alemán",
"general_speech_el": "Griego",
"general_speech_en": "Inglés",
"general_speech_es": "Español",
"general_speech_fr": "Francés",
"general_speech_hu": "Húngaro",
"general_speech_it": "Italiano",
"general_speech_ja": "Japonés",
"general_speech_nb": "Noruego (Bokmål)",
"general_speech_nl": "Holandés",
"general_speech_pl": "Polaco",
@ -851,16 +924,16 @@
"info_restart_contus": "Si todavía te quedas por aquí después de 20 segundos y no tienes idea de por qué, abre un nuevo tema en nuestro foro de soporte ...",
"info_restart_contusa": "... con tus últimos pasos. ¡Gracias!",
"info_restart_rightback": "¡Hyperion regresará inmediatamente!",
"info_restart_title": "Reinicia ahora...",
"info_restart_title": "Reiniciando actualmente...",
"main_ledsim_btn_togglelednumber": "Números LED",
"main_ledsim_btn_toggleleds": "Mostrar LEDs",
"main_ledsim_btn_togglelivevideo": "video en vivo",
"main_ledsim_btn_togglelivevideo": "Video en directo",
"main_ledsim_btn_togglesigdetect": "Área de detección de señales",
"main_ledsim_text": "Visualización en vivo de los colores LED y opcional el flujo de vídeo actual de tu dispositivo de captura.",
"main_ledsim_title": "Visualización LED",
"main_menu_about_token": "Acerca de Hyperion",
"main_menu_colors_conf_token": "Procesamiento de imágen",
"main_menu_configuration_token": "Configuración",
"main_menu_configuration_token": "Instancias LED",
"main_menu_dashboard_token": "Cuadro de mandos",
"main_menu_effect_conf_token": "Efectos",
"main_menu_effectsconfigurator_token": "Configurador de Efectos",
@ -868,7 +941,7 @@
"main_menu_grabber_conf_token": "Hardware de Captura",
"main_menu_input_selection_token": "Selección de entrada",
"main_menu_instcapture_conf_token": "Fuentes",
"main_menu_leds_conf_token": "Hardware LED",
"main_menu_leds_conf_token": "Salida LED",
"main_menu_logging_token": "Log",
"main_menu_network_conf_token": "Servicios de red",
"main_menu_remotecontrol_token": "Control Remoto",
@ -903,7 +976,7 @@
"remote_maptype_label": "Tipo de Mapeo",
"remote_maptype_label_multicolor_mean": "Multicolor",
"remote_maptype_label_unicolor_mean": "Unicolor",
"remote_optgroup_syseffets": "Efectos Proporcionados",
"remote_optgroup_syseffets": "Efectos de Sistema",
"remote_optgroup_templates_custom": "Plantillas de Usuario",
"remote_optgroup_templates_system": "Plantillas del Sistema",
"remote_optgroup_usreffets": "Efectos de Usuario",
@ -932,7 +1005,7 @@
"support_label_webpagetitle": "Página web",
"support_label_webrestitle": "Información y recursos de ayuda",
"support_label_wikitext": "La fuente de la A a la Z para casi todo lo relacionado con Hyperion",
"support_label_wikititle": "Wiki",
"support_label_wikititle": "Documentación",
"support_label_yttext": "¿Aburrido de las fotos? ¡Comprueba nuestro canal de Youtube!",
"update_button_changelog": "Registro completo de cambios",
"update_button_install": "Instalar",
@ -953,7 +1026,7 @@
"wiz_cc_chooseid": "Define un nombre para éste perfil.",
"wiz_cc_intro1": "Este asistente te guiará a través de la calibración led. Si estás usando Kodi, las fotos y videos de la calibración pueden ser enviados directamente a él. Prerrequisito: Necesitas habilitar \"Permitir el control remoto desde aplicaciones en otros sistemas\" en Kodi.<br />O bien, puede que quieras descargar estos archivos tú mismo y mostrarlos cuando el asistente te pida que ajustes la configuración.",
"wiz_cc_kodicon": "Kodi encontrado, proceder con el soporte de Kodi.",
"wiz_cc_kodidiscon": "No se encuentra Kodi, proceder sin el soporte de Kodi.",
"wiz_cc_kodidiscon": "No se encuentra Kodi, proceder sin apoyo de Kodi (por favor, comprueba si el control remoto por otros sistemas está activado).",
"wiz_cc_kodidisconlink": "Descarga enlaces de imagenes:",
"wiz_cc_kodimsg_start": "Prueba con éxito - ¡tiempo de continuar!",
"wiz_cc_kodishould": "Kodi debería mostrar la siguiente imagen: $1",
@ -967,6 +1040,7 @@
"wiz_cc_testintrok": "Pulsa un botón de abajo para iniciar un vídeo de prueba.",
"wiz_cc_testintrowok": "Haz el siguiente enlace para descargar videos de prueba:",
"wiz_cc_title": "Asistente de calibración de color",
"wiz_cc_try_connect": "Conectando...",
"wiz_cololight_desc2": "Ahora elige qué Cololights deben ser añadidos. Para identificar las luces individuales, pulsa el botón de la derecha.",
"wiz_cololight_intro1": "Este asistente configura Hyperion para el sistema Cololight. ¡Las características son la detección automática de Cololight y el ajuste automático de la configuración de Hyperion! En resumen: Todo lo que necesitas son algunos clics y listo!<br />Nota: En el caso de Cololight Strip, puede que necesites corregir manualmente el recuento y la disposición de los LEDs.",
"wiz_cololight_noprops": "Imposible obtener las propiedades del dispositivo - Define el conteo de LEDs de hardware manualmente",
@ -975,8 +1049,8 @@
"wiz_hue_blinkblue": "Permite a ID $1 encender el azul",
"wiz_hue_clientkey": "Llave de cliente:",
"wiz_hue_create_user": "Crear Usuario",
"wiz_hue_desc1": "Busca automáticamente un puente Hue, en caso de que no encuentre uno necesitas proporcionar la dirección IP y pulsar el botón de recarga a la derecha. Ahora necesitas una identificación de usuario, si no tienes una, crea una nueva.",
"wiz_hue_desc2": "Ahora elije qué lámparas se deben agregar. La posición asigna la lámpara a una posición específica en tu \"imagen\". No se agregarán las lámparas deshabilitadas. Para identificar lámparas individuales, presiona el botón de la derecha.",
"wiz_hue_desc1": "1. Busca automáticamente un puente Hue, en caso de que no encuentre uno necesitas proporcionar la dirección IP y pulsar el botón de recarga a la derecha. Ahora necesitas una identificación de usuario, si no tienes una, crea una nueva.",
"wiz_hue_desc2": "3. Ahora elije qué lámparas se deben agregar. La posición asigna la lámpara a una posición específica en tu \"imagen\". No se agregarán las lámparas deshabilitadas. Para identificar lámparas individuales, presiona el botón de la derecha.",
"wiz_hue_e_clientkey_needed": "Se requiere una clave de cliente que coincida con el nombre de usuario para usar la API de entretenimiento. Por favor, introduce una existente o usa el botón de abajo para crear una nueva.",
"wiz_hue_e_create_user": "Crear un nuevo usuario y una nueva clave de cliente",
"wiz_hue_e_desc1": "Busca automáticamente un puente Hue, en caso de que no pueda encontrar uno, debes proporcionar la dirección IP y pulsar el botón de recarga a la derecha. Ahora necesitas un ID de usuario y la clave de cliente, si no tienes ambas, crea una nueva.",
@ -991,15 +1065,15 @@
"wiz_hue_e_use_group": "Usar grupo",
"wiz_hue_e_use_groupid": "Usar ID de grupo $1",
"wiz_hue_failure_connection": "El tiempo de conexión expiró. Por favor, pulsa el botón a tiempo.",
"wiz_hue_failure_ip": "Comprueba tu dirección IP.",
"wiz_hue_failure_ip": "No se ha encontrado ningún Puente, indica un nombre de host o una dirección IP válidos",
"wiz_hue_failure_user": "Usuario no encontrado, crea uno nuevo con el botón de abajo o introduce una identificación de usuario válida y pulsa el símbolo de \"recargar\".\n",
"wiz_hue_intro1": "Con este ayudante de configuración puedes obtener un nuevo usuario para tu Puente de Matiz y puedes ver tus luces con las ID para la Configuración de Hyperion.",
"wiz_hue_ip": "IP Puente de Matiz:",
"wiz_hue_ip": "Nombre de host o IP",
"wiz_hue_noids": "Este puente de Matiz no tiene bombillas/tiras, por favor, emparéjalos antes con las aplicaciones de Hue",
"wiz_hue_press_link": "Por favor, presione el botón de enlace en el Puente de Matiz.",
"wiz_hue_searchb": "Buscando el puente...",
"wiz_hue_title": "Asistente Puente de Matiz",
"wiz_hue_username": "Nombre de usuario:",
"wiz_hue_username": "ID de usuario",
"wiz_identify": "Identificar",
"wiz_identify_light": "Identificar $1",
"wiz_identify_tip": "Identificar el dispositivo configurado iluminándolo",

View File

@ -1,9 +1,12 @@
{
"InfoDialog_access_text": "Selon le niveau des paramètres, vous pourrez ajuster plus d'options ou accéder à plus de fonctionnalités. Le niveau \"Par défaut\" est recommandé.",
"InfoDialog_access_title": "Niveau des paramètres",
"InfoDialog_changePassword_success": "Mot de passe enregistré !",
"InfoDialog_changePassword_title": "Modifier le mot de passe",
"InfoDialog_iswitch_text": "Si vous faites fonctionner plus d'une instance Hyperion sur votre réseau local, vous pouvez basculer entre les différentes configurations. Sélectionnez l'instance d'Hyperion que vous souhaitez contrôler ci-dessous !",
"InfoDialog_iswitch_title": "Commutateur Hyperion",
"InfoDialog_nowrite_foottext": "Le Web UI sera débloqué automatiquement après que vous ayez résolu les problèmes.",
"InfoDialog_nostorage_title": "Impossible d'ecrire les paramètres",
"InfoDialog_nowrite_foottext": "WebUI sera débloqué automatiquement une fois les problèmes résolus !",
"InfoDialog_nowrite_text": "Hyperion ne peut pas écrire votre fichier de configuration actuellement chargé. Réparez les permissions sur le fichier afin de poursuivre.",
"InfoDialog_nowrite_title": "Erreur de droit d'écriture !",
"about_3rd_party_licenses": "Licences tierces",
@ -14,12 +17,12 @@
"about_resources": "$1 bibliothèques",
"about_translations": "Traductions",
"about_version": "Version :",
"conf_colors_blackborder_intro": "Évitez les barres noires où qu'elles se trouvent. Chaque mode utilise un algorithme de détection différent qui est réglé pour des situations particulières. Augmentez le seuil si cela ne fonctionne pas pour vous.",
"conf_colors_blackborder_intro": "Évitez les barres noires où qu'elles se trouvent. Chaque mode utilise un algorithme de détection spécifique pour des situations particulières. Augmentez le seuil en cas de problème.",
"conf_colors_color_intro": "Créer un ou plusieurs profils de calibration, ajuster chaque couleur, luminosité, linéarité et plus.",
"conf_colors_smoothing_intro": "Le fondu aplatit les changements de couleur/luminosité pour réduire les distractions gênantes.",
"conf_colors_smoothing_intro": "Le fondu limite les changements de couleur/luminosité pour réduire l'effet de transition.",
"conf_effect_bgeff_intro": "Définissez un effet/couleur d'arrière-plan, qui est affiché lorsqu'Hyperion sera \"inactif\". Commence toujours par une priorité de canal de 255",
"conf_effect_fgeff_intro": "Définissez un effet ou une couleur de démarrage et sa durée, il sera utilisé lors du démarrage d'Hyperion.",
"conf_effect_path_intro": "Chargement des effets depuis l'emplacement défini. Vous pouvez également désactiver un simple effet par nom pour les cacher des autres effets de la liste.",
"conf_effect_path_intro": "Chargement des effets depuis les emplacements définis. Vous pouvez également désactiver des effets par leur nom.",
"conf_general_createInst_btn": "Créer une instance",
"conf_general_impexp_expbtn": "Exporter",
"conf_general_impexp_impbtn": "Importer",
@ -27,23 +30,36 @@
"conf_general_impexp_l2": "Exporter une configuration en cliquant sur \"Exporter\". Votre navigateur démarrera le téléchargement.",
"conf_general_impexp_title": "Importer/Exporter la configuration",
"conf_general_inst_actionhead": "Action",
"conf_general_inst_delreq_h": "Supprimer l'instance de LED",
"conf_general_inst_delreq_t": "Êtes-vous sur de vouloir supprimer l'instance \"$1\" ? Tous les réglages seront perdus.",
"conf_general_inst_desc": "Utilisez différentes instances de LED simultanément. Chaque instance s'exécute indépendamment permettant différentes dispositons et calibrations. Les instances en cours d'exécution sont disponibles",
"conf_general_inst_name_title": "Nouveau nom d'instance",
"conf_general_inst_namehead": "Nom d'instance",
"conf_general_inst_renreq_t": "Entrez un nouveau nom pour votre configuration dans la champ ci-dessous.",
"conf_general_inst_title": "Gestion des instances de LED",
"conf_general_intro": "Configuration basique pour Hyperion et WebUI ne rentrant dans aucune autre catégorie.",
"conf_general_label_title": "Réglages généraux",
"conf_grabber_fg_intro": "La capture de plate-forme est votre système local, capturée comme source d'entrée.",
"conf_grabber_fg_intro": "La capture d'écran correspond à l'image affichée par l'appareil sur lequel est installé Hyperion.",
"conf_grabber_v4l_intro": "La capture USB utilise un périphérique de capture connecté en USB au système pour obtenir la source d'images à traiter.",
"conf_helptable_expl": "Explication",
"conf_helptable_option": "Option",
"conf_leds_config_error": "Erreur dans la configuration de la disposition",
"conf_leds_config_warning": "Verifiez la configuration de la disposition des LEDs",
"conf_leds_contr_label_contrtype": "Type de contrôleur : ",
"conf_leds_device_intro": "Hyperion prend en charge de nombreux contrôleurs pour transmettre des données à votre appareil cible. Sélectionnez un contrôleur LED dans la liste triée et configurez-le. Nous avons choisi les meilleurs paramètres par défaut pour chaque appareil.",
"conf_leds_error_get_properties_title": "Propriétés du périphérique",
"conf_leds_layout_advanced": "Réglages avancés",
"conf_leds_layout_blacklist_num_title": "Nombre de LEDs",
"conf_leds_layout_blacklist_rule_title": "Règle de liste noire",
"conf_leds_layout_blacklist_rules_title": "Règles de liste noire",
"conf_leds_layout_blacklist_start_title": "Démarrer LED",
"conf_leds_layout_btn_checklist": "Afficher la checklist",
"conf_leds_layout_button_savelay": "Sauvegarder la disposition",
"conf_leds_layout_button_updsim": "Mettre à jour la prévisualisation",
"conf_leds_layout_checkp1": "La LED noire est votre première led, la première led est le point d'entrée du signal de données.",
"conf_leds_layout_checkp2": "La disposition est toujours celle visible par la face avant de votre TV, jamais par l'arrière.",
"conf_leds_layout_checkp3": "Assurez-vous que la direction est correcte. Les LED grises indiquent les LED numéro 2 et 3 pour aider à visualiser la direction des données",
"conf_leds_layout_checkp1": "La LED noire est votre première LED, la première LED est le point d'entrée du signal de données.",
"conf_leds_layout_checkp2": "La disposition est toujours celle visible par l'avant de votre TV, jamais par l'arrière.",
"conf_leds_layout_checkp3": "Assurez-vous que la direction est correcte. Les LED grises indiquent les LED 2 et 3 pour aider à visualiser la direction des données.",
"conf_leds_layout_checkp4": "Écart : Pour créer un écart, ne le prenez pas en compte lors que vous définissez le nombre de LED en Haut/Bas/Gauche/Droite. Vous indiquerez la longueur de l'écart après coup, afin de supprimer un certain nombre de LED. Modifier la position de l'écart jusqu'à obtenir l'effet désiré.",
"conf_leds_layout_cl_bottom": "Bas",
"conf_leds_layout_cl_bottomleft": "Bas gauche (Coin)",
"conf_leds_layout_cl_bottomright": "Bas droit (Coin)",
@ -52,13 +68,13 @@
"conf_leds_layout_cl_gaglength": "Taille de l'écart",
"conf_leds_layout_cl_gappos": "Position de l'écart",
"conf_leds_layout_cl_hleddepth": "Profondeur LED horizontale",
"conf_leds_layout_cl_inppos": "Position de l'entrée",
"conf_leds_layout_cl_inppos": "Position de départ",
"conf_leds_layout_cl_left": "Gauche",
"conf_leds_layout_cl_leftbottom": "Gauche 50%-100% Bas",
"conf_leds_layout_cl_leftmiddle": "Gauche 25%-75% Milieu",
"conf_leds_layout_cl_lefttop": "Gauche 0%-50% Haut",
"conf_leds_layout_cl_overlap": "Chevauchement",
"conf_leds_layout_cl_reversdir": "Direction inverse",
"conf_leds_layout_cl_reversdir": "Inverser le sens",
"conf_leds_layout_cl_right": "Droite",
"conf_leds_layout_cl_rightbottom": "Droite 50%-100% Bas",
"conf_leds_layout_cl_rightmiddle": "Droite 25%-75% Milieu",
@ -69,8 +85,9 @@
"conf_leds_layout_cl_vleddepth": "Profondeur LED verticale",
"conf_leds_layout_frame": "Disposition classique (Cadre LED)",
"conf_leds_layout_generatedconf": "Configuration générée/courante des LED",
"conf_leds_layout_intro": "Vous avez également besoin d'une disposition de LED qui reflète vos positions de LED. La disposition classique est un cadre de télévision, mais nous prenons également en charge la création de matrice à LED (murs à LED). La vue est toujours par rapport à l'avant de votre TV.",
"conf_leds_layout_intro": "Vous avez également besoin d'une disposition de LED qui reflète la position de vos LED. La disposition classique correspond à une télévision, mais nous prenons également en charge la création de matrice de LED (murs de LED). La vue est toujours par rapport à l'avant de votre TV.",
"conf_leds_layout_ma_cabling": "Câblage",
"conf_leds_layout_ma_direction": "Direction",
"conf_leds_layout_ma_horiz": "Horizontal",
"conf_leds_layout_ma_optbottomleft": "Bas Gauche",
"conf_leds_layout_ma_optbottomright": "Bas Droit",
@ -79,43 +96,53 @@
"conf_leds_layout_ma_optsnake": "Serpent",
"conf_leds_layout_ma_opttopleft": "Haut Gauche",
"conf_leds_layout_ma_opttopright": "Haut Droit",
"conf_leds_layout_ma_optvert": "Vertiacal",
"conf_leds_layout_ma_optvert": "Vertical",
"conf_leds_layout_ma_order": "Ordre",
"conf_leds_layout_ma_position": "Entrée",
"conf_leds_layout_ma_vert": "Vertical",
"conf_leds_layout_matrix": "Disposition en matrice (Mur LED)",
"conf_leds_layout_pbl": "Point en bas à gauche",
"conf_leds_layout_pbr": "Point en bas à droite",
"conf_leds_layout_peview": "Prévisualisation de la disposition des LED",
"conf_leds_layout_preview_l1": "Ceci est votre première LED (position de l'entrée)",
"conf_leds_layout_preview_l2": "Ceci vous permet de visualiser le sens de direction des LED (deuxième et troisième LED)",
"conf_leds_layout_preview_ledpower": "Consommation totale des LED : $1 A",
"conf_leds_layout_preview_l1": "Ceci est votre première LED (position de départ)",
"conf_leds_layout_preview_l2": "Ceci vous permet de visualiser le sens de direction des LED (deuxième/troisième LED)",
"conf_leds_layout_preview_ledpower": "Consommation max. des LED : $1 A",
"conf_leds_layout_preview_originCL": "Créé à partir : Disposition classique (Cadre LED)",
"conf_leds_layout_preview_originMA": "Crée à partir : Disposition en matrice (Mur LED)",
"conf_leds_layout_preview_originTEXT": "Crée à partir : Champ texte",
"conf_leds_layout_preview_totalleds": "Nombre total de LED : $1",
"conf_leds_layout_textf1": "Ce champ montre (par défaut) votre disposition actuellement chargée et sera écrasée si vous en générez une nouvelle avec les options ci-dessus. Optionnel vous pourrez y apporter des modifications dans le futur.",
"conf_leds_layout_ptl": "Point en haut à gauche",
"conf_leds_layout_ptlh": "Horizontale",
"conf_leds_layout_ptlv": "Verticale",
"conf_leds_layout_ptr": "Point en haut à droite",
"conf_leds_layout_textf1": "Ce champ montre (par défaut) votre disposition actuellement chargée et sera écrasée si vous en générez une nouvelle avec les options ci-dessus. Vous pourrez également y apporter des modifications par la suite.",
"conf_leds_nav_label_ledcontroller": "Contrôleur LED",
"conf_leds_nav_label_ledlayout": "Disposition des LED",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_debug": "Debogage",
"conf_leds_optgroup_network": "Réseau",
"conf_leds_optgroup_other": "Autre",
"conf_leds_optgroup_usb": "USB/Série",
"conf_logging_btn_autoscroll": "Défilement automatique",
"conf_logging_btn_clipboard": "Copier le journal dans le presse papier",
"conf_logging_btn_pbupload": "Télécharger un rapport pour des demandes au support",
"conf_logging_contpolicy": "Signaler la politique de confidentialité",
"conf_logging_contpolicy": "la politique de confidentialité des rapports",
"conf_logging_label_intro": "Zone pour vérifier les messages du journal, plus ou moins d'informations seront affichées en fonction du niveau de journalisation réglé.",
"conf_logging_lastreports": "Rapports précédents",
"conf_logging_nomessage": "Pas de message disponible dans le journal.",
"conf_logging_report": "Rapport",
"conf_logging_uplfailed": "Échec du téléchargement ! Veuillez vérifier votre connexion Internet !",
"conf_logging_uploading": "Préparation des données...",
"conf_logging_uplpolicy": "En cliquant sur ce bouton vous acceptez le",
"conf_logging_yourlink": "Lier à votre rapport",
"conf_logging_uplpolicy": "En cliquant sur ce bouton vous acceptez",
"conf_logging_yourlink": "Lien de votre rapport",
"conf_network_bobl_intro": "Le port pour Boblight",
"conf_network_createToken_btn": "Créer un token",
"conf_network_fbs_intro": "Le port pour Google Fltbuffers, utilisé pour la transmission rapide des images",
"conf_network_forw_intro": "Transférer toutes les entrées vers une seconde instance d'Hyperion qui peut être contrôlée par un autre contrôleur LED.",
"conf_network_fbs_intro": "Le port pour Google Flatbuffers, utilisé pour la transmission rapide des images.",
"conf_network_forw_intro": "Transférer toutes les entrées vers une seconde instance d'Hyperion qui peut utiliser un autre contrôleur LED.",
"conf_network_json_intro": "Le port JSON-RPC de toutes les instances d'Hyperion utilisé pour le contrôle à distance.",
"conf_network_net_intro": "Réglages réseau globaux",
"conf_network_proto_intro": "Le port pour PROTO de toutes les instances d'Hyperion, utilisé pour les flux d'images (HyperionScreenCap, Extensions Kodi, Android Hyperion Grabber, ...)",
"conf_network_tok_cidhead": "Description",
"conf_network_tok_comment_title": "Description du token",
@ -127,7 +154,7 @@
"dashboard_active_instance": "Instance sélectionnée",
"dashboard_alert_message_confedit": "Votre configuration d'Hyperion a été modifiée. Redémarrer Hyperion pour l'appliquer.",
"dashboard_alert_message_confedit_t": "Configuration modifiée",
"dashboard_alert_message_confsave_success": "Votre configuration d'Hyperion a correctement été sauvegardée. Vos modifications sont maintenant actives.",
"dashboard_alert_message_confsave_success": "Votre configuration d'Hyperion a été sauvegardée. Vos modifications sont maintenant actives.",
"dashboard_alert_message_confsave_success_t": "Configuration sauvegardée",
"dashboard_alert_message_disabled": "Cette instance est actuellement désactivée ! Pour l'utiliser à nouveau, activez-la dans le tableau de bord.",
"dashboard_alert_message_disabled_t": "Instance matérielle LED désactivée",
@ -141,6 +168,7 @@
"dashboard_infobox_label_latesthyp": "Dernière version d'Hyperion : ",
"dashboard_infobox_label_platform": "Plateforme",
"dashboard_infobox_label_ports": "Ports",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_smartacc": "Accès simplifié",
"dashboard_infobox_label_statush": "Statut d'Hyperion : ",
"dashboard_infobox_label_title": "Information",
@ -148,16 +176,23 @@
"dashboard_infobox_message_updatesuccess": "Vous utilisez la dernière version d'Hyperion.",
"dashboard_infobox_message_updatewarning": "Une nouvelle version d'Hyperion est disponible ! ($1)",
"dashboard_label_intro": "Ce dashboard vous donne une vue rapide sur l'état d'Hyperion.",
"dashboard_message_default_password": "La WebUI utilise le mot de passe par défaut. Nous recommandons de le modifier.",
"dashboard_message_default_password_t": "Utilisation du mot de passe par défaut pour la WebUI",
"dashboard_message_do_not_show_again": "Ne plus afficher ce message",
"dashboard_message_global_setting": "Les réglages sur cette page sont indépendantes des instances. Tout changement sera global a toutes les instances.",
"dashboard_message_global_setting_t": "Réglage global",
"dashboard_newsbox_label_title": "Hyperion - Blog",
"dashboard_newsbox_noconn": "Impossible d'accéder au blog d'Hyperion. Votre connexion internet fonctionne-t-elle ?",
"dashboard_newsbox_readmore": "Lire plus",
"dashboard_newsbox_visitblog": "Visiter le Blog d'Hyperion",
"edt_append_degree": "°",
"edt_append_frames": "images",
"edt_append_hz": "Hz",
"edt_append_leds": "Leds",
"edt_append_leds": "LED",
"edt_append_ms": "ms",
"edt_append_percent": "%",
"edt_append_percent_h": "% hori",
"edt_append_percent_v": "% vert",
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/degré",
@ -165,10 +200,12 @@
"edt_conf_bb_blurRemoveCnt_title": "Pixel flou",
"edt_conf_bb_borderFrameCnt_expl": "Nombre d'images avant la définition d'une bordure détectée cohérente",
"edt_conf_bb_borderFrameCnt_title": "Bordure d'image",
"edt_conf_bb_heading_title": "Détection de barres noires",
"edt_conf_bb_maxInconsistentCnt_expl": "Nombre d'images incohérentes ignorée avant qu'une nouvelle bordure n'ait une chance de prouver la cohérence.",
"edt_conf_bb_maxInconsistentCnt_title": "Image incohérente",
"edt_conf_bb_mode_expl": "Algorithme de traitement. (voir Wiki)",
"edt_conf_bb_mode_title": "Mode",
"edt_conf_bb_threshold_expl": "Si la détection ne marche pas, augmentez le seuil pour tendre vers un noir \"grisâtre\"",
"edt_conf_bb_threshold_title": "Seuil",
"edt_conf_bb_unknownFrameCnt_expl": "Nombre de images sans aucune détection avant que la bordure soit paramétrer à 0.",
"edt_conf_bb_unknownFrameCnt_title": "image inconnu",
@ -182,12 +219,14 @@
"edt_conf_color_black_title": "Noir",
"edt_conf_color_blue_expl": "La valeur bleue calibrée.",
"edt_conf_color_blue_title": "Bleu",
"edt_conf_color_brightnessComp_expl": "Compense les différences de luminosité entre rouge vert bleu, cyan magenta jaune et blanc. 100 signifie compensation maximale, 0 pour aucune compensation.",
"edt_conf_color_brightnessComp_title": "Compensation de luminosité",
"edt_conf_color_brightnessGain_title": "Gain de luminosité",
"edt_conf_color_brightness_expl": "Paramétrer la luminosité générale des leds.",
"edt_conf_color_brightness_title": "Luminosité",
"edt_conf_color_channelAdjustment_header_expl": "Créer des profils de couleurs qui pourrait être attribués à un composant. Ajustez la couleur, le gamma, la luminosité, la compensation et plus.",
"edt_conf_color_channelAdjustment_header_itemtitle": "Profil",
"edt_conf_color_channelAdjustment_header_title": "Ajustement du canal de couleur ",
"edt_conf_color_channelAdjustment_header_title": "Ajustement du canal de couleur",
"edt_conf_color_cyan_expl": "La valeur cyan calibrée.",
"edt_conf_color_cyan_title": "Cyan",
"edt_conf_color_gammaBlue_expl": "Le gamma du bleu. 1.0 est neutre. Plus de 1.0 diminue le bleu, moins que 1.0 ajoute du bleu.",
@ -209,6 +248,7 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "La valeur rouge calibrée.",
"edt_conf_color_red_title": "Rouge",
"edt_conf_color_saturationGain_expl": "Ajuste la saturation des couleurs. 1.0 signifie aucune changement, au dessus de 1.0 augmente la saturation, en dessous de 1.0 la diminue.",
"edt_conf_color_white_expl": "La valeur blanche calibrée.",
"edt_conf_color_white_title": "Blanc",
"edt_conf_color_yellow_expl": "La valeur jaune calibrée.",
@ -220,39 +260,55 @@
"edt_conf_effp_paths_expl": "Vous pouvez définir des dossiers contenant des effets supplémentaires. Le configurateur d'effets sera enregistré par défaut dans le premier dossier.",
"edt_conf_effp_paths_itemtitle": "Chemin",
"edt_conf_effp_paths_title": "Chemin(s) d'effets",
"edt_conf_enum_BOTH": "Horizontale & Verticale",
"edt_conf_enum_HORIZONTAL": "Horizontale",
"edt_conf_enum_NO_CHANGE": "Auto",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Verticale",
"edt_conf_enum_automatic": "Automatique",
"edt_conf_enum_bbclassic": "Classique",
"edt_conf_enum_bbdefault": "Defaut",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_bottom_up": "De bas en haut",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_color": "Couleur",
"edt_conf_enum_custom": "Personnalisation",
"edt_conf_enum_dl_error": "Erreur",
"edt_conf_enum_dl_nodebug": "Pas de Debug",
"edt_conf_enum_dl_statechange": "Changement d'état",
"edt_conf_enum_effect": "effet",
"edt_conf_enum_dl_verbose": "Verbeux",
"edt_conf_enum_effect": "Effet",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_left_right": "De la gauche vers la droite",
"edt_conf_enum_linear": "Linéaire",
"edt_conf_enum_logdebug": "Débug",
"edt_conf_enum_logsilent": "Silencieux",
"edt_conf_enum_logverbose": "Verbeux",
"edt_conf_enum_logwarn": "Avertissement",
"edt_conf_enum_multicolor_mean": "Multicolor",
"edt_conf_enum_please_select": "Veuillez sélectionner",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
"edt_conf_enum_right_left": "De la droite vers la gauche",
"edt_conf_enum_top_down": "De haut en bas",
"edt_conf_enum_unicolor_mean": "Unicolore",
"edt_conf_fbs_heading_title": "Serveur Flatbuffers",
"edt_conf_fbs_timeout_expl": "Si aucune donnée n'est reçue dans la période de temps donnée, le composant sera désactivé.",
"edt_conf_fbs_timeout_title": "Temps écoulé",
"edt_conf_fg_display_expl": "Sélectionnez l'écran à capturer (dans le cas d'un multi-écran)",
"edt_conf_fg_display_title": "Écran",
"edt_conf_fg_frequency_Hz_title": "Fréquence de capture",
"edt_conf_fg_heading_title": "Platform de capture",
"edt_conf_fg_height_expl": "Réduit l'image à la hauteur définie, une image brute nécessite une grande puissance de calcul.",
"edt_conf_fg_height_title": "Hauteur",
"edt_conf_fg_pixelDecimation_title": "Décimation de l'image",
"edt_conf_fg_type_expl": "Type de capture d'écran, 'auto' par défaut",
"edt_conf_fg_type_title": "Type",
"edt_conf_fg_width_expl": "Réduit l'image à la largeur définie, une image brute nécessite une grande puissance de calcul.",
"edt_conf_fg_width_title": "Largeur",
"edt_conf_fge_color_expl": "Si le type est défini sur \"Couleur\", choisissez la couleur à afficher.",
"edt_conf_fge_color_title": "Couleur",
@ -263,37 +319,57 @@
"edt_conf_fge_heading_title": "Effet/Couleur de démarrage",
"edt_conf_fge_type_expl": "Choisissez parmi une couleur ou un effet.",
"edt_conf_fge_type_title": "Type",
"edt_conf_fw_flat_itemtitle": "cible du flatbuffer",
"edt_conf_fw_heading_title": "Transitaire",
"edt_conf_fw_json_expl": "Une cible json par ligne. Contient IP: PORT (ex : 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Cible json",
"edt_conf_fw_json_title": "Liste des clients json",
"edt_conf_fw_service_name_expl": "Nom du fournisseur de service",
"edt_conf_fw_service_name_title": "Nom du service",
"edt_conf_gen_configVersion_title": "Version de configuration",
"edt_conf_gen_heading_title": "Réglages générals",
"edt_conf_gen_name_expl": "Un nom défini par l'utilisateur qui est utilisé pour identifier Hyperion. (Utile si vous disposez de plusieurs instances Hyperion)",
"edt_conf_gen_name_title": "Nom de la configuration",
"edt_conf_gen_showOptHelp_expl": "Afficher toutes les explications disponible dans cette section. Très recommandé pour les débutants !",
"edt_conf_gen_showOptHelp_title": "Afficher les explications",
"edt_conf_gen_watchedVersionBranch_title": "Branche surveillée :",
"edt_conf_gen_watchedVersionBranch_expl": "Selectionne quelle version de branche doit être utilisée pour trouver des nouvelles versions d'Hyperion",
"edt_conf_gen_watchedVersionBranch_title": "Branche surveillée",
"edt_conf_general_enable_expl": "Si coché, le composant est actif.",
"edt_conf_general_enable_title": "Activer",
"edt_conf_general_port_expl": "Le port utilisé.",
"edt_conf_general_port_title": "Port",
"edt_conf_general_priority_expl": "Priorité de ce composant",
"edt_conf_general_priority_title": "Canal de priorité",
"edt_conf_grabber_discovered_none": "Aucun périphérique de capture trouvé",
"edt_conf_grabber_discovered_title": "Périphérique trouvé",
"edt_conf_grabber_discovered_title_info": "Sélectionner votre périphérique de capture trouvé",
"edt_conf_grabber_discovery_inprogress": "Découverte en cours",
"edt_conf_instC_screen_grabber_device_expl": "Le périphérique de capture d'écran utilisé.",
"edt_conf_instC_screen_grabber_device_title": "Périphérique de capture d'écran",
"edt_conf_instC_systemEnable_expl": "Active la capture d'écran pour cette configuration de LED",
"edt_conf_instC_systemEnable_title": "Activer la capture d'écran",
"edt_conf_instC_v4lEnable_expl": "Active la capture USB pour cette configuration de LED",
"edt_conf_instC_v4lEnable_title": "Activer la capture USB",
"edt_conf_instC_video_grabber_device_title": "Périphérique de capture vidéo",
"edt_conf_instCapture_heading_title": "Appareils de capture",
"edt_conf_js_heading_title": "Serveur JSON",
"edt_conf_log_heading_title": "Connexion",
"edt_conf_log_level_expl": "Vous verrez plus ou moins d'information selon le niveau de log que vous avez défini.",
"edt_conf_log_level_title": "Niveau de log",
"edt_conf_net_apiAuth_title": "Authentification API",
"edt_conf_net_apiAuth_title": "Authentification de l'API",
"edt_conf_net_heading_title": "Réseau",
"edt_conf_net_ipWhitelist_title": "Liste blanche d'adresse IP",
"edt_conf_net_ipWhitelist_expl": "Vous pouvez mettre les IP en liste blanche au lieu d'autoriser toutes les connexions depuis internet à l'API/interface web",
"edt_conf_net_ipWhitelist_title": "Liste blanche d'adresses IP",
"edt_conf_net_ip_itemtitle": "IP",
"edt_conf_net_localApiAuth_title": "Authentification de l'API locale",
"edt_conf_net_restirctedInternetAccessAPI_title": "Limité aux IP",
"edt_conf_pbs_heading_title": "Serveur Protocol Buffers",
"edt_conf_pbs_timeout_expl": "Si aucune donnée n'est reçue dans la période de temps donnée, le composant sera désactivé.",
"edt_conf_pbs_timeout_title": "Temps écoulé",
"edt_conf_smooth_continuousOutput_expl": "Mettez à jour les leds mais si l'image n'a pas changé.",
"edt_conf_smooth_continuousOutput_title": "Sortie continue",
"edt_conf_smooth_heading_title": "Lissage",
"edt_conf_smooth_time_ms_expl": "Combien de temps le lissage doit-il récupérer des images ?",
"edt_conf_smooth_time_ms_title": "Temps",
"edt_conf_smooth_type_expl": "Type de lissage.",
"edt_conf_smooth_type_title": "Type",
@ -301,6 +377,7 @@
"edt_conf_smooth_updateDelay_title": "Changer le retard",
"edt_conf_smooth_updateFrequency_expl": "Le vitesse de sortie pour le contrôleur led.",
"edt_conf_smooth_updateFrequency_title": "Charger la fréquence",
"edt_conf_v4l2_blueSignalThreshold_expl": "Assombrie les valeurs bleues faibles (reconnues comme noires)",
"edt_conf_v4l2_blueSignalThreshold_title": "Seuil de signal bleu",
"edt_conf_v4l2_cropBottom_expl": "Le nombre de pixel sur le bas qui sont retirés de l'image.",
"edt_conf_v4l2_cropBottom_title": "Rognagne bas",
@ -312,20 +389,50 @@
"edt_conf_v4l2_cropTop_title": "Rognage haut",
"edt_conf_v4l2_device_expl": "Le chemin d'accès à l'interface de capture d'image USB. Mettre en 'Automatique' pour la détection automatique. Exemple : '/dev/video0'",
"edt_conf_v4l2_device_title": "Appareil",
"edt_conf_v4l2_encoding_title": "Format d'encodage",
"edt_conf_v4l2_flip_expl": "Cela permet de retourner l'image horizontalement, verticalement ou les deux.",
"edt_conf_v4l2_flip_title": "Retourner Image",
"edt_conf_v4l2_fpsSoftwareDecimation_title": "Saut d'images logiciel",
"edt_conf_v4l2_framerate_expl": "Nombre d'images par secondes supporté par le périphérique actif",
"edt_conf_v4l2_framerate_title": "Images par seconde",
"edt_conf_v4l2_greenSignalThreshold_expl": "Assombrie les valeurs vertes faibles (reconnues comme noires)",
"edt_conf_v4l2_greenSignalThreshold_title": "Seuil de signal vert",
"edt_conf_v4l2_hardware_brightness_expl": "Définie la luminosité matérielle",
"edt_conf_v4l2_hardware_brightness_title": "Contrôle matériel de la luminosité",
"edt_conf_v4l2_hardware_contrast_expl": "Définie le contraste matériel",
"edt_conf_v4l2_hardware_contrast_title": "Contrôle le contraste matériel",
"edt_conf_v4l2_hardware_hue_expl": "Définie le hue matériel",
"edt_conf_v4l2_hardware_hue_title": "Contrôle matériel de la teinte",
"edt_conf_v4l2_hardware_saturation_expl": "Définie la saturation matérielle",
"edt_conf_v4l2_hardware_saturation_title": "Contrôle la saturation matériel",
"edt_conf_v4l2_heading_title": "Capture USB",
"edt_conf_v4l2_input_title": "Entrée",
"edt_conf_v4l2_redSignalThreshold_expl": "Assombrie les valeurs rouges faibles (reconnues comme noires)",
"edt_conf_v4l2_redSignalThreshold_title": "Seuil de signal rouge",
"edt_conf_v4l2_resolution_expl": "Liste des résolutions supportées pour le périphérique actif",
"edt_conf_v4l2_resolution_title": "Résolution de l'appareil",
"edt_conf_v4l2_sDHOffsetMax_expl": "Zone horizontale maximale pour la détection de signal (0.0 - 1.0)",
"edt_conf_v4l2_sDHOffsetMax_title": "Détection de signal Hmax",
"edt_conf_v4l2_sDHOffsetMin_expl": "Zone horizontale minimale pour la détection de signal (0.0 - 1.0)",
"edt_conf_v4l2_sDHOffsetMin_title": "Détection de signal HMin",
"edt_conf_v4l2_sDVOffsetMax_expl": "Zone verticale maximale pour la détection de signal (0.0 - 1.0)",
"edt_conf_v4l2_sDVOffsetMax_title": "Détection de signal VMax",
"edt_conf_v4l2_sDVOffsetMin_expl": "Zone verticale minimale pour la détection de signal (0.0 - 1.0)",
"edt_conf_v4l2_sDVOffsetMin_title": "Détection de signal VMin",
"edt_conf_v4l2_signalDetection_expl": "Si activé, la capture USB sera temporairement désactivé lorsque aucun signal n'est détecté. Cela correspond à une perte d'image inférieure au seuil pendant au moins 4 secondes.",
"edt_conf_v4l2_signalDetection_title": "Détection du signal",
"edt_conf_v4l2_sizeDecimation_expl": "Le rapport de taille de la décimation. 1 signifie aucune décimation (conserve la taille originale)",
"edt_conf_v4l2_sizeDecimation_title": "Taille de la décimation",
"edt_conf_v4l2_standard_expl": "Sélectionner le standard vidéo de votre région. 'Automatique' garde les valeurs choisie par l'interface v4l2.",
"edt_conf_v4l2_standard_title": "Standart Vidéo",
"edt_conf_webc_crtPath_expl": "Chemin vers le certificat (doit être au format PEM)",
"edt_conf_webc_crtPath_title": "Chemin du certificat",
"edt_conf_webc_docroot_expl": "Chemin racine local des interfaces web (uniquement pour le développement de WebUI)",
"edt_conf_webc_docroot_title": "Document racine",
"edt_conf_webc_heading_title": "Configuration web",
"edt_conf_webc_keyPassPhrase_expl": "Optionnel : La clé peut être protégée par un mot de passe",
"edt_conf_webc_keyPassPhrase_title": "Mot de passe de clé",
"edt_conf_webc_keyPath_expl": "Chemin vers la clé (doit être au format PEM, chiffrée avec RSA)",
"edt_conf_webc_keyPath_title": "Chemin de clé privée",
"edt_conf_webc_sslport_expl": "Port HTTPS du serveur web",
"edt_conf_webc_sslport_title": "Port HTTPS",
@ -334,30 +441,44 @@
"edt_dev_enum_sub_min_warm_adjust": "Soustraire le blanc chaud",
"edt_dev_enum_subtract_minimum": "Soustraire le minimum",
"edt_dev_enum_white_off": "Blanc cassé",
"edt_dev_general_colorOrder_title": "Ordre des octets RVB",
"edt_dev_general_hardwareLedCount_title": "Nombre de Leds physiques",
"edt_dev_general_autostart_title": "Démarrage automatique",
"edt_dev_general_autostart_title_info": "Allumage du périphérique LED durant le démarrage ou non",
"edt_dev_general_colorOrder_title": "Ordre des octets RGB",
"edt_dev_general_enableAttemptsInterval_title": "Intervalle de relance",
"edt_dev_general_enableAttemptsInterval_title_info": "Intervalle entre deux tentatives de connexions.",
"edt_dev_general_enableAttempts_title": "Tentatives de connexion",
"edt_dev_general_enableAttempts_title_info": "Nombre de tentatives de connexion au périphérique avant d'être en erreur.",
"edt_dev_general_hardwareLedCount_title": "Nombre de LED physiques",
"edt_dev_general_hardwareLedCount_title_info": "Nombre de LEDs physique pour le périphérique sélectionné",
"edt_dev_general_heading_title": "Réglages générals",
"edt_dev_general_name_title": "Nom de la configuration",
"edt_dev_general_rewriteTime_title": "Temps de rafraichissement",
"edt_dev_spec_FCledToOn_title": "Les Led fade candy sont allumées",
"edt_dev_spec_FCmanualControl_title": "Contrôle manuel des led fade candy",
"edt_dev_spec_FCsetConfig_title": "Paramétrer fade candy",
"edt_dev_spec_FCledToOn_title": "Les LED fadecandy sont allumées",
"edt_dev_spec_FCmanualControl_title": "Contrôle manuel des LED fadecandy",
"edt_dev_spec_FCsetConfig_title": "Paramétrer fadecandy",
"edt_dev_spec_LBap102Mode_title": "LightBerry APA102 Mode",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_baudrate_title": "Baudrate",
"edt_dev_spec_baudrate_title": "Vitesse de transmission",
"edt_dev_spec_brightnessFactor_title": "Facteur de luminosité",
"edt_dev_spec_brightnessMax_title": "Luminosité maximum",
"edt_dev_spec_brightnessMin_title": "Luminosité mininum",
"edt_dev_spec_brightnessMax_title": "Luminosité maximale",
"edt_dev_spec_brightnessMin_title": "Luminosité minimale",
"edt_dev_spec_brightnessOverwrite_title": "Ecraser luminosité",
"edt_dev_spec_brightness_title": "Luminosité",
"edt_dev_spec_candyGamma_title": "Mode 'bougie' (double correction gamma)",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Clé client",
"edt_dev_spec_colorComponent_title": "Composant de coulour",
"edt_dev_spec_debugLevel_title": "Niveau de debogage",
"edt_dev_spec_delayAfterConnect_title": "Retard après connexion",
"edt_dev_spec_devices_discovered_none": "Aucun périphérique trouvé",
"edt_dev_spec_devices_discovered_title": "Périphériques trouvés",
"edt_dev_spec_dithering_title": "Distribution",
"edt_dev_spec_dmaNumber_title": "Canal DMA",
"edt_dev_spec_gamma_title": "Gamma",
"edt_dev_spec_gpioBcm_title": "Pin GPIO",
"edt_dev_spec_gpioMap_title": "Correspondance GPIO",
"edt_dev_spec_gpioNumber_title": "Numéro GPIO",
"edt_dev_spec_groupId_title": "ID de groupe",
"edt_dev_spec_header_title": "Configuration spécifique",
"edt_dev_spec_interpolation_title": "Interpolation",
"edt_dev_spec_intervall_title": "Interval",
@ -366,7 +487,7 @@
"edt_dev_spec_ledIndex_title": "Index de led",
"edt_dev_spec_ledType_title": "Type de LED",
"edt_dev_spec_lightid_itemtitle": "ID",
"edt_dev_spec_lightid_title": "ID(s) Lumière",
"edt_dev_spec_lightid_title": "ID(s) des lumières",
"edt_dev_spec_lights_itemtitle": "Lumière",
"edt_dev_spec_lights_name": "Nom",
"edt_dev_spec_lights_title": "Lumière(s)",
@ -379,10 +500,16 @@
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_dev_spec_outputPath_title": "Chemin de sortie",
"edt_dev_spec_panelorganisation_title": "Panneau de séquence de numérotation",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Port de service [1-65535]",
"edt_dev_spec_port_title": "Port",
"edt_dev_spec_printTimeStamp_title": "Ajouter un horodatage",
"edt_dev_spec_pwmChannel_title": "Canal PWM",
"edt_dev_spec_restoreOriginalState_title": "Restaurer l'état des lumières",
"edt_dev_spec_serial_title": "Numéro de série",
"edt_dev_spec_spipath_title": "chemin SPI",
"edt_dev_spec_spipath_title": "Chemin SPI",
"edt_dev_spec_stream_protocol_title": "Protocole de diffusion",
"edt_dev_spec_switchOffOnBlack_title": "Éteindre avec le noir",
"edt_dev_spec_targetIpHost_title": "IP/nom d'hôte cible",
"edt_dev_spec_targetIp_title": "IP cible",
@ -393,11 +520,17 @@
"edt_dev_spec_useOrbSmoothing_title": "Utiliser le lissage orb",
"edt_dev_spec_useRgbwProtocol_title": "Utiliser le protocole RGBW",
"edt_dev_spec_username_title": "Nom d'utilisateur",
"edt_dev_spec_verbose_title": "Tracer toutes les commandes Hue",
"edt_dev_spec_vid_title": "VID",
"edt_dev_spec_whiteLedAlgor_title": "Algorithme LED Blanche",
"edt_dev_spec_whitepoint_title": "Point blanc",
"edt_eff_alarmcolor": "Couleur d'alarme",
"edt_eff_backgroundColor": "Couleur d'arrière plan",
"edt_eff_basecolorchange": "Couleur de base",
"edt_eff_basecolorchangerate": "Taux du changement de couleur",
"edt_eff_basecolorrangeleft": "Plage inférieur du CC",
"edt_eff_basecolorrangeright": "Plage supérieur du CC",
"edt_eff_blobcount": "Nombre de gouttes",
"edt_eff_brightness": "Luminosité",
"edt_eff_candle_header": "Bougies",
"edt_eff_candle_header_desc": "Bougies chatoyantes",
@ -407,6 +540,7 @@
"edt_eff_colorHour": "Couleur des heures",
"edt_eff_colorMarker": "Couleur de marqueur",
"edt_eff_colorMinute": "Couleur des minutes",
"edt_eff_colorcount": "longueur de couleur",
"edt_eff_colorend": "Couleur de fin",
"edt_eff_colorendtime": "Temps de maintien de la couleur de début",
"edt_eff_colorevel": "Niveau de couleur",
@ -419,24 +553,34 @@
"edt_eff_count": "Nombre",
"edt_eff_countries": "Pays",
"edt_eff_customColor": "Couleur personnalisée",
"edt_eff_enableSecondSwirl": "Deuxième tourbillon",
"edt_eff_enum_all": "Tous",
"edt_eff_enum_all-together": "Tous ensemble",
"edt_eff_enum_list": "List des LED",
"edt_eff_enum_list": "Liste des LED",
"edt_eff_fade_header": "Fondu",
"edt_eff_fade_header_desc": "Fondu de couleurs",
"edt_eff_fadefactor": "Multiplicateur du fondu",
"edt_eff_fadeintime": "Temps de fondu d'entrée",
"edt_eff_fadeouttime": "Temps de fondu de sortie",
"edt_eff_flag_header": "Drapeaux",
"edt_eff_flag_header_desc": "Vos LED arboreront les couleurs de votre pays. Vous pouvez définir plusieurs drapeaux qui s'alterneront en fonction de l'intervalle défini.",
"edt_eff_fps": "images par secondes",
"edt_eff_frequency": "Fréquence",
"edt_eff_gif_header": "GIF",
"edt_eff_gif_header_desc": "Cet effet lit des fichiers .gif, fournit une simple boucle vidéo comme effet.",
"edt_eff_grayscale": "Niveaux de gris",
"edt_eff_height": "Hauteur",
"edt_eff_huechange": "Changement de couleur",
"edt_eff_image": "Image",
"edt_eff_image_source": "Image source",
"edt_eff_image_source_file": "Fichier local",
"edt_eff_image_source_url": "URL",
"edt_eff_interval": "Intervalle",
"edt_eff_knightrider_header": "Chevalier",
"edt_eff_knightrider_header_desc": "K.I.T.T est de retour ! Le scanner avant de la voiture, cette fois pas seulement en rouge.",
"edt_eff_ledlist": "List de led",
"edt_eff_ledlist": "Liste de LED",
"edt_eff_ledtest_header": "Test LED",
"edt_eff_ledtest_header_desc": "sortie tournante: rouge, verte, blanche, noire",
"edt_eff_length": "Longueur",
"edt_eff_lightclock_header": "Horloge lumineuse",
"edt_eff_maintain_end_color": "Garder la couleur de fin",
@ -446,8 +590,13 @@
"edt_eff_markerWidth": "Largeur de marqueur",
"edt_eff_max_len": "Longueur maximale",
"edt_eff_min_len": "Longueur minimale",
"edt_eff_moodblobs_header": "Gouttes relaxantes",
"edt_eff_moodblobs_header_desc": "Détendez vous le soir avec des gouttes se déplaçant lentement et changeant de couleurs.",
"edt_eff_offset": "Décalage",
"edt_eff_pacman_header": "Pac-Man",
"edt_eff_pacman_header_desc": "Petit, affamé et jaune. Qui survivra ?",
"edt_eff_plasma_header": "Plasma",
"edt_eff_plasma_header_desc": "Distortion coloriphique dans les différentes directions",
"edt_eff_police_header": "Police",
"edt_eff_police_header_desc": "Gyrophare de police",
"edt_eff_rainbowmood_header": "Arc-en-ciel",
@ -457,9 +606,11 @@
"edt_eff_random_header_desc": "Pixel point, point, point",
"edt_eff_repeat": "Répéter",
"edt_eff_repeatcount": "Nombre de répétitions",
"edt_eff_reverseRandomTime": "Inverser chaque",
"edt_eff_reversedirection": "Direction inverse",
"edt_eff_rotationtime": "Temps de rotation",
"edt_eff_saturation": "Saturation",
"edt_eff_showseconds": "Afficher les secondes",
"edt_eff_sleeptime": "Temps de sommeil",
"edt_eff_smooth_custom": "Activer le lissage",
"edt_eff_smooth_time_ms": "Temps de lissage",
@ -470,14 +621,17 @@
"edt_eff_sparks_header_desc": "Étoile pétillante, Choisissez entre une couleur statique ou aléatoire. Vous pouvez également régler la luminosité, la saturation et la vitesse.",
"edt_eff_speed": "Vitesse",
"edt_eff_swirl_header": "Tourbillon de couleur",
"edt_eff_swirl_header_desc": "Un tourbillon de couleurs personnalisées. Les couleurs sont réparties équitablement à 360°, le dégradé de couleur est automatiquement calculé. Vous pouvez également ajouter un deuxième tourbillon, il faudra cependant définir une transparence ! Conseil : l'utilisation de la même couleur permet d'obtenir une plus \"grande\" zone et réduit le dégradé.",
"edt_eff_systemshutdown_header": "Arrêt système",
"edt_eff_systemshutdown_header_desc": "Une courte animation imitant un arrêt système",
"edt_eff_traces_header": "Trace de couleur",
"edt_eff_traces_header_desc": "Nécessite une refonte",
"edt_eff_trails_header": "Étoiles tombantes",
"edt_eff_trails_header_desc": "Étoiles colorées qui tombent de haut en bas",
"edt_eff_url": "Adresse de l'image",
"edt_eff_waves_header": "Vagues",
"edt_eff_waves_header_desc": "Vagues de couleurs ! Choisissez vos couleurs, le temps de rotation, la direction inverse et plus.",
"edt_eff_whichleds": "Quelles LED",
"edt_eff_whitelevel": "Niveau de blanc",
"edt_eff_x-mas_header": "Noël",
"edt_eff_x-mas_header_desc": "Touches de Noël",
@ -486,7 +640,7 @@
"edt_msg_button_delete_all": "Tout",
"edt_msg_button_delete_all_title": "Supprimer tout",
"edt_msg_button_delete_last": "Dernier $1",
"edt_msg_button_delete_last_title": "Supprimer dernier $1",
"edt_msg_button_delete_last_title": "Supprimer le dernier $1",
"edt_msg_button_delete_row_title": "Supprimer $1",
"edt_msg_button_delete_row_title_short": "Supprimer",
"edt_msg_button_expand": "Agrandir",
@ -536,6 +690,8 @@
"general_btn_cancel": "Annuler",
"general_btn_continue": "Continuer",
"general_btn_delete": "Supprimer",
"general_btn_denyAccess": "Révoquer l'accès",
"general_btn_grantAccess": "Donner l'accès",
"general_btn_iswitch": "Basculer",
"general_btn_next": "Suivant",
"general_btn_off": "Off",
@ -545,10 +701,12 @@
"general_btn_restarthyperion": "Redémarrer Hyperion",
"general_btn_save": "Sauvegarder",
"general_btn_saveandreload": "Sauvegarder et recharger",
"general_btn_saverestart": "Enregistrer et redémarrer",
"general_btn_start": "Démarrer",
"general_btn_stop": "Arrêter",
"general_btn_yes": "Oui",
"general_button_savesettings": "Sauvegarder les réglages",
"general_chars_needed": "Plus de caractères nécessaire",
"general_col_blue": "bleu",
"general_col_green": "vert",
"general_col_red": "rouge",
@ -556,34 +714,45 @@
"general_comp_BOBLIGHTSERVER": "Serveur Boblight",
"general_comp_FLATBUFSERVER": "Serveur Flatbuffers",
"general_comp_FORWARDER": "Transfert",
"general_comp_GRABBER": "Platforme de capture",
"general_comp_GRABBER": "Capture d'écran",
"general_comp_LEDDEVICE": "Périphérique LED",
"general_comp_PROTOSERVER": "Serveur Protocolbuffers",
"general_comp_PROTOSERVER": "Serveur Protocol Buffers",
"general_comp_SMOOTHING": "Fondu",
"general_comp_V4L": "Capture USB",
"general_country_cn": "Chine",
"general_country_de": "Allemagne",
"general_country_es": "Espagne",
"general_country_fr": "France",
"general_country_it": "Italie",
"general_country_nl": "Hollande",
"general_country_nl": "Pays-Bas",
"general_country_ru": "Russie",
"general_country_uk": "Royaume-Uni",
"general_country_us": "États-Unis",
"general_disabled": "désactivé",
"general_enabled": "activé",
"general_speech_cs": "Tchèque",
"general_speech_da": "Danois",
"general_speech_de": "Allemand",
"general_speech_en": "Anglais",
"general_speech_es": "Espagnol",
"general_speech_fr": "Français",
"general_speech_hu": "Hongrois",
"general_speech_it": "Italien",
"general_speech_ja": "Japonais",
"general_speech_nb": "Norvégien(Bokmål)",
"general_speech_nl": "Néerlandais",
"general_speech_pl": "Polonais",
"general_speech_pt": "Portuguais",
"general_speech_ro": "Roumain",
"general_speech_ru": "Russe",
"general_speech_sv": "Suédois",
"general_speech_vi": "Vietnamien",
"general_speech_zh-CN": "Chinois (simplifié)",
"general_webui_title": "Hyperion - Configuration web",
"general_wiki_moreto": "Plus d'informations à propos de \"$1\" sont disponible sur notre Wiki",
"infoDialog_checklist_title": "Checklist !",
"infoDialog_effconf_created_text": "L'effet \"$1\" a été correctement créé !",
"infoDialog_effconf_deleted_text": "L'effet \"$1\" a été correctement supprimé !",
"infoDialog_effconf_created_text": "L'effet \"$1\" a été créé !",
"infoDialog_effconf_deleted_text": "L'effet \"$1\" a été supprimé !",
"infoDialog_general_error_title": "Erreur",
"infoDialog_general_success_title": "Succès",
"infoDialog_general_warning_title": "Avertissement",
@ -592,7 +761,11 @@
"infoDialog_import_confirm_title": "Confirmation d'importation",
"infoDialog_import_hyperror_text": "Le fichier de configuration \"$1\" ne peut pas être importé. Il n'est pas compatible avec Hyperion 2.0 ou supérieur !",
"infoDialog_import_jsonerror_text": "Le fichier de configuration sélectionné \"$1\" n'est pas un fichier .json ou est corrompu. Message d'erreur : ($2)",
"infoDialog_wizrgb_text": "L'ordre des octets RVB est déjà correctement défini.",
"infoDialog_password_current_text": "Mot de passe actuel",
"infoDialog_password_minimum_length": "le mot de passe doit faire 8 caractères au minimum. ",
"infoDialog_password_new_text": "Nouveau mot de passe",
"infoDialog_username_text": "Nom d'utilisateur",
"infoDialog_wizrgb_text": "L'ordre des octets RGB est déjà correctement défini.",
"infoDialog_writeconf_error_text": "Echec de sauvegarde de votre configuration.",
"infoDialog_writeimage_error_text": "Le fichier sélectionné \"$1\" n'est pas une image ou est corrompu ! Veuillez sélectionner une autre image.",
"info_404": "La page demandée n'est pas disponible !",
@ -605,23 +778,24 @@
"info_conlost_label_reload": "Arrêt de la reconnexion automatique - dépassement de limite, rafraîchissez la page ou cliquez ici.",
"info_conlost_label_title": "Connexion au service Hyperion perdue !",
"info_restart_contus": "Si vous êtes ici depuis plus de 20 secondes et vous ne savez pas pourquoi, ouvrez un nouveau sujet dans le forum du support SVP...",
"info_restart_contusa": "... détaillant les dernières étapes à franchir. Merci !",
"info_restart_contusa": "... détaillant les manipulations effectuées. Merci !",
"info_restart_rightback": "Hyperion sera de retour rapidement !",
"info_restart_title": "Redémarrage en cours...",
"main_ledsim_btn_togglelednumber": "Nombre de LED",
"main_ledsim_btn_toggleleds": "Montrer les LEDs",
"main_ledsim_btn_toggleleds": "Montrer les LED",
"main_ledsim_btn_togglelivevideo": "Vidéo temps réel",
"main_ledsim_text": "Visualisation en temps réel des couleurs des LED et optionnellement, le flux vidéo actuel issu du périphérique de capture",
"main_ledsim_title": "Visualisation LED",
"main_menu_about_token": "À propos d'Hyperion",
"main_menu_colors_conf_token": "Traitement d'image",
"main_menu_configuration_token": "Configuration",
"main_menu_configuration_token": "Configurations LED",
"main_menu_dashboard_token": "Tableau de bord",
"main_menu_effect_conf_token": "Effets",
"main_menu_effectsconfigurator_token": "Configurateur d'effets",
"main_menu_general_conf_token": "Général",
"main_menu_grabber_conf_token": "Capture matérielle",
"main_menu_input_selection_token": "Sélection de l'entrée",
"main_menu_instcapture_conf_token": "Sources",
"main_menu_leds_conf_token": "Matériel LED",
"main_menu_logging_token": "Journal",
"main_menu_network_conf_token": "Services réseaux",
@ -633,7 +807,7 @@
"remote_adjustment_intro": "Modifiez la couleur/la luminosité/la compensation durant l'exécution. $1",
"remote_adjustment_label": "Ajustement des couleurs",
"remote_color_button_reset": "Réinitialiser Couleur/Effet",
"remote_color_intro": "Définissez un effet ou une couleur. Vous propres effets sont également répertoriés (si disponibles). $1",
"remote_color_intro": "Définissez un effet ou une couleur. Vos propres effets sont également répertoriés (si disponibles). $1",
"remote_color_label": "Couleurs/Effets",
"remote_color_label_color": "Couleur : ",
"remote_components_intro": "Activer et désactiver les composants d'Hyperion pendant l'exécution. $1",
@ -642,7 +816,8 @@
"remote_effects_label_picture": "Image :",
"remote_input_clearall": "Effacer les effets/couleurs",
"remote_input_duration": "Durée : ",
"remote_input_ip": "IP: ",
"remote_input_intro": "Hyperion utilise un système de priorité pour choisir une source. Tout ce que vous définissez à une priorité (Effets/Couleurs/Capture d'écran/Capture USB et sources réseau). Par défaut, Hyperion choisit les sources en fonction de leur priorité (le nombre le plus bas représente la source active). Vous pouvez choisir une source manuellement. $1",
"remote_input_ip": "IP : ",
"remote_input_label": "Sélection de la source",
"remote_input_label_autoselect": "Sélection automatique",
"remote_input_origin": "Origine",
@ -652,11 +827,12 @@
"remote_input_sourceactiv_btn": "Source Active",
"remote_input_status": "Etat/Action",
"remote_losthint": "Note : Toutes les modifications seront perdues après redémarrage.",
"remote_maptype_intro": "Habituellement, la disposition des LED est responsable de la définition de la zone d'image affichée par les LED, vous pouvez la modifier ici.",
"remote_maptype_intro": "Habituellement, la disposition des LED définit quelle LED est en charge d'une partie de l'image. Vous pouvez la modifier ici : $1.",
"remote_maptype_label": "Type de correspondance",
"remote_maptype_label_multicolor_mean": "Multicolore",
"remote_maptype_label_unicolor_mean": "Unicolore",
"remote_optgroup_syseffets": "Effets fournis",
"remote_optgroup_templates_system": "Modèles Système",
"remote_optgroup_usreffets": "Effets utilisateur",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
@ -665,7 +841,7 @@
"remote_videoMode_label": "Mode vidéo",
"support_label_affinstr1": "Cliquez sur le lien associé à votre pays",
"support_label_affinstr2": "Peu importe la quantité achetée, cela nous permet de toucher une petite commission en fonction du montant total",
"support_label_affinstr3": "Vous payez TOUJOURS le même prix, il n'y a pas de différences. Essayez ! ",
"support_label_affinstr3": "Vous payez TOUJOURS le même prix, il n'y a pas de différences. Essayez !",
"support_label_btctext": "Adresse : ",
"support_label_donate": "Faites un don ou utilisez nos liens d'affiliation",
"support_label_donationpp": "Don : ",
@ -687,12 +863,14 @@
"support_label_yttext": "Lassé des images ? Découvrez notre chaîne YouTube !",
"update_button_changelog": "Changelog complet",
"update_button_install": "Installation",
"update_error_getting_versions": "Nous avons eu des problèmes pour déterminer la dernière version disponible.",
"update_error_getting_versions": "Nous n'avons pas pu déterminer la dernière version disponible.",
"update_label_description": "Description :",
"update_label_intro": "Présentation de toutes les versions d'Hyperion disponibles. De plus, vous pouvez mettre à jour ou rétrograder votre version d'Hyperion à tout moment. Trié du plus récent au plus ancien",
"update_label_type": "Type :",
"update_no_updates_for_branch": "Pas de mise à jour pour le canal sélectionné.",
"update_versreminder": "Votre version : $1",
"wiz_cc_adjustgamma": "Gamma : Vous devez ici ajuster le niveau de gamma de chaque canal afin d'obtenir le même niveau. Conseil : Neutre est égal à 1.0 ! Par exemple, si votre Gris est un peu rougeâtre, cela signifie que vous devez augmenter le gamma du rouge pour réduire son effet (plus le gamma est élevé, plus la couleur sera absente).",
"wiz_cc_adjustit": "Ajuster votre \"$1\" jusqu'à obtenir l'effet désiré. Attention : plus vous vous éloignez des valeur par défaut, plus la plage de couleur sera limité (s'applique aux couleurs intermédiaires). Les résultats peuvent variés en fonction de votre TV/plage de couleur de vos LED.",
"wiz_cc_btn_stop": "Arrêter la vidéo",
"wiz_cc_btn_switchpic": "Changer d'image",
"wiz_cc_chooseid": "Donner un nom à ce profil de couleurs.",
@ -702,43 +880,53 @@
"wiz_cc_kodidisconlink": "Télécharger les images des liens : ",
"wiz_cc_kodimsg_start": "Test validé - Il est temps de continuer !",
"wiz_cc_kodishould": "Kodi devrait montrer cette image : $1",
"wiz_cc_kwebs": "Serveur web Kodi (IP:Port)",
"wiz_cc_kwebs": "Serveur web Kodi (Nom d'hôte ou IP)",
"wiz_cc_lettvshow": "Afficher sur votre TV cette image : $1",
"wiz_cc_lettvshowm": "Vérifier avec ces images : $1",
"wiz_cc_link": "Cliquez moi !",
"wiz_cc_morethanone": "Vous avez plusieurs profils, sélectionnez le profil que vous souhaitez configurer.",
"wiz_cc_testintro": "Il est temps de faire un vrai test",
"wiz_cc_summary": "Le résumé de vos réglages. Lors de la lecture d'une vidéo, vous pouvez modifier ou tester les nouvelles valeurs. Si vous êtes satisfait du résultat, cliquez sur Sauvegarder.",
"wiz_cc_testintro": "Il est temps de faire un vrai test !",
"wiz_cc_testintrok": "Cliquer sur le bouton ci-dessous pour démarrer un test vidéo.",
"wiz_cc_testintrowok": "Consultez le lien suivant pour télécharger des vidéos de test : ",
"wiz_cc_title": "Assistant de calibration des couleurs",
"wiz_cc_try_connect": "Connexion en cours...",
"wiz_cololight_noprops": "Récupération des propriétés du périphérique impossible. Définissez manuellement le nombre de LED physiques",
"wiz_guideyou": "Le $1 vous guidera à travers les réglages. Cliquez sur le bouton !",
"wiz_hue_blinkblue": "Laissez ID $1 s'allumer en bleu",
"wiz_hue_clientkey": "Clé Client :",
"wiz_hue_create_user": "Créer un nouvel utilisateur",
"wiz_hue_desc1": "Il recherche automatiquement un Hue Bridge, au cas où il n'en trouverait pas, vous devez fournir l'adresse IP et appuyer sur le bouton actualiser à droite. Maintenant, vous avez besoin d'un ID utilisateur, si vous n'en avez pas, créez-en un nouveau.",
"wiz_hue_desc2": "Choisissez maintenant les lampes à ajouter. La position attribue la lampe à une position spécifique sur votre \"image\". Les lampes désactivées ne seront pas ajoutées. Pour identifier des lampes individuelles, appuyez sur le bouton à droite.",
"wiz_hue_e_create_user": "Créer un nouvel utilisateur et clé cliente",
"wiz_hue_e_desc2": "Choisissez votre groupe de divertissement, celui qui a toutes les lumières pour l'utiliser avec Hyperion",
"wiz_hue_e_noegrpids": "Aucun groupe de divertissement Hue défini",
"wiz_hue_e_nogrpids": "Ce pont Hue n'a aucun groupe défini, veuillez en créer au moins un au préalable avec l'application Hue",
"wiz_hue_e_use_group": "Utiliser Groupe",
"wiz_hue_e_use_groupid": "Utiliser groupe ID $1",
"wiz_hue_failure_connection": "Le délai a expiré : Appuyez sur le bouton du Bridge dans les 30 secondes.",
"wiz_hue_failure_ip": "Pas de Bridge trouvé, tapez une IP valide",
"wiz_hue_failure_user": "Utilisateur inconnu, créez un nouvel utilisateur en cliquant sur le bouton si dessous ou saisissez un identifiant valide et cliquez sur le symbole de rechargement",
"wiz_hue_intro1": "Cet assistant configure Hyperion pour le système Philips Hue. Les fonctionnalités sont la détection automatique de Hue Bridge, la création d'utilisateurs, réglage de chaque lumière à une position spécifique sur votre image ou sa déactivation et le réglage automatique des paramètres Hyperion ! Donc en bref: il vous suffit de quelques clics et vous avez terminé !",
"wiz_hue_ip": "IP Hue Bridge :",
"wiz_hue_ip": "IP Hue Bridge : ",
"wiz_hue_noids": "Ce pont Hue n'a pas d'ampoules/bandeau, veuillez les coupler avant avec les applications Hue",
"wiz_hue_press_link": "Appuyez sur le bouton de votre pont Philips Hue.",
"wiz_hue_searchb": "Recherche d'un pont Philips Hue...",
"wiz_hue_press_link": "Appuyez sur le bouton de votre Hue Bridge.",
"wiz_hue_searchb": "Recherche d'un pont...",
"wiz_hue_title": "Assistant de configuration Philips Hue",
"wiz_hue_username": "ID utilisateur : ",
"wiz_identify": "Identifié",
"wiz_identify_light": "Identifié $1",
"wiz_ids_disabled": "Désactivé",
"wiz_ids_entire": "Image entière",
"wiz_noLights": "Pas de $1 trouvé! Veuillez connecter les lumières au réseau ou configurez les manuellement.",
"wiz_pos": "Position/État",
"wiz_rgb_expl": "Le point coloré change de couleur (rouge, vert) toutes les x secondes, en même temps que vos LEDs passent à cette couleur. Répondez aux questions en bas pour vérifier/corriger votre ordre d'octets.",
"wiz_rgb_intro1": "Cet assistant vous guidera à travers le processus de recherche de l'ordre des couleurs correct pour vos leds. Cliquez sur continuer pour commencer.",
"wiz_rgb_intro2": "Quand avez-vous besoin de cet assistant? Exemple : vous définissez la couleur rouge, mais vous obtenez du vert ou du bleu. Vous pouvez également l'utiliser pour la première configuration.",
"wiz_rgb_q": "Quelle couleur affiche votre configuration, lorsque le point coloré ci-dessus s'affiche ...",
"wiz_rgb_q": "Quelle couleur affiche votre configuration, lorsque le point coloré ci-dessus est ...",
"wiz_rgb_qgend": "...vert ?",
"wiz_rgb_qrend": "...red ?",
"wiz_rgb_switchevery": "Changer de couleur tous les...",
"wiz_rgb_qrend": "...rouge ?",
"wiz_rgb_switchevery": "Changer de couleur toutes les...",
"wiz_rgb_title": "Assistant de configuration d'ordre des octets RVB",
"wiz_wizavail": "Assistant de configuration disponible",
"wiz_yeelight_unsupported": "Non supporté"

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,8 @@
"InfoDialog_changePassword_title": "Cambia Password",
"InfoDialog_iswitch_text": "Se esegui più di un Hyperion nella tua rete locale puoi passare tra configurazioni web. Seleziona l'istanza di Hyperion qui sotto e cambia!",
"InfoDialog_iswitch_title": "Cambia Hyperion",
"InfoDialog_nostorage_text": "Il tuo browser non supporta localStorage. Non è possibile salvare un'impostazione di lingua specifica (fallback su \"rilevamento automatico\") e livello di accesso (fallback su \"predefinito\"). Alcuni maghi potrebbero essere nascosti. Puoi ancora utilizzare l'interfaccia web senza ulteriori problemi",
"InfoDialog_nostorage_title": "Impossibile memorizzare le impostazioni",
"InfoDialog_nowrite_foottext": "WebUI sarà sbloccata automaticamente appena avrai risolto il problema!",
"InfoDialog_nowrite_text": "Hyperion non può scrivere sull'attuale file di configurazione caricato. Riparare i permessi del file per procedere",
"InfoDialog_nowrite_title": "errore dei permessi di scrittura!",
@ -40,14 +42,29 @@
"conf_general_intro": "Impostazioni base di Hyperion e WebUI che non rientrano in altre categorie.",
"conf_general_label_title": "Impostazioni generali",
"conf_grabber_fg_intro": "Cattura di sistema usa la cattura locale del sistema su cui è installato Hyperion come sorgente di input.",
"conf_grabber_inst_grabber_config_info": "Configura in anticipo i dispositivi hardware di acquisizione in modo che vengano utilizzati dall'istanza",
"conf_grabber_v4l_intro": "Cattura USB è un dispositivo (di cattura) connesso via USB usato come sorgente di immagini per l'elaborazione.",
"conf_helptable_expl": "Spiegazione",
"conf_helptable_option": "Opzioni",
"conf_leds_config_error": "Errore nella configurazione del layout LED/LED",
"conf_leds_config_warning": "Controlla la configurazione del layout LED/LED",
"conf_leds_contr_label_contrtype": "Tipo di Controller",
"conf_leds_device_info_log": "Nel caso in cui i tuoi LED non funzionino, controlla qui per gli errori:",
"conf_leds_device_intro": "Hyperion supporta molti controller per trasmettere dati al tuo dispositivo. Seleziona un controller LED dalla lista e configuralo. Abbiamo scelto le impostazioni di default migliori per ogni dispositivo.",
"conf_leds_error_get_properties_text": "Impossibile ottenere le proprietà del dispositivo. Si prega di controllare gli elementi di configurazione.",
"conf_leds_error_get_properties_title": "Proprietà del dispositivo",
"conf_leds_error_hwled_gt_layout": "Il conteggio dei LED hardware ($1) è maggiore dei LED configurati tramite layout ($2),<br>$3 {{plural:$3|LED|LED}} rimarranno neri se continui.",
"conf_leds_error_hwled_gt_maxled": "Il numero di LED hardware ($ 1) è superiore al numero massimo di LED supportati dal dispositivo ($ 2). <br> Il conteggio dei LED hardware è impostato su ($ 3)",
"conf_leds_error_hwled_lt_layout": "Il numero di LED hardware ($ 1) è inferiore ai LED configurati tramite layout ($ 2). <br> Il numero di LED configurati nel layout non deve superare i LED disponibili",
"conf_leds_info_ws281x": "Hyperion deve essere eseguito con privilegi di 'root' per questo tipo di controller!",
"conf_leds_layout_advanced": "Impostazioni Avanzate",
"conf_leds_layout_blacklist_num_title": "Numero di LEDs",
"conf_leds_layout_blacklist_rule_title": "Regole della lista nera",
"conf_leds_layout_blacklist_rules_title": "Regole delle liste nere",
"conf_leds_layout_blacklist_start_title": "LED Iniziale",
"conf_leds_layout_blacklistleds_title": "I LED della lista nera",
"conf_leds_layout_btn_checklist": "Mostra lista",
"conf_leds_layout_btn_keystone": "Correzione trapezoidale",
"conf_leds_layout_button_savelay": "Salva Layout",
"conf_leds_layout_button_updsim": "Aggiorna Anteprima",
"conf_leds_layout_checkp1": "Il led nero è il tuo primo led, il primo led è il punto in cui c'è l'input del segnale dati",
@ -67,6 +84,16 @@
"conf_leds_layout_cl_leftbottom": "Sinistra 0% - 100% Sotto",
"conf_leds_layout_cl_leftmiddle": "Sinistra 0% - 75% Centro",
"conf_leds_layout_cl_lefttop": "Sinistra 0% - 50% Sopra",
"conf_leds_layout_cl_lightPosBottomLeft11": "In basso: 75 - 100% da sinistra",
"conf_leds_layout_cl_lightPosBottomLeft112": "In basso: 0 - 50% da sinistra",
"conf_leds_layout_cl_lightPosBottomLeft12": "In basso: 25 - 50% da sinistra",
"conf_leds_layout_cl_lightPosBottomLeft121": "In basso: 50 - 100% da sinistra",
"conf_leds_layout_cl_lightPosBottomLeft14": "In basso: 0 - 25% da sinistra",
"conf_leds_layout_cl_lightPosBottomLeft34": "In basso: 50 - 75% da sinistra",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "In basso: 25 - 75% da sinistra",
"conf_leds_layout_cl_lightPosTopLeft112": "In alto: 0 - 50% da sinistra",
"conf_leds_layout_cl_lightPosTopLeft121": "In alto: 50 - 100% da sinistra",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "In alto: 25 - 75% da sinistra",
"conf_leds_layout_cl_overlap": "Overlap",
"conf_leds_layout_cl_reversdir": "Inverti direzione",
"conf_leds_layout_cl_right": "Destra",
@ -81,6 +108,7 @@
"conf_leds_layout_generatedconf": "Configurazione LED Generata/Attuale",
"conf_leds_layout_intro": "è necessario anche un layout dei led che rifletta la disposizione dei tuoi led. Il layout classico è il comune bordo della tv, ma supportiamo anche la creazione di matrici led (parete led). La visuale sul layout è SEMPRE DI FRONTE alla TV.",
"conf_leds_layout_ma_cabling": "Cablaggio",
"conf_leds_layout_ma_direction": "Direzione",
"conf_leds_layout_ma_horiz": "Orizzontale",
"conf_leds_layout_ma_optbottomleft": "Basso a sinistra",
"conf_leds_layout_ma_optbottomright": "Basso a destra",
@ -112,17 +140,21 @@
"conf_leds_layout_textf1": "Questo campo testo mostra di default il layout attualmente caricato e viene sovrascritto se ne generi uno nuovo con le opzioni sopra. Se vuoi puoi fare ulteriori modifiche.",
"conf_leds_nav_label_ledcontroller": "Controller LED",
"conf_leds_nav_label_ledlayout": "Layout LED",
"conf_leds_note_layout_overwrite": "Nota: Overwrite crea un layout predefinito per {{plural:$1| un LED| tutti i LED $1}} dati dal conteggio dei LED hardware",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_debug": "Debug",
"conf_leds_optgroup_network": "Rete",
"conf_leds_optgroup_other": "Altro",
"conf_leds_optgroup_usb": "USB/Seriale",
"conf_logging_btn_autoscroll": "Auto scrolling",
"conf_logging_btn_clipboard": "Copia nel registro Appunti",
"conf_logging_btn_pbupload": "Invia segnalazione per richieste di supporto",
"conf_logging_contpolicy": "Policy per la Privacy delle segnalazioni",
"conf_logging_label_intro": "Area per controllare i messaggi di log, a seconda dell'impostazione di loglevel vedrai più o meno informazioni.",
"conf_logging_lastreports": "Segnalazioni precedenti",
"conf_logging_logoutput": "Log output",
"conf_logging_nomessage": "Nessun messaggio di log disponibile.",
"conf_logging_report": "Segnala",
"conf_logging_uplfailed": "Upload fallito! Controlla la tua connessione a internet!",
@ -163,7 +195,12 @@
"dashboard_infobox_label_instance": "Istanza:",
"dashboard_infobox_label_latesthyp": "L'ultima versione di Hyperion:",
"dashboard_infobox_label_platform": "Piattaforma:",
"dashboard_infobox_label_port_boblight": "Server Boblight:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "JSON-Server:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
"dashboard_infobox_label_ports": "Porte",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_smartacc": "Accesso Smart",
"dashboard_infobox_label_statush": "Status Hyperion:",
"dashboard_infobox_label_title": "Informazioni",
@ -181,6 +218,7 @@
"dashboard_newsbox_readmore": "Leggi ancora",
"dashboard_newsbox_visitblog": "Visita Hyperion-Blog",
"edt_append_degree": "°",
"edt_append_frames": "frames",
"edt_append_hz": "Hz",
"edt_append_leds": "LEDs",
"edt_append_ms": "ms",
@ -216,6 +254,8 @@
"edt_conf_color_blue_title": "Blu",
"edt_conf_color_brightnessComp_expl": "Compensa la differenza di luminosità tra rosso verde blu, ciano magneta giallo e bianco. 100 significa massima compensazione, 0 nessuna compensazione",
"edt_conf_color_brightnessComp_title": "Compensazione luminosità",
"edt_conf_color_brightnessGain_expl": "Regola la luminosità dei colori. 1.0 significa nessun cambiamento, oltre 1.0 aumenta la luminosità, sotto 1.0 diminuisce la luminosità",
"edt_conf_color_brightnessGain_title": "Intensità della luminosità",
"edt_conf_color_brightness_expl": "Imposta la luminosità complessiva dei leds",
"edt_conf_color_brightness_title": "Luminosità",
"edt_conf_color_channelAdjustment_header_expl": "Crea profilo di colore che può essere assegnato a un componente specifico. Regola colore, gamma, luminosità, compensazione e altro.",
@ -242,6 +282,8 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "Il valore calibrato del rosso.",
"edt_conf_color_red_title": "Rosso",
"edt_conf_color_saturationGain_expl": "Regola la saturazione dei colori. 1.0 significa nessun cambiamento, oltre 1.0 aumenta la saturazione, sotto 1.0 desatura.",
"edt_conf_color_saturationGain_title": "Intensità della saturazione",
"edt_conf_color_white_expl": "Il valore calibrato del bianco.",
"edt_conf_color_white_title": "Bianco",
"edt_conf_color_yellow_expl": "Il valore calibrato del giallo.",
@ -253,10 +295,13 @@
"edt_conf_effp_paths_expl": "Puoi definire altre cartelle che contengono effetti aggiuntivi. Il configuratore di effetti salva sempre all'interno della prima cartella.",
"edt_conf_effp_paths_itemtitle": "Percorso",
"edt_conf_effp_paths_title": "Percorso Effetti",
"edt_conf_enum_BOTH": "Orizzontale e Verticale",
"edt_conf_enum_HORIZONTAL": "Orizzontale",
"edt_conf_enum_NO_CHANGE": "Auto",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Verticale",
"edt_conf_enum_automatic": "Automatico",
"edt_conf_enum_bbclassic": "Classico",
"edt_conf_enum_bbdefault": "Default",
@ -287,12 +332,15 @@
"edt_conf_enum_logverbose": "Verboso",
"edt_conf_enum_logwarn": "Avvertimento",
"edt_conf_enum_multicolor_mean": "Multicolore",
"edt_conf_enum_please_select": "Seleziona",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
"edt_conf_enum_right_left": "Da destra a sinistra",
"edt_conf_enum_top_down": "Dall'alto verso il basso",
"edt_conf_enum_transeffect_smooth": "Dolce",
"edt_conf_enum_transeffect_sudden": "Repentina",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Monocromatico",
"edt_conf_fbs_heading_title": "Server Flatbuffers",
"edt_conf_fbs_timeout_expl": "Se nessuna informazione viene ricevuta per un dato periodo, il componente verrà disabilitato (soft).",
@ -321,11 +369,19 @@
"edt_conf_fge_type_title": "Tipo",
"edt_conf_fw_flat_expl": "Una destinazione flatbuffer per riga. Contiene IP:PORTA:(Esempio: 127.0.0.1:19401)",
"edt_conf_fw_flat_itemtitle": "Destinatario flatbuffer",
"edt_conf_fw_flat_services_discovered_expl": "Obiettivi flatbuffer scoperti",
"edt_conf_fw_flat_services_discovered_title": "Obiettivi flatbuffer scoperti",
"edt_conf_fw_flat_title": "Lista dei client flatbuffer",
"edt_conf_fw_heading_title": "Forwarder",
"edt_conf_fw_json_expl": "Una destinazione json per riga. Contiene IP:PORTA:(Esempio: 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Destinatario json",
"edt_conf_fw_json_services_discovered_expl": "Server Hyperion scoperti che forniscono servizi JSON-API",
"edt_conf_fw_json_services_discovered_title": "Target JSON rilevati",
"edt_conf_fw_json_title": "Lista dei client json",
"edt_conf_fw_remote_service_discovered_none": "Nessun servizio remoto rilevato",
"edt_conf_fw_service_name_expl": "Nome del fornitore di servizi",
"edt_conf_fw_service_name_title": "Nome di Servizio",
"edt_conf_gen_configVersion_title": "Versione di configurazione",
"edt_conf_gen_heading_title": "impostazioni Generali",
"edt_conf_gen_name_expl": "Un nome definito dall'utente che viene utilizzato per riconoscere Hyperion. (Utile con più di un'istanza di Hyperion)",
"edt_conf_gen_name_title": "Nome configurazione",
@ -339,10 +395,19 @@
"edt_conf_general_port_title": "Porta",
"edt_conf_general_priority_expl": "Priorità di questo componente",
"edt_conf_general_priority_title": "Priorità canale.",
"edt_conf_grabber_discovered_expl": "Seleziona il tuo dispositivo di acquisizione scoperto",
"edt_conf_grabber_discovered_none": "Nessun dispositivo di acquisizione rilevato",
"edt_conf_grabber_discovered_title": "Dispositivo scoperto",
"edt_conf_grabber_discovered_title_info": "Seleziona il tuo dispositivo di acquisizione scoperto",
"edt_conf_grabber_discovery_inprogress": "ricerca in corso",
"edt_conf_instC_screen_grabber_device_expl": "l dispositivo di cattura dello schermo utilizzato",
"edt_conf_instC_screen_grabber_device_title": "Dispositivo di cattura dello schermo",
"edt_conf_instC_systemEnable_expl": "Abilita la cattura della piattaforma per questa istanza di hardware led",
"edt_conf_instC_systemEnable_title": "Abilita cattura piattaforma",
"edt_conf_instC_v4lEnable_expl": "Abilita la cattura USB per questa istanza di hardware led",
"edt_conf_instC_v4lEnable_title": "Abilita cattura USB",
"edt_conf_instC_video_grabber_device_expl": "Il dispositivo di acquisizione video utilizzato",
"edt_conf_instC_video_grabber_device_title": "Dispositivo di acquisizione video",
"edt_conf_instCapture_heading_title": "Cattura Istanza",
"edt_conf_js_heading_title": "Server JSON",
"edt_conf_log_heading_title": "Logging",
@ -374,8 +439,6 @@
"edt_conf_smooth_heading_title": "Sfumatura",
"edt_conf_smooth_interpolationRate_expl": "Velocità di calcolo dei regolari frame intermedi",
"edt_conf_smooth_interpolationRate_title": "Tasso di interpolazione",
"edt_conf_smooth_outputRate_expl": "Velocità di uscita al tuo controller LED.",
"edt_conf_smooth_outputRate_title": "Velocità di uscita",
"edt_conf_smooth_time_ms_expl": "Quanto a lungo la sfumatura dovrebbe raggiungere le immagini?",
"edt_conf_smooth_time_ms_title": "Durata",
"edt_conf_smooth_type_expl": "Tipo di sfumatura.",
@ -390,21 +453,41 @@
"edt_conf_v4l2_cecDetection_title": "Rilevamento CEC",
"edt_conf_v4l2_cropBottom_expl": "Numero di pixels in basso che vengono rimossi dall'immagine.",
"edt_conf_v4l2_cropBottom_title": "Ritaglia in basso",
"edt_conf_v4l2_cropHeightValidation_error": "Ritaglia in alto + Ritaglia in basso non può essere maggiore di Altezza ($ 1)",
"edt_conf_v4l2_cropLeft_expl": "Numero di pixels sulla sinistra che vengono rimossi dall'immagine.",
"edt_conf_v4l2_cropLeft_title": "Ritaglia sinistra",
"edt_conf_v4l2_cropRight_expl": "Numero di pixels sulla destra che vengono rimossi dall'immagine.",
"edt_conf_v4l2_cropRight_title": "Ritaglia destra",
"edt_conf_v4l2_cropTop_expl": "Numero di pixels in alto che vengono rimossi dall'immagine.",
"edt_conf_v4l2_cropTop_title": "Ritaglia in alto",
"edt_conf_v4l2_cropWidthValidation_error": "Ritaglia a sinistra + Ritaglia a destra non può essere maggiore di Larghezza ($1)",
"edt_conf_v4l2_device_expl": "Percorso del dispositivo di cattura USB. Imposta su 'Automatico' per riconoscimento automatico. Esempio: '/dev/video0'",
"edt_conf_v4l2_device_title": "Dispositivo",
"edt_conf_v4l2_encoding_expl": "Forza la codifica video per i grabber multiformato",
"edt_conf_v4l2_encoding_title": "Formato di codifica",
"edt_conf_v4l2_flip_expl": "Ciò consente di capovolgere l'immagine orizzontalmente, verticalmente o entrambi.",
"edt_conf_v4l2_flip_title": "Capovolgimento dell'immagine",
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "Per risparmiare risorse verrà elaborato solo ogni n-esimo frame. Per es. se il grabber è impostato a 30fps con questa opzione impostata a 5 il risultato finale sarà di circa 6fps",
"edt_conf_v4l2_fpsSoftwareDecimation_title": "Salto del frame del software",
"edt_conf_v4l2_framerate_expl": "Frame al secondo supportati per il dispositivo attivo",
"edt_conf_v4l2_framerate_title": "Frame al secondo",
"edt_conf_v4l2_greenSignalThreshold_expl": "Scurisce valori bassi di verde (riconosciuti come nero)",
"edt_conf_v4l2_greenSignalThreshold_title": "Soglia segnale verde",
"edt_conf_v4l2_hardware_brightness_expl": "Imposta la luminosità dell'hardware",
"edt_conf_v4l2_hardware_brightness_title": "Controllo hardware della luminosità",
"edt_conf_v4l2_hardware_contrast_expl": "Imposta il contrasto hardware",
"edt_conf_v4l2_hardware_contrast_title": "Controllo hardware del contrasto",
"edt_conf_v4l2_hardware_hue_expl": "Imposta la tonalità dell'hardware",
"edt_conf_v4l2_hardware_hue_title": "Controllo della tonalità hardware",
"edt_conf_v4l2_hardware_saturation_expl": "Imposta la saturazione hardware",
"edt_conf_v4l2_hardware_saturation_title": "Controllo della saturazione hardware",
"edt_conf_v4l2_hardware_set_defaults": "Controlli hardware predefiniti",
"edt_conf_v4l2_hardware_set_defaults_tip": "Imposta i valori predefiniti del dispositivo per luminosità, contrasto, tonalità e saturazione",
"edt_conf_v4l2_heading_title": "Cattura USB",
"edt_conf_v4l2_input_expl": "Seleziona l'input video per il tuo dispositivo. 'Automatico' mantiene il Valero scelto dall'interfaccia v4l2.",
"edt_conf_v4l2_input_title": "Input",
"edt_conf_v4l2_noSignalCounterThreshold_expl": "Conteggio dei fotogrammi (controllalo con l'attuale modalità FPS del grabber) dopo il quale viene attivato il segnale di assenza",
"edt_conf_v4l2_noSignalCounterThreshold_title": "Soglia del contatore di segnale",
"edt_conf_v4l2_redSignalThreshold_expl": "Scurisce valori bassi di rosso (riconosciuti come nero)",
"edt_conf_v4l2_redSignalThreshold_title": "Soglia segnale rosso",
"edt_conf_v4l2_resolution_expl": "Lista Risoluzioni supportate per il dispositivo attivo",
@ -435,12 +518,21 @@
"edt_conf_webc_sslport_expl": "Porta del webserver HTTPS",
"edt_conf_webc_sslport_title": "Porta HTTPS",
"edt_dev_auth_key_title": "Token di autenticazione",
"edt_dev_auth_key_title_info": "Token di autenticazione necessario per accedere al dispositivo",
"edt_dev_enum_sub_min_cool_adjust": "Regolazione freddo min",
"edt_dev_enum_sub_min_warm_adjust": "Regolazione calore min",
"edt_dev_enum_subtract_minimum": "Sottrai minimo",
"edt_dev_enum_white_off": "Bianco off",
"edt_dev_general_autostart_title": "avvio automatico",
"edt_dev_general_autostart_title_info": "Il dispositivo LED è acceso durante l'avvio oppure no",
"edt_dev_general_colorOrder_title": "Ordine byte RGB",
"edt_dev_general_colorOrder_title_info": "L'ordine dei colori del dispositivo",
"edt_dev_general_enableAttemptsInterval_title": "Intervallo tra tentativi",
"edt_dev_general_enableAttemptsInterval_title_info": "Intervallo tra due tentativi di connessione.",
"edt_dev_general_enableAttempts_title": "Tentativi di connessione",
"edt_dev_general_enableAttempts_title_info": "Numero di tentativi di connessione di un dispositivo prima che entri in uno stato di errore.",
"edt_dev_general_hardwareLedCount_title": "Numero di LED Hardware",
"edt_dev_general_hardwareLedCount_title_info": "Il numero di LED fisici disponibili per il dispositivo specificato",
"edt_dev_general_heading_title": "Impostazioni Generali",
"edt_dev_general_name_title": "Nome configurazione",
"edt_dev_general_rewriteTime_title": "Tempo di ricarica",
@ -449,21 +541,28 @@
"edt_dev_spec_FCsetConfig_title": "Imposta configurazione Fadecandy",
"edt_dev_spec_LBap102Mode_title": "Modalità LightBerry APA102",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_ada_mode_title": "Adalight - Standard",
"edt_dev_spec_awa_mode_title": "HyperSerial - Alta velocità",
"edt_dev_spec_baudrate_title": "Baudrate",
"edt_dev_spec_blackLightsTimeout_title": "Timeout rilevamento segnale su nero",
"edt_dev_spec_brightnessFactor_title": "Fattore luminosità",
"edt_dev_spec_brightnessMax_title": "Luminosità massima",
"edt_dev_spec_brightnessMin_title": "Luminosità minima",
"edt_dev_spec_brightnessMin_title": "Luminosità minima",
"edt_dev_spec_brightnessOverwrite_title": "Sovrascrivi luminosità",
"edt_dev_spec_brightnessThreshold_title": "Luminosità minima per rilevamento segnale",
"edt_dev_spec_brightness_title": "Luminosità",
"edt_dev_spec_candyGamma_title": "Modalità \"Candy\" (doppia correzione gamma)",
"edt_dev_spec_chanperfixture_title": "Canali per dispositivo",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Clientkey",
"edt_dev_spec_colorComponent_title": "Componente colore",
"edt_dev_spec_debugLevel_title": "Livello Debug",
"edt_dev_spec_debugStreamer_title": "Debug Streamer",
"edt_dev_spec_delayAfterConnect_title": "Ritardo dopo la connessione",
"edt_dev_spec_devices_discovered_none": "Nessun dispositivo rilevato",
"edt_dev_spec_devices_discovered_title": "Dispositivi trovato",
"edt_dev_spec_devices_discovered_title_info": "Seleziona il tuo dispositivo LED trovato",
"edt_dev_spec_devices_discovered_title_info_custom": "Seleziona il tuo dispositivo LED trovato o configurane uno personalizzato",
"edt_dev_spec_devices_discovery_inprogress": "Ricerca in corso",
"edt_dev_spec_dithering_title": "Dithering",
"edt_dev_spec_dmaNumber_title": "Canale DMA",
"edt_dev_spec_gamma_title": "Gamma",
@ -478,6 +577,7 @@
"edt_dev_spec_intervall_title": "Intervallo",
"edt_dev_spec_invert_title": "Inverti segnale",
"edt_dev_spec_latchtime_title": "Tempo di latch",
"edt_dev_spec_latchtime_title_info": "Il tempo di latch è l'intervallo di tempo richiesto da un dispositivo fino all'elaborazione del successivo aggiornamento. Durante tale periodo di tempo, tutti gli aggiornamenti effettuati vengono ignorati.",
"edt_dev_spec_ledIndex_title": "Indice LED",
"edt_dev_spec_ledType_title": "Tipo LED",
"edt_dev_spec_lightid_itemtitle": "ID",
@ -491,6 +591,8 @@
"edt_dev_spec_networkDeviceName_title": "Nome dispositivo di rete",
"edt_dev_spec_networkDevicePort_title": "Porta",
"edt_dev_spec_numberOfLeds_title": "Numero di LEDs",
"edt_dev_spec_onBlackTimeToPowerOff": "È ora di spegnere la lampada se viene attivato il livello di nero",
"edt_dev_spec_onBlackTimeToPowerOn": "È ora di accendere la lampada se il segnale viene ripristinato",
"edt_dev_spec_orbIds_title": "Orb ID",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
@ -498,18 +600,29 @@
"edt_dev_spec_panel_start_position": "Pannello d'inizio [0-max panels]",
"edt_dev_spec_panelorganisation_title": "Sequenza numerazione pannelli",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Porta di servizio [1-65535]",
"edt_dev_spec_port_title": "Porta",
"edt_dev_spec_printTimeStamp_title": "Aggiungi timestamp",
"edt_dev_spec_pwmChannel_title": "Canale PWM",
"edt_dev_spec_razer_device_title": "Dispositivo Razer Chroma",
"edt_dev_spec_restoreOriginalState_title": "Ripristina lo stato delle luci",
"edt_dev_spec_restoreOriginalState_title_info": "Ripristina lo stato originale del dispositivo quando il dispositivo è disabilitato",
"edt_dev_spec_rgbw_calibration_blue": "Aspetto del canale blu/bianco",
"edt_dev_spec_rgbw_calibration_enable": "Calibrazione del canale del bianco (solo RGBW)",
"edt_dev_spec_rgbw_calibration_green": "Aspetto canale verde/bianco",
"edt_dev_spec_rgbw_calibration_limit": "Limite canale bianco",
"edt_dev_spec_rgbw_calibration_red": "Aspetto del canale rosso/bianco",
"edt_dev_spec_serial_title": "Numero seriale",
"edt_dev_spec_spipath_title": "Percorso SPI",
"edt_dev_spec_sslHSTimeoutMax_title": "Timeout massimo handkshake streamer",
"edt_dev_spec_sslHSTimeoutMin_title": "Timeout minimo handkshake streamer",
"edt_dev_spec_sslReadTimeout_title": "Timeout lettura streamer",
"edt_dev_spec_stream_protocol_title": "Protocollo di streaming",
"edt_dev_spec_switchOffOnBlack_title": "Spegni o accendi il nero",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Spegni, sotto il minimo",
"edt_dev_spec_syncOverwrite_title": "Disabilita la sincronizzazione",
"edt_dev_spec_targetIpHost_expl": "Nome host (DNS/mDNS) o indirizzo IP (IPv4 o IPv6)",
"edt_dev_spec_targetIpHost_title": "IP di destinazione/nome host",
"edt_dev_spec_targetIpHost_title_info": "Il nome host o l'indirizzo IP del dispositivo",
"edt_dev_spec_targetIp_title": "IP di destinazione",
"edt_dev_spec_transeffect_title": "Effetto Transizione",
"edt_dev_spec_transistionTimeExtra_title": "Tempo extra di buio",
@ -573,9 +686,14 @@
"edt_eff_frequency": "Frequenza",
"edt_eff_gif_header": "GIF",
"edt_eff_gif_header_desc": "Questo effetto riproduce file .gif. Fornisci un semplice loop video come effetto.",
"edt_eff_grayscale": "Scala di grigi",
"edt_eff_height": "Altezza",
"edt_eff_huechange": "Cambiamento colore",
"edt_eff_image": "file immagine",
"edt_eff_image_source": "Fonte immagine",
"edt_eff_image_source_file": "File locale",
"edt_eff_image_source_url": "URL",
"edt_eff_initial_blink": "Flash per attirare l'attenzione",
"edt_eff_interval": "Intervallo",
"edt_eff_knightrider_header": "Supercar",
"edt_eff_knightrider_header_desc": "K.I.T.T. è tornato! Lo scanner frontale della nota automobile, questa volta non solo in rosso.",
@ -613,6 +731,7 @@
"edt_eff_reversedirection": "Inverti direzione",
"edt_eff_rotationtime": "Tempo di rotazione",
"edt_eff_saturation": "Saturazione",
"edt_eff_set_post_color": "Imposta il colore del post dopo l'allarme",
"edt_eff_showseconds": "Mostra secondi",
"edt_eff_sleeptime": "Tempo di riposo",
"edt_eff_smooth_custom": "Abilita sfumatura",
@ -631,6 +750,7 @@
"edt_eff_traces_header_desc": "Necessita redesign",
"edt_eff_trails_header": "Scie",
"edt_eff_trails_header_desc": "Stelle colorate che cadono dall'alto verso il basso",
"edt_eff_url": "Indirizzo dell'immagine",
"edt_eff_waves_header": "Onde",
"edt_eff_waves_header_desc": "Onde di colore! Scegli i colori, tempo di rotazione, direzione e altro.",
"edt_eff_whichleds": "Quali Leds",
@ -655,6 +775,10 @@
"edt_msg_error_disallow": "Il valore non deve essere di tipo $1",
"edt_msg_error_disallow_union": "Il valore non deve essere di uno dei tipi forniti non ammessi",
"edt_msg_error_enum": "Il valore deve essere uno tra quelli enumerati",
"edt_msg_error_hostname": "Il nome host ha il formato errato",
"edt_msg_error_invalid_epoch": "La data deve essere successiva al 1° gennaio 1970",
"edt_msg_error_ipv4": "Il valore deve essere un indirizzo IPv4 valido sotto forma di 4 numeri compresi tra 0 e 255, separati da punti",
"edt_msg_error_ipv6": "Il valore deve essere un indirizzo IPv6 valido",
"edt_msg_error_maxItems": "Il valore deve contenere al massimo $1 elementi",
"edt_msg_error_maxLength": "Il valore deve essere al massimo lungo $1 caratteri",
"edt_msg_error_maxProperties": "L'oggetto deve avere al massimo $1 proprietà",
@ -675,6 +799,8 @@
"edt_msg_error_type": "Il valore deve essere di tipo $1",
"edt_msg_error_type_union": "Il valore deve essere di uno dei tipi forniti",
"edt_msg_error_uniqueItems": "Il vettore deve contenere elementi diversi",
"edt_msgcust_error_hostname_ip": "Non è un nome host valido né IPv4 né IPv6",
"edt_msgcust_error_hostname_ip4": "Non è un nome host valido né IPv4",
"effectsconfigurator_button_conttest": "Test continuo",
"effectsconfigurator_button_deleffect": "Cancella Effetto",
"effectsconfigurator_button_editeffect": "Carica Effetto",
@ -686,7 +812,7 @@
"effectsconfigurator_label_effectname": "Nome Effetto",
"effectsconfigurator_label_intro": "Crea nuovi effetti calibrati a tuo piacimento a partire dagli effetti base. A seconda dell'effetto sono disponibili opzioni come colore, velocità, direzione e altri.",
"general_access_advanced": "Avanzate",
"general_access_default": "Default",
"general_access_default": "Predefinito",
"general_access_expert": "Esperto",
"general_btn_back": "Indietro",
"general_btn_cancel": "Annulla",
@ -699,6 +825,7 @@
"general_btn_off": "Off",
"general_btn_ok": "OK",
"general_btn_on": "On",
"general_btn_overwrite": "Sovrascrivi",
"general_btn_rename": "Rinomina",
"general_btn_restarthyperion": "Riavvia Hyperion",
"general_btn_save": "Salva",
@ -718,7 +845,7 @@
"general_comp_FORWARDER": "Forwarder",
"general_comp_GRABBER": "Cattura di Sistema",
"general_comp_LEDDEVICE": "Dispositivo LED",
"general_comp_PROTOSERVER": "Server Protocol Buffers",
"general_comp_PROTOSERVER": "Buffer del protocollo del server",
"general_comp_SMOOTHING": "Sfumatura",
"general_comp_V4L": "Cattura USB",
"general_country_cn": "Cina",
@ -730,14 +857,23 @@
"general_country_ru": "Russia",
"general_country_uk": "Regno Unito",
"general_country_us": "Stati Uniti",
"general_disabled": "disabilitato",
"general_enabled": "abilitato",
"general_speech_ca": "Catalano",
"general_speech_cs": "Czech",
"general_speech_da": "Danimarca",
"general_speech_de": "Tedesco",
"general_speech_el": "Greco",
"general_speech_en": "Inglese",
"general_speech_es": "Spagnolo",
"general_speech_fr": "Francese",
"general_speech_hu": "Ungheria",
"general_speech_it": "Italiano",
"general_speech_ja": "Giapponese",
"general_speech_nb": "Norvegese (Bokmål)",
"general_speech_nl": "Olandese",
"general_speech_pl": "Polacco",
"general_speech_pt": "Portoghese",
"general_speech_ro": "Rumeno",
"general_speech_ru": "Russo",
"general_speech_sv": "Svedese",
@ -757,6 +893,10 @@
"infoDialog_import_confirm_title": "Conferma import",
"infoDialog_import_hyperror_text": "Il file di configurazione selezionato \"$1\" non può essere importato. Non è compatibile con Hyperion 2.0 e superiori!",
"infoDialog_import_jsonerror_text": "Il file di configurazione selezionato \"$1\" non è un file .json o è corrotto. Messaggio di errore: ($2)",
"infoDialog_password_current_text": "Password attuale",
"infoDialog_password_minimum_length": "Le password devono contenere almeno 8 caratteri.",
"infoDialog_password_new_text": "Nuova Password",
"infoDialog_username_text": "Nome utente",
"infoDialog_wizrgb_text": "L'ordine dei Byte RGB è già impostato correttamente.",
"infoDialog_writeconf_error_text": "Salvataggio della configurazione fallito.",
"infoDialog_writeimage_error_text": "Il file selezionato \"$1\" non è un immagine o è corrotto! Seleziona un altro file.",
@ -776,6 +916,7 @@
"main_ledsim_btn_togglelednumber": "Numeri LED",
"main_ledsim_btn_toggleleds": "Mostra LEDs",
"main_ledsim_btn_togglelivevideo": "Video live",
"main_ledsim_btn_togglesigdetect": "Area di rilevamento del segnale",
"main_ledsim_text": "Visualizzazione live dei colori dei led e, opzionalmente, lo stream video dal dispositivo di cattura.",
"main_ledsim_title": "Visualizzazione LED",
"main_menu_about_token": "Info su Hyperion",
@ -787,6 +928,7 @@
"main_menu_general_conf_token": "Generale",
"main_menu_grabber_conf_token": "Hardware di cattura",
"main_menu_input_selection_token": "Selezione Input",
"main_menu_instcapture_conf_token": "Fonti",
"main_menu_leds_conf_token": "Hardware LED",
"main_menu_logging_token": "Log",
"main_menu_network_conf_token": "Servizi di Rete",
@ -886,6 +1028,7 @@
"wiz_cc_testintrok": "Premi il bottone qui sotto per iniziare un test video.",
"wiz_cc_testintrowok": "Guarda il link di seguito per il download dei video di test",
"wiz_cc_title": "Assistente calibrazione colore",
"wiz_cc_try_connect": "Connessione...",
"wiz_cololight_desc2": "Ora scegli quali Cololights dovrebbero essere aggiunti. Per identificare le singole luci, premere il pulsante a destra.",
"wiz_cololight_intro1": "Questa procedura guidata configura Hyperion per il sistema Cololight. Le caratteristiche sono il rilevamento automatico di Cololight e la regolazione automatica delle impostazioni di Hyperion! In breve: bastano pochi clic e il gioco è fatto!<br />Nota: in caso di una Strip Cololight, potrebbe essere necessario correggere manualmente il numero e il layout dei LED",
"wiz_cololight_noprops": "Impossibile ottenere le proprietà del dispositivo: definire manualmente il numero dei LED",
@ -921,6 +1064,7 @@
"wiz_hue_username": "ID Utente",
"wiz_identify": "Identifica",
"wiz_identify_light": "Identifica $1",
"wiz_identify_tip": "Identifica il dispositivo configurato accendendolo",
"wiz_ids_disabled": "Disattivato",
"wiz_ids_entire": "Immagine intera",
"wiz_noLights": "Nessun $1 trovato! Per favore connetti le luci alla rete o configurale manualmente",

View File

@ -0,0 +1,301 @@
{
"InfoDialog_access_title": "設定レベル",
"InfoDialog_nowrite_title": "書き込み権限エラー!",
"about_build": "ビルド",
"about_builddate": "ビルド日付",
"about_translations": "翻訳について",
"about_version": "バージョン",
"conf_general_impexp_expbtn": "出力",
"conf_general_impexp_impbtn": "入力",
"conf_general_impexp_l1": "下記の設定ファイルを選択し、「インポート」をクリックしてください",
"conf_general_impexp_l2": "設定をエクスポートするには「エクスポート」をクリックしてください。",
"conf_general_impexp_title": "設定ファイルをインポート・エクスポートする",
"conf_general_label_title": "一般設定",
"conf_helptable_expl": "説明",
"conf_helptable_option": "オプション",
"conf_leds_contr_label_contrtype": "コントローラータイプ",
"conf_leds_layout_advanced": "詳細設定",
"conf_leds_layout_btn_checklist": "チェックリストを表示",
"conf_leds_layout_button_savelay": "レイアウト保存",
"conf_leds_layout_button_updsim": "プレビュー",
"conf_leds_layout_cl_bottom": "下",
"conf_leds_layout_cl_gappos": "ギャップの位置",
"conf_leds_layout_cl_inppos": "インプットの位置",
"conf_leds_layout_cl_left": "左",
"conf_leds_layout_cl_right": "右",
"conf_leds_layout_cl_top": "上",
"conf_leds_layout_frame": "クラッシックレイアウト",
"conf_leds_layout_ma_cabling": "配線",
"conf_leds_layout_ma_horiz": "水平",
"conf_leds_layout_ma_optbottomleft": "左下",
"conf_leds_layout_ma_optbottomright": "右下",
"conf_leds_layout_ma_opthoriz": "水平",
"conf_leds_layout_ma_optparallel": "パラレル",
"conf_leds_layout_ma_optsnake": "スネーク",
"conf_leds_layout_ma_opttopleft": "左上",
"conf_leds_layout_ma_opttopright": "右上",
"conf_leds_layout_ma_optvert": "垂直",
"conf_leds_layout_ma_order": "並び順",
"conf_leds_layout_ma_position": "インプット",
"conf_leds_layout_ma_vert": "垂直",
"conf_leds_layout_matrix": "マトリックスレイアウト",
"conf_leds_layout_peview": "LEDレイアウトのプレビュー",
"conf_leds_layout_preview_l1": "一番目のLEDの位置",
"conf_leds_layout_preview_l2": "データの向きを示す",
"conf_leds_layout_preview_ledpower": "最大パワー消費電力率:",
"conf_leds_layout_preview_originCL": "クラッシックレイアウトから作成",
"conf_leds_layout_preview_originMA": "マトリックスレイアウトから作成",
"conf_leds_layout_preview_originTEXT": "テキストから作成",
"conf_leds_layout_preview_totalleds": "LED数",
"conf_leds_nav_label_ledcontroller": "LEDコントローラー",
"conf_leds_nav_label_ledlayout": "LEDレイアウト",
"conf_leds_optgroup_network": "ネットワーク",
"conf_leds_optgroup_usb": "USBシリアル",
"conf_logging_btn_autoscroll": "オートスクロール",
"conf_logging_report": "レポートと連携する",
"conf_logging_uplpolicy": "ボタンをクリックして同意する",
"dashboard_alert_message_confedit": "設定変更しました。適用するには、ハイペリオンを再起動してください。",
"dashboard_alert_message_confedit_t": "設定変更しました",
"dashboard_alert_message_confsave_success": "設定を保存し、有効化にしました。",
"dashboard_alert_message_confsave_success_t": "設定を保存しました",
"dashboard_alert_message_disabled": "インスタンスが無効になっています。使用するにはダッシュボードにて有効にしてください。",
"dashboard_alert_message_disabled_t": "LEDハードウェアインスタンスを無効",
"dashboard_componentbox_label_comp": "コンポネント",
"dashboard_componentbox_label_status": "ステータス",
"dashboard_componentbox_label_title": "コンポネント・ステータス",
"dashboard_infobox_label_currenthyp": "バージョン",
"dashboard_infobox_label_disableh": "インスタンスを無効にする",
"dashboard_infobox_label_enableh": "インスタンスを有効にする",
"dashboard_infobox_label_instance": "インスタンス",
"dashboard_infobox_label_latesthyp": "最新バージョン",
"dashboard_infobox_label_platform": "プラットフォーム",
"dashboard_infobox_label_ports": "ポート",
"dashboard_infobox_label_smartacc": "スマートアクセス",
"dashboard_infobox_label_statush": "ステータス",
"dashboard_infobox_label_title": "システム情報",
"dashboard_infobox_message_updatesuccess": "最新版を使用しています",
"dashboard_infobox_message_updatewarning": "最新版のアップデートあります!",
"dashboard_label_intro": "ハイペリオンのステータスを確認できる画面です",
"dashboard_newsbox_label_title": "ブログ",
"dashboard_newsbox_noconn": "ハイペリオンサーバーに接続して最新情報を見れない場合は、インターネット接続を確認してください。",
"dashboard_newsbox_readmore": "詳細を読む",
"dashboard_newsbox_visitblog": "ハイペリオンのブログを見る",
"edt_conf_bb_mode_title": "モード",
"edt_conf_color_black_title": "ブラック",
"edt_conf_color_blue_title": "青",
"edt_conf_color_brightness_title": "明るさ",
"edt_conf_color_channelAdjustment_header_itemtitle": "プロファイル",
"edt_conf_color_channelAdjustment_header_title": "カラーチャネルの調整",
"edt_conf_color_cyan_title": "シアン",
"edt_conf_color_green_title": "緑",
"edt_conf_color_heading_title": "色の調整",
"edt_conf_color_id_title": "ID",
"edt_conf_color_leds_title": "LEDインデックス",
"edt_conf_color_magenta_title": "マジェスタ",
"edt_conf_color_red_title": "赤",
"edt_conf_color_white_title": "ホワイト",
"edt_conf_color_yellow_title": "黄",
"edt_conf_enum_NO_CHANGE": "自動",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_automatic": "自動",
"edt_conf_enum_bbclassic": "クラシック",
"edt_conf_enum_bbdefault": "デフォルト",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR 青・緑・赤",
"edt_conf_enum_brg": "BRG 青・赤・緑",
"edt_conf_enum_color": "色",
"edt_conf_enum_effect": "効果",
"edt_conf_enum_gbr": "GBR 緑・青・赤",
"edt_conf_enum_grb": "GRB 緑・赤・青",
"edt_conf_enum_logdebug": "デバッグ",
"edt_conf_enum_logwarn": "警告",
"edt_conf_enum_multicolor_mean": "マルチカラー",
"edt_conf_enum_rbg": "RBG 赤・青・緑",
"edt_conf_enum_rgb": "RGB 赤・緑・青",
"edt_conf_enum_unicolor_mean": "ユニカラー",
"edt_conf_fg_type_title": "タイプ",
"edt_conf_fge_type_title": "タイプ",
"edt_conf_gen_heading_title": "全般設定",
"edt_conf_gen_name_title": "設定の名前",
"edt_conf_gen_showOptHelp_title": "説明を表示する",
"edt_conf_general_enable_expl": "コンポネントを有効にする。",
"edt_conf_general_enable_title": "有効にする",
"edt_conf_general_port_expl": "使用ポート",
"edt_conf_general_port_title": "ポート",
"edt_conf_general_priority_expl": "このコンポネントの優先度",
"edt_conf_general_priority_title": "有線チャネル",
"edt_conf_smooth_heading_title": "スムージング",
"edt_conf_smooth_time_ms_title": "時刻",
"edt_conf_smooth_type_expl": "スムージングタイプ",
"edt_conf_smooth_type_title": "タイプ",
"edt_conf_v4l2_device_title": "デバイス",
"edt_conf_v4l2_heading_title": "USBキャプチャ",
"edt_conf_v4l2_standard_title": "ビデオスタンダード",
"edt_dev_auth_key_title": "認証トークン",
"edt_dev_enum_sub_min_cool_adjust": "クールホワイトを減らす",
"edt_dev_enum_sub_min_warm_adjust": "ワームホワイトを減らす",
"edt_dev_general_autostart_title": "オートスタート",
"edt_dev_general_colorOrder_title": "RGBの並び",
"edt_dev_general_hardwareLedCount_title": "ハードウェアLED数",
"edt_dev_general_heading_title": "一般設定",
"edt_dev_general_name_title": "設定の名前",
"edt_dev_spec_FCledToOn_title": "フェードキャンディーLEDを有効にする",
"edt_dev_spec_FCsetConfig_title": "フェードキャンディの設定",
"edt_dev_spec_baudrate_title": "ボーレート",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_colorComponent_title": "カラーコンポネント",
"edt_dev_spec_dmaNumber_title": "DMAチャネル",
"edt_dev_spec_gpioBcm_title": "GPIOピン",
"edt_dev_spec_gpioMap_title": "GPIOマッピング",
"edt_dev_spec_gpioNumber_title": "GPIO番号",
"edt_dev_spec_intervall_title": "インタバル",
"edt_dev_spec_ledIndex_title": "LEDインデックス",
"edt_dev_spec_ledType_title": "LEDタイプ",
"edt_dev_spec_lightid_itemtitle": "ID",
"edt_dev_spec_lightid_title": "ライトID",
"edt_dev_spec_maxPacket_title": "最大パケット",
"edt_dev_spec_maximumLedCount_title": "最大LED数",
"edt_dev_spec_numberOfLeds_title": "LED数",
"edt_dev_spec_outputPath_title": "出力パス",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_title": "ポート",
"edt_dev_spec_serial_title": "シリアル番号",
"edt_dev_spec_spipath_title": "SPIデバイス",
"edt_dev_spec_targetIpHost_title": "ホスト名IPアドレス",
"edt_dev_spec_targetIp_title": "IPアドレス",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "ユニバース",
"edt_dev_spec_useRgbwProtocol_title": "RGBWプロトコルを使用する",
"edt_dev_spec_username_title": "ユーザー名",
"edt_dev_spec_vid_title": "VID",
"edt_eff_image_source_url": "URL",
"effectsconfigurator_button_deleffect": "効果を削除する",
"effectsconfigurator_button_editeffect": "効果をロードする",
"effectsconfigurator_button_saveeffect": "効果を保存",
"effectsconfigurator_button_starttest": "テスト開始",
"effectsconfigurator_button_stoptest": "テスト中止",
"effectsconfigurator_editdeleff": "効果を削除/ロードする",
"effectsconfigurator_label_chooseeff": "テンプレートを選択する",
"effectsconfigurator_label_effectname": "効果名",
"general_access_advanced": "アドバンスト",
"general_access_default": "一般",
"general_access_expert": "エキスパート",
"general_btn_back": "戻る",
"general_btn_cancel": "キャンセル",
"general_btn_continue": "続行",
"general_btn_iswitch": "スイッチ",
"general_btn_next": "次へ",
"general_btn_off": "切",
"general_btn_ok": "OK",
"general_btn_on": "入",
"general_btn_restarthyperion": "ハイペリオンを再起動する",
"general_btn_save": "保存",
"general_btn_saveandreload": "保存してリフレッシュ",
"general_btn_yes": "はい",
"general_button_savesettings": "設定保存",
"general_col_blue": "青",
"general_col_green": "緑",
"general_col_red": "赤",
"general_comp_BLACKBORDER": "黒帯検出",
"general_comp_BOBLIGHTSERVER": "ボブライト・サーバー",
"general_comp_FLATBUFSERVER": "フラットバッファ・サーバー",
"general_comp_FORWARDER": "フォワーダー",
"general_comp_GRABBER": "画面キャプチャ",
"general_comp_LEDDEVICE": "LED出力",
"general_comp_PROTOSERVER": "プロトコルバッファ・サーバー",
"general_comp_SMOOTHING": "スムージング",
"general_comp_V4L": "キャプチャ - USB入力",
"general_country_de": "ドイツ",
"general_country_es": "スペイン",
"general_country_fr": "仏国",
"general_country_it": "イタリア",
"general_country_nl": "オランダ",
"general_country_uk": "英国",
"general_country_us": "米国",
"general_speech_cs": "チェコ語",
"general_speech_de": "ドイツ語",
"general_speech_en": "英語",
"general_speech_es": "スペイン語",
"general_speech_it": "イタリア語",
"general_webui_title": "ハイペリオン - ウェブ設定",
"infoDialog_checklist_title": "チェックリスト!",
"infoDialog_effconf_created_text": "\"$1\"は正しく作成されました!",
"infoDialog_effconf_deleted_text": "\"$1\"は正しく削除されました!",
"infoDialog_general_error_title": "エラー",
"infoDialog_general_success_title": "大成功!",
"infoDialog_general_warning_title": "警告",
"infoDialog_import_comperror_text": "残念!このブラウザーはインポートを対応していません。別なブラウザーで試してください。",
"infoDialog_import_confirm_title": "インポートの確認",
"infoDialog_wizrgb_text": "RGBの並び順を修正しました。",
"info_conlost_label_autorefresh": "このページは自動的に更新します。",
"info_conlost_label_reason": "原因:",
"info_conlost_label_reason1": "-  インターネットにせt属されていない",
"info_conlost_label_reason2": "‐ ハイペリオンがアップデート中",
"info_conlost_label_reason3": "- ハイペリオンが起動されていない",
"info_restart_title": "再起動中…",
"main_ledsim_btn_togglelednumber": "LED番号を表示する",
"main_ledsim_btn_toggleleds": "LEDを表示する",
"main_ledsim_btn_togglelivevideo": "LEDビデオ",
"main_ledsim_title": "LEDの視覚化",
"main_menu_about_token": "ハイペリオンについて",
"main_menu_colors_conf_token": "イメージ・プロセシング",
"main_menu_configuration_token": "LEDのインスタンス",
"main_menu_dashboard_token": "ダッシュボード",
"main_menu_effect_conf_token": "効果",
"main_menu_effectsconfigurator_token": "効果設定",
"main_menu_general_conf_token": "一般",
"main_menu_grabber_conf_token": "キャプチャ・ハードウェア",
"main_menu_input_selection_token": "入力選択",
"main_menu_leds_conf_token": "LED出力",
"main_menu_logging_token": "ログ",
"main_menu_network_conf_token": "ネットワーク設定",
"main_menu_remotecontrol_token": "リモート・コントロール設定",
"main_menu_support_token": "サポート",
"main_menu_system_token": "システム",
"main_menu_update_token": "アップデート",
"main_menu_webconfig_token": "ウェブ設定",
"remote_adjustment_label": "色の調整",
"remote_color_button_reset": "色/効果をリセット",
"remote_color_label": "色/効果",
"remote_color_label_color": "色:",
"remote_effects_label_effects": "効果:",
"remote_input_clearall": "全ての効果/色をクリアする",
"remote_input_ip": "IP",
"remote_input_label": "ソース選択",
"remote_input_label_autoselect": "自動選択",
"remote_input_owner": "タイプ",
"remote_input_priority": "優先度",
"remote_input_setsource_btn": "ソース選択",
"remote_maptype_label_multicolor_mean": "マルチカラー",
"remote_maptype_label_unicolor_mean": "ユニカラー",
"remote_optgroup_syseffets": "システム設定",
"remote_optgroup_usreffets": "ユーザー設定",
"remote_videoMode_label": "ビデオモード",
"support_label_forumtitle": "フォーラム",
"support_label_ghtext": "GitHubへ",
"support_label_title": "ハイペリオンをサポートする",
"support_label_wikititle": "ドキュメンテーション",
"update_button_changelog": "変更ログ",
"update_button_install": "インストール",
"update_error_getting_versions": "最新バージョンをとけていできません",
"update_label_description": "説明",
"update_label_type": "タイプ:",
"update_versreminder": "使用中のバージョン:",
"wiz_cc_btn_stop": "ビデオを停止する",
"wiz_cc_btn_switchpic": "画像の切り替え:",
"wiz_cc_kodimsg_start": "テスト成功 - 次へ進みましょう!",
"wiz_cc_kodishould": "Kodiに次の画像が表示されます$1",
"wiz_cc_kwebs": "Kodiウェブサーバーホスト名またはIPアドレス",
"wiz_cc_testintro": "テストしましょう!",
"wiz_cc_title": "色調整ウィザード",
"wiz_hue_create_user": "ユーザーIDを新規作成",
"wiz_hue_ip": "ホスト名またはIPアドレス",
"wiz_hue_searchb": "ブリッジを検証中…",
"wiz_hue_title": "フィリップスヒューウィザード",
"wiz_hue_username": "ユーザーID",
"wiz_rgb_qgend": "緑?",
"wiz_rgb_qrend": "赤?",
"wiz_rgb_title": "RGBの並び順",
"wiz_wizavail": "ウィザードを使用可能"
}

View File

@ -1,16 +1,36 @@
{
"about_translations": "Oversettelser",
"about_version": "Versjon",
"conf_general_impexp_expbtn": "Eksporter",
"conf_general_impexp_impbtn": "Importer",
"conf_general_impexp_l1": "Import en konfigurasjon ved å velge en konfigurasjonsfil nedenfor og trykk \"Importer\".",
"conf_general_impexp_l2": "Eksporter en konfigurasjon ved å trykke \"Eksporter\". Nettleseren din starter en nedlastning.",
"conf_general_impexp_title": "Import/eksport konfigurasjon",
"conf_general_label_title": "Generelle innstillinger",
"conf_helptable_expl": "Forklaring",
"conf_helptable_option": "Valg",
"conf_leds_contr_label_contrtype": "Kontrollertype:",
"conf_leds_layout_advanced": "Avanserte innstillinger",
"conf_leds_layout_btn_checklist": "Vis sjekkliste",
"conf_leds_layout_button_savelay": "Lagre Oppsett",
"conf_leds_layout_button_updsim": "Oppdater Forhåndsvining",
"conf_leds_layout_cl_bottom": "Bunn",
"conf_leds_layout_cl_left": "Venstre",
"conf_leds_layout_cl_right": "Høyre",
"conf_leds_layout_cl_top": "Topp",
"conf_leds_layout_frame": "Klassisk Oppsett (LED Ramme)",
"conf_leds_layout_matrix": "Matrix Oppsett (LED-vegg)",
"conf_leds_layout_peview": "LED-oppsett forhåndsvisning",
"conf_leds_layout_ptlh": "Horisontal",
"conf_leds_layout_ptlv": "Vertikal",
"conf_leds_nav_label_ledcontroller": "LED kontroller",
"conf_leds_nav_label_ledlayout": "LED-oppsett",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_network": "Nettverk",
"dashboard_alert_message_confedit": "Dine Hyperion konfigureringer er blitt endre. For å bruke de, restart Hyperion",
"conf_leds_optgroup_usb": "USB/Serial",
"dashboard_alert_message_confedit": "Din Hyperion konfigureringer er blitt endret. For å aktivere dem, restart Hyperion.",
"dashboard_alert_message_confedit_t": "Konfigurering endret",
"dashboard_alert_message_confsave_success": "Dine Hyperionkonfigureringer er vellykket endret. Dine endringer er nå aktive.",
"dashboard_alert_message_confsave_success_t": "Konfigurasjon lagret",
@ -19,6 +39,7 @@
"dashboard_componentbox_label_title": "Komponentstatus",
"dashboard_infobox_label_currenthyp": "Din Hyperion versjon:",
"dashboard_infobox_label_disableh": "Deaktiver forekomst: $1",
"dashboard_infobox_label_enableh": "Aktiver forekomst: $1",
"dashboard_infobox_label_instance": "Forekomst:",
"dashboard_infobox_label_latesthyp": "Siste Hyperion versjon:",
"dashboard_infobox_label_platform": "Plattform:",
@ -29,16 +50,40 @@
"dashboard_infobox_message_updatesuccess": "Du kjører siste versjon av Hyperion.",
"dashboard_infobox_message_updatewarning": "En nyere versjon av Hyperion er tilgjengelig! ($1)",
"dashboard_label_intro": "Dashbordet gir en enkel oversikt over statusen til Hyperion.",
"dashboard_message_do_not_show_again": "Ikke vis denne meldingen igjen",
"dashboard_newsbox_label_title": "Hyperion-Blogg",
"dashboard_newsbox_noconn": "Kan ikke koble Hyperion Serveren for å motta siste inlegg, fungerer internettilkoblingen?",
"dashboard_newsbox_noconn": "Kan ikke koble Hyperion Serveren for å motta siste innlegg, fungerer internettilkoblingen?",
"dashboard_newsbox_readmore": "Les mer",
"dashboard_newsbox_visitblog": "Besøk Hyperion-Bloggen",
"edt_conf_enum_dl_error": "Feil",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_right_left": "Høyre til venstre",
"edt_dev_spec_clientKey_title": "Klientnøkkel",
"edt_dev_spec_lights_itemtitle": "Lys",
"edt_dev_spec_lights_name": "Navn",
"edt_dev_spec_networkDevicePort_title": "Port",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_eff_grayscale": "Gråskala",
"edt_eff_image_source": "Bildekilde",
"edt_eff_image_source_file": "Lokal fil",
"edt_eff_image_source_url": "URL",
"edt_eff_ledtest_header": "LED Test",
"edt_eff_plasma_header": "Plasma",
"edt_eff_url": "Bildeadresse",
"effectsconfigurator_button_deleffect": "Slett effekt",
"effectsconfigurator_button_editeffect": "Last inn effekt",
"effectsconfigurator_button_starttest": "Start test",
"effectsconfigurator_button_stoptest": "Stop test",
"effectsconfigurator_label_effectname": "Effektnavn",
"general_access_advanced": "Avansert",
"general_access_default": "Standard",
"general_access_expert": "Ekspert",
"general_btn_back": "Tilbake",
"general_btn_cancel": "Avbryt",
"general_btn_continue": "Fortsett",
"general_btn_denyAccess": "Nekt tilgang",
"general_btn_grantAccess": "Gi tilgang",
"general_btn_iswitch": "Bytt",
"general_btn_next": "Neste",
"general_btn_off": "Av",
@ -47,24 +92,47 @@
"general_btn_restarthyperion": "Start Hyperion på nytt",
"general_btn_save": "Lagre",
"general_btn_saveandreload": "Lagre og last inn på nytt",
"general_btn_saverestart": "Lagre og restart",
"general_btn_yes": "Ja",
"general_col_blue": "blå",
"general_col_green": "grønn",
"general_col_red": "rød",
"general_comp_BLACKBORDER": "Blackbar gjennkjennelse",
"general_comp_BOBLIGHTSERVER": "Boblight Server",
"general_comp_SMOOTHING": "Utjevning",
"general_country_cn": "Kina",
"general_country_de": "Tyskland",
"general_country_es": "Spania",
"general_country_fr": "Frankrike",
"general_country_it": "Italia",
"general_country_nl": "Nederland",
"general_country_ru": "Russland",
"general_country_uk": "Storbritania",
"general_country_us": "USA",
"general_speech_cs": "Tsjekkisk",
"general_speech_de": "Tysk",
"general_speech_en": "Engelsk",
"general_speech_es": "Spansk",
"general_speech_fr": "Fransk",
"general_speech_it": "Italiensk",
"general_speech_nl": "Nederlandsk",
"general_speech_pl": "Polsk",
"general_speech_ro": "Rumensk",
"general_speech_ru": "Russisk",
"general_speech_sv": "Svensk",
"general_speech_tr": "Tyrkisk",
"general_speech_vi": "Vietnamesisk",
"general_speech_zh-CN": "Kinesisk (forenklet)",
"general_webui_title": "Hyperion - Webkonfigurasjon",
"infoDialog_checklist_title": "Sjekkliste!",
"infoDialog_general_success_title": "Suksess",
"infoDialog_general_warning_title": "Advarsel",
"infoDialog_import_confirm_title": "Bekreft import",
"infoDialog_password_minimum_length": "Passord må bestå av minst 8 tegn",
"infoDialog_username_text": "Brukernavn",
"infoDialog_writeconf_error_text": "Lagringen av konfigurasjonen din feilet.",
"info_conlost_label_autorecon": "Vil koble til på nytt når Hyperion er tilgjengelig.",
"info_conlost_label_reason": "Mulige årsaker:",
"main_ledsim_btn_togglelednumber": "Antall LED",
"main_ledsim_btn_toggleleds": "Vis LED",
"main_ledsim_btn_togglelivevideo": "Direktevideo",
@ -76,10 +144,37 @@
"main_menu_effect_conf_token": "Effekter",
"main_menu_effectsconfigurator_token": "Effekt konfigurerer",
"main_menu_general_conf_token": "Generell",
"main_menu_instcapture_conf_token": "Kilder",
"main_menu_logging_token": "Logg",
"main_menu_network_conf_token": "Nettverkstjenester",
"main_menu_remotecontrol_token": "Fjern-kontroll",
"main_menu_support_token": "Støtte",
"main_menu_system_token": "System",
"main_menu_update_token": "Oppdater"
"main_menu_update_token": "Oppdater",
"main_menu_webconfig_token": "Web-konfigurasjon",
"remote_adjustment_label": "Fargejusteringer",
"remote_color_button_reset": "Nullstill Farge/Effekt",
"remote_color_label_color": "Farge:",
"remote_effects_label_effects": "Effekt:",
"remote_effects_label_picture": "Bilde:",
"remote_input_duration": "Varighet",
"remote_input_label": "Kildevalg",
"remote_input_owner": "Type",
"remote_input_priority": "Prioritet",
"remote_input_setsource_btn": "Velg kilde",
"remote_input_sourceactiv_btn": "Kilde aktiv",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
"remote_videoMode_3DTAB": "3DTAB",
"remote_videoMode_label": "Videomodus",
"support_label_btctext": "Adresse:",
"support_label_donationpp": "Doner:",
"support_label_spreadtheword": "Spre ordet",
"update_button_install": "Installer",
"update_label_description": "Beskrivelse:",
"wiz_hue_username": "Bruker ID:",
"wiz_identify": "Identifiser",
"wiz_identify_light": "Identifiser $1",
"wiz_rgb_qgend": "...grønn?",
"wiz_rgb_qrend": "...rød?"
}

View File

@ -10,12 +10,15 @@
"InfoDialog_nowrite_foottext": "Interfejs WebUI zostanie odblokowany automatycznie po rozwiązaniu problemu!",
"InfoDialog_nowrite_text": "Hyperion nie może zapisać do aktualnie załadowanego pliku konfiguracyjnego. zmień uprawnienia zapisu plików, aby kontynuować.",
"InfoDialog_nowrite_title": "Nie masz uprawnień do zapisu!",
"InfoDialog_systemRestart_title": "Restart",
"InfoDialog_systemResume_title": "Wznów",
"InfoDialog_systemSuspend_title": "Zawieś",
"about_3rd_party_licenses": "Licencje stron trzecich",
"about_3rd_party_licenses_error": "Mieliśmy problem z gromadzeniem informacji o licencjach stron trzecich z sieci. <br /> Kliknij ten link do zasobu GitHub.",
"about_build": "Build:",
"about_builddate": "Data buildu:",
"about_contribute": "Rozwijaj Hyperion razem z nami!",
"about_credits": "Pozdrowienia dla wszystkich programistów! Polska wersja Artur Klimek KAmerOK",
"about_credits": "Pozdrowienia dla wszystkich programistów! Polska lokalizacja Artur Klimek -KAmerOK",
"about_resources": "$1 biblioteki",
"about_translations": "Tłumaczenia",
"about_version": "Wersja:",
@ -51,8 +54,12 @@
"conf_leds_contr_label_contrtype": "Typ kontrolera:",
"conf_leds_device_info_log": "Jeśli diody LED nie działają, sprawdź tutaj błędy:",
"conf_leds_device_intro": "Hyperion obsługuje wiele kontrolerów przesyłania danych do urządzenia docelowego. Wybierz kontroler LED z posortowanej listy i skonfiguruj go. Wybraliśmy najlepsze ustawienia domyślne dla każdego urządzenia.",
"conf_leds_error_get_properties_text": "Nie udało się pobrać właściwości urządzenia. Sprawdź elementy konfiguracji.",
"conf_leds_error_get_properties_title": "Właściwości urządzenia",
"conf_leds_error_hwled_gt_layout": "Sprzętowa liczba diod LED ($1) jest większa niż diod LED skonfigurowanych za pomocą układu ($2), <br>$3 {{plural:$3|LED|LEDs}} pozostaną czarne, jeśli będziesz kontynuować.",
"conf_leds_error_hwled_gt_maxled": "Liczba sprzętowych diod LED ($1) jest większa niż maksymalna liczba diod obsługiwanych przez urządzenie ($2). <br> Licznik sprzętowych diod LED jest ustawiony na ($3).",
"conf_leds_error_hwled_lt_layout": "Sprzętowa liczba diod LED ($1) jest mniejsza niż diody LED skonfigurowane w układzie ($2). <br> Liczba diod LED skonfigurowanych w układzie nie może przekraczać dostępnych diod LED",
"conf_leds_info_ws281x": "Hyperion musi działać z uprawnieniami 'root' dla tego typu kontrolera!",
"conf_leds_layout_advanced": "Ustawienia dodatkowe",
"conf_leds_layout_blacklist_num_title": "Liczba diod LED",
"conf_leds_layout_blacklist_rule_title": "Reguła czarnej listy",
@ -60,6 +67,7 @@
"conf_leds_layout_blacklist_start_title": "Start LED",
"conf_leds_layout_blacklistleds_title": "Czarna lista diod LED",
"conf_leds_layout_btn_checklist": "Pokaż listę kontrolną",
"conf_leds_layout_btn_keystone": "Korekcja trapezu",
"conf_leds_layout_button_savelay": "Zapisz układ",
"conf_leds_layout_button_updsim": "Odśwież podgląd",
"conf_leds_layout_checkp1": "Czarna dioda jest pierwszą diodą, pierwsza dioda to punkt, do którego podłączasz kontroler.",
@ -79,6 +87,16 @@
"conf_leds_layout_cl_leftbottom": "Lewy 50% - 100% Dół",
"conf_leds_layout_cl_leftmiddle": "Lewy 25% - 75% Środek",
"conf_leds_layout_cl_lefttop": "Lewy 0% - 50% Góra",
"conf_leds_layout_cl_lightPosBottomLeft11": "Dół: 75 - 100% od lewej",
"conf_leds_layout_cl_lightPosBottomLeft112": "Dół: 0 - 50% od lewej",
"conf_leds_layout_cl_lightPosBottomLeft12": "Dół: 25 - 50% od lewej",
"conf_leds_layout_cl_lightPosBottomLeft121": "Dół: 50 - 100% od lewej",
"conf_leds_layout_cl_lightPosBottomLeft14": "Dół: 0 - 25% od lewej",
"conf_leds_layout_cl_lightPosBottomLeft34": "Dół: 50 - 75% od lewej",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Dół: 25 - 75% od lewej",
"conf_leds_layout_cl_lightPosTopLeft112": "Góra: 0 - 50% od lewej",
"conf_leds_layout_cl_lightPosTopLeft121": "Góra: 50 - 100% od lewej",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Góra: 25 - 75% od lewej",
"conf_leds_layout_cl_overlap": "Zakładka",
"conf_leds_layout_cl_reversdir": "Odwrócony kierunek",
"conf_leds_layout_cl_right": "Prawo",
@ -89,10 +107,11 @@
"conf_leds_layout_cl_topleft": "Górny Lewy narożnik",
"conf_leds_layout_cl_topright": "Górny Prawy narożnik",
"conf_leds_layout_cl_vleddepth": "Pionowa głębokość LED",
"conf_leds_layout_frame": "Układ Klasyczny (Ramka LED)",
"conf_leds_layout_frame": "Układ Klasyczny (Ramka TV - LED)",
"conf_leds_layout_generatedconf": "Wygenerowana / Aktualna konfiguracja LED",
"conf_leds_layout_intro": "Potrzebujesz układu diod LED, który odzwierciedla twoje pozycje diod. Klasyczny układ to ramka telewizora, ale obsługujemy także tworzenie matrycy led (ściany led). Widok tego układu jest ZAWSZE Z PRZODU telewizora",
"conf_leds_layout_intro": "Potrzebujesz układu LED, który odzwierciedla twoje pozycje diod. Klasyczny układ to ramka telewizora, ale obsługujemy także tworzenie matrycy LED (ściany LED). Widok dla tego układu jest ZAWSZE Z PRZODU telewizora",
"conf_leds_layout_ma_cabling": "Okablowanie",
"conf_leds_layout_ma_direction": "Kierunek",
"conf_leds_layout_ma_horiz": "Poziomo",
"conf_leds_layout_ma_optbottomleft": "Lewy dół",
"conf_leds_layout_ma_optbottomright": "Prawy dół",
@ -112,7 +131,7 @@
"conf_leds_layout_preview_l1": "To jest twoja pierwsza dioda LED (pozycja wejściowa)",
"conf_leds_layout_preview_l2": "To wizualizuje kierunek danych (druga / trzecia dioda LED)",
"conf_leds_layout_preview_ledpower": "Maksymalny pobór prądu: $1 A",
"conf_leds_layout_preview_originCL": "Utworzono z: Układ klasyczny (Ramka LED)",
"conf_leds_layout_preview_originCL": "Utworzono z: Układ klasyczny (Ramka TV - LED)",
"conf_leds_layout_preview_originMA": "Utworzono z: Układ matrycowy (Ściana LED)",
"conf_leds_layout_preview_originTEXT": "Utworzono z: Skrypt",
"conf_leds_layout_preview_totalleds": "Liczba wszystkich LED: $1",
@ -179,6 +198,7 @@
"dashboard_infobox_label_instance": "Instancja:",
"dashboard_infobox_label_latesthyp": "Najnowsza wersja Hyperion:",
"dashboard_infobox_label_platform": "Platforma:",
"dashboard_infobox_label_port_boblight": "Serwer Boblight:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "Server-JSON:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
@ -187,11 +207,11 @@
"dashboard_infobox_label_smartacc": "Szybki dostęp",
"dashboard_infobox_label_statush": "Status Hyperion:",
"dashboard_infobox_label_title": "Informacje",
"dashboard_infobox_label_watchedversionbranch": "Obserwowany branch:",
"dashboard_infobox_label_watchedversionbranch": "Obserwowana gałąź:",
"dashboard_infobox_message_updatesuccess": "Posiadasz najnowszą wersję Hyperion",
"dashboard_infobox_message_updatewarning": "Dostępna jest nowsza wersja Hyperion! ($1)",
"dashboard_label_intro": "Ten pulpit nawigacyjny zapewnia szybki przegląd statusu Hyperion.",
"dashboard_message_default_password": "Ustawione jest domyślne hasło do WebUi. Zdecydowanie zalecamy je zmienić.",
"dashboard_message_default_password": "Ustawione jest domyślne hasło do WebUi. Zdecydowanie zalecamy je zmienić. ",
"dashboard_message_default_password_t": "Ustawione jest domyślne hasło WebUi",
"dashboard_message_do_not_show_again": "Nie pokazuj tej wiadomości ponownie",
"dashboard_message_global_setting": "Ustawienia na tej stronie nie zależą od konkretnej instancji. Zmiany będą przechowywane globalnie dla wszystkich instancji.",
@ -201,6 +221,7 @@
"dashboard_newsbox_readmore": "Więcej",
"dashboard_newsbox_visitblog": "Odwiedź Hyperion-Blog",
"edt_append_degree": "°",
"edt_append_frames": "klatki",
"edt_append_hz": "Hz",
"edt_append_leds": "Diody LED",
"edt_append_ms": "ms",
@ -236,6 +257,8 @@
"edt_conf_color_blue_title": "Niebieski",
"edt_conf_color_brightnessComp_expl": "Kompensuje różnice jasności między czerwonym, zielonym, niebieskim, cyjanowym, purpurowym, żółtym i białym. 100 oznacza pełną kompensację, 0 oznacza brak kompensacji",
"edt_conf_color_brightnessComp_title": "Kompensacja jasności",
"edt_conf_color_brightnessGain_expl": "Reguluje jasność kolorów. 1.0 oznacza brak zmian, powyżej 1.0 zwiększa jasność, poniżej 1.0 zmniejsza jasność.",
"edt_conf_color_brightnessGain_title": "Wzmocnienie jasności",
"edt_conf_color_brightness_expl": "Ustaw jasność LEDów",
"edt_conf_color_brightness_title": "Jasność",
"edt_conf_color_channelAdjustment_header_expl": "Utwórz profile kolorów, które można przypisać do określonego profilu. Dostosuj kolor, gamma, jasność, kompensację i więcej",
@ -262,6 +285,8 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "Skalibrowana wartość koloru czerwonego",
"edt_conf_color_red_title": "Czerwony",
"edt_conf_color_saturationGain_expl": "Reguluje nasycenie kolorów. 1.0 oznacza brak zmian, powyżej 1.0 zwiększa nasycenie, poniżej 1.0 zmniejsza nasycenie.",
"edt_conf_color_saturationGain_title": "Wzmocnienie nasycenia",
"edt_conf_color_white_expl": "Skalibrowana wartość koloru białego.",
"edt_conf_color_white_title": "Biały",
"edt_conf_color_yellow_expl": "Skalibrowana wartość koloru żółtego",
@ -317,6 +342,8 @@
"edt_conf_enum_top_down": "Z góry na dół",
"edt_conf_enum_transeffect_smooth": "Gładki",
"edt_conf_enum_transeffect_sudden": "Nagły",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "SUROWE",
"edt_conf_enum_unicolor_mean": "Mieszaj kolory do jednego koloru",
"edt_conf_fbs_heading_title": "Server Flatbuffers",
"edt_conf_fbs_timeout_expl": "Jeśli w danym okresie nie zostaną odebrane żadne dane, komponent zostanie (miękko) wyłączony.",
@ -345,11 +372,18 @@
"edt_conf_fge_type_title": "Rodzaj",
"edt_conf_fw_flat_expl": "Jeden element flatbuffer na linię. Zawiera adres IP: PORT (przykład: 127.0.0.1:19401)",
"edt_conf_fw_flat_itemtitle": "Źródło flatbuffer",
"edt_conf_fw_flat_services_discovered_expl": "Wykryto serwery Hyperion świadczące usługi flatbuffer",
"edt_conf_fw_flat_services_discovered_title": "Odkryto cele Flatbuffer",
"edt_conf_fw_flat_title": "Lista klientów flatbuffer",
"edt_conf_fw_heading_title": "Przekierowanie",
"edt_conf_fw_json_expl": "Jeden element Json na linię. Zawiera adres IP: PORT (przykład: 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Element Json",
"edt_conf_fw_json_services_discovered_expl": "Wykryto serwery Hyperion świadczące usługi JSON-API",
"edt_conf_fw_json_services_discovered_title": "Odkryto cele JSON",
"edt_conf_fw_json_title": "Lista klientów Json",
"edt_conf_fw_remote_service_discovered_none": "Nie wykryto usług zdalnych",
"edt_conf_fw_service_name_expl": "Nazwa usługodawcy",
"edt_conf_fw_service_name_title": "Nazwa serwisu",
"edt_conf_gen_configVersion_title": "Wersja konfiguracji",
"edt_conf_gen_heading_title": "Ustawienia główne",
"edt_conf_gen_name_expl": "Nazwa zdefiniowana przez użytkownika, która służy do identyfikacji Hyperion. (Pomocne, jeśli masz więcej niż jedną instancję Hyperion)",
@ -357,7 +391,7 @@
"edt_conf_gen_showOptHelp_expl": "Pokaż wszystkie dostępne wyjaśnienia w każdej sekcji. Polecane dla początkujących!",
"edt_conf_gen_showOptHelp_title": "Pokaż objaśnienia",
"edt_conf_gen_watchedVersionBranch_expl": "Wybiera wersję, która powinna być używana podczas wyszukiwania nowych wersji Hyperion.",
"edt_conf_gen_watchedVersionBranch_title": "Obserwowany branch:",
"edt_conf_gen_watchedVersionBranch_title": "Obserwowana gałąź",
"edt_conf_general_enable_expl": "Jeśli zaznaczone, komponent jest włączony.",
"edt_conf_general_enable_title": "Aktywuj",
"edt_conf_general_port_expl": "Ten Port jest już używany",
@ -366,7 +400,7 @@
"edt_conf_general_priority_title": "Kanał priorytetowy",
"edt_conf_grabber_discovered_expl": "Wybierz wykryte urządzenie do przechwytywania",
"edt_conf_grabber_discovered_none": "Nie wykryto urządzenia do przechwytywania",
"edt_conf_grabber_discovered_title": "Wykryto urządzenie",
"edt_conf_grabber_discovered_title": "Wykryte urządzenia",
"edt_conf_grabber_discovered_title_info": "Wybierz wykryte urządzenie do przechwytywania",
"edt_conf_grabber_discovery_inprogress": "Wykrywanie w toku",
"edt_conf_instC_screen_grabber_device_expl": "Używane urządzenie do przechwytywania ekranu",
@ -375,8 +409,8 @@
"edt_conf_instC_systemEnable_title": "Włącz przechwytywanie pulpitu",
"edt_conf_instC_v4lEnable_expl": "Umożliwia przechwytywanie obrazu z graberra USB dla tego kontrolera LED",
"edt_conf_instC_v4lEnable_title": "Włącz przechwytywanie USB",
"edt_conf_instC_video_grabber_device_expl": "Używane urządzenie do przechwytywania wideo",
"edt_conf_instC_video_grabber_device_title": "Urządzenie do przechwytywania wideo",
"edt_conf_instC_video_grabber_device_expl": "Używane urządzenie do przechwytywania obrazu wideo",
"edt_conf_instC_video_grabber_device_title": "Urządzenie do przechwytywania obrazu",
"edt_conf_instCapture_heading_title": "Instancja przechwytywania",
"edt_conf_js_heading_title": "Server JSON",
"edt_conf_log_heading_title": "Logowanie",
@ -408,9 +442,7 @@
"edt_conf_smooth_heading_title": "Wygładzanie",
"edt_conf_smooth_interpolationRate_expl": "Szybkość obliczania wygładzanych ramek pośrednich.",
"edt_conf_smooth_interpolationRate_title": "Współczynnik interpolacji",
"edt_conf_smooth_outputRate_expl": "Prędkość wyjściowa do twojego kontrolera led.",
"edt_conf_smooth_outputRate_title": "Szybkość wyjściowa",
"edt_conf_smooth_time_ms_expl": "Jak długo wygładzanie powinno zbierać zdjęcia?",
"edt_conf_smooth_time_ms_expl": "Jak długo wygładzanie powinno zbierać obrazy?",
"edt_conf_smooth_time_ms_title": "Czas",
"edt_conf_smooth_type_expl": "Rodzaj wygładzania.",
"edt_conf_smooth_type_title": "Rodzaj",
@ -487,15 +519,21 @@
"edt_conf_webc_keyPath_expl": "Ścieżka do pliku klucza dla powyższego certyfikatu (format PEM, zaszyfrowany za pomocą RSA)",
"edt_conf_webc_keyPath_title": "Ścieżka klucza prywatnego",
"edt_conf_webc_sslport_expl": "Port serwera internetowego HTTPS",
"edt_conf_webc_sslport_title": "HTTPS Port",
"edt_conf_webc_sslport_title": "Port HTTPS",
"edt_dev_auth_key_title": "Token uwierzytelnienia",
"edt_dev_auth_key_title_info": "Aby uzyskać dostęp do urządzenia, wymagany jest token uwierzytelniający",
"edt_dev_enum_sub_min_cool_adjust": "Odejmij zimną biel",
"edt_dev_enum_sub_min_warm_adjust": "Odejmij ciepłą biel",
"edt_dev_enum_subtract_minimum": "Odejmij minimum",
"edt_dev_enum_white_off": "Wyłącz biały",
"edt_dev_general_autostart_title": "Autostart",
"edt_dev_general_autostart_title_info": "Urządzenie LED jest włączone podczas uruchamiania lub nie",
"edt_dev_general_colorOrder_title": "Kolejność bajtów RGB",
"edt_dev_general_colorOrder_title_info": "Kolejność kolorów urządzenia",
"edt_dev_general_enableAttemptsInterval_title": "Interwał ponawiania",
"edt_dev_general_enableAttemptsInterval_title_info": "Odstęp między dwiema próbami połączenia.",
"edt_dev_general_enableAttempts_title": "Próby połączenia",
"edt_dev_general_enableAttempts_title_info": "Liczba prób podłączenia urządzenia przed przejściem w stan błędu.",
"edt_dev_general_hardwareLedCount_title": "Fizyczna liczba LED",
"edt_dev_general_hardwareLedCount_title_info": "Liczba fizycznych diod dostępnych dla danego urządzenia",
"edt_dev_general_heading_title": "Ustawienia główne",
@ -506,6 +544,8 @@
"edt_dev_spec_FCsetConfig_title": "Ustaw konfigurację zanikania",
"edt_dev_spec_LBap102Mode_title": "Tryb \"LightBerry APA102\"",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_ada_mode_title": "Adalight - Standard",
"edt_dev_spec_awa_mode_title": "HyperSerial - High speed",
"edt_dev_spec_baudrate_title": "Prędkość (Baudrate)",
"edt_dev_spec_blackLightsTimeout_title": "Limit czasu wykrywania sygnału na czarno",
"edt_dev_spec_brightnessFactor_title": "Współczynnik jasności",
@ -514,12 +554,12 @@
"edt_dev_spec_brightnessOverwrite_title": "Nadpisz jasność",
"edt_dev_spec_brightnessThreshold_title": "Minimalna jasność wykrywania sygnału",
"edt_dev_spec_brightness_title": "Jasność",
"edt_dev_spec_candyGamma_title": "Tryb „Candy” (podwójna korekcja gamma)",
"edt_dev_spec_chanperfixture_title": "Kanały na urządzenie",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Klucz klienta",
"edt_dev_spec_colorComponent_title": "Składnik koloru",
"edt_dev_spec_debugLevel_title": "Poziom debugowania połączenia Streamera",
"edt_dev_spec_debugStreamer_title": "Streamer Debug",
"edt_dev_spec_delayAfterConnect_title": "Przerwa po połączeniu",
"edt_dev_spec_devices_discovered_none": "Nie wykryto żadnych urządzeń",
"edt_dev_spec_devices_discovered_title": "Wykryte urządzenia",
@ -554,6 +594,8 @@
"edt_dev_spec_networkDeviceName_title": "Nazwa urządzenia sieciowego",
"edt_dev_spec_networkDevicePort_title": "Port",
"edt_dev_spec_numberOfLeds_title": "Ilość diod LED",
"edt_dev_spec_onBlackTimeToPowerOff": "Czas na wyłączenie lampy, jeśli poziom czerni zostanie wyzwolony",
"edt_dev_spec_onBlackTimeToPowerOn": "Czas na włączenie lampy, jeśli sygnał zostanie przywrócony",
"edt_dev_spec_orbIds_title": "Orb ID(s)",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
@ -561,19 +603,27 @@
"edt_dev_spec_panel_start_position": "Startpanel [0-maks paneli]",
"edt_dev_spec_panelorganisation_title": "Sekwencja numeracji paneli",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Port serwisowy [1-65535]",
"edt_dev_spec_port_title": "Port",
"edt_dev_spec_printTimeStamp_title": "Dodaj znacznik czasu",
"edt_dev_spec_pwmChannel_title": "Kanał PWM",
"edt_dev_spec_razer_device_title": "Urządzenie Razer Chroma",
"edt_dev_spec_restoreOriginalState_title": "Przywróć oryginalny stan świateł, gdy są wyłączone",
"edt_dev_spec_restoreOriginalState_title_info": "Przywróć pierwotny stan urządzenia, gdy jest ono wyłączone",
"edt_dev_spec_rgbw_calibration_blue": "Wygląd kanału niebieskiego/białego",
"edt_dev_spec_rgbw_calibration_enable": "Kalibracja kanału bieli (tylko RGBW)",
"edt_dev_spec_rgbw_calibration_green": "Wygląd kanału zielonego/białego",
"edt_dev_spec_rgbw_calibration_limit": "Limit kanału białego",
"edt_dev_spec_rgbw_calibration_red": "Wygląd kanału czerwonego/białego",
"edt_dev_spec_serial_title": "Numer seryjny",
"edt_dev_spec_spipath_title": "SPI path",
"edt_dev_spec_sslHSTimeoutMax_title": "Maksymalny limit czasu uzgadniania streamera",
"edt_dev_spec_sslHSTimeoutMin_title": "Minimalny limit czasu uzgadniania Streamera",
"edt_dev_spec_sslReadTimeout_title": "Limit czasu odczytu Streamera",
"edt_dev_spec_stream_protocol_title": "Protokół przesyłania strumieniowego",
"edt_dev_spec_switchOffOnBlack_title": "Wyłącz na czarno",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Wyłączanie poniżej minimum",
"edt_dev_spec_syncOverwrite_title": "Wyłącz synchronizację",
"edt_dev_spec_targetIpHost_expl": "Nazwa hosta (DNS/mDNS) lub adres IP (IPv4 lub IPv6)",
"edt_dev_spec_targetIpHost_title": "Docelowe IP/Nazwa hosta",
"edt_dev_spec_targetIpHost_title_info": "Nazwa hosta lub adres IP urządzenia",
"edt_dev_spec_targetIp_title": "Docelowe IP",
@ -622,7 +672,7 @@
"edt_eff_count": "Liczba",
"edt_eff_countries": "Kraje",
"edt_eff_customColor": "Kolor niestandardowy",
"edt_eff_enableSecondSwirl": "Second Swirl",
"edt_eff_enableSecondSwirl": "Kolejny wirujący kolor",
"edt_eff_enableshutdown": "Prawdziwe wyłączenie",
"edt_eff_enum_all": "Wszystko",
"edt_eff_enum_all-together": "Wszystko razem",
@ -639,9 +689,13 @@
"edt_eff_frequency": "Częstotliwość",
"edt_eff_gif_header": "Gify",
"edt_eff_gif_header_desc": "Ten efekt odtwarza pliki .gif, zapewniając prosty efekt jak pętla wideo jako efekt.",
"edt_eff_grayscale": "Skala szarości",
"edt_eff_height": "Wysokość",
"edt_eff_huechange": "Zmiana koloru",
"edt_eff_image": "Plik obrazu",
"edt_eff_image_source": "Źródło obrazu",
"edt_eff_image_source_file": "Plik lokalny",
"edt_eff_image_source_url": "URL",
"edt_eff_initial_blink": "Rozbłysk dla lepszej uwagi",
"edt_eff_interval": "Intervał",
"edt_eff_knightrider_header": "Knight Rider (Nieustraszony)",
@ -668,7 +722,7 @@
"edt_eff_plasma_header_desc": "Zniekształcenie kolorów w różnych kierunkach",
"edt_eff_police_header": "Policja",
"edt_eff_police_header_desc": "Świeci jak samochód policyjny w akcji",
"edt_eff_postcolor": "Kolor postu",
"edt_eff_postcolor": "Post kolor",
"edt_eff_rainbowmood_header": "Tęczowy nastrój",
"edt_eff_rainbowmood_header_desc": "Wszystkie diody tęczowy nastrój",
"edt_eff_randomCenter": "Środek losowo",
@ -680,6 +734,7 @@
"edt_eff_reversedirection": "Odwrotny kierunek",
"edt_eff_rotationtime": "Czas obrotu",
"edt_eff_saturation": "Nasycenie",
"edt_eff_set_post_color": "Ustaw post kolor po zakończeniu",
"edt_eff_showseconds": "Pokaż sekundy",
"edt_eff_sleeptime": "Czas wstrzymania",
"edt_eff_smooth_custom": "Włącz zanikania",
@ -698,6 +753,7 @@
"edt_eff_traces_header_desc": "Wymaga przeprojektowania",
"edt_eff_trails_header": "Spadające gwiazdy",
"edt_eff_trails_header_desc": "Kolorowe gwiazdki opadające z góry na dół",
"edt_eff_url": "Adres obrazu",
"edt_eff_waves_header": "Fale",
"edt_eff_waves_header_desc": "Fale koloru! Wybierz kolory, czas obrotu, kierunek do tyłu i więcej.",
"edt_eff_whichleds": "Które diody LED",
@ -722,6 +778,10 @@
"edt_msg_error_disallow": "Wartość nie może być typu $1",
"edt_msg_error_disallow_union": "Wartość nie może być jednym z podanych niedozwolonych typów",
"edt_msg_error_enum": "Wartość musi być jedną z wartości wyliczonych",
"edt_msg_error_hostname": "Nazwa hosta ma zły format",
"edt_msg_error_invalid_epoch": "Data musi być późniejsza niż 1 stycznia 1970",
"edt_msg_error_ipv4": "Wartość musi być poprawnym adresem IPv4 w postaci 4 liczb z zakresu od 0 do 255, oddzielonych kropkami",
"edt_msg_error_ipv6": "Wartość musi być prawidłowym adresem IPv6",
"edt_msg_error_maxItems": "Wartość musi zawierać najwyżej $1",
"edt_msg_error_maxLength": "Wartość musi wynosić maksymalnie $1",
"edt_msg_error_maxProperties": "Obiekt musi mieć najwyżej $1 właściwości",
@ -742,6 +802,8 @@
"edt_msg_error_type": "Wartość musi być typu $1",
"edt_msg_error_type_union": "Wartość musi być jednym z podanych typów",
"edt_msg_error_uniqueItems": "Tablica musi zawierać unikalne elementy",
"edt_msgcust_error_hostname_ip": "Nieprawidłowa nazwa hosta IPv4 lub IPv6",
"edt_msgcust_error_hostname_ip4": "Nieprawidłowa nazwa hosta IPv4",
"effectsconfigurator_button_conttest": "Test ciągły",
"effectsconfigurator_button_deleffect": "Usuń efekt",
"effectsconfigurator_button_editeffect": "Załaduj efekt",
@ -763,9 +825,9 @@
"general_btn_grantAccess": "Przyznaj dostęp",
"general_btn_iswitch": "Przełącznik",
"general_btn_next": "Dalej",
"general_btn_off": "Wyłączony",
"general_btn_off": "Wyłączone",
"general_btn_ok": "OK",
"general_btn_on": "Uruchomiony",
"general_btn_on": "Aktywne",
"general_btn_overwrite": "Nadpisz",
"general_btn_rename": "Zmień nazwe",
"general_btn_restarthyperion": "Zrestartuj Hyperion",
@ -780,7 +842,7 @@
"general_col_blue": "niebieski",
"general_col_green": "zielony",
"general_col_red": "czerwony",
"general_comp_BLACKBORDER": "Wykryw. czarnych pasków",
"general_comp_BLACKBORDER": "Usuń czarne pasy",
"general_comp_BOBLIGHTSERVER": "Serwer Boblight",
"general_comp_FLATBUFSERVER": "Serwer FlatBuffers",
"general_comp_FORWARDER": "Przekierowanie",
@ -800,15 +862,20 @@
"general_country_us": "Stany Zjednoczone (United States)",
"general_disabled": "wyłączony",
"general_enabled": "włączony",
"general_speech_ca": "Kataloński",
"general_speech_cs": "Czeski (Czech)",
"general_speech_da": "Duński",
"general_speech_de": "Niemiecki (German)",
"general_speech_el": "Grecki",
"general_speech_en": "Angielski (English)",
"general_speech_es": "Hiszpański (Spanish)",
"general_speech_fr": "Francuski (French)",
"general_speech_hu": "Węgierski",
"general_speech_it": "Włoski (Italian)",
"general_speech_ja": "język japoński",
"general_speech_nb": "Norweski (Norwegian)",
"general_speech_nl": "Niderlandzki (Nederlands)",
"general_speech_pl": "Polski (Artur Klimek)",
"general_speech_pl": "Polski (Polish)",
"general_speech_pt": "Portugalski (Portuguese)",
"general_speech_ro": "Rumuński (Romanian)",
"general_speech_ru": "Rosyjski (Russian)",
@ -964,6 +1031,7 @@
"wiz_cc_testintrok": "Kliknij przycisk poniżej, aby rozpocząć testowe wideo.",
"wiz_cc_testintrowok": "Sprawdź poniższy link, aby pobrać filmy testowe:",
"wiz_cc_title": "Kreator kalibracji kolorów",
"wiz_cc_try_connect": "Łączenie...",
"wiz_cololight_desc2": "Teraz wybierz, który \"Cololight\" chcesz dodać. Aby zidentyfikować pojedyncze światła, naciśnij przycisk po prawej stronie.",
"wiz_cololight_intro1": "Ten kreator konfiguruje Hyperion dla systemu Cololight. Funkcje to automatyczne wykrywanie Cololight i automatyczne dostrajanie ustawień Hyperiona! W skrócie: wystarczy kilka kliknięć i gotowe! <br /> Uwaga: w przypadku Cololight Strip może być konieczne ręczne skorygowanie liczby i układu diod LED.",
"wiz_cololight_noprops": "Nie można pobrać konfiguracji urządzenia - ręcznie zdefiniuj liczbę diod LED sprzętu",
@ -980,7 +1048,7 @@
"wiz_hue_e_desc2": "Teraz wybierz swoją grupę rozrywkową, w której jesteś wszystkie światła do użytku z Hyperionem.",
"wiz_hue_e_desc3": "Teraz możesz wybrać, w jakiej pozycji powinna znajdować się odpowiednia lampa „na zdjęciu”. Wstępnego wyboru pozycji dokonano na podstawie skonfigurowanych pozycji świateł w grupie rozrywkowej. To tylko zalecenie i można go dostosować do własnych potrzeb. Dlatego możesz je krótko podświetlić, klikając prawy przycisk, aby poprawić wybór.",
"wiz_hue_e_intro1": "Ten kreator konfiguruje Hyperion dla dobrze znanego systemu Philips Hue Entertainment. Funkcje obejmują automatyczne wykrywanie Hue Bridge, tworzenie kluczy użytkownika i klienta, wybór grupy rozrywkowej i ustawianie świateł grupowych w określonej pozycji na zdjęciu oraz automatyczne dostrajanie ustawień Hyperion! Krótko mówiąc: wystarczy kilka kliknięć i gotowe!",
"wiz_hue_e_noapisupport": "Kreator wyłączył obsługę interfejsu API rozrywki i będzie działał w trybie klasycznym.",
"wiz_hue_e_noapisupport": "Kreator wyłączył obsługę interfejsu API i będzie działał w trybie klasycznym.",
"wiz_hue_e_noapisupport_hint": "Opcja \"<b> Użyj interfejsu API Hue Entertainmen</b>” nie została zaznaczona.",
"wiz_hue_e_noegrpids": "Brak zdefiniowanych grup rozrywkowych na tym moście Hue.",
"wiz_hue_e_nogrpids": "Ten mostek Hue nie ma zdefiniowanych grup. Utwórz przynajmniej jedną za pomocą aplikacji Hue.",

View File

@ -5,6 +5,8 @@
"InfoDialog_changePassword_title": "Alterar a senha",
"InfoDialog_iswitch_text": "Se você executar o Hyperion mais de uma vez em sua rede local, poderá alternar entre as configurações da web. Selecione a instância do Hyperion abaixo e mude!",
"InfoDialog_iswitch_title": "Switcher Hyperion",
"InfoDialog_nostorage_text": "O seu navegador não suporta localStorage. Você não pode salvar uma configuração de especifica de linguagem (retorna para 'detecção automática') e nível de acesso (retorno para 'padrão'). Algumas funções podem estarem escondidas. Você pode usar sem futuros problemas",
"InfoDialog_nostorage_title": "Não foi possível salvar as configurações",
"InfoDialog_nowrite_foottext": "O WebUI será desbloqueado automaticamente depois que você resolver o problema!",
"InfoDialog_nowrite_text": "O Hyperion não pode gravar em seu arquivo de configuração carregado atualmente. Repare as permissões do arquivo para continuar.",
"InfoDialog_nowrite_title": "erro de permissão de gravação!",
@ -40,6 +42,7 @@
"conf_general_intro": "Configurações básicas do Hyperion e da WebUI que não se encaixam em outra categoria.",
"conf_general_label_title": "Configurações gerais",
"conf_grabber_fg_intro": "A captura da plataforma é a captura do seu sistema local como fonte de entrada em que o Hyperion está instalado.",
"conf_grabber_inst_grabber_config_info": "Configure seus dispositivos de hardware de captura para serem usados pela instância no modo avançado",
"conf_grabber_v4l_intro": "Captura USB é um dispositivo (de captura) conectado via USB que é usado para inserir imagens de origem para processamento.",
"conf_helptable_expl": "Explicação",
"conf_helptable_option": "Opção",
@ -48,8 +51,12 @@
"conf_leds_contr_label_contrtype": "Tipo de controlador:",
"conf_leds_device_info_log": "Caso seus LEDs não funcionem, verifique aqui se há erros:",
"conf_leds_device_intro": "Hyperion suporta vários controladores para transmitir sinal para o seu dispositivo. Selecione o contolador de LED da lista e configure. Nós escolhemos as melhores configurações padrão para cada dispositivo.",
"conf_leds_error_get_properties_text": "Falha ao obter as propriedades do dispositivo. Verifique os itens de configuração.",
"conf_leds_error_get_properties_title": "Propriedades do dispositivo",
"conf_leds_error_hwled_gt_layout": "A contagem de LEDs do hardware ($1) é maior do que os LEDs configurados via layout ($2),<br>$3 {{plural:$3|LED|LEDs}} permanecerá preto se você continuar.",
"conf_leds_error_hwled_gt_maxled": "A contagem de LEDs de hardware ($1) é maior que o número máximo de LEDs suportados pelo dispositivo ($2). <br> A contagem de LEDs do hardware está definida para ($3).",
"conf_leds_error_hwled_lt_layout": "A contagem de LEDs do hardware ($1) é menor do que os LEDs configurados por layout ($2).<br>O número de LEDs configurados no layout não deve exceder os LEDs disponíveis",
"conf_leds_info_ws281x": "Hyperion deve rodar com privilégios 'root' para este tipo de controle!",
"conf_leds_layout_advanced": "Configurações Avançadas",
"conf_leds_layout_blacklist_num_title": "Número de LEDs",
"conf_leds_layout_blacklist_rule_title": "Regra da lista negra",
@ -90,6 +97,7 @@
"conf_leds_layout_generatedconf": "Configuração de LED gerado / atual",
"conf_leds_layout_intro": "Você tambem precisa do layout dos leds, que refere a posição dos leds. O layout clássico que é usado geralmente é a moldura de tv, mas também suportamos a criação de matriz de leds (paredes de leds). A vista desse layout é sempre da FRENTE da tv.",
"conf_leds_layout_ma_cabling": "Cabeamento",
"conf_leds_layout_ma_direction": "Direção",
"conf_leds_layout_ma_horiz": "Horizontal",
"conf_leds_layout_ma_optbottomleft": "Base esquerda",
"conf_leds_layout_ma_optbottomright": "Base direita",
@ -125,10 +133,12 @@
"conf_leds_optgroup_RPiGPIO": "RPi CPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_debug": "Depuração",
"conf_leds_optgroup_network": "Rede",
"conf_leds_optgroup_other": "Outro",
"conf_leds_optgroup_usb": "USB/Serial",
"conf_logging_btn_autoscroll": "Rolagem automática",
"conf_logging_btn_clipboard": "Copiar Registros",
"conf_logging_btn_pbupload": "Faça upload de um relatório para solicitações de suporte",
"conf_logging_contpolicy": "Política de Privacidade do Relatório",
"conf_logging_label_intro": "Área para verificar as mensagens de log, você verá mais ou menos informações dependendo do nível de log definido.",
@ -174,7 +184,12 @@
"dashboard_infobox_label_instance": "Instância:",
"dashboard_infobox_label_latesthyp": "Última versão do Hyperion:",
"dashboard_infobox_label_platform": "Plataforma:",
"dashboard_infobox_label_port_boblight": "Servidor Boblight:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "Servidor-JSON:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
"dashboard_infobox_label_ports": "Portas",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_smartacc": "Acesso inteligente",
"dashboard_infobox_label_statush": "Estado do Hyperion:",
"dashboard_infobox_label_title": "Informação",
@ -192,6 +207,7 @@
"dashboard_newsbox_readmore": "Leia mais",
"dashboard_newsbox_visitblog": "Visite o Blog do Hyperion",
"edt_append_degree": "°",
"edt_append_frames": "frames",
"edt_append_hz": "hz",
"edt_append_leds": "LEDS",
"edt_append_ms": "ms",
@ -264,10 +280,13 @@
"edt_conf_effp_paths_expl": "Você pode definir mais pastas que contêm efeitos. O configurador de efeitos sempre salvará dentro da primeira pasta.",
"edt_conf_effp_paths_itemtitle": "Caminho",
"edt_conf_effp_paths_title": "Caminho (s) do efeito",
"edt_conf_enum_BOTH": "Horizontal e Vertical",
"edt_conf_enum_HORIZONTAL": "Horizontal",
"edt_conf_enum_NO_CHANGE": "Automático",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Vertical",
"edt_conf_enum_automatic": "Automatico",
"edt_conf_enum_bbclassic": "Clássico",
"edt_conf_enum_bbdefault": "Padrão",
@ -352,10 +371,19 @@
"edt_conf_general_port_title": "Porta",
"edt_conf_general_priority_expl": "A prioridade deste componente",
"edt_conf_general_priority_title": "Canal prioritário",
"edt_conf_grabber_discovered_expl": "Selecione o seu dispositivo de captura enontrado",
"edt_conf_grabber_discovered_none": "Não foi encontrado dispositivo de captura",
"edt_conf_grabber_discovered_title": "Dispositivo encontrado",
"edt_conf_grabber_discovered_title_info": "Selecione o seu dispositivo de captura descoberto",
"edt_conf_grabber_discovery_inprogress": "Descobrimento em andamento",
"edt_conf_instC_screen_grabber_device_expl": "O dispositivo de captura de tela usado",
"edt_conf_instC_screen_grabber_device_title": "Dispositivo de captura de tela",
"edt_conf_instC_systemEnable_expl": "Ativa a captura da plataforma para esta instância de hardware",
"edt_conf_instC_systemEnable_title": "Habilitar captura de plataforma",
"edt_conf_instC_v4lEnable_expl": "Ativa a captura USB para esta instância de hardware",
"edt_conf_instC_v4lEnable_title": "Ativa captura USB",
"edt_conf_instC_video_grabber_device_expl": "O dispositivo de captura de video usado",
"edt_conf_instC_video_grabber_device_title": "Dispositivo de captura de video",
"edt_conf_instCapture_heading_title": "Captura de Instância",
"edt_conf_js_heading_title": "Servidor JSON",
"edt_conf_log_heading_title": "Registro",
@ -403,21 +431,41 @@
"edt_conf_v4l2_cecDetection_title": "Detecção CEC",
"edt_conf_v4l2_cropBottom_expl": "Contagem de pixels na parte inferior que são removidos da imagem.",
"edt_conf_v4l2_cropBottom_title": "Cortar base",
"edt_conf_v4l2_cropHeightValidation_error": "Corte superior + Corte inferior não pode ser maior que a Altura ($1)",
"edt_conf_v4l2_cropLeft_expl": "Contagem de pixels no lado esquerdo que são removidos da imagem.",
"edt_conf_v4l2_cropLeft_title": "Cortar à esquerda",
"edt_conf_v4l2_cropRight_expl": "Contagem de pixels no lado direito que são removidos da imagem.",
"edt_conf_v4l2_cropRight_title": "Cortar à direita",
"edt_conf_v4l2_cropTop_expl": "Contagem de pixels na parte superior que são removidos da imagem.",
"edt_conf_v4l2_cropTop_title": "Cortar topo",
"edt_conf_v4l2_cropWidthValidation_error": "Corte esquerdo + Corte direito não pode ser maior que a Largura ($1)",
"edt_conf_v4l2_device_expl": "O caminho para a interface de captura USB. Defina como 'Automático' para detecção automática. Exemplo: '/ dev / video0'",
"edt_conf_v4l2_device_title": "Dispositivo",
"edt_conf_v4l2_encoding_expl": "Forçar a codificação de vídeo para grabbers com capacidade multiformato",
"edt_conf_v4l2_encoding_title": "Formato de encoding",
"edt_conf_v4l2_flip_expl": "Isso permite que você inverta a imagem horizontalmente, verticalmente ou ambos.",
"edt_conf_v4l2_flip_title": "Espelhar imagem",
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "Para economizar recursos, cada enésimo quadro será processado apenas. Por ex. se o grabber estiver definido para 30fps com esta opção definida para 5, o resultado final será em torno de 6fps",
"edt_conf_v4l2_fpsSoftwareDecimation_title": "Pulo de quadros do software",
"edt_conf_v4l2_framerate_expl": "Os quadros por segundo suportados do dispositivo ativo",
"edt_conf_v4l2_framerate_title": "Quadros por segundo",
"edt_conf_v4l2_greenSignalThreshold_expl": "Escurece valores verdes baixos (reconhecidos como pretos)",
"edt_conf_v4l2_greenSignalThreshold_title": "Limite do sinal verde",
"edt_conf_v4l2_hardware_brightness_expl": "Definir brilho do hardware",
"edt_conf_v4l2_hardware_brightness_title": "Controle de brilho for hardware",
"edt_conf_v4l2_hardware_contrast_expl": "Definir contraste do hardware",
"edt_conf_v4l2_hardware_contrast_title": "Controle de contraste do hardware",
"edt_conf_v4l2_hardware_hue_expl": "Definir hue do hardware",
"edt_conf_v4l2_hardware_hue_title": "Controle de hue do hardware",
"edt_conf_v4l2_hardware_saturation_expl": "Definir saturação do hardware",
"edt_conf_v4l2_hardware_saturation_title": "Controle de saturação do hardware",
"edt_conf_v4l2_hardware_set_defaults": "Controles do hardware padrão",
"edt_conf_v4l2_hardware_set_defaults_tip": "Defina os valores padrão do dispositivo para brilho, contraste, matiz e saturação",
"edt_conf_v4l2_heading_title": "Captura USB",
"edt_conf_v4l2_input_expl": "Selecione a entrada de vídeo do seu dispositivo. 'Automático' mantém o valor escolhido pela interface v4l2.",
"edt_conf_v4l2_input_title": "Entrada",
"edt_conf_v4l2_noSignalCounterThreshold_expl": "Contagem de quadros (verifique isso com o modo FPS atual do grabber) após o qual o sem sinal é acionado",
"edt_conf_v4l2_noSignalCounterThreshold_title": "Limite do contador de sinal",
"edt_conf_v4l2_redSignalThreshold_expl": "Escurece valores baixos de vermelho (reconhecido como preto)",
"edt_conf_v4l2_redSignalThreshold_title": "Limite de sinal vermelho",
"edt_conf_v4l2_resolution_expl": "Uma lista de resoluções suportadas do dispositivo ativo",
@ -453,6 +501,8 @@
"edt_dev_enum_sub_min_warm_adjust": "Subtrair o branco quente",
"edt_dev_enum_subtract_minimum": "Subtrair mínimo",
"edt_dev_enum_white_off": "Branco apagado",
"edt_dev_general_autostart_title": "Iniciar automaticamente",
"edt_dev_general_autostart_title_info": "O dispositivo LED está ligado durante a inicialização ou não",
"edt_dev_general_colorOrder_title": "Ordem de bytes RGB",
"edt_dev_general_colorOrder_title_info": "A ordem de cores do dispositivo",
"edt_dev_general_hardwareLedCount_title": "Contagem de LED de hardware",
@ -468,8 +518,6 @@
"edt_dev_spec_baudrate_title": "Taxa de transmissão",
"edt_dev_spec_blackLightsTimeout_title": "Tempo limite de detecção de sinal em preto",
"edt_dev_spec_brightnessFactor_title": "Fator de brilho",
"edt_dev_spec_brightnessMax_title": "Brilho máximo",
"edt_dev_spec_brightnessMin_title": "Brilho mínimo",
"edt_dev_spec_brightnessOverwrite_title": "Sobrescrever brilho",
"edt_dev_spec_brightnessThreshold_title": "Signal detection brightness minimum",
"edt_dev_spec_brightness_title": "Brilho",
@ -478,7 +526,6 @@
"edt_dev_spec_clientKey_title": "Chavecliente:",
"edt_dev_spec_colorComponent_title": "Componente de cor",
"edt_dev_spec_debugLevel_title": "Nível de Depuração",
"edt_dev_spec_debugStreamer_title": "Streamer Debug",
"edt_dev_spec_delayAfterConnect_title": "Atrasar após conectar",
"edt_dev_spec_devices_discovered_none": "Nenhum dispositivo foi descoberto",
"edt_dev_spec_devices_discovered_title": "Dispositivos descobertos",
@ -523,13 +570,13 @@
"edt_dev_spec_port_title": "Porta",
"edt_dev_spec_printTimeStamp_title": "Adicionar carimbo de data / hora",
"edt_dev_spec_pwmChannel_title": "Canal PWM",
"edt_dev_spec_razer_device_title": "Dispositivo Razer Chroma",
"edt_dev_spec_restoreOriginalState_title": "Restaurar o estado das luzes",
"edt_dev_spec_restoreOriginalState_title_info": "Restaura o estado original do dispositivo quando o dispositivo é desativado",
"edt_dev_spec_serial_title": "Número Serial",
"edt_dev_spec_spipath_title": "Dispositivo SPI",
"edt_dev_spec_sslHSTimeoutMax_title": "Tempo limite máximo do aperto de mão do Streamer",
"edt_dev_spec_sslHSTimeoutMin_title": "Tempo limite mínimo de handshake do Streamer",
"edt_dev_spec_sslReadTimeout_title": "Tempo limite de leitura do streamer",
"edt_dev_spec_switchOffOnBlack_title": "Desligue no preto",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Desligar, abaixo do mínimo",
"edt_dev_spec_syncOverwrite_title": "Desactivar a sincronização",
@ -598,9 +645,14 @@
"edt_eff_frequency": "Frequência",
"edt_eff_gif_header": "GIF's",
"edt_eff_gif_header_desc": "Este efeito reproduz arquivos .gif, fornece um vídeo simples como um loop como efeito.",
"edt_eff_grayscale": "Escala de cinza",
"edt_eff_height": "Altura",
"edt_eff_huechange": "Mudança de cor",
"edt_eff_image": "Arquivo de imagem",
"edt_eff_image_source": "Arquivo da imagem",
"edt_eff_image_source_file": "Arquivo local",
"edt_eff_image_source_url": "URL",
"edt_eff_initial_blink": "Piscar para chamar atenção",
"edt_eff_interval": "intervalo",
"edt_eff_knightrider_header": "Knight Rider",
"edt_eff_knightrider_header_desc": "K.I.T.T está de volta! O scanner frontal do conhecido carro, desta vez não apenas em vermelho.",
@ -638,6 +690,7 @@
"edt_eff_reversedirection": "Reverter direção",
"edt_eff_rotationtime": "Tempo de rotação",
"edt_eff_saturation": "Saturação",
"edt_eff_set_post_color": "Ajustar a cor após um alarme",
"edt_eff_showseconds": "Mostrar segundos",
"edt_eff_sleeptime": "Tempo de descanso",
"edt_eff_smooth_custom": "Habilitar suavização",
@ -656,6 +709,7 @@
"edt_eff_traces_header_desc": "Requer redesenho",
"edt_eff_trails_header": "Estrelas cadentes",
"edt_eff_trails_header_desc": "Estrelas coloridas que caem de cima para baixo",
"edt_eff_url": "Endereço de imagem",
"edt_eff_waves_header": "Ondas",
"edt_eff_waves_header_desc": "Ondas de cor! Escolha suas cores, tempo de rotação, direção reversa e muito mais.",
"edt_eff_whichleds": "Quais LEDs",
@ -680,6 +734,10 @@
"edt_msg_error_disallow": "O valor não deve ser do tipo $1",
"edt_msg_error_disallow_union": "O valor não deve ser um dos tipos não permitidos fornecidos",
"edt_msg_error_enum": "O valor deve ser um dos valores enumerados",
"edt_msg_error_hostname": "O nome do host tem o formato errado",
"edt_msg_error_invalid_epoch": "A data deve ser superior a 1 de Janeiro de 1970",
"edt_msg_error_ipv4": "O valor deve ser um endereço IPv4 válido na forma de 4 números entre 0 e 255, separados por pontos",
"edt_msg_error_ipv6": "O valor deve ser um endereço IPv6 válido",
"edt_msg_error_maxItems": "O valor deve ter no máximo $1 itens",
"edt_msg_error_maxLength": "O valor deve ter no máximo $1 caracteres",
"edt_msg_error_maxProperties": "O objeto deve ter no máximo $1 propriedades",
@ -700,6 +758,8 @@
"edt_msg_error_type": "O valor deve ser do tipo $1",
"edt_msg_error_type_union": "O valor deve ser um dos tipos fornecidos",
"edt_msg_error_uniqueItems": "A matriz deve ter itens exclusivos",
"edt_msgcust_error_hostname_ip": "Não é um nome de host válido nem IPv4 nem IPv6",
"edt_msgcust_error_hostname_ip4": "Não é um nome de host válido nem IPv4",
"effectsconfigurator_button_conttest": "Teste Contínuo",
"effectsconfigurator_button_deleffect": "Deletar Efeito",
"effectsconfigurator_button_editeffect": "Carregar Efgeito",
@ -756,14 +816,20 @@
"general_country_ru": "Rússia",
"general_country_uk": "Reino Unido",
"general_country_us": "Estados Unidos",
"general_disabled": "Desativado",
"general_enabled": "Ativado",
"general_speech_cs": "Tcheco",
"general_speech_da": "Dinamarquês",
"general_speech_de": "Alemanha",
"general_speech_en": "Inglês",
"general_speech_es": "Espanhol",
"general_speech_fr": "Francês",
"general_speech_hu": "Hungáro",
"general_speech_it": "Italiano",
"general_speech_nb": "Norueguês (Bokmål)",
"general_speech_nl": "Holandês",
"general_speech_pl": "Polonês",
"general_speech_pt": "Português",
"general_speech_ro": "Romeno",
"general_speech_ru": "Russo",
"general_speech_sv": "Sueco",
@ -783,6 +849,10 @@
"infoDialog_import_confirm_title": "Confirmar importação",
"infoDialog_import_hyperror_text": "O arquivo de configuração selecionado \"$1\" não pode ser importado. Não é compatível com Hyperion 2.0 e superior!",
"infoDialog_import_jsonerror_text": "O arquivo de configuração selecionado \"$1\" não é um arquivo .json ou está corrompido. Mensagem de erro: ($2)",
"infoDialog_password_current_text": "Senha atual",
"infoDialog_password_minimum_length": "Senhas precisam conter no mínimo 8 caracteres.",
"infoDialog_password_new_text": "Nova senha",
"infoDialog_username_text": "Usuário",
"infoDialog_wizrgb_text": "Sua ordem de bytes RGB já está bem ajustada.",
"infoDialog_writeconf_error_text": "Falha ao salvar sua configuração.",
"infoDialog_writeimage_error_text": "O arquivo selecionado \"$1\" não é um arquivo de imagem ou está corrompido! Selecione outro arquivo de imagem.",
@ -802,6 +872,7 @@
"main_ledsim_btn_togglelednumber": "Números dos LEDs",
"main_ledsim_btn_toggleleds": "Mostrar LEDs",
"main_ledsim_btn_togglelivevideo": "Video em tempo real",
"main_ledsim_btn_togglesigdetect": "Área de detecção de sinal",
"main_ledsim_text": "Visualização em tempo real das cores dos LEDs e, opcionalmente, stream de vídeo do dispositivo de captura.",
"main_ledsim_title": "Visualização LED",
"main_menu_about_token": "Sobre o Hyperion",
@ -813,6 +884,7 @@
"main_menu_general_conf_token": "Geral",
"main_menu_grabber_conf_token": "Hardware de Captura",
"main_menu_input_selection_token": "Seleção de",
"main_menu_instcapture_conf_token": "Fontes",
"main_menu_leds_conf_token": "Hardware LED",
"main_menu_logging_token": "Log",
"main_menu_network_conf_token": "Serviços de Rede",
@ -912,6 +984,7 @@
"wiz_cc_testintrok": "Pressione o botão abaixo para iniciar um vídeo de teste.",
"wiz_cc_testintrowok": "Confira o seguinte link para baixar vídeos de teste:",
"wiz_cc_title": "Assistente de calibração de cores",
"wiz_cc_try_connect": "Conectando...",
"wiz_cololight_desc2": "Agora escolha quais Cololights devem ser adicionados. Para identificar luzes individuais, pressione o botão à direita.",
"wiz_cololight_intro1": "Este assistente configura o Hyperion para o sistema Cololight. Os recursos são a detecção automática Cololight e ajuste as configurações do Hyperion automaticamente! Resumindo: Tudo o que você precisa é de alguns cliques e pronto! <br /> Nota: No caso do Cololight Strip, pode ser necessário corrigir manualmente a contagem e o layout dos LEDs.",
"wiz_cololight_noprops": "Não é possível obter propriedades do dispositivo - Definir contagem de LED de hardware manualmente",
@ -947,6 +1020,7 @@
"wiz_hue_username": "ID de Usuário:",
"wiz_identify": "Identificar",
"wiz_identify_light": "identificar $1",
"wiz_identify_tip": "Acender dispositivo configurado para identificação",
"wiz_ids_disabled": "Desativado",
"wiz_ids_entire": "Foto Inteira",
"wiz_noLights": "Nenhum $1 encontrado! Conecte as luzes à rede ou configure-as manualmente.",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,8 @@
"InfoDialog_changePassword_title": "修改密码",
"InfoDialog_iswitch_text": "如果您在本地网络中运行多个 Hyperion实例可以在 Web 配置之间切换。 选择下面的 Hyperion 实例并切换!",
"InfoDialog_iswitch_title": "Hyperion切换器",
"InfoDialog_nostorage_text": "您的浏览器不支持 localStorage。您无法保存特定的语言设置回退到“自动检测”和访问级别回退到“默认”。某些向导可能被隐藏。您仍然可以使用网络界面而不会出现其他问题",
"InfoDialog_nostorage_title": "无法存储设置",
"InfoDialog_nowrite_foottext": "在解决问题后WebUI会自动在会被解锁",
"InfoDialog_nowrite_text": "Hyperion 无法写入您当前加载的配置文件。 请修复文件权限以继续。",
"InfoDialog_nowrite_title": "写入权限错误!",
@ -20,9 +22,9 @@
"conf_colors_blackborder_intro": "跳过任意黑边。 每种模式都使用另一种针对特殊情况进行调整的检测算法。 如果觉得不合适,请提高阈值。",
"conf_colors_color_intro": "创建一个或多个校准配置文件,调整每种颜色,亮度,线性化等等。",
"conf_colors_smoothing_intro": "平滑颜色/亮度变化以减少烦扰的注意力分散。",
"conf_effect_bgeff_intro": "定义背景效/颜色,将在 Hyperion“空闲”时显示。 始终为优先级255 。",
"conf_effect_fgeff_intro": "定义启动效或颜色,在 Hyperion 启动时显示,将持续指定的时长。",
"conf_effect_path_intro": "从定义的路径加载效。另外,您可以按名称禁用单个效,以在所有效列表中隐藏它们。",
"conf_effect_bgeff_intro": "定义背景/颜色,将在 Hyperion“空闲”时显示。 始终为优先级255 。",
"conf_effect_fgeff_intro": "定义启动或颜色,在 Hyperion 启动时显示,将持续指定的时长。",
"conf_effect_path_intro": "从定义的路径加载。另外,您可以按名称禁用单个效,以在所有效列表中隐藏它们。",
"conf_general_createInst_btn": "创建实例",
"conf_general_impexp_expbtn": "导出",
"conf_general_impexp_impbtn": "导入",
@ -40,6 +42,7 @@
"conf_general_intro": "Hyperion 和 WebUI 的基本设置。",
"conf_general_label_title": "常规设置",
"conf_grabber_fg_intro": "屏幕捕获的输入源为安装了Hyperion本地系统的屏幕。",
"conf_grabber_inst_grabber_config_info": "conf_grabber_inst_grabber_config_info",
"conf_grabber_v4l_intro": "USB捕获的输入源为USB图像捕获设备。",
"conf_helptable_expl": "说明",
"conf_helptable_option": "选项",
@ -48,8 +51,12 @@
"conf_leds_contr_label_contrtype": "控制器类型:",
"conf_leds_device_info_log": "若您的LED不工作在此检视错误",
"conf_leds_device_intro": "Hyperion支持许多控制器传输数据到您的目标设备。 从排序列表中选择一个LED控制器并进行配置。 我们为每个设备选择了最佳默认设置。",
"conf_leds_error_get_properties_text": "conf_leds_error_get_properties_text",
"conf_leds_error_get_properties_title": "conf_leds_error_get_properties_title",
"conf_leds_error_hwled_gt_layout": "硬件LED数量($1)大于通过布局配置的LED数量($2)<br>$3 {{plural:$3|LED|LEDs}}将无法点亮。",
"conf_leds_error_hwled_gt_maxled": "conf_leds_error_hwled_gt_maxled",
"conf_leds_error_hwled_lt_layout": "硬件LED数量($1)小于通过布局配置的LED数量($2)。 <br> 布局中配置的LED数量不得超过可用LED数量。",
"conf_leds_info_ws281x": "conf_leds_info_ws281x",
"conf_leds_layout_advanced": "高级设置",
"conf_leds_layout_blacklist_num_title": "LED数量",
"conf_leds_layout_blacklist_rule_title": "黑名单规则",
@ -90,6 +97,7 @@
"conf_leds_layout_generatedconf": "生成/当前LED配置",
"conf_leds_layout_intro": "您还需要一个LED布局以反映您的LED具体位置。 经典布局是常用电视框架但我们也支持创建LED矩阵LED 墙)。此布局的视角始终为电视的正面。",
"conf_leds_layout_ma_cabling": "布线",
"conf_leds_layout_ma_direction": "conf_leds_layout_ma_direction",
"conf_leds_layout_ma_horiz": "水平",
"conf_leds_layout_ma_optbottomleft": "左下",
"conf_leds_layout_ma_optbottomright": "右下",
@ -111,7 +119,7 @@
"conf_leds_layout_preview_ledpower": "LED峰值功耗$1 A",
"conf_leds_layout_preview_originCL": "从经典布局LED框架创建",
"conf_leds_layout_preview_originMA": "从矩阵布局LED墙创建",
"conf_leds_layout_preview_originTEXT": "Created from: Textfield",
"conf_leds_layout_preview_originTEXT": "原始文字",
"conf_leds_layout_preview_totalleds": "LED总数$1",
"conf_leds_layout_ptl": "左上角",
"conf_leds_layout_ptlh": "水平",
@ -125,10 +133,12 @@
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_debug": "conf_leds_optgroup_debug",
"conf_leds_optgroup_network": "网络",
"conf_leds_optgroup_other": "其他",
"conf_leds_optgroup_usb": "USB/串口",
"conf_logging_btn_autoscroll": "自动滚动",
"conf_logging_btn_clipboard": "conf_logging_btn_clipboard",
"conf_logging_btn_pbupload": "上传请求支持报告",
"conf_logging_contpolicy": "举报隐私政策",
"conf_logging_label_intro": "查看日志的页面,信息多少取决于设置的日志级别。",
@ -168,30 +178,31 @@
"dashboard_componentbox_label_comp": "组件",
"dashboard_componentbox_label_status": "状态",
"dashboard_componentbox_label_title": "组件状态",
"dashboard_infobox_label_currenthyp": "您的Hyperion版本",
"dashboard_infobox_label_currenthyp": "Hyperion版本",
"dashboard_infobox_label_disableh": "禁用实例: $1",
"dashboard_infobox_label_enableh": "启用实例: $1",
"dashboard_infobox_label_instance": "实例:",
"dashboard_infobox_label_latesthyp": "最新的Hyperion版本",
"dashboard_infobox_label_platform": "平台:",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "JSON-Server:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
"dashboard_infobox_label_port_boblight": "dashboard_infobox_label_port_boblight",
"dashboard_infobox_label_port_flat": "dashboard_infobox_label_port_flat",
"dashboard_infobox_label_port_json": "dashboard_infobox_label_port_json",
"dashboard_infobox_label_port_proto": "dashboard_infobox_label_port_proto",
"dashboard_infobox_label_ports": "端口",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_ports_websocket": "dashboard_infobox_label_ports_websocket",
"dashboard_infobox_label_smartacc": "智能访问",
"dashboard_infobox_label_statush": "Hyperion状态",
"dashboard_infobox_label_title": "信息",
"dashboard_infobox_label_watchedversionbranch": "监控的版本分支:",
"dashboard_infobox_label_watchedversionbranch": "版本分支:",
"dashboard_infobox_message_updatesuccess": "您的Hyperion版本是最新的",
"dashboard_infobox_message_updatewarning": "Hyperion出新番啦,你确定不更新一下吗 ($1)",
"dashboard_infobox_message_updatewarning": "Hyperion更新啦,你确定不更新一下吗 ($1)",
"dashboard_label_intro": "仪表板可以让您快速了解Hyperion的状态",
"dashboard_message_default_password": "WebUI现在只设置了默认密码。我们强烈建议您更改。",
"dashboard_message_default_password_t": "WebUI默认密码已设",
"dashboard_message_do_not_show_again": "我不想再看到它啦",
"dashboard_message_global_setting": "该页面的设置不取决于任何特定的实例。更改设置将应用于所有实例。",
"dashboard_message_global_setting_t": "实例独立设置",
"dashboard_newsbox_label_title": "Hyperion博客",
"dashboard_newsbox_label_title": "Hyperion新闻",
"dashboard_newsbox_noconn": "Hyperion走丢了你们中间的那条线呢",
"dashboard_newsbox_readmore": "更多消息",
"dashboard_newsbox_visitblog": "来康康我们的博客呢",
@ -219,11 +230,11 @@
"edt_conf_bb_threshold_title": "阈值",
"edt_conf_bb_unknownFrameCnt_expl": "边界设置为0之前不检测的帧数。",
"edt_conf_bb_unknownFrameCnt_title": "未知帧数",
"edt_conf_bge_heading_title": "背景效/颜色",
"edt_conf_bge_heading_title": "背景/颜色",
"edt_conf_bobls_heading_title": "Boblight服务",
"edt_conf_color_backlightColored_expl": "给背景光加点颜色。",
"edt_conf_color_backlightColored_title": "颜色背景光",
"edt_conf_color_backlightThreshold_expl": "背景光最小亮度。在显示效,颜色和状态为“关闭”时不启用。",
"edt_conf_color_backlightThreshold_expl": "背景光最小亮度。在显示,颜色和状态为“关闭”时不启用。",
"edt_conf_color_backlightThreshold_title": "背景光阈值",
"edt_conf_color_black_expl": "校准的黑色色度。",
"edt_conf_color_black_title": "黑色",
@ -261,22 +272,25 @@
"edt_conf_color_white_title": "白色",
"edt_conf_color_yellow_expl": "校准的黄色色度。",
"edt_conf_color_yellow_title": "黄色",
"edt_conf_effp_disable_expl": "将需要禁用或隐藏的效名字添加至此。",
"edt_conf_effp_disable_itemtitle": "效",
"edt_conf_effp_disable_title": "禁用效",
"edt_conf_effp_heading_title": "效路径",
"edt_conf_effp_paths_expl": "你可以定义更多包含效文件的文件夹。效配置器将始终保存在第一个文件夹中。",
"edt_conf_effp_disable_expl": "将需要禁用或隐藏的名字添加至此。",
"edt_conf_effp_disable_itemtitle": "",
"edt_conf_effp_disable_title": "禁用",
"edt_conf_effp_heading_title": "路径",
"edt_conf_effp_paths_expl": "你可以定义更多包含文件的文件夹。效配置器将始终保存在第一个文件夹中。",
"edt_conf_effp_paths_itemtitle": "路径",
"edt_conf_effp_paths_title": "特效路径",
"edt_conf_effp_paths_title": "效果路径",
"edt_conf_enum_BOTH": "edt_conf_enum_BOTH",
"edt_conf_enum_HORIZONTAL": "edt_conf_enum_HORIZONTAL",
"edt_conf_enum_NO_CHANGE": "自动",
"edt_conf_enum_NTSC": "NTSC",
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "edt_conf_enum_VERTICAL",
"edt_conf_enum_automatic": "自动",
"edt_conf_enum_bbclassic": "经典",
"edt_conf_enum_bbdefault": "默认",
"edt_conf_enum_bbletterbox": "信箱",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bbosd": "屏幕菜单",
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_bottom_up": "下到上",
"edt_conf_enum_brg": "BRG",
@ -291,16 +305,16 @@
"edt_conf_enum_dl_verbose1": "详情等级1",
"edt_conf_enum_dl_verbose2": "详情等级2",
"edt_conf_enum_dl_verbose3": "详情等级3",
"edt_conf_enum_effect": "效",
"edt_conf_enum_effect": "",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "左到右",
"edt_conf_enum_linear": "线性",
"edt_conf_enum_logdebug": "Debug",
"edt_conf_enum_logdebug": "调试",
"edt_conf_enum_logsilent": "Silent",
"edt_conf_enum_logverbose": "详情",
"edt_conf_enum_logwarn": "Warning",
"edt_conf_enum_logwarn": "警告",
"edt_conf_enum_multicolor_mean": "彩色",
"edt_conf_enum_please_select": "请选择",
"edt_conf_enum_rbg": "RBG",
@ -328,12 +342,12 @@
"edt_conf_fg_width_title": "宽度",
"edt_conf_fge_color_expl": "如类型为“颜色”,请在此选择需要的颜色。",
"edt_conf_fge_color_title": "颜色",
"edt_conf_fge_duration_ms_expl": "Hyperion启动时效/颜色持续时间。",
"edt_conf_fge_duration_ms_expl": "Hyperion启动时/颜色持续时间。",
"edt_conf_fge_duration_ms_title": "持续时间",
"edt_conf_fge_effect_expl": "如果类型为“效”,请在此选择需要的效(也可以自己创建效)。",
"edt_conf_fge_effect_title": "效",
"edt_conf_fge_heading_title": "启动效/颜色",
"edt_conf_fge_type_expl": "选择效或者颜色。",
"edt_conf_fge_effect_expl": "如果类型为“”,请在此选择需要的效(也可以自己创建效)。",
"edt_conf_fge_effect_title": "",
"edt_conf_fge_heading_title": "启动/颜色",
"edt_conf_fge_type_expl": "选择或者颜色。",
"edt_conf_fge_type_title": "类型",
"edt_conf_fw_flat_expl": "一行填一个Flatbuffer目标。包括IP:PORT (示例: 127.0.0.1:19401",
"edt_conf_fw_flat_itemtitle": "Flatbuffer目标",
@ -356,10 +370,19 @@
"edt_conf_general_port_title": "端口",
"edt_conf_general_priority_expl": "该组件的优先级",
"edt_conf_general_priority_title": "优先级通道号",
"edt_conf_grabber_discovered_expl": "edt_conf_grabber_discovered_expl",
"edt_conf_grabber_discovered_none": "edt_conf_grabber_discovered_none",
"edt_conf_grabber_discovered_title": "edt_conf_grabber_discovered_title",
"edt_conf_grabber_discovered_title_info": "edt_conf_grabber_discovered_title_info",
"edt_conf_grabber_discovery_inprogress": "edt_conf_grabber_discovery_inprogress",
"edt_conf_instC_screen_grabber_device_expl": "edt_conf_instC_screen_grabber_device_expl",
"edt_conf_instC_screen_grabber_device_title": "edt_conf_instC_screen_grabber_device_title",
"edt_conf_instC_systemEnable_expl": "对该LED硬件实例启用屏幕捕获。",
"edt_conf_instC_systemEnable_title": "启用屏幕捕获",
"edt_conf_instC_v4lEnable_expl": "对该LED硬件实例启用USB捕获。",
"edt_conf_instC_v4lEnable_title": "启用USB捕获",
"edt_conf_instC_video_grabber_device_expl": "edt_conf_instC_video_grabber_device_expl",
"edt_conf_instC_video_grabber_device_title": "edt_conf_instC_video_grabber_device_title",
"edt_conf_instCapture_heading_title": "捕获",
"edt_conf_js_heading_title": "JSON服务",
"edt_conf_log_heading_title": "日志",
@ -384,7 +407,7 @@
"edt_conf_pbs_timeout_title": "超时",
"edt_conf_smooth_continuousOutput_expl": "即使图像不变化也更新LED。",
"edt_conf_smooth_continuousOutput_title": "持续输出",
"edt_conf_smooth_decay_expl": "衰减速度。1为线性更大的值意味更强的效。",
"edt_conf_smooth_decay_expl": "衰减速度。1为线性更大的值意味更强的。",
"edt_conf_smooth_decay_title": "衰减度",
"edt_conf_smooth_dithering_expl": "通过在相邻颜色之间交替来提高高输出速度下的颜色精度。",
"edt_conf_smooth_dithering_title": "抖动",
@ -407,21 +430,41 @@
"edt_conf_v4l2_cecDetection_title": "CEC检测",
"edt_conf_v4l2_cropBottom_expl": "从图像中删除的底部像素数。",
"edt_conf_v4l2_cropBottom_title": "底部缩进",
"edt_conf_v4l2_cropHeightValidation_error": "edt_conf_v4l2_cropHeightValidation_error",
"edt_conf_v4l2_cropLeft_expl": "从图像中删除的左边像素数。",
"edt_conf_v4l2_cropLeft_title": "左边缩进",
"edt_conf_v4l2_cropRight_expl": "从图像中删除的右边像素数。",
"edt_conf_v4l2_cropRight_title": "右边缩进",
"edt_conf_v4l2_cropTop_expl": "从图像中删除的顶部像素数。",
"edt_conf_v4l2_cropTop_title": "定部缩进",
"edt_conf_v4l2_cropWidthValidation_error": "edt_conf_v4l2_cropWidthValidation_error",
"edt_conf_v4l2_device_expl": "USB捕获设备的路径。设置为“自动”时自动检测。例/dev/video0",
"edt_conf_v4l2_device_title": "设备",
"edt_conf_v4l2_encoding_expl": "edt_conf_v4l2_encoding_expl",
"edt_conf_v4l2_encoding_title": "edt_conf_v4l2_encoding_title",
"edt_conf_v4l2_flip_expl": "edt_conf_v4l2_flip_expl",
"edt_conf_v4l2_flip_title": "edt_conf_v4l2_flip_title",
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "edt_conf_v4l2_fpsSoftwareDecimation_expl",
"edt_conf_v4l2_fpsSoftwareDecimation_title": "edt_conf_v4l2_fpsSoftwareDecimation_title",
"edt_conf_v4l2_framerate_expl": "设备支持的帧数",
"edt_conf_v4l2_framerate_title": "帧数",
"edt_conf_v4l2_greenSignalThreshold_expl": "使低绿色值变暗(识别为黑色)",
"edt_conf_v4l2_greenSignalThreshold_title": "绿色信号阈值",
"edt_conf_v4l2_hardware_brightness_expl": "edt_conf_v4l2_hardware_brightness_expl",
"edt_conf_v4l2_hardware_brightness_title": "edt_conf_v4l2_hardware_brightness_title",
"edt_conf_v4l2_hardware_contrast_expl": "edt_conf_v4l2_hardware_contrast_expl",
"edt_conf_v4l2_hardware_contrast_title": "edt_conf_v4l2_hardware_contrast_title",
"edt_conf_v4l2_hardware_hue_expl": "edt_conf_v4l2_hardware_hue_expl",
"edt_conf_v4l2_hardware_hue_title": "edt_conf_v4l2_hardware_hue_title",
"edt_conf_v4l2_hardware_saturation_expl": "edt_conf_v4l2_hardware_saturation_expl",
"edt_conf_v4l2_hardware_saturation_title": "edt_conf_v4l2_hardware_saturation_title",
"edt_conf_v4l2_hardware_set_defaults": "edt_conf_v4l2_hardware_set_defaults",
"edt_conf_v4l2_hardware_set_defaults_tip": "edt_conf_v4l2_hardware_set_defaults_tip",
"edt_conf_v4l2_heading_title": "USB捕获",
"edt_conf_v4l2_input_expl": "选择设备的视频输入。 选择“自动”以保留v4l2所选值。",
"edt_conf_v4l2_input_title": "输入",
"edt_conf_v4l2_noSignalCounterThreshold_expl": "edt_conf_v4l2_noSignalCounterThreshold_expl",
"edt_conf_v4l2_noSignalCounterThreshold_title": "edt_conf_v4l2_noSignalCounterThreshold_title",
"edt_conf_v4l2_redSignalThreshold_expl": "使低红色值变暗(识别为黑色)",
"edt_conf_v4l2_redSignalThreshold_title": "红色信号阈值",
"edt_conf_v4l2_resolution_expl": "启用设备所支持的分辨率列表",
@ -472,8 +515,6 @@
"edt_dev_spec_baudrate_title": "比特率",
"edt_dev_spec_blackLightsTimeout_title": "黑色信号检测超时",
"edt_dev_spec_brightnessFactor_title": "亮度因数",
"edt_dev_spec_brightnessMax_title": "最大亮度",
"edt_dev_spec_brightnessMin_title": "最小亮度",
"edt_dev_spec_brightnessOverwrite_title": "覆盖亮度",
"edt_dev_spec_brightnessThreshold_title": "信号检测亮度最小值",
"edt_dev_spec_brightness_title": "亮度",
@ -482,7 +523,6 @@
"edt_dev_spec_clientKey_title": "客户端密钥",
"edt_dev_spec_colorComponent_title": "颜色组件",
"edt_dev_spec_debugLevel_title": "Debug级别",
"edt_dev_spec_debugStreamer_title": "流媒体Debug",
"edt_dev_spec_delayAfterConnect_title": "连接后延迟",
"edt_dev_spec_devices_discovered_none": "未发现设备",
"edt_dev_spec_devices_discovered_title": "发现设备",
@ -527,20 +567,20 @@
"edt_dev_spec_port_title": "端口",
"edt_dev_spec_printTimeStamp_title": "加时间戳",
"edt_dev_spec_pwmChannel_title": "PWM通道",
"edt_dev_spec_razer_device_title": "edt_dev_spec_razer_device_title",
"edt_dev_spec_restoreOriginalState_title": "恢复灯状态",
"edt_dev_spec_restoreOriginalState_title_info": "设备不启用时恢复设备原始状态",
"edt_dev_spec_serial_title": "序列号",
"edt_dev_spec_spipath_title": "SPI设备",
"edt_dev_spec_sslHSTimeoutMax_title": "推流握手超时最大值",
"edt_dev_spec_sslHSTimeoutMin_title": "推流握手超时最小值",
"edt_dev_spec_sslReadTimeout_title": "推流读取超时Streamer read timeout",
"edt_dev_spec_switchOffOnBlack_title": "黑屏时关闭",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "小于最小值时关闭",
"edt_dev_spec_syncOverwrite_title": "禁用同步",
"edt_dev_spec_targetIpHost_title": "目标Hostname/IP",
"edt_dev_spec_targetIpHost_title_info": "设备的或IP地址",
"edt_dev_spec_targetIp_title": "目标IP",
"edt_dev_spec_transeffect_title": "过渡效",
"edt_dev_spec_transeffect_title": "过渡",
"edt_dev_spec_transistionTimeExtra_title": "额外暗屏时间",
"edt_dev_spec_transistionTime_title": "过渡时间",
"edt_dev_spec_uid_title": "UID",
@ -559,7 +599,7 @@
"edt_eff_basecolorchangerate": "基本色改变频率",
"edt_eff_basecolorrangeleft": "基本色左区域",
"edt_eff_basecolorrangeright": "基本色右区域",
"edt_eff_blobcount": "数",
"edt_eff_blobcount": "斑数",
"edt_eff_brightness": "亮度",
"edt_eff_candle_header": "蜡烛",
"edt_eff_candle_header_desc": "闪烁的蜡烛",
@ -573,20 +613,20 @@
"edt_eff_colorMinute": "颜色分钟",
"edt_eff_colorSecond": "颜色秒",
"edt_eff_colorcount": "颜色长度",
"edt_eff_colorend": "颜色结束",
"edt_eff_colorendtime": "保持起始颜色的时间",
"edt_eff_colorend": "结束颜色",
"edt_eff_colorendtime": "起始颜色保持时间",
"edt_eff_colorevel": "颜色级别",
"edt_eff_colorone": "颜色1",
"edt_eff_colorrandom": "随机颜色",
"edt_eff_colorshift": "颜色转换",
"edt_eff_colorstart": "颜色起始",
"edt_eff_colorstarttime": "保持结束颜色时间",
"edt_eff_colorstart": "开始颜色",
"edt_eff_colorstarttime": "结束颜色持续时间",
"edt_eff_colortwo": "颜色2",
"edt_eff_count": "数量",
"edt_eff_countries": "国家",
"edt_eff_customColor": "自定颜色",
"edt_eff_enableSecondSwirl": "第二漩涡",
"edt_eff_enableshutdown": "关停",
"edt_eff_enableshutdown": "允许关停",
"edt_eff_enum_all": "所有",
"edt_eff_enum_all-together": "所有一起",
"edt_eff_enum_list": "LED列表",
@ -601,10 +641,15 @@
"edt_eff_fps": "每秒帧数",
"edt_eff_frequency": "频率",
"edt_eff_gif_header": "GIF图",
"edt_eff_gif_header_desc": "该特效播放gif图片呈现简单的视频特效T。",
"edt_eff_gif_header_desc": "该效果播放gif图片呈现简单的视频效果T。",
"edt_eff_grayscale": "edt_eff_grayscale",
"edt_eff_height": "高度",
"edt_eff_huechange": "颜色变化",
"edt_eff_image": "图像文件",
"edt_eff_image_source": "edt_eff_image_source",
"edt_eff_image_source_file": "edt_eff_image_source_file",
"edt_eff_image_source_url": "edt_eff_image_source_url",
"edt_eff_initial_blink": "edt_eff_initial_blink",
"edt_eff_interval": "间隔",
"edt_eff_knightrider_header": "霹雳游侠",
"edt_eff_knightrider_header_desc": "基特归来!基特的前置灯光扫描,不仅只有红色哦。",
@ -642,9 +687,10 @@
"edt_eff_reversedirection": "反转方向",
"edt_eff_rotationtime": "旋转时间",
"edt_eff_saturation": "饱和",
"edt_eff_set_post_color": "edt_eff_set_post_color",
"edt_eff_showseconds": "显示秒数",
"edt_eff_sleeptime": "休眠时间",
"edt_eff_smooth_custom": "平滑使能",
"edt_eff_smooth_custom": "平滑",
"edt_eff_smooth_time_ms": "平滑时间",
"edt_eff_smooth_updateFrequency": "平滑更新频率",
"edt_eff_snake_header": "蛇",
@ -655,11 +701,12 @@
"edt_eff_swirl_header": "彩色漩涡",
"edt_eff_swirl_header_desc": "自定义颜色的漩涡。 颜色甚至可以扩展到 360°基于颜色之间的变化计算。 另外,您可以在顶部添加第二个漩涡,请注意需要部分透明度! 提示:相同颜色的重复会导致“更高”的颜色区域并减少的颜色变化区域。",
"edt_eff_systemshutdown_header": "系统关停",
"edt_eff_systemshutdown_header_desc": "真实系统关停模拟动画效",
"edt_eff_systemshutdown_header_desc": "真实系统关停模拟动画",
"edt_eff_traces_header": "颜色追踪",
"edt_eff_traces_header_desc": "需要重新设计",
"edt_eff_trails_header": "落星",
"edt_eff_trails_header_desc": "从上落下的彩色的星星",
"edt_eff_url": "URL",
"edt_eff_waves_header": "波浪",
"edt_eff_waves_header_desc": "颜色波浪!可选择您的颜色,旋转时间,方向反转等。",
"edt_eff_whichleds": "哪个LED",
@ -684,6 +731,10 @@
"edt_msg_error_disallow": "该值不能时类型$1",
"edt_msg_error_disallow_union": "该值不能为不允许的类型",
"edt_msg_error_enum": "该值必须为枚举值",
"edt_msg_error_hostname": "edt_msg_error_hostname",
"edt_msg_error_invalid_epoch": "edt_msg_error_invalid_epoch",
"edt_msg_error_ipv4": "edt_msg_error_ipv4",
"edt_msg_error_ipv6": "edt_msg_error_ipv6",
"edt_msg_error_maxItems": "该值最多只能有$1个项目",
"edt_msg_error_maxLength": "该值最多只能有$1字符的长度",
"edt_msg_error_maxProperties": "对象最多拥有$1个属性",
@ -704,16 +755,18 @@
"edt_msg_error_type": "该值必须为类型$1",
"edt_msg_error_type_union": "该值必须为允许的类型之一",
"edt_msg_error_uniqueItems": "数组必须为唯一项目",
"edt_msgcust_error_hostname_ip": "edt_msgcust_error_hostname_ip",
"edt_msgcust_error_hostname_ip4": "edt_msgcust_error_hostname_ip4",
"effectsconfigurator_button_conttest": "连续测试",
"effectsconfigurator_button_deleffect": "删除特效",
"effectsconfigurator_button_editeffect": "加载效",
"effectsconfigurator_button_saveeffect": "保存效",
"effectsconfigurator_button_deleffect": "删除",
"effectsconfigurator_button_editeffect": "加载",
"effectsconfigurator_button_saveeffect": "保存",
"effectsconfigurator_button_starttest": "开始测试",
"effectsconfigurator_button_stoptest": "停止测试",
"effectsconfigurator_editdeleff": "删除/加载效",
"effectsconfigurator_editdeleff": "删除/加载",
"effectsconfigurator_label_chooseeff": "选择模板",
"effectsconfigurator_label_effectname": "效名称",
"effectsconfigurator_label_intro": "根据您的喜好根据基本效创建新效。 根据效,有颜色、速度、方向等选项可用。",
"effectsconfigurator_label_effectname": "名称",
"effectsconfigurator_label_intro": "根据您的喜好根据基本创建新效。 根据效,有颜色、速度、方向等选项可用。",
"general_access_advanced": "高级",
"general_access_default": "默认",
"general_access_expert": "专家",
@ -763,10 +816,12 @@
"general_disabled": "禁用",
"general_enabled": "启用",
"general_speech_cs": "捷克语",
"general_speech_da": "general_speech_da",
"general_speech_de": "德语",
"general_speech_en": "英语",
"general_speech_es": "西班牙语",
"general_speech_fr": "法语",
"general_speech_hu": "general_speech_hu",
"general_speech_it": "意大利语",
"general_speech_nb": "挪威语",
"general_speech_nl": "荷兰语",
@ -778,11 +833,11 @@
"general_speech_tr": "土耳其语",
"general_speech_vi": "越语",
"general_speech_zh-CN": "中文(简体)",
"general_webui_title": "Hyperion - Web配置",
"general_webui_title": "Hyperion - 网页配置",
"general_wiki_moreto": "更多关于\"$1\"的信息请访问我们的Wiki",
"infoDialog_checklist_title": "清单",
"infoDialog_effconf_created_text": "效“$1”已成功创建",
"infoDialog_effconf_deleted_text": "效“$1”已成功删除",
"infoDialog_effconf_created_text": "“$1”已成功创建",
"infoDialog_effconf_deleted_text": "“$1”已成功删除",
"infoDialog_general_error_title": "错误",
"infoDialog_general_success_title": "成功",
"infoDialog_general_warning_title": "警告",
@ -791,6 +846,10 @@
"infoDialog_import_confirm_title": "确认导入",
"infoDialog_import_hyperror_text": "所选配置文件\"$1\"无法导入。与Hyperion 2.0或更高版本不兼容!",
"infoDialog_import_jsonerror_text": "所选配置文件\"$1\"不是.json文件或文件已损坏。错误信息($2)",
"infoDialog_password_current_text": "当前密码",
"infoDialog_password_minimum_length": "infoDialog_password_minimum_length",
"infoDialog_password_new_text": "新密码",
"infoDialog_username_text": "infoDialog_username_text",
"infoDialog_wizrgb_text": "您的RGB顺序已调整好。",
"infoDialog_writeconf_error_text": "保持配置失败。",
"infoDialog_writeimage_error_text": "所选文件\"$1\"不是图像文件,或文件已损坏!请选择其他图像文件。",
@ -810,36 +869,38 @@
"main_ledsim_btn_togglelednumber": "LED编号",
"main_ledsim_btn_toggleleds": "显示LED",
"main_ledsim_btn_togglelivevideo": "实时画面",
"main_ledsim_btn_togglesigdetect": "main_ledsim_btn_togglesigdetect",
"main_ledsim_text": "实时显示led颜色和当前捕获设备的视频流。",
"main_ledsim_title": "LED实时状态",
"main_menu_about_token": "关于",
"main_menu_colors_conf_token": "图像处理",
"main_menu_configuration_token": "LED实例",
"main_menu_colors_conf_token": "颜色校准",
"main_menu_configuration_token": "LED配置",
"main_menu_dashboard_token": "仪表盘",
"main_menu_effect_conf_token": "效",
"main_menu_effectsconfigurator_token": "特效配置",
"main_menu_general_conf_token": "一般",
"main_menu_effect_conf_token": "",
"main_menu_effectsconfigurator_token": "效果定制",
"main_menu_general_conf_token": "常规设置",
"main_menu_grabber_conf_token": "捕获硬件",
"main_menu_input_selection_token": "输入选择",
"main_menu_instcapture_conf_token": "main_menu_instcapture_conf_token",
"main_menu_leds_conf_token": "LED硬件",
"main_menu_logging_token": "日志",
"main_menu_network_conf_token": "网络服务",
"main_menu_remotecontrol_token": "远程控制",
"main_menu_support_token": "支持",
"main_menu_system_token": "系统",
"main_menu_support_token": "帮助支持",
"main_menu_system_token": "系统设置",
"main_menu_update_token": "更新资料",
"main_menu_webconfig_token": "网页配置",
"remote_adjustment_intro": "在运行时修改颜色/亮度/补偿。$1",
"remote_adjustment_label": "颜色调整",
"remote_color_button_reset": "重置颜色/效",
"remote_color_intro": "设置效或颜色。列出了创建的效(如果有的话)。$1",
"remote_color_label": "颜色/效",
"remote_color_button_reset": "重置颜色/",
"remote_color_intro": "设置或颜色。列出了创建的效(如果有的话)。$1",
"remote_color_label": "颜色/",
"remote_color_label_color": "颜色:",
"remote_components_intro": "在运行时启用和禁用Hyperion的组件。 $1",
"remote_components_label": "组件控制",
"remote_effects_label_effects": "效:",
"remote_effects_label_effects": ":",
"remote_effects_label_picture": "图片:",
"remote_input_clearall": "清楚所有效/颜色",
"remote_input_clearall": "清楚所有/颜色",
"remote_input_duration": "持续时间:",
"remote_input_intro": "Hyperion 使用优先级系统来选择源。 您设置的所有内容都有优先级(效果/颜色/屏幕捕获/USB 捕获和网络源)。 默认情况下Hyperion 根据优先级选择源(最低数字反映当前活动源)。 现在您有机会自行选择来源。$1",
"remote_input_ip": "IP:",
@ -856,10 +917,10 @@
"remote_maptype_label": "映射类型",
"remote_maptype_label_multicolor_mean": "彩色",
"remote_maptype_label_unicolor_mean": "单色",
"remote_optgroup_syseffets": "预制效",
"remote_optgroup_syseffets": "预制",
"remote_optgroup_templates_custom": "用户模板",
"remote_optgroup_templates_system": "预制模板",
"remote_optgroup_usreffets": "用户效",
"remote_optgroup_usreffets": "用户",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3D左右模式",
"remote_videoMode_3DTAB": "3DTAB",
@ -900,7 +961,7 @@
"wiz_atmoorb_title": "AtmoOrb向导",
"wiz_cc_adjustgamma": "伽马值:您需要做的是,调整每个通道的伽马级别,直到每个通道的感知量相同。 提示1.0为中性! 例如,如果您的灰色有点偏红,则意味着您必须增加红色伽玛以减少红色(伽玛越多,颜色越少)。",
"wiz_cc_adjustit": "调整您的\"$1\",直到您满意为止。请注意:您对默认值的调整越多,色谱将受到限制(也适用于介于两者之间的所有颜色)。 根据 TV/LED 色谱的不同,结果会有所不同。",
"wiz_cc_backlight": "此外,您可以定义背景光以在几乎黑暗的区域中挑选出“错误颜色”,或者如果您不喜欢在观看过程中在颜色和关闭之间的切换。另外,您可以定义是否应该有某种颜色或只是白色。在“关”、“颜色”和“效”状态下禁用此选项。",
"wiz_cc_backlight": "此外,您可以定义背景光以在几乎黑暗的区域中挑选出“错误颜色”,或者如果您不喜欢在观看过程中在颜色和关闭之间的切换。另外,您可以定义是否应该有某种颜色或只是白色。在“关”、“颜色”和“”状态下禁用此选项。",
"wiz_cc_btn_stop": "停止视频",
"wiz_cc_btn_switchpic": "切换图像",
"wiz_cc_chooseid": "为此颜色配置文件定义名称。",
@ -920,6 +981,7 @@
"wiz_cc_testintrok": "按下下面的按钮开始测试视频。",
"wiz_cc_testintrowok": "查看以下链接下载测试视频:",
"wiz_cc_title": "颜色校准向导",
"wiz_cc_try_connect": "wiz_cc_try_connect",
"wiz_cololight_desc2": "现在选择应该添加哪些 Cololights。要识别单个灯请按右侧的按钮。",
"wiz_cololight_intro1": "此向导配置Hyperion以使用Cololight系统。功能为Cololight自动检测并自动调整Hyperion设置简而言之您只需要点击几下即可完成<br />注意如使用Cololight Strip您可能需要手动更正 LED 数量和布局。",
"wiz_cololight_noprops": "无法获取设备属性-手动定义硬件LED计数",
@ -955,6 +1017,7 @@
"wiz_hue_username": "用户名ID:",
"wiz_identify": "识别",
"wiz_identify_light": "识别 $1",
"wiz_identify_tip": "wiz_identify_tip",
"wiz_ids_disabled": "已停用",
"wiz_ids_entire": "整个图片",
"wiz_noLights": "$1未找到请将灯连接到网络或手动配置。",

View File

@ -19,8 +19,15 @@
<title data-i18n="general_webui_title">Hyperion - Web Configuration</title>
<!-- jQuery -->
<script src="js/lib/jquery.min.js"></script>
<!-- jQuery - Prod -->
<script src="js/lib/jquery/jquery-3.6.0.min.js"></script>
<script src="js/lib/jquery/jquery-migrate-3.3.2.min.js"></script>
<!-- jQuery - Dev -->
<!--
<script src="js/lib/jquery/dev/jquery-3.6.0.js"></script>
<script src="js/lib/jquery/dev/jquery-migrate-3.3.2.js"></script>
-->
<!-- SemVer -->
<script src='js/lib/semver.js'></script>
@ -42,6 +49,12 @@
<!-- JSONEditor -->
<script src="js/lib/jsoneditor.js"></script>
<!-- PlainDraggable -->
<script src="js/lib/plain-draggable.min.js"></script>
<!-- LeaderLine -->
<script src="js/lib/leader-line.min.js"></script>
<!--Language Support -->
<script src="js/lib/jquery.i18n/jquery.i18n.js"></script>
<script src="js/lib/jquery.i18n/jquery.i18n.messagestore.js"></script>
@ -65,7 +78,11 @@
<link href="css/bootstrap-select.min.css" rel="stylesheet">
<!-- MetisMenu CSS -->
<link href="css/metisMenu.css" rel="stylesheet">
<link href="css/metisMenu.min.css" rel="stylesheet">
<!-- Gijgo CSS -->
<link href="css/gijgo/core.min.css" rel="stylesheet">
<link href="css/gijgo/dialog.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="css/sb-admin-2.css" rel="stylesheet">
@ -77,6 +94,9 @@
<!-- Material Design Icons - https://github.com/Templarian/MaterialDesign-Webfont -->
<link href="css/materialdesignicons.min.css" media="all" rel="stylesheet" type="text/css">
<!-- Animate.css -->
<link href="css/animate.min.css" rel="stylesheet" type="text/css">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
@ -195,6 +215,39 @@
</li>
</ul>
</li>
<!-- /.dropdown -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-power-off fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-alerts">
<li id="btn_systemSuspend">
<a>
<div>
<i class="fa fa-stop fa-fw"></i>
<span data-i18n="InfoDialog_systemSuspend_title"></span>
</div>
</a>
</li>
<li id="btn_systemResume">
<a>
<div>
<i class="fa fa-play fa-fw"></i>
<span data-i18n="InfoDialog_systemResume_title"></span>
</div>
</a>
</li>
<li class="divider"></li>
<li id="btn_systemRestart">
<a>
<div>
<i class="fa fa-refresh fa-fw"></i>
<span data-i18n="InfoDialog_systemRestart_title"></span>
</div>
</a>
</li>
</ul>
</li>
<!-- /.lock-ui -->
<li class="dropdown" id="btn_lock_ui" style="display:none">
@ -222,7 +275,7 @@
<li> <a class="inactive mnava" id="MenuItemGrabber" href="#conf_grabber"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></a> </li>
<li> <a class="inactive mnava" id="MenuItemNetwork" href="#conf_network"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network</span></a> </li>
<li> <a class="inactive mnava" href="#remote"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></a> </li>
<li> <a class="inactive mnava" href="#effects_configurator"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></a> </li>
<li> <a class="inactive mnava" id="MenuItemEffectsConfig" href="#effects_configurator"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></a> </li>
<li> <a class="inactive mnava" href="#support"><i class="fa fa-info fa-fw"></i><span data-i18n="main_menu_support_token">Support</span></a> </li>
<li>
<a class="inactive"><i class="fa fa-industry fa-fw"></i><span data-i18n="main_menu_system_token">System</span><span class="fa arrow"></span></a>
@ -320,7 +373,11 @@
<div id="ledsim_dialog" style="display:none; z-index:9998">
<div data-role="body" style="padding:0px;">
<div id="ledsim_text"></div>
<div id="leds_canvas"></div>
<div id="leds_canvas">
<canvas id="image_preview_canv" style="position: absolute; left: 0; top: 0; z-index: 99998;"></canvas>
<canvas id="leds_preview_canv" style="position: absolute; left: 0; top: 0; opacity: 0.75; z-index: 99999;"></canvas>
<canvas id="grab_preview_canv" style="position: absolute; left: 0; top: 0; z-index: 99999;"></canvas>
</div>
</div>
<div data-role="footer" style="text-align:center">
<button type="button" class="btn btn-success" id="leds_toggle"><i class="fa fa-fw fa-lightbulb-o"></i><span data-i18n="main_ledsim_btn_toggleleds">leds</span></button>
@ -351,8 +408,9 @@
<script src="js/wizard.js"></script>
<!--gijgo dialog-->
<script src="js/lib/draggable.min.js"></script>
<script src="js/lib/dialog.min.js"></script>
<script src="js/lib/gijgo/core.min.js"></script>
<script src="js/lib/gijgo/draggable.min.js"></script>
<script src="js/lib/gijgo/dialog.min.js"></script>
<script src="js/ledsim.js"></script>
<!--Client-side download-->

View File

@ -1,6 +1,8 @@
$(document).ready(function () {
performTranslation();
var BORDERDETECT_ENABLED = (jQuery.inArray("borderdetection", window.serverInfo.services) !== -1);
// update instance listing
updateHyperionInstanceListing();
@ -20,15 +22,19 @@ $(document).ready(function () {
$('#conf_cont_smoothing').append(createHelpTable(window.schema.smoothing.properties, $.i18n("edt_conf_smooth_heading_title"), "smoothingHelpPanelId"));
//blackborder
$('#conf_cont').append(createRow('conf_cont_blackborder'));
$('#conf_cont_blackborder').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
$('#conf_cont_blackborder').append(createHelpTable(window.schema.blackborderdetector.properties, $.i18n("edt_conf_bb_heading_title"), "blackborderHelpPanelId"));
if (BORDERDETECT_ENABLED) {
$('#conf_cont').append(createRow('conf_cont_blackborder'));
$('#conf_cont_blackborder').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
$('#conf_cont_blackborder').append(createHelpTable(window.schema.blackborderdetector.properties, $.i18n("edt_conf_bb_heading_title"), "blackborderHelpPanelId"));
}
}
else {
$('#conf_cont').addClass('row');
$('#conf_cont').append(createOptPanel('fa-photo', $.i18n("edt_conf_color_heading_title"), 'editor_container_color', 'btn_submit_color'));
$('#conf_cont').append(createOptPanel('fa-photo', $.i18n("edt_conf_smooth_heading_title"), 'editor_container_smoothing', 'btn_submit_smoothing'));
$('#conf_cont').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
if (BORDERDETECT_ENABLED) {
$('#conf_cont').append(createOptPanel('fa-photo', $.i18n("edt_conf_bb_heading_title"), 'editor_container_blackborder', 'btn_submit_blackborder'));
}
}
//color
@ -37,7 +43,7 @@ $(document).ready(function () {
}, true, true);
editor_color.on('change', function () {
editor_color.validate().length || window.readOnlyMode ? $('#btn_submit_color').attr('disabled', true) : $('#btn_submit_color').attr('disabled', false);
editor_color.validate().length || window.readOnlyMode ? $('#btn_submit_color').prop('disabled', true) : $('#btn_submit_color').prop('disabled', false);
});
$('#btn_submit_color').off().on('click', function () {
@ -58,7 +64,7 @@ $(document).ready(function () {
showInputOptionsForKey(editor_smoothing, "smoothing", "enable", false);
$('#smoothingHelpPanelId').hide();
}
editor_smoothing.validate().length || window.readOnlyMode ? $('#btn_submit_smoothing').attr('disabled', true) : $('#btn_submit_smoothing').attr('disabled', false);
editor_smoothing.validate().length || window.readOnlyMode ? $('#btn_submit_smoothing').prop('disabled', true) : $('#btn_submit_smoothing').prop('disabled', false);
});
$('#btn_submit_smoothing').off().on('click', function () {
@ -66,28 +72,30 @@ $(document).ready(function () {
});
//blackborder
editor_blackborder = createJsonEditor('editor_container_blackborder', {
blackborderdetector: window.schema.blackborderdetector
}, true, true);
if (BORDERDETECT_ENABLED) {
editor_blackborder = createJsonEditor('editor_container_blackborder', {
blackborderdetector: window.schema.blackborderdetector
}, true, true);
editor_blackborder.on('change', function () {
var blackborderEnable = editor_blackborder.getEditor("root.blackborderdetector.enable").getValue();
if (blackborderEnable) {
showInputOptionsForKey(editor_blackborder, "blackborderdetector", "enable", true);
$('#blackborderHelpPanelId').show();
$('#blackborderWikiLinkId').show();
editor_blackborder.on('change', function () {
var blackborderEnable = editor_blackborder.getEditor("root.blackborderdetector.enable").getValue();
if (blackborderEnable) {
showInputOptionsForKey(editor_blackborder, "blackborderdetector", "enable", true);
$('#blackborderHelpPanelId').show();
$('#blackborderWikiLinkId').show();
} else {
showInputOptionsForKey(editor_blackborder, "blackborderdetector", "enable", false);
$('#blackborderHelpPanelId').hide();
$('#blackborderWikiLinkId').hide();
}
editor_blackborder.validate().length || window.readOnlyMode ? $('#btn_submit_blackborder').attr('disabled', true) : $('#btn_submit_blackborder').attr('disabled', false);
});
} else {
showInputOptionsForKey(editor_blackborder, "blackborderdetector", "enable", false);
$('#blackborderHelpPanelId').hide();
$('#blackborderWikiLinkId').hide();
}
editor_blackborder.validate().length || window.readOnlyMode ? $('#btn_submit_blackborder').prop('disabled', true) : $('#btn_submit_blackborder').prop('disabled', false);
});
$('#btn_submit_blackborder').off().on('click', function () {
requestWriteConfig(editor_blackborder.getValue());
});
$('#btn_submit_blackborder').off().on('click', function () {
requestWriteConfig(editor_blackborder.getValue());
});
}
//wiki links
var wikiElement = $(buildWL("user/advanced/Advanced.html#blackbar-detection", "edt_conf_bb_mode_title", true));
@ -98,7 +106,9 @@ $(document).ready(function () {
if (window.showOptHelp) {
createHint("intro", $.i18n('conf_colors_color_intro'), "editor_container_color");
createHint("intro", $.i18n('conf_colors_smoothing_intro'), "editor_container_smoothing");
createHint("intro", $.i18n('conf_colors_blackborder_intro'), "editor_container_blackborder");
if (BORDERDETECT_ENABLED) {
createHint("intro", $.i18n('conf_colors_blackborder_intro'), "editor_container_blackborder");
}
}
removeOverlay();

View File

@ -58,19 +58,20 @@ $(document).ready(function () {
if (components[idx].name != "ALL") {
if ((components[idx].name === "FORWARDER" && window.currentHyperionInstance != 0) ||
(components[idx].name === "GRABBER" && !window.serverConfig.framegrabber.enable) ||
(components[idx].name === "V4L" && !window.serverConfig.grabberV4L2.enable))
continue;
(components[idx].name === "V4L" && !window.serverConfig.grabberV4L2.enable) ||
(components[idx].name === "AUDIO" && !window.serverConfig.grabberAudio.enable))
continue;
var comp_enabled = components[idx].enabled ? "checked" : "";
const general_comp = "general_comp_" + components[idx].name;
componentBtn = '<input ' +
'id="' + general_comp + '" ' + comp_enabled +
' type="checkbox" ' +
'data-toggle="toggle" ' +
'data-size="mini" ' +
'data-onstyle="success" ' +
'data-on="' + $.i18n('general_btn_on') + '" ' +
'data-off="' + $.i18n('general_btn_off') + '">';
var comp_enabled = components[idx].enabled ? "checked" : "";
const general_comp = "general_comp_" + components[idx].name;
componentBtn = '<input ' +
'id="' + general_comp + '" ' + comp_enabled +
' type="checkbox" ' +
'data-toggle="toggle" ' +
'data-size="mini" ' +
'data-onstyle="success" ' +
'data-on="' + $.i18n('general_btn_on') + '" ' +
'data-off="' + $.i18n('general_btn_off') + '">';
instance_components += '<tr><td></td><td>' + $.i18n('general_comp_' + components[idx].name) + '</td><td style="text-align:right">' + componentBtn + '</td></tr>';
}
@ -85,7 +86,7 @@ $(document).ready(function () {
updateHyperionInstanceListing();
$('#instanceButton').bootstrapToggle();
$('#instanceButton').change(e => {
$('#instanceButton').on("change", e => {
requestSetComponentState('ALL', e.currentTarget.checked);
});
@ -93,7 +94,7 @@ $(document).ready(function () {
if (components[idx].name != "ALL") {
$("#general_comp_" + components[idx].name).bootstrapToggle();
$("#general_comp_" + components[idx].name).bootstrapToggle(hyperion_enabled ? "enable" : "disable");
$("#general_comp_" + components[idx].name).change(e => {
$("#general_comp_" + components[idx].name).on("change", e => {
requestSetComponentState(e.currentTarget.id.split('_')[2], e.currentTarget.checked);
});
}
@ -102,15 +103,56 @@ $(document).ready(function () {
// add more info
var screenGrabber = window.serverConfig.framegrabber.enable ? $.i18n('general_enabled') : $.i18n('general_disabled');
$('#dash_screen_grabber').html(screenGrabber);
var videoGrabber = window.serverConfig.grabberV4L2.enable ? $.i18n('general_enabled') : $.i18n('general_disabled');
$('#dash_video_grabber').html(videoGrabber);
var screenGrabberAvailable = (window.serverInfo.grabbers.screen.available.length !== 0);
var videoGrabberAvailable = (window.serverInfo.grabbers.video.available.length !== 0);
const audioGrabberAvailable = (window.serverInfo.grabbers.audio.available.length !== 0);
var fbPort = window.serverConfig.flatbufServer.enable ? window.serverConfig.flatbufServer.port : $.i18n('general_disabled');
$('#dash_fbPort').html(fbPort);
var pbPort = window.serverConfig.protoServer.enable ? window.serverConfig.protoServer.port : $.i18n('general_disabled');
$('#dash_pbPort').html(pbPort);
if (screenGrabberAvailable || videoGrabberAvailable || audioGrabberAvailable) {
if (screenGrabberAvailable) {
var screenGrabber = window.serverConfig.framegrabber.enable ? $.i18n('general_enabled') : $.i18n('general_disabled');
$('#dash_screen_grabber').html(screenGrabber);
} else {
$("#dash_screen_grabber_row").hide();
}
if (videoGrabberAvailable) {
var videoGrabber = window.serverConfig.grabberV4L2.enable ? $.i18n('general_enabled') : $.i18n('general_disabled');
$('#dash_video_grabber').html(videoGrabber);
} else {
$("#dash_video_grabber_row").hide();
}
if (audioGrabberAvailable) {
const audioGrabber = window.serverConfig.grabberAudio.enable ? $.i18n('general_enabled') : $.i18n('general_disabled');
$('#dash_audio_grabber').html(audioGrabber);
} else {
$("#dash_audio_grabber_row").hide();
}
} else {
$("#dash_capture_hw").hide();
}
if (jQuery.inArray("flatbuffer", window.serverInfo.services) !== -1) {
var fbPort = window.serverConfig.flatbufServer.enable ? window.serverConfig.flatbufServer.port : $.i18n('general_disabled');
$('#dash_fbPort').html(fbPort);
} else {
$("#dash_ports_flat_row").hide();
}
if (jQuery.inArray("protobuffer", window.serverInfo.services) !== -1) {
var pbPort = window.serverConfig.protoServer.enable ? window.serverConfig.protoServer.port : $.i18n('general_disabled');
$('#dash_pbPort').html(pbPort);
} else {
$("#dash_ports_proto_row").hide();
}
if (jQuery.inArray("boblight", window.serverInfo.services) !== -1) {
var boblightPort = window.serverConfig.boblightServer.enable ? window.serverConfig.boblightServer.port : $.i18n('general_disabled');
$('#dash_boblightPort').html(boblightPort);
} else {
$("#dash_ports_boblight_row").hide();
}
var jsonPort = window.serverConfig.jsonServer.port;
$('#dash_jsonPort').html(jsonPort);

View File

@ -1,72 +1,89 @@
$(document).ready( function() {
performTranslation();
$(document).ready(function () {
performTranslation();
// update instance listing
updateHyperionInstanceListing();
var EFFECTENGINE_ENABLED = (jQuery.inArray("effectengine", window.serverInfo.services) !== -1);
var oldEffects = [];
var effects_editor = null;
var confFgEff = window.serverConfig.foregroundEffect.effect;
var confBgEff = window.serverConfig.backgroundEffect.effect;
var foregroundEffect_editor = null;
var backgroundEffect_editor = null;
// update instance listing
updateHyperionInstanceListing();
if(window.showOptHelp)
{
//foreground effect
$('#conf_cont').append(createRow('conf_cont_fge'));
$('#conf_cont_fge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
var oldEffects = [];
var effects_editor = null;
var confFgEff = window.serverConfig.foregroundEffect.effect;
var confBgEff = window.serverConfig.backgroundEffect.effect;
var foregroundEffect_editor = null;
var backgroundEffect_editor = null;
if (!EFFECTENGINE_ENABLED) {
window.schema.foregroundEffect.properties.type.enum.splice(1, 1);
window.schema.foregroundEffect.properties.type.options.enum_titles.splice(1, 1);
window.schema.foregroundEffect.properties.type.default = "color";
delete window.schema.foregroundEffect.properties.effect;
window.schema.backgroundEffect.properties.type.enum.splice(1, 1);
window.schema.backgroundEffect.properties.type.options.enum_titles.splice(1, 1);
window.schema.backgroundEffect.properties.type.default = "color";
delete window.schema.backgroundEffect.properties.effect;
}
if (window.showOptHelp) {
//foreground effect
$('#conf_cont').append(createRow('conf_cont_fge'));
$('#conf_cont_fge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
$('#conf_cont_fge').append(createHelpTable(window.schema.foregroundEffect.properties, $.i18n("edt_conf_fge_heading_title"), "foregroundEffectHelpPanelId"));
//background effect
$('#conf_cont').append(createRow('conf_cont_bge'));
$('#conf_cont_bge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
//background effect
$('#conf_cont').append(createRow('conf_cont_bge'));
$('#conf_cont_bge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
$('#conf_cont_bge').append(createHelpTable(window.schema.backgroundEffect.properties, $.i18n("edt_conf_bge_heading_title"), "backgroundEffectHelpPanelId"));
//effect path
if(storedAccess != 'default')
{
$('#conf_cont').append(createRow('conf_cont_ef'));
$('#conf_cont_ef').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
$('#conf_cont_ef').append(createHelpTable(window.schema.effects.properties, $.i18n("edt_conf_effp_heading_title")));
}
}
else
{
$('#conf_cont').addClass('row');
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
if(storedAccess != 'default')
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
}
if (EFFECTENGINE_ENABLED) {
//effect path
if (storedAccess != 'default') {
$('#conf_cont').append(createRow('conf_cont_ef'));
$('#conf_cont_ef').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
$('#conf_cont_ef').append(createHelpTable(window.schema.effects.properties, $.i18n("edt_conf_effp_heading_title")));
}
}
}
else {
$('#conf_cont').addClass('row');
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
if (EFFECTENGINE_ENABLED) {
if (storedAccess != 'default')
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
}
}
if(storedAccess != 'default')
{
effects_editor = createJsonEditor('editor_container_effects', {
effects : window.schema.effects
}, true, true);
if (EFFECTENGINE_ENABLED) {
if (storedAccess != 'default') {
effects_editor = createJsonEditor('editor_container_effects', {
effects: window.schema.effects
}, true, true);
effects_editor.on('change',function() {
effects_editor.validate().length || window.readOnlyMode ? $('#btn_submit_effects').attr('disabled', true) : $('#btn_submit_effects').attr('disabled', false);
});
effects_editor.on('change', function () {
effects_editor.validate().length || window.readOnlyMode ? $('#btn_submit_effects').prop('disabled', true) : $('#btn_submit_effects').prop('disabled', false);
});
$('#btn_submit_effects').off().on('click',function() {
requestWriteConfig(effects_editor.getValue());
});
}
$('#btn_submit_effects').off().on('click', function () {
requestWriteConfig(effects_editor.getValue());
});
}
}
foregroundEffect_editor = createJsonEditor('editor_container_foregroundEffect', {
foregroundEffect : window.schema.foregroundEffect
}, true, true);
foregroundEffect_editor = createJsonEditor('editor_container_foregroundEffect', {
foregroundEffect: window.schema.foregroundEffect
}, true, true);
backgroundEffect_editor = createJsonEditor('editor_container_backgroundEffect', {
backgroundEffect : window.schema.backgroundEffect
}, true, true);
backgroundEffect_editor = createJsonEditor('editor_container_backgroundEffect', {
backgroundEffect: window.schema.backgroundEffect
}, true, true);
foregroundEffect_editor.on('ready',function() {
updateEffectlist();
});
foregroundEffect_editor.on('ready', function () {
if (EFFECTENGINE_ENABLED) {
updateEffectlist();
}
});
foregroundEffect_editor.on('change', function () {
var foregroundEffectEnable = foregroundEffect_editor.getEditor("root.foregroundEffect.enable").getValue();
@ -79,8 +96,8 @@ $(document).ready( function() {
$('#foregroundEffectHelpPanelId').hide();
}
foregroundEffect_editor.validate().length || window.readOnlyMode ? $('#btn_submit_foregroundEffect').attr('disabled', true) : $('#btn_submit_foregroundEffect').attr('disabled', false);
});
foregroundEffect_editor.validate().length || window.readOnlyMode ? $('#btn_submit_foregroundEffect').prop('disabled', true) : $('#btn_submit_foregroundEffect').prop('disabled', false);
});
backgroundEffect_editor.on('change', function () {
var backgroundEffectEnable = backgroundEffect_editor.getEditor("root.backgroundEffect.enable").getValue();
@ -93,62 +110,62 @@ $(document).ready( function() {
$('#backgroundEffectHelpPanelId').hide();
}
backgroundEffect_editor.validate().length || window.readOnlyMode ? $('#btn_submit_backgroundEffect').attr('disabled', true) : $('#btn_submit_backgroundEffect').attr('disabled', false);
});
backgroundEffect_editor.validate().length || window.readOnlyMode ? $('#btn_submit_backgroundEffect').prop('disabled', true) : $('#btn_submit_backgroundEffect').prop('disabled', false);
});
$('#btn_submit_foregroundEffect').off().on('click',function() {
var value = foregroundEffect_editor.getValue();
if(typeof value.foregroundEffect.effect == 'undefined')
value.foregroundEffect.effect = window.serverConfig.foregroundEffect.effect;
requestWriteConfig(value);
});
$('#btn_submit_foregroundEffect').off().on('click', function () {
var value = foregroundEffect_editor.getValue();
if (typeof value.foregroundEffect.effect == 'undefined')
value.foregroundEffect.effect = window.serverConfig.foregroundEffect.effect;
requestWriteConfig(value);
});
$('#btn_submit_backgroundEffect').off().on('click',function() {
var value = backgroundEffect_editor.getValue();
if(typeof value.backgroundEffect.effect == 'undefined')
value.backgroundEffect.effect = window.serverConfig.backgroundEffect.effect;
requestWriteConfig(value);
});
$('#btn_submit_backgroundEffect').off().on('click', function () {
var value = backgroundEffect_editor.getValue();
if (typeof value.backgroundEffect.effect == 'undefined')
value.backgroundEffect.effect = window.serverConfig.backgroundEffect.effect;
requestWriteConfig(value);
});
//create introduction
if(window.showOptHelp)
{
createHint("intro", $.i18n('conf_effect_path_intro'), "editor_container_effects");
createHint("intro", $.i18n('conf_effect_fgeff_intro'), "editor_container_foregroundEffect");
createHint("intro", $.i18n('conf_effect_bgeff_intro'), "editor_container_backgroundEffect");
}
//create introduction
if (window.showOptHelp) {
if (EFFECTENGINE_ENABLED) {
createHint("intro", $.i18n('conf_effect_path_intro'), "editor_container_effects");
}
createHint("intro", $.i18n('conf_effect_fgeff_intro'), "editor_container_foregroundEffect");
createHint("intro", $.i18n('conf_effect_bgeff_intro'), "editor_container_backgroundEffect");
}
function updateEffectlist(){
var newEffects = window.serverInfo.effects;
if (newEffects.length != oldEffects.length)
{
$('#root_foregroundEffect_effect').html('');
var usrEffArr = [];
var sysEffArr = [];
function updateEffectlist() {
var newEffects = window.serverInfo.effects;
if (newEffects.length != oldEffects.length) {
$('#root_foregroundEffect_effect').html('');
var usrEffArr = [];
var sysEffArr = [];
for(var i = 0; i < newEffects.length; i++)
{
var effectName = newEffects[i].name;
if(!/^\:/.test(newEffects[i].file))
usrEffArr.push(effectName);
else
sysEffArr.push(effectName);
}
$('#root_foregroundEffect_effect').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets')));
$('#root_foregroundEffect_effect').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets')));
$('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html());
oldEffects = newEffects;
for (var i = 0; i < newEffects.length; i++) {
var effectName = newEffects[i].name;
if (!/^\:/.test(newEffects[i].file))
usrEffArr.push(effectName);
else
sysEffArr.push(effectName);
}
$('#root_foregroundEffect_effect').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets')));
$('#root_foregroundEffect_effect').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets')));
$('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html());
oldEffects = newEffects;
$('#root_foregroundEffect_effect').val(confFgEff);
$('#root_backgroundEffect_effect').val(confBgEff);
}
}
$('#root_foregroundEffect_effect').val(confFgEff);
$('#root_backgroundEffect_effect').val(confBgEff);
}
}
//interval update
$(window.hyperion).on("cmd-effects-update", function(event){
window.serverInfo.effects = event.response.data.effects
updateEffectlist();
});
//interval update
$(window.hyperion).on("cmd-effects-update", function (event) {
window.serverInfo.effects = event.response.data.effects
updateEffectlist();
});
removeOverlay();
removeOverlay();
});

View File

@ -113,11 +113,11 @@ $(document).ready(function () {
triggerTestEffect();
}
if (effects_editor.validate().length == 0 && effectName != "") {
$('#btn_start_test').attr('disabled', false);
!window.readOnlyMode ? $('#btn_write').attr('disabled', false) : $('#btn_write').attr('disabled', true);
$('#btn_start_test').prop('disabled', false);
!window.readOnlyMode ? $('#btn_write').prop('disabled', false) : $('#btn_write').prop('disabled', true);
}
else {
$('#btn_start_test, #btn_write').attr('disabled', true);
$('#btn_start_test, #btn_write').prop('disabled', true);
}
});
});
@ -127,11 +127,11 @@ $(document).ready(function () {
effectName = encodeHTML($(this).val());
if ($(this).val() == '') {
effects_editor.disable();
$("#eff_footer").children().attr('disabled', true);
$("#eff_footer").children().prop('disabled', true);
} else {
effects_editor.enable();
$("#eff_footer").children().attr('disabled', false);
!window.readOnlyMode ? $('#btn_write').attr('disabled', false) : $('#btn_write').attr('disabled', true);
$("#eff_footer").children().prop('disabled', false);
!window.readOnlyMode ? $('#btn_write').prop('disabled', false) : $('#btn_write').prop('disabled', true);
}
});
@ -154,6 +154,7 @@ $(document).ready(function () {
// Start test
$('#btn_start_test').off().on('click', function () {
$('#btn_start_test').prop('disabled', true);
triggerTestEffect();
});
@ -161,6 +162,7 @@ $(document).ready(function () {
$('#btn_stop_test').off().on('click', function () {
requestPriorityClear();
testrun = false;
$('#btn_start_test').prop('disabled', false);
});
// Continuous test
@ -180,8 +182,9 @@ $(document).ready(function () {
// Disable or enable Delete Effect Button
$('#effectsdellist').off().on('change', function () {
$(this).val() == null ? $('#btn_edit, #btn_delete').prop('disabled', true) : "";
$(this).val().startsWith("int_") ? $('#btn_delete').prop('disabled', true) : $('#btn_delete').prop('disabled', false);
var value = $(this).val();
value == null ? $('#btn_edit').prop('disabled', true) : $('#btn_edit').prop('disabled', false);
value.startsWith("int_") ? $('#btn_delete').prop('disabled', true) : $('#btn_delete').prop('disabled', false);
});
// Load Effect

View File

@ -17,7 +17,7 @@ $(document).ready(function () {
}, true, true);
conf_editor.on('change', function () {
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit').prop('disabled', true) : $('#btn_submit').prop('disabled', false);
});
$('#btn_submit').off().on('click', function () {
@ -29,8 +29,8 @@ $(document).ready(function () {
function handleInstanceRename(e) {
conf_editor.on('change', function () {
window.readOnlyMode ? $('#btn_cl_save').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
window.readOnlyMode ? $('#btn_ma_save').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
window.readOnlyMode ? $('#btn_cl_save').prop('disabled', true) : $('#btn_submit').prop('disabled', false);
window.readOnlyMode ? $('#btn_ma_save').prop('disabled', true) : $('#btn_submit').prop('disabled', false);
});
var inst = e.currentTarget.id.split("_")[1];
@ -41,7 +41,7 @@ $(document).ready(function () {
});
$('#renInst_name').off().on('input', function (e) {
(e.currentTarget.value.length >= 5 && e.currentTarget.value != getInstanceNameByIndex(inst)) ? $('#id_btn_ok').attr('disabled', false) : $('#id_btn_ok').attr('disabled', true);
(e.currentTarget.value.length >= 5 && e.currentTarget.value != getInstanceNameByIndex(inst)) ? $('#id_btn_ok').prop('disabled', false) : $('#id_btn_ok').prop('disabled', true);
});
}
@ -70,14 +70,14 @@ $(document).ready(function () {
$('#instren_' + inst[key].instance).off().on('click', handleInstanceRename);
$('#inst_' + inst[key].instance).bootstrapToggle();
$('#inst_' + inst[key].instance).change(e => {
$('#inst_' + inst[key].instance).on("change", e => {
requestInstanceStartStop(e.currentTarget.id.split('_').pop(), e.currentTarget.checked);
});
$('#instdel_' + inst[key].instance).off().on('click', handleInstanceDelete);
window.readOnlyMode ? $('#instren_' + inst[key].instance).attr('disabled', true) : $('#btn_submit').attr('disabled', false);
window.readOnlyMode ? $('#inst_' + inst[key].instance).attr('disabled', true) : $('#btn_submit').attr('disabled', false);
window.readOnlyMode ? $('#instdel_' + inst[key].instance).attr('disabled', true) : $('#btn_submit').attr('disabled', false);
window.readOnlyMode ? $('#instren_' + inst[key].instance).prop('disabled', true) : $('#btn_submit').prop('disabled', false);
window.readOnlyMode ? $('#inst_' + inst[key].instance).prop('disabled', true) : $('#btn_submit').prop('disabled', false);
window.readOnlyMode ? $('#instdel_' + inst[key].instance).prop('disabled', true) : $('#btn_submit').prop('disabled', false);
}
}
@ -86,7 +86,7 @@ $(document).ready(function () {
buildInstanceList();
$('#inst_name').off().on('input', function (e) {
(e.currentTarget.value.length >= 5) && !window.readOnlyMode ? $('#btn_create_inst').attr('disabled', false) : $('#btn_create_inst').attr('disabled', true);
(e.currentTarget.value.length >= 5) && !window.readOnlyMode ? $('#btn_create_inst').prop('disabled', false) : $('#btn_create_inst').prop('disabled', true);
if (5 - e.currentTarget.value.length >= 1 && 5 - e.currentTarget.value.length <= 4)
$('#inst_chars_needed').html(5 - e.currentTarget.value.length + " " + $.i18n('general_chars_needed'))
else
@ -96,7 +96,7 @@ $(document).ready(function () {
$('#btn_create_inst').off().on('click', function (e) {
requestInstanceCreate(encodeHTML($('#inst_name').val()));
$('#inst_name').val("");
$('#btn_create_inst').attr('disabled', true)
$('#btn_create_inst').prop('disabled', true)
});
$(hyperion).off("instance-updated").on("instance-updated", function (event) {
@ -105,7 +105,7 @@ $(document).ready(function () {
//import
function dis_imp_btn(state) {
state || window.readOnlyMode ? $('#btn_import_conf').attr('disabled', true) : $('#btn_import_conf').attr('disabled', false);
state || window.readOnlyMode ? $('#btn_import_conf').prop('disabled', true) : $('#btn_import_conf').prop('disabled', false);
}
function readFile(evt) {
@ -144,7 +144,7 @@ $(document).ready(function () {
showInfoDialog('import', $.i18n('infoDialog_import_confirm_title'), $.i18n('infoDialog_import_confirm_text', confName));
$('#id_btn_import').off().on('click', function () {
requestWriteConfig(importedConf, true);
requestRestoreConfig(importedConf);
setTimeout(initRestart, 100);
});
});

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
$(document).ready(function () {
var darkModeOverwrite = getStorage("darkModeOverwrite", true);
var darkModeOverwrite = getStorage("darkModeOverwrite");
if (darkModeOverwrite == "false" || darkModeOverwrite == null) {
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
@ -7,11 +7,11 @@ $(document).ready(function () {
}
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) {
setStorage("darkMode", "off", false);
setStorage("darkMode", "off");
}
}
if (getStorage("darkMode", false) == "on") {
if (getStorage("darkMode") == "on") {
handleDarkMode();
}
@ -42,7 +42,6 @@ $(document).ready(function () {
$('#btn_hypinstanceswitch').toggle(true)
else
$('#btn_hypinstanceswitch').toggle(false)
updateSessions();
}); // end cmd-serverinfo
// Update language selection
@ -59,25 +58,20 @@ $(document).ready(function () {
container: 'body'
});
$(".bootstrap-select").click(function () {
$(".bootstrap-select").on("click", function () {
$(this).addClass("open");
});
$(document).click(function () {
$(document).on("click", function () {
$(".bootstrap-select").removeClass("open");
});
$(".bootstrap-select").click(function (e) {
$(".bootstrap-select").on("click", function (e) {
e.stopPropagation();
});
//End language selection
$(window.hyperion).on("cmd-sessions-update", function (event) {
window.serverInfo.sessions = event.response.data;
updateSessions();
});
$(window.hyperion).on("cmd-authorize-tokenRequest cmd-authorize-getPendingTokenRequests", function (event) {
var val = event.response.info;
if (Array.isArray(event.response.info)) {
@ -121,7 +115,7 @@ $(document).ready(function () {
requestGetPendingTokenRequests();
//Switch to last selected instance and load related config
var lastSelectedInstance = getStorage('lastSelectedInstance', false);
var lastSelectedInstance = getStorage('lastSelectedInstance');
if (lastSelectedInstance == null || window.serverInfo.instance && !window.serverInfo.instance[lastSelectedInstance]) {
lastSelectedInstance = 0;
}
@ -157,7 +151,7 @@ $(document).ready(function () {
$("#btn_lock_ui").removeAttr('style')
if (event.response.hasOwnProperty('info'))
setStorage("loginToken", event.response.info.token, true);
setStorage("loginToken", event.response.info.token);
requestServerConfigSchema();
});
@ -171,7 +165,7 @@ $(document).ready(function () {
});
$(window.hyperion).on("cmd-authorize-newPasswordRequired", function (event) {
var loginToken = getStorage("loginToken", true)
var loginToken = getStorage("loginToken")
if (event.response.info.newPasswordRequired == true) {
window.defaultPasswordIsSet = true;
@ -204,11 +198,14 @@ $(document).ready(function () {
$(window.hyperion).on("error", function (event) {
//If we are getting an error "No Authorization" back with a set loginToken we will forward to new Login (Token is expired.
//e.g.: hyperiond was started new in the meantime)
if (event.reason == "No Authorization" && getStorage("loginToken", true)) {
removeStorage("loginToken", true);
if (event.reason == "No Authorization" && getStorage("loginToken")) {
removeStorage("loginToken");
requestRequiresAdminAuth();
}
else {
else if (event.reason == "Selected Hyperion instance isn't running") {
//Switch to default instance
instanceSwitch(0);
} else {
showInfoDialog("error", "Error", event.reason);
}
});
@ -217,8 +214,23 @@ $(document).ready(function () {
requestRequiresAdminAuth();
});
$(window.hyperion).one("ready", function (event) {
// Content will be loaded by the instance load/switch
$(window.hyperion).on("ready", function (event) {
loadContent(undefined,true);
//Hide capture menu entries, if no grabbers are available
if ((window.serverInfo.grabbers.screen.available.length === 0) &&
(window.serverInfo.grabbers.video.available.length === 0) &&
(window.serverInfo.grabbers.audio.available.length === 0)) {
$("#MenuItemGrabber").attr('style', 'display:none')
if ((jQuery.inArray("boblight", window.serverInfo.services) === -1)) {
$("#MenuItemInstCapture").attr('style', 'display:none')
}
}
//Hide effectsconfigurator menu entry, if effectengine is not available
if (jQuery.inArray("effectengine", window.serverInfo.services) === -1) {
$("#MenuItemEffectsConfig").attr('style', 'display:none')
}
});
$(window.hyperion).on("cmd-adjustment-update", function (event) {
@ -265,15 +277,15 @@ $(document).ready(function () {
if (!isInData) {
//Delete Storage information about the last used but now stopped instance
if (getStorage('lastSelectedInstance', false))
removeStorage('lastSelectedInstance', false)
if (getStorage('lastSelectedInstance'))
removeStorage('lastSelectedInstance')
window.currentHyperionInstance = 0;
window.currentHyperionInstanceName = getInstanceNameByIndex(0);
currentHyperionInstance = 0;
currentHyperionInstanceName = getInstanceNameByIndex(0);
requestServerConfig();
setTimeout(requestServerInfo, 100)
setTimeout(requestTokenInfo, 200)
setTimeout(loadContent, 300, undefined, true)
}
// determine button visibility
@ -284,33 +296,33 @@ $(document).ready(function () {
$('#btn_hypinstanceswitch').toggle(false)
// update listing for button
updateHyperionInstanceListing()
updateUiOnInstance(window.currentHyperionInstance);
updateHyperionInstanceListing();
});
$(window.hyperion).on("cmd-instance-switchTo", function (event) {
requestServerConfig();
setTimeout(requestServerInfo, 200)
setTimeout(requestTokenInfo, 400)
setTimeout(loadContent, 400, undefined, true)
});
$(window.hyperion).on("cmd-effects-update", function (event) {
window.serverInfo.effects = event.response.data.effects
});
$(".mnava").bind('click.menu', function (e) {
$(".mnava").on('click.menu', function (e) {
loadContent(e);
window.scrollTo(0, 0);
});
$(window).scroll(function() {
$(window).on("scroll", function () {
if ($(window).scrollTop() > 65)
$("#navbar_brand_logo").css("display", "none");
else
$("#navbar_brand_logo").css("display", "");
});
$('#side-menu li a, #side-menu li ul li a').click(function() {
$('#side-menu li a, #side-menu li ul li a').on("click", function () {
$('#side-menu').find('.active').toggleClass('inactive'); // find all active classes and set inactive;
$(this).addClass('active');
});
@ -325,7 +337,7 @@ function suppressDefaultPwWarning() {
$(function () {
var sidebar = $('#side-menu'); // cache sidebar to a variable for performance
sidebar.delegate('a.inactive', 'click', function () {
sidebar.on("click", 'a.inactive', function () {
sidebar.find('.active').toggleClass('active inactive');
$(this).toggleClass('active inactive');
});
@ -338,13 +350,13 @@ $(document.body).on('hide.bs.modal,hidden.bs.modal', function () {
//Dark Mode
$("#btn_darkmode").off().on("click", function (e) {
if (getStorage("darkMode", false) != "on") {
if (getStorage("darkMode") != "on") {
handleDarkMode();
setStorage("darkModeOverwrite", true, true);
setStorage("darkModeOverwrite", true);
}
else {
setStorage("darkMode", "off", false);
setStorage("darkModeOverwrite", true, true);
setStorage("darkMode", "off",);
setStorage("darkModeOverwrite", true);
location.reload();
}
});
@ -361,8 +373,8 @@ function SwitchToMenuItem(target, item) {
cl_object.addClass('in'); // Add class "in" to expand header in sidebar menu;
if (item) { // Jump to div "item" if available. Time limit 3 seconds
function scrollTo(counter) {
if(counter < 30) {
setTimeout(function() {
if (counter < 30) {
setTimeout(function () {
counter++;
if ($('#' + item).length)
$('#' + item)[0].scrollIntoView();

View File

@ -1,99 +1,222 @@
$(document).ready(function () {
performTranslation();
var screenGrabberAvailable = (window.serverInfo.grabbers.screen.available.length !== 0);
var videoGrabberAvailable = (window.serverInfo.grabbers.video.available.length !== 0);
const audioGrabberAvailable = (window.serverInfo.grabbers.audio.available.length !== 0);
var BOBLIGHT_ENABLED = (jQuery.inArray("boblight", window.serverInfo.services) !== -1);
// update instance listing
updateHyperionInstanceListing();
var conf_editor_instCapt = null;
var conf_editor_bobl = null;
// Instance Capture
$('#conf_cont').append(createRow('conf_cont_instCapt'));
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt', ''));
if (window.showOptHelp) {
$('#conf_cont_instCapt').append(createHelpTable(window.schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
if (screenGrabberAvailable || videoGrabberAvailable || audioGrabberAvailable) {
$('#conf_cont').append(createRow('conf_cont_instCapt'));
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt', ''));
$('#conf_cont_instCapt').append(createHelpTable(window.schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
}
//boblight
if (BOBLIGHT_ENABLED) {
$('#conf_cont').append(createRow('conf_cont_bobl'));
$('#conf_cont_bobl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver', ''));
$('#conf_cont_bobl').append(createHelpTable(window.schema.boblightServer.properties, $.i18n("edt_conf_bobls_heading_title"), "boblightServerHelpPanelId"));
}
}
else {
$('#conf_cont').addClass('row');
if (screenGrabberAvailable || videoGrabberAvailable || audioGrabberAvailable) {
$('#conf_cont').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt', ''));
}
if (BOBLIGHT_ENABLED) {
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver', ''));
}
}
// Instance Capture
conf_editor_instCapt = createJsonEditor('editor_container_instCapt', {
instCapture: window.schema.instCapture
}, true, true);
if (screenGrabberAvailable || videoGrabberAvailable || audioGrabberAvailable) {
var grabber_config_info_html = '<div class="bs-callout bs-callout-info" style="margin-top:0px"><h4>' + $.i18n('dashboard_infobox_label_title') + '</h4 >';
grabber_config_info_html += '<span>' + $.i18n('conf_grabber_inst_grabber_config_info') + '</span>';
grabber_config_info_html += '<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem(\'MenuItemGrabber\')" style="text-decoration:none;cursor:pointer"></a>';
grabber_config_info_html += '</div>';
$('#editor_container_instCapt').append(grabber_config_info_html);
// Instance Capture
conf_editor_instCapt = createJsonEditor('editor_container_instCapt', {
instCapture: window.schema.instCapture
}, true, true);
conf_editor_instCapt.on('ready', function () {
var grabber_config_info_html = '<div class="bs-callout bs-callout-info" style="margin-top:0px"><h4>' + $.i18n('dashboard_infobox_label_title') + '</h4 >';
grabber_config_info_html += '<span>' + $.i18n('conf_grabber_inst_grabber_config_info') + '</span>';
grabber_config_info_html += '<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem(\'MenuItemGrabber\')" style="text-decoration:none;cursor:pointer"></a>';
grabber_config_info_html += '</div>';
$('#editor_container_instCapt').append(grabber_config_info_html);
if (!window.serverConfig.framegrabber.enable) {
conf_editor_instCapt.getEditor("root.instCapture.systemEnable").setValue(false);
conf_editor_instCapt.getEditor("root.instCapture.systemEnable").disable();
}
else {
conf_editor_instCapt.getEditor("root.instCapture.systemEnable").setValue(window.serverConfig.instCapture.systemEnable);
}
conf_editor_instCapt.on('ready', function () {
if (!window.serverConfig.grabberV4L2.enable) {
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").setValue(false);
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").disable();
}
else {
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").setValue(window.serverConfig.instCapture.v4lEnable);
}
});
conf_editor_instCapt.on('change', function () {
if (!conf_editor_instCapt.validate().length) {
if (!window.serverConfig.framegrabber.enable && !window.serverConfig.grabberV4L2.enable) {
$('#btn_submit_instCapt').attr('disabled', true);
if (screenGrabberAvailable) {
if (!window.serverConfig.framegrabber.enable) {
conf_editor_instCapt.getEditor("root.instCapture.systemEnable").setValue(false);
conf_editor_instCapt.getEditor("root.instCapture.systemEnable").disable();
}
else {
conf_editor_instCapt.getEditor("root.instCapture.systemEnable").setValue(window.serverConfig.instCapture.systemEnable);
}
} else {
window.readOnlyMode ? $('#btn_submit_instCapt').attr('disabled', true) : $('#btn_submit_instCapt').attr('disabled', false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "systemEnable", false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "systemGrabberDevice", false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "systemPriority", false);
}
}
else {
$('#btn_submit_instCapt').attr('disabled', true);
}
});
conf_editor_instCapt.watch('root.instCapture.systemEnable', () => {
if (videoGrabberAvailable) {
if (!window.serverConfig.grabberV4L2.enable) {
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").setValue(false);
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").disable();
}
else {
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").setValue(window.serverConfig.instCapture.v4lEnable);
var screenEnable = conf_editor_instCapt.getEditor("root.instCapture.systemEnable").getValue();
if (screenEnable) {
conf_editor_instCapt.getEditor("root.instCapture.systemGrabberDevice").setValue(window.serverConfig.framegrabber.available_devices);
conf_editor_instCapt.getEditor("root.instCapture.systemGrabberDevice").disable();
showInputOptions("instCapture", ["systemGrabberDevice"], true);
showInputOptions("instCapture", ["systemPriority"], true);
} else {
showInputOptions("instCapture", ["systemGrabberDevice"], false);
showInputOptions("instCapture", ["systemPriority"], false);
}
});
conf_editor_instCapt.watch('root.instCapture.v4lEnable', () => {
var videoEnable = conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").getValue();
if (videoEnable) {
conf_editor_instCapt.getEditor("root.instCapture.v4lGrabberDevice").setValue(window.serverConfig.grabberV4L2.available_devices);
conf_editor_instCapt.getEditor("root.instCapture.v4lGrabberDevice").disable();
showInputOptions("instCapture", ["v4lGrabberDevice"], true);
showInputOptions("instCapture", ["v4lPriority"], true);
}
else {
if (!window.serverConfig.grabberV4L2.enable) {
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").disable();
}
} else {
showInputOptionForItem(conf_editor_instCapt, "instCapture", "v4lGrabberDevice", false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "v4lEnable", false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "v4lPriority", false);
}
showInputOptions("instCapture", ["v4lGrabberDevice"], false);
showInputOptions("instCapture", ["v4lPriority"], false);
}
});
$('#btn_submit_instCapt').off().on('click', function () {
requestWriteConfig(conf_editor_instCapt.getValue());
});
if (audioGrabberAvailable) {
if (!window.serverConfig.grabberAudio.enable) {
conf_editor_instCapt.getEditor("root.instCapture.audioEnable").setValue(false);
conf_editor_instCapt.getEditor("root.instCapture.audioEnable").disable();
}
else {
conf_editor_instCapt.getEditor("root.instCapture.audioEnable").setValue(window.serverConfig.instCapture.audioEnable);
}
} else {
showInputOptionForItem(conf_editor_instCapt, "instCapture", "audioGrabberDevice", false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "audioEnable", false);
showInputOptionForItem(conf_editor_instCapt, "instCapture", "audioPriority", false);
}
});
conf_editor_instCapt.on('change', function () {
if (!conf_editor_instCapt.validate().length) {
if (!window.serverConfig.framegrabber.enable &&
!window.serverConfig.grabberV4L2.enable &&
!window.serverConfig.grabberAudio.enable) {
$('#btn_submit_instCapt').prop('disabled', true);
} else {
window.readOnlyMode ? $('#btn_submit_instCapt').prop('disabled', true) : $('#btn_submit_instCapt').prop('disabled', false);
}
}
else {
$('#btn_submit_instCapt').prop('disabled', true);
}
});
conf_editor_instCapt.watch('root.instCapture.systemEnable', () => {
var screenEnable = conf_editor_instCapt.getEditor("root.instCapture.systemEnable").getValue();
if (screenEnable) {
conf_editor_instCapt.getEditor("root.instCapture.systemGrabberDevice").setValue(window.serverConfig.framegrabber.available_devices);
conf_editor_instCapt.getEditor("root.instCapture.systemGrabberDevice").disable();
showInputOptions("instCapture", ["systemGrabberDevice"], true);
showInputOptions("instCapture", ["systemPriority"], true);
} else {
showInputOptions("instCapture", ["systemGrabberDevice"], false);
showInputOptions("instCapture", ["systemPriority"], false);
}
});
conf_editor_instCapt.watch('root.instCapture.v4lEnable', () => {
var videoEnable = conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").getValue();
if (videoEnable) {
conf_editor_instCapt.getEditor("root.instCapture.v4lGrabberDevice").setValue(window.serverConfig.grabberV4L2.available_devices);
conf_editor_instCapt.getEditor("root.instCapture.v4lGrabberDevice").disable();
showInputOptions("instCapture", ["v4lGrabberDevice"], true);
showInputOptions("instCapture", ["v4lPriority"], true);
}
else {
if (!window.serverConfig.grabberV4L2.enable) {
conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").disable();
}
showInputOptions("instCapture", ["v4lGrabberDevice"], false);
showInputOptions("instCapture", ["v4lPriority"], false);
}
});
conf_editor_instCapt.watch('root.instCapture.audioEnable', () => {
const audioEnable = conf_editor_instCapt.getEditor("root.instCapture.audioEnable").getValue();
if (audioEnable) {
conf_editor_instCapt.getEditor("root.instCapture.audioGrabberDevice").setValue(window.serverConfig.grabberAudio.available_devices);
conf_editor_instCapt.getEditor("root.instCapture.audioGrabberDevice").disable();
showInputOptions("instCapture", ["audioGrabberDevice"], true);
showInputOptions("instCapture", ["audioPriority"], true);
}
else {
if (!window.serverConfig.grabberAudio.enable) {
conf_editor_instCapt.getEditor("root.instCapture.audioEnable").disable();
}
showInputOptions("instCapture", ["audioGrabberDevice"], false);
showInputOptions("instCapture", ["audioPriority"], false);
}
});
$('#btn_submit_instCapt').off().on('click', function () {
requestWriteConfig(conf_editor_instCapt.getValue());
});
}
//boblight
if (BOBLIGHT_ENABLED) {
conf_editor_bobl = createJsonEditor('editor_container_boblightserver', {
boblightServer: window.schema.boblightServer
}, true, true);
conf_editor_bobl.on('ready', function () {
var boblightServerEnable = conf_editor_bobl.getEditor("root.boblightServer.enable").getValue();
if (!boblightServerEnable) {
showInputOptionsForKey(conf_editor_bobl, "boblightServer", "enable", false);
$('#boblightServerHelpPanelId').hide();
}
});
conf_editor_bobl.on('change', function () {
conf_editor_bobl.validate().length || window.readOnlyMode ? $('#btn_submit_boblightserver').prop('disabled', true) : $('#btn_submit_boblightserver').prop('disabled', false);
});
conf_editor_bobl.watch('root.boblightServer.enable', () => {
var boblightServerEnable = conf_editor_bobl.getEditor("root.boblightServer.enable").getValue();
if (boblightServerEnable) {
//Make port instance specific, if port is still the default one (avoids overlap of used ports)
var port = conf_editor_bobl.getEditor("root.boblightServer.port").getValue();
if (port === conf_editor_bobl.schema.properties.boblightServer.properties.port.default) {
port += parseInt(window.currentHyperionInstance);
}
conf_editor_bobl.getEditor("root.boblightServer.port").setValue(port);
showInputOptionsForKey(conf_editor_bobl, "boblightServer", "enable", true);
$('#boblightServerHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_bobl, "boblightServer", "enable", false);
$('#boblightServerHelpPanelId').hide();
}
});
$('#btn_submit_boblightserver').off().on('click', function () {
requestWriteConfig(conf_editor_bobl.getValue());
});
}
//create introduction
if (window.showOptHelp) {
if (BOBLIGHT_ENABLED) {
createHint("intro", $.i18n('conf_network_bobl_intro'), "editor_container_boblightserver");
}
}
removeOverlay();
});

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ $(document).ready(function () {
}, true, true);
conf_editor.on('change', function () {
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit').prop('disabled', true) : $('#btn_submit').prop('disabled', false);
});
$('#btn_submit').off().on('click', function () {
@ -35,7 +35,8 @@ $(document).ready(function () {
function infoSummary() {
var info = "";
info += 'Hyperion System Summary Report (' + window.serverConfig.general.name + '), Reported instance: ' + window.currentHyperionInstanceName + '\n';
info += 'Hyperion System Summary Report (' + window.serverConfig.general.name + ')\n';
info += 'Reported instance: [' + window.currentHyperionInstance + '] - ' + window.currentHyperionInstanceName + '\n';
info += "\n< ----- System information -------------------- >\n";
info += getSystemInfo() + '\n';
@ -43,22 +44,36 @@ $(document).ready(function () {
info += "\n< ----- Configured Instances ------------------ >\n";
var instances = window.serverInfo.instance;
for (var i = 0; i < instances.length; i++) {
info += instances[i].instance + ': ' + instances[i].friendly_name + ' Running: ' + instances[i].running + '\n';
info += instances[i].instance + ': ' + instances[i].friendly_name + ', Running: ' + instances[i].running + '\n';
}
info += "\n< ----- This instance's priorities ------------ >\n";
var prios = window.serverInfo.priorities;
for (var i = 0; i < prios.length; i++) {
info += prios[i].priority + ': ';
if (prios[i].visible) {
info += ' VISIBLE!';
if (prios.length > 0) {
for (var i = 0; i < prios.length; i++) {
var prio = prios[i].priority.toString().padStart(3, '0');
info += prio + ': ';
if (prios[i].visible) {
info += ' VISIBLE -';
}
else {
info += ' INVISIBLE -';
}
info += ' (' + prios[i].componentId + ')';
if (prios[i].owner) {
info += ' (Owner: ' + prios[i].owner + ')';
}
info += '\n';
}
else {
info += ' ';
}
info += ' (' + prios[i].componentId + ') Owner: ' + prios[i].owner + '\n';
} else {
info += 'The current priority list is empty!\n';
}
info += 'priorities_autoselect: ' + window.serverInfo.priorities_autoselect + '\n';
info += 'Autoselect: ' + window.serverInfo.priorities_autoselect + '\n';
info += "\n< ----- This instance components' status ------->\n";
var comps = window.serverInfo.components;
@ -67,7 +82,7 @@ $(document).ready(function () {
}
info += "\n< ----- This instance's configuration --------- >\n";
info += JSON.stringify(window.serverConfig) + '\n';
info += JSON.stringify(window.serverConfig, null, 2) + '\n';
info += "\n< ----- Current Log --------------------------- >\n";
var logMsgs = document.getElementById("logmessages").textContent;
@ -92,7 +107,7 @@ $(document).ready(function () {
);
$(`#btn_scroll`).bootstrapToggle();
$(`#btn_scroll`).change(e => {
$(`#btn_scroll`).on("change", e => {
if (e.currentTarget.checked) {
//Scroll to end of log
isScroll = true;
@ -121,8 +136,8 @@ $(document).ready(function () {
if (messages.length != 0) {
for (var idx = 0; idx < messages.length; idx++) {
var app_name = messages[idx].appName;
var logger_name = messages[idx].loggerName;
var logger_subname = messages[idx].loggerSubName;
var function_ = messages[idx].function;
var line = messages[idx].line;
var file_name = messages[idx].fileName;
@ -136,7 +151,18 @@ $(document).ready(function () {
}
var date = new Date(parseInt(utime));
var newLogLine = date.toISOString() + " [" + app_name + " " + logger_name + "] (" + level_string + ") " + debug + msg;
var subComponent = "";
if (window.serverInfo.instance.length >= 1) {
if (logger_subname.startsWith("I")) {
var instanceNum = logger_subname.substring(1);
if (window.serverInfo.instance[instanceNum]) {
subComponent = window.serverInfo.instance[instanceNum].friendly_name;
} else {
subComponent = instanceNum;
}
}
}
var newLogLine = date.toISOString() + " [" + logger_name + (subComponent ? "|" + subComponent : "") + "] (" + level_string + ") " + debug + msg;
$("#logmessages").append("<code>" + newLogLine + "</code>\n");
}
@ -181,5 +207,20 @@ $(document).ready(function () {
});
// toggle fullscreen button in log output
$(".fullscreen-btn").mousedown(function (e) {
e.preventDefault();
});
$(".fullscreen-btn").click(function (e) {
e.preventDefault();
$(this).children('i')
.toggleClass('fa-expand')
.toggleClass('fa-compress');
$('#conf_cont').toggle();
$('#logmessages').css('max-height', $('#logmessages').css('max-height') !== 'none' ? 'none' : '400px');
});
removeOverlay();
});

View File

@ -1,59 +1,68 @@
$(document).ready(function () {
performTranslation();
var BOBLIGHT_ENABLED = window.comps.find(element => element.name == "BOBLIGHTSERVER");
var FORWARDER_ENABLED = (jQuery.inArray("forwarder", window.serverInfo.services) !== -1);
var FLATBUF_SERVER_ENABLED = (jQuery.inArray("flatbuffer", window.serverInfo.services) !== -1);
var PROTOTBUF_SERVER_ENABLED = (jQuery.inArray("protobuffer", window.serverInfo.services) !== -1);
var conf_editor_net = null;
var conf_editor_json = null;
var conf_editor_proto = null;
var conf_editor_fbs = null;
var conf_editor_bobl = null;
var conf_editor_forw = null;
// Service properties , 2-dimensional array of [servicetype][id]
discoveredRemoteServices = {};
addJsonEditorHostValidation();
if (window.showOptHelp) {
//network
$('#conf_cont').append(createRow('conf_cont_net'))
$('#conf_cont').append(createRow('conf_cont_net'));
$('#conf_cont_net').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_net_heading_title"), 'editor_container_net', 'btn_submit_net', 'panel-system'));
$('#conf_cont_net').append(createHelpTable(window.schema.network.properties, $.i18n("edt_conf_net_heading_title")));
//jsonserver
$('#conf_cont').append(createRow('conf_cont_json'))
$('#conf_cont').append(createRow('conf_cont_json'));
$('#conf_cont_json').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver', 'panel-system'));
$('#conf_cont_json').append(createHelpTable(window.schema.jsonServer.properties, $.i18n("edt_conf_js_heading_title")));
//flatbufserver
$('#conf_cont').append(createRow('conf_cont_flatbuf'))
$('#conf_cont_flatbuf').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver', 'panel-system'));
$('#conf_cont_flatbuf').append(createHelpTable(window.schema.flatbufServer.properties, $.i18n("edt_conf_fbs_heading_title"), "flatbufServerHelpPanelId"));
if (FLATBUF_SERVER_ENABLED) {
$('#conf_cont').append(createRow('conf_cont_flatbuf'));
$('#conf_cont_flatbuf').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver', 'panel-system'));
$('#conf_cont_flatbuf').append(createHelpTable(window.schema.flatbufServer.properties, $.i18n("edt_conf_fbs_heading_title"), "flatbufServerHelpPanelId"));
}
//protoserver
$('#conf_cont').append(createRow('conf_cont_proto'))
$('#conf_cont_proto').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver', 'panel-system'));
$('#conf_cont_proto').append(createHelpTable(window.schema.protoServer.properties, $.i18n("edt_conf_pbs_heading_title"), "protoServerHelpPanelId"));
//boblight
if (BOBLIGHT_ENABLED) {
$('#conf_cont').append(createRow('conf_cont_bobl'))
$('#conf_cont_bobl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver', 'panel-system'));
$('#conf_cont_bobl').append(createHelpTable(window.schema.boblightServer.properties, $.i18n("edt_conf_bobls_heading_title"), "boblightServerHelpPanelId"));
if (PROTOTBUF_SERVER_ENABLED) {
$('#conf_cont').append(createRow('conf_cont_proto'));
$('#conf_cont_proto').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver', 'panel-system'));
$('#conf_cont_proto').append(createHelpTable(window.schema.protoServer.properties, $.i18n("edt_conf_pbs_heading_title"), "protoServerHelpPanelId"));
}
//forwarder
if (storedAccess != 'default') {
$('#conf_cont').append(createRow('conf_cont_fw'))
$('#conf_cont_fw').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder', 'panel-system'));
$('#conf_cont_fw').append(createHelpTable(window.schema.forwarder.properties, $.i18n("edt_conf_fw_heading_title"), "forwarderHelpPanelId"));
if (FORWARDER_ENABLED) {
if (storedAccess != 'default') {
$('#conf_cont').append(createRow('conf_cont_fw'));
$('#conf_cont_fw').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder', 'panel-system'));
$('#conf_cont_fw').append(createHelpTable(window.schema.forwarder.properties, $.i18n("edt_conf_fw_heading_title"), "forwarderHelpPanelId"));
}
}
}
else {
$('#conf_cont').addClass('row');
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_net_heading_title"), 'editor_container_net', 'btn_submit_net'));
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver'));
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver'));
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver'));
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver'));
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder'));
if (FLATBUF_SERVER_ENABLED) {
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver'));
}
if (PROTOTBUF_SERVER_ENABLED) {
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver'));
}
if (FORWARDER_ENABLED) {
$('#conf_cont').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder'));
}
$("#conf_cont_tok").removeClass('row');
}
@ -63,7 +72,7 @@ $(document).ready(function () {
}, true, true);
conf_editor_net.on('change', function () {
conf_editor_net.validate().length || window.readOnlyMode ? $('#btn_submit_net').attr('disabled', true) : $('#btn_submit_net').attr('disabled', false);
conf_editor_net.validate().length || window.readOnlyMode ? $('#btn_submit_net').prop('disabled', true) : $('#btn_submit_net').prop('disabled', false);
});
$('#btn_submit_net').off().on('click', function () {
@ -76,7 +85,7 @@ $(document).ready(function () {
}, true, true);
conf_editor_json.on('change', function () {
conf_editor_json.validate().length || window.readOnlyMode ? $('#btn_submit_jsonserver').attr('disabled', true) : $('#btn_submit_jsonserver').attr('disabled', false);
conf_editor_json.validate().length || window.readOnlyMode ? $('#btn_submit_jsonserver').prop('disabled', true) : $('#btn_submit_jsonserver').prop('disabled', false);
});
$('#btn_submit_jsonserver').off().on('click', function () {
@ -84,103 +93,117 @@ $(document).ready(function () {
});
//flatbuffer
conf_editor_fbs = createJsonEditor('editor_container_fbserver', {
flatbufServer: window.schema.flatbufServer
}, true, true);
conf_editor_fbs.on('change', function () {
var flatbufServerEnable = conf_editor_fbs.getEditor("root.flatbufServer.enable").getValue();
if (flatbufServerEnable) {
showInputOptionsForKey(conf_editor_fbs, "flatbufServer", "enable", true);
$('#flatbufServerHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_fbs, "flatbufServer", "enable", false);
$('#flatbufServerHelpPanelId').hide();
}
conf_editor_fbs.validate().length || window.readOnlyMode ? $('#btn_submit_fbserver').attr('disabled', true) : $('#btn_submit_fbserver').attr('disabled', false);
});
$('#btn_submit_fbserver').off().on('click', function () {
requestWriteConfig(conf_editor_fbs.getValue());
});
//protobuffer
conf_editor_proto = createJsonEditor('editor_container_protoserver', {
protoServer: window.schema.protoServer
}, true, true);
conf_editor_proto.on('change', function () {
var protoServerEnable = conf_editor_proto.getEditor("root.protoServer.enable").getValue();
if (protoServerEnable) {
showInputOptionsForKey(conf_editor_proto, "protoServer", "enable", true);
$('#protoServerHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_proto, "protoServer", "enable", false);
$('#protoServerHelpPanelId').hide();
}
conf_editor_proto.validate().length || window.readOnlyMode ? $('#btn_submit_protoserver').attr('disabled', true) : $('#btn_submit_protoserver').attr('disabled', false);
});
$('#btn_submit_protoserver').off().on('click', function () {
requestWriteConfig(conf_editor_proto.getValue());
});
//boblight
if (BOBLIGHT_ENABLED) {
conf_editor_bobl = createJsonEditor('editor_container_boblightserver', {
boblightServer: window.schema.boblightServer
if (FLATBUF_SERVER_ENABLED) {
conf_editor_fbs = createJsonEditor('editor_container_fbserver', {
flatbufServer: window.schema.flatbufServer
}, true, true);
conf_editor_bobl.on('change', function () {
var boblightServerEnable = conf_editor_bobl.getEditor("root.boblightServer.enable").getValue();
if (boblightServerEnable) {
showInputOptionsForKey(conf_editor_bobl, "boblightServer", "enable", true);
$('#boblightServerHelpPanelId').show();
conf_editor_fbs.on('change', function () {
var flatbufServerEnable = conf_editor_fbs.getEditor("root.flatbufServer.enable").getValue();
if (flatbufServerEnable) {
showInputOptionsForKey(conf_editor_fbs, "flatbufServer", "enable", true);
$('#flatbufServerHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_bobl, "boblightServer", "enable", false);
$('#boblightServerHelpPanelId').hide();
showInputOptionsForKey(conf_editor_fbs, "flatbufServer", "enable", false);
$('#flatbufServerHelpPanelId').hide();
}
conf_editor_bobl.validate().length || window.readOnlyMode ? $('#btn_submit_boblightserver').attr('disabled', true) : $('#btn_submit_boblightserver').attr('disabled', false);
conf_editor_fbs.validate().length || window.readOnlyMode ? $('#btn_submit_fbserver').prop('disabled', true) : $('#btn_submit_fbserver').prop('disabled', false);
});
$('#btn_submit_boblightserver').off().on('click', function () {
requestWriteConfig(conf_editor_bobl.getValue());
$('#btn_submit_fbserver').off().on('click', function () {
requestWriteConfig(conf_editor_fbs.getValue());
});
}
if (storedAccess != 'default') {
//forwarder
conf_editor_forw = createJsonEditor('editor_container_forwarder', {
forwarder: window.schema.forwarder
//protobuffer
if (PROTOTBUF_SERVER_ENABLED) {
conf_editor_proto = createJsonEditor('editor_container_protoserver', {
protoServer: window.schema.protoServer
}, true, true);
conf_editor_forw.on('change', function () {
var forwarderEnable = conf_editor_forw.getEditor("root.forwarder.enable").getValue();
if (forwarderEnable) {
showInputOptionsForKey(conf_editor_forw, "forwarder", "enable", true);
$('#forwarderHelpPanelId').show();
conf_editor_proto.on('change', function () {
var protoServerEnable = conf_editor_proto.getEditor("root.protoServer.enable").getValue();
if (protoServerEnable) {
showInputOptionsForKey(conf_editor_proto, "protoServer", "enable", true);
$('#protoServerHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_forw, "forwarder", "enable", false);
$('#forwarderHelpPanelId').hide();
showInputOptionsForKey(conf_editor_proto, "protoServer", "enable", false);
$('#protoServerHelpPanelId').hide();
}
conf_editor_forw.validate().length || window.readOnlyMode ? $('#btn_submit_forwarder').attr('disabled', true) : $('#btn_submit_forwarder').attr('disabled', false);
conf_editor_proto.validate().length || window.readOnlyMode ? $('#btn_submit_protoserver').prop('disabled', true) : $('#btn_submit_protoserver').prop('disabled', false);
});
$('#btn_submit_forwarder').off().on('click', function () {
requestWriteConfig(conf_editor_forw.getValue());
$('#btn_submit_protoserver').off().on('click', function () {
requestWriteConfig(conf_editor_proto.getValue());
});
}
//forwarder
if (FORWARDER_ENABLED) {
if (storedAccess != 'default') {
conf_editor_forw = createJsonEditor('editor_container_forwarder', {
forwarder: window.schema.forwarder
}, true, true);
conf_editor_forw.on('ready', function () {
updateServiceCacheForwarderConfiguredItems("jsonapi");
updateServiceCacheForwarderConfiguredItems("flatbuffer");
var forwarderEnable = conf_editor_forw.getEditor("root.forwarder.enable").getValue();
if (forwarderEnable) {
discoverRemoteHyperionServices("jsonapi");
discoverRemoteHyperionServices("flatbuffer");
}
});
conf_editor_forw.on('change', function () {
var forwarderEnable = conf_editor_forw.getEditor("root.forwarder.enable").getValue();
if (forwarderEnable) {
$('#forwarderHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_forw, "forwarder", "enable", false);
$('#forwarderHelpPanelId').hide();
}
conf_editor_forw.validate().length || window.readOnlyMode ? $('#btn_submit_forwarder').prop('disabled', true) : $('#btn_submit_forwarder').prop('disabled', false);
});
conf_editor_forw.watch('root.forwarder.jsonapiselect', () => {
updateForwarderServiceSections("jsonapi");
});
conf_editor_forw.watch('root.forwarder.flatbufferselect', () => {
updateForwarderServiceSections("flatbuffer");
});
conf_editor_forw.watch('root.forwarder.enable', () => {
var forwarderEnable = conf_editor_forw.getEditor("root.forwarder.enable").getValue();
if (forwarderEnable) {
discoverRemoteHyperionServices("jsonapi");
discoverRemoteHyperionServices("flatbuffer");
}
});
$('#btn_submit_forwarder').off().on('click', function () {
requestWriteConfig(conf_editor_forw.getValue());
});
}
}
//create introduction
if (window.showOptHelp) {
createHint("intro", $.i18n('conf_network_net_intro'), "editor_container_net");
createHint("intro", $.i18n('conf_network_json_intro'), "editor_container_jsonserver");
createHint("intro", $.i18n('conf_network_fbs_intro'), "editor_container_fbserver");
createHint("intro", $.i18n('conf_network_proto_intro'), "editor_container_protoserver");
if (BOBLIGHT_ENABLED) {
createHint("intro", $.i18n('conf_network_bobl_intro'), "editor_container_boblightserver");
if (FLATBUF_SERVER_ENABLED) {
createHint("intro", $.i18n('conf_network_fbs_intro'), "editor_container_fbserver");
}
if (PROTOTBUF_SERVER_ENABLED) {
createHint("intro", $.i18n('conf_network_proto_intro'), "editor_container_protoserver");
}
if (FORWARDER_ENABLED) {
createHint("intro", $.i18n('conf_network_forw_intro'), "editor_container_forwarder");
}
createHint("intro", $.i18n('conf_network_forw_intro'), "editor_container_forwarder");
createHint("intro", $.i18n('conf_network_tok_intro'), "tok_desc_cont");
}
@ -212,10 +235,10 @@ $(document).ready(function () {
$('#btn_create_tok').off().on('click', function () {
requestToken(encodeHTML($('#tok_comment').val()))
$('#tok_comment').val("")
$('#btn_create_tok').attr('disabled', true)
$('#btn_create_tok').prop('disabled', true)
});
$('#tok_comment').off().on('input', function (e) {
(e.currentTarget.value.length >= 10) ? $('#btn_create_tok').attr('disabled', false) : $('#btn_create_tok').attr('disabled', true);
(e.currentTarget.value.length >= 10) ? $('#btn_create_tok').prop('disabled', false) : $('#btn_create_tok').prop('disabled', true);
if (10 - e.currentTarget.value.length >= 1 && 10 - e.currentTarget.value.length <= 9)
$('#tok_chars_needed').html(10 - e.currentTarget.value.length + " " + $.i18n('general_chars_needed'))
else
@ -238,13 +261,151 @@ $(document).ready(function () {
$("#conf_cont_tok").removeAttr('style')
}
$('#root_network_apiAuth').change(function () {
$('#root_network_apiAuth').on("change", function () {
var state = $(this).is(":checked");
checkApiTokenState(state);
})
});
checkApiTokenState(window.serverConfig.network.apiAuth);
removeOverlay();
function updateForwarderServiceSections(type) {
var editorPath = "root.forwarder." + type;
var selectedServices = conf_editor_forw.getEditor(editorPath + "select").getValue();
if (jQuery.isEmptyObject(selectedServices) || selectedServices[0] === "NONE") {
conf_editor_forw.getEditor(editorPath).setValue([]);
showInputOptionForItem(conf_editor_forw, "forwarder", type, false);
} else {
var newServices = [];
for (var i = 0; i < selectedServices.length; ++i) {
var service = discoveredRemoteServices[type][selectedServices[i]];
var newrecord = {};
newrecord.name = service.name;
newrecord.host = service.host;
newrecord.port = service.port;
newServices.push(newrecord);
}
conf_editor_forw.getEditor(editorPath).setValue(newServices);
showInputOptionForItem(conf_editor_forw, "forwarder", type, true);
conf_editor_forw.getEditor(editorPath).disable();
}
}
function updateForwarderSelectList(type) {
var selectionElement = type + "select";
var enumVals = [];
var enumTitelVals = [];
var enumDefaultVals = [];
for (var key in discoveredRemoteServices[type]) {
var service = discoveredRemoteServices[type][key];
enumVals.push(service.host);
enumTitelVals.push(service.name);
if (service.inConfig == true) {
enumDefaultVals.push(service.host);
}
}
let addSchemaElements = {
"uniqueItems": true
};
if (jQuery.isEmptyObject(enumVals)) {
enumVals.push("NONE");
enumTitelVals.push($.i18n('edt_conf_fw_remote_service_discovered_none'));
}
updateJsonEditorMultiSelection(conf_editor_forw, 'root.forwarder', selectionElement, addSchemaElements, enumVals, enumTitelVals, enumDefaultVals);
};
function updateServiceCacheForwarderConfiguredItems(serviceType) {
var editor = conf_editor_forw.getEditor("root.forwarder." + serviceType);
if (editor) {
if (!discoveredRemoteServices[serviceType]) {
discoveredRemoteServices[serviceType] = {};
}
var configuredServices = JSON.parse(JSON.stringify(editor.getValue('items')));
for (const service of configuredServices) {
//Handle not named sceanrios
if (!service.name) {
service.name = service.host;
}
service.inConfig = true;
discoveredRemoteServices[serviceType][service.host] = service;
}
}
}
function updateRemoteServiceCache(discoveryInfo) {
for (var serviceType in discoveryInfo) {
if (!discoveredRemoteServices[serviceType]) {
discoveredRemoteServices[serviceType] = {};
}
var discoveredServices = discoveryInfo[serviceType];
for (const service of discoveredServices) {
if (!service.sameHost)
{
//Handle non mDNS sceanrios
if (!service.name) {
service.name = service.host;
} else {
service.host = service.service;
}
if (discoveredRemoteServices[serviceType][service.host]) {
service.inConfig = true;
}
discoveredRemoteServices[serviceType][service.host] = service;
}
}
}
};
async function discoverRemoteHyperionServices(type, params) {
const result = await requestServiceDiscovery(type, params);
var discoveryResult;
if (result && !result.error) {
discoveryResult = result.info;
}
else {
discoveryResult = {
"services": []
};
}
switch (type) {
case "jsonapi":
case "flatbuffer":
updateRemoteServiceCache(discoveryResult.services);
updateForwarderSelectList(type);
break;
}
};
});

View File

@ -1,6 +1,8 @@
$(document).ready(function () {
performTranslation();
var EFFECTENGINE_ENABLED = (jQuery.inArray("effectengine", window.serverInfo.services) !== -1);
// update instance listing
updateHyperionInstanceListing();
@ -17,7 +19,6 @@ $(document).ready(function () {
$('.ssthead').html(createTableRow([$.i18n('remote_input_origin'), $.i18n('remote_input_owner'), $.i18n('remote_input_priority'), $.i18n('remote_input_status')], true, true));
createTable('crthead', 'crtbody', 'adjust_content', true);
//create introduction
if (window.showOptHelp) {
createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro");
@ -28,46 +29,6 @@ $(document).ready(function () {
createHint("intro", $.i18n('remote_videoMode_intro', $.i18n('remote_losthint')), "videomode_intro");
}
//color adjustment
var sColor = sortProperties(window.serverSchema.properties.color.properties.channelAdjustment.items.properties);
var values = window.serverInfo.adjustment[0];
for (var key in sColor) {
if (sColor[key].key != "id" && sColor[key].key != "leds") {
var title = '<label for="cr_' + sColor[key].key + '">' + $.i18n(sColor[key].title) + '</label>';
var property;
var value = values[sColor[key].key];
if (sColor[key].type == "array") {
property = '<div id="cr_' + sColor[key].key + '" class="input-group colorpicker-component" ><input type="text" class="form-control" /><span class="input-group-addon"><i></i></span></div>';
$('.crtbody').append(createTableRow([title, property], false, true));
createCP('cr_' + sColor[key].key, value, function (rgb, hex, e) {
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), '[' + rgb.r + ',' + rgb.g + ',' + rgb.b + ']');
});
}
else if (sColor[key].type == "boolean") {
property = '<div class="checkbox"><input id="cr_' + sColor[key].key + '" type="checkbox" value="' + value + '"/><label></label></div>';
$('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_' + sColor[key].key).off().on('change', function (e) {
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.checked);
});
}
else {
if (sColor[key].key == "brightness" || sColor[key].key == "brightnessCompensation" || sColor[key].key == "backlightThreshold")
property = '<div class="input-group"><input id="cr_' + sColor[key].key + '" type="number" class="form-control" min="0" max="100" step="10" value="' + value + '"/><span class="input-group-addon">' + $.i18n("edt_append_percent") + '</span></div>';
else
property = '<input id="cr_' + sColor[key].key + '" type="number" class="form-control" min="0.1" max="4.0" step="0.1" value="' + value + '"/>';
$('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_' + sColor[key].key).off().on('change', function (e) {
valValue(this.id, this.value, this.min, this.max);
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value);
});
}
}
}
function sendEffect() {
var efx = $("#effect_select").val();
if (efx != "__none__") {
@ -82,8 +43,61 @@ $(document).ready(function () {
requestSetColor(rgb.r, rgb.g, rgb.b, duration);
}
function updateChannelAdjustments() {
$('.crtbody').html("");
var sColor = sortProperties(window.serverSchema.properties.color.properties.channelAdjustment.items.properties);
var values = window.serverInfo.adjustment[0];
for (var key in sColor) {
if (sColor[key].key != "id" && sColor[key].key != "leds") {
var title = '<label for="cr_' + sColor[key].key + '">' + $.i18n(sColor[key].title) + '</label>';
var property;
var value = values[sColor[key].key];
if (sColor[key].type == "array") {
property = '<div id="cr_' + sColor[key].key + '" class="input-group colorpicker-component" ><input type="text" class="form-control" /><span class="input-group-addon"><i></i></span></div>';
$('.crtbody').append(createTableRow([title, property], false, true));
createCP('cr_' + sColor[key].key, value, function (rgb, hex, e) {
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), '[' + rgb.r + ',' + rgb.g + ',' + rgb.b + ']');
});
}
else if (sColor[key].type == "boolean") {
property = '<div class="checkbox"><input id="cr_' + sColor[key].key + '" type="checkbox" ' + (value ? "checked" : "") + '/><label></label></div>';
$('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_' + sColor[key].key).off().on('change', function (e) {
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.checked);
});
}
else {
if (sColor[key].key == "brightness" ||
sColor[key].key == "brightnessCompensation" ||
sColor[key].key == "backlightThreshold" ||
sColor[key].key == "saturationGain" ||
sColor[key].key == "brightnessGain") {
property = '<input id="cr_' + sColor[key].key + '" type="number" class="form-control" min="' + sColor[key].minimum + '" max="' + sColor[key].maximum + '" step="' + sColor[key].step + '" value="' + value + '"/>';
if (sColor[key].append === "edt_append_percent") {
property = '<div class="input-group">' + property + '<span class="input-group-addon">' + $.i18n("edt_append_percent") + '</span></div>';
}
}
else {
property = '<input id="cr_' + sColor[key].key + '" type="number" class="form-control" min="0.1" max="4.0" step="0.1" value="' + value + '"/>';
}
$('.crtbody').append(createTableRow([title, property], false, true));
$('#cr_' + sColor[key].key).off().on('change', function (e) {
valValue(this.id, this.value, this.min, this.max);
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value);
});
}
}
}
}
function updateInputSelect() {
$('.sstbody').html("");
$('.sstbody').empty();
var prios = window.serverInfo.priorities;
var clearAll = false;
@ -126,13 +140,13 @@ $(document).ready(function () {
switch (compId) {
case "EFFECT":
owner = $.i18n('remote_effects_label_effects') + ' ' + owner;
owner = $.i18n('remote_effects_label_effects') + ' ' + owner;
break;
case "COLOR":
owner = $.i18n('remote_color_label_color') + ' ' + '<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb(' + value + '); display:inline-block" title="RGB: (' + value + ')"></div>';
break;
case "IMAGE":
owner = $.i18n('remote_effects_label_picture') + ' ' + owner;
owner = $.i18n('remote_effects_label_picture') + (owner !== undefined ? (' ' + owner) : "");
break;
case "GRABBER":
owner = $.i18n('general_comp_GRABBER') + ': (' + owner + ')';
@ -140,6 +154,9 @@ $(document).ready(function () {
case "V4L":
owner = $.i18n('general_comp_V4L') + ': (' + owner + ')';
break;
case "AUDIO":
owner = $.i18n('general_comp_AUDIO') + ': (' + owner + ')';
break;
case "BOBLIGHTSERVER":
owner = $.i18n('general_comp_BOBLIGHTSERVER');
break;
@ -151,16 +168,18 @@ $(document).ready(function () {
break;
}
if (duration && compId != "GRABBER" && compId != "FLATBUFSERVER" && compId != "PROTOSERVER")
owner += '<br/><span style="font-size:80%; color:grey;">' + $.i18n('remote_input_duration') + ' ' + duration.toFixed(0) + $.i18n('edt_append_s') + '</span>';
if (!(duration && duration < 0)) {
if (duration && compId != "GRABBER" && compId != "FLATBUFSERVER" && compId != "PROTOSERVER")
owner += '<br/><span style="font-size:80%; color:grey;">' + $.i18n('remote_input_duration') + ' ' + duration.toFixed(0) + $.i18n('edt_append_s') + '</span>';
var btn = '<button id="srcBtn' + i + '" type="button" ' + btn_state + ' class="btn btn-' + btn_type + ' btn_input_selection" onclick="requestSetSource(' + priority + ');">' + btn_text + '</button>';
var btn = '<button id="srcBtn' + i + '" type="button" ' + btn_state + ' class="btn btn-' + btn_type + ' btn_input_selection" onclick="requestSetSource(' + priority + ');">' + btn_text + '</button>';
if ((compId == "EFFECT" || compId == "COLOR" || compId == "IMAGE") && priority < 254)
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear(' + priority + ');"><i class="fa fa-close"></button>';
if ((compId == "EFFECT" || compId == "COLOR" || compId == "IMAGE") && priority < 254)
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear(' + priority + ');"><i class="fa fa-close"></button>';
if (btn_type != 'default')
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
if (btn_type != 'default')
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
}
}
var btn_auto_color = (window.serverInfo.priorities_autoselect ? "btn-success" : "btn-danger");
var btn_auto_state = (window.serverInfo.priorities_autoselect ? "disabled" : "enabled");
@ -203,7 +222,8 @@ $(document).ready(function () {
for (const comp of components) {
if (comp.name === "ALL" || (comp.name === "FORWARDER" && window.currentHyperionInstance != 0) ||
(comp.name === "GRABBER" && !window.serverConfig.framegrabber.enable) ||
(comp.name === "V4L" && !window.serverConfig.grabberV4L2.enable))
(comp.name === "V4L" && !window.serverConfig.grabberV4L2.enable) ||
(comp.name === "AUDIO" && !window.serverConfig.grabberAudio.enable))
continue;
const enable_style = (comp.enabled ? "checked" : "");
@ -220,7 +240,7 @@ $(document).ready(function () {
$('#componentsbutton').append(d);
$(`#${comp_btn_id}`).bootstrapToggle();
$(`#${comp_btn_id}`).bootstrapToggle((hyperionEnabled ? "enable" : "disable"));
$(`#${comp_btn_id}`).change(e => {
$(`#${comp_btn_id}`).on("change", e => {
requestSetComponentState(e.currentTarget.id.split('_').pop(), e.currentTarget.checked);
});
}
@ -311,6 +331,9 @@ $(document).ready(function () {
if (getStorage('rmduration') != null) {
$("#remote_duration").val(getStorage('rmduration'));
duration = getStorage('rmduration');
if (duration == 0) {
duration = ENDLESS;
}
}
createCP('cp2', cpcolor, function (rgbT, hex) {
@ -330,6 +353,9 @@ $(document).ready(function () {
$("#remote_duration").off().on("change", function () {
duration = valValue(this.id, this.value, this.min, this.max);
setStorage('rmduration', duration);
if (duration == 0) {
duration = ENDLESS;
}
});
$("#effect_select").off().on("change", function (event) {
@ -337,18 +363,22 @@ $(document).ready(function () {
});
$("#remote_input_reseff, #remote_input_rescol").off().on("click", function () {
if (this.id == "remote_input_rescol")
if (this.id == "remote_input_rescol") {
sendColor();
else
sendEffect();
} else {
if (EFFECTENGINE_ENABLED) {
sendEffect();
}
}
});
$("#remote_input_repimg").off().on("click", function () {
if (lastImgData != "")
if (lastImgData != "") {
requestSetImage(lastImgData, duration, lastFileName);
}
});
$("#remote_input_img").change(function () {
$("#remote_input_img").on("change", function () {
readImg(this, function (src, fileName) {
lastFileName = fileName;
if (src.includes(","))
@ -365,12 +395,16 @@ $(document).ready(function () {
updateInputSelect();
updateLedMapping();
updateVideoMode();
updateEffectlist();
updateChannelAdjustments();
if (EFFECTENGINE_ENABLED) {
updateEffectlist();
} else {
$('#effect_row').hide();
}
// interval updates
$(window.hyperion).on('components-updated', function (e, comp) {
//console.log ("components-updated", e, comp);
updateComponent(comp);
});
@ -394,5 +428,16 @@ $(document).ready(function () {
updateEffectlist();
});
$(window.hyperion).on("cmd-settings-update", function (event) {
if (event.response.data.color) {
window.serverInfo.imageToLedMappingType = event.response.data.color.imageToLedMappingType;
updateLedMapping();
window.serverInfo.adjustment = event.response.data.color.channelAdjustment;
updateChannelAdjustments();
}
});
removeOverlay();
});

View File

@ -14,7 +14,7 @@
}, true, true);
conf_editor.on('change',function() {
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit').prop('disabled', true) : $('#btn_submit').prop('disabled', false);
});
$('#btn_submit').off().on('click',function() {

View File

@ -26,7 +26,6 @@ window.loggingStreamActive = false;
window.loggingHandlerInstalled = false;
window.watchdog = 0;
window.debugMessagesActive = true;
window.wSess = [];
window.currentHyperionInstance = 0;
window.currentHyperionInstanceName = "?";
window.comps = [];
@ -136,7 +135,11 @@ function initWebSocket()
// skip tan -1 error handling
if(tan != -1){
var error = response.hasOwnProperty("error")? response.error : "unknown";
$(window.hyperion).trigger({type:"error",reason:error});
if (error == "Service Unavailable") {
window.location.reload();
} else {
$(window.hyperion).trigger({type:"error",reason:error});
}
console.log("[window.websocket::onmessage] ",error)
}
}
@ -307,7 +310,7 @@ function requestInstanceSwitch(inst)
function requestServerInfo()
{
sendToHyperion("serverinfo","",'"subscribe":["components-update","sessions-update","priorities-update", "imageToLedMapping-update", "adjustment-update", "videomode-update", "effects-update", "settings-update", "instance-update"]');
sendToHyperion("serverinfo","",'"subscribe":["components-update", "priorities-update", "imageToLedMapping-update", "adjustment-update", "videomode-update", "effects-update", "settings-update", "instance-update"]');
}
function requestSysInfo()
@ -315,6 +318,21 @@ function requestSysInfo()
sendToHyperion("sysinfo");
}
function requestSystemSuspend()
{
sendToHyperion("system","suspend");
}
function requestSystemResume()
{
sendToHyperion("system","resume");
}
function requestSystemRestart()
{
sendToHyperion("system","restart");
}
function requestServerConfigSchema()
{
sendToHyperion("config","getschema");
@ -359,21 +377,25 @@ function requestPriorityClear(prio)
if(typeof prio !== 'number')
prio = window.webPrio;
$(window.hyperion).trigger({type:"stopBrowerScreenCapture"});
sendToHyperion("clear", "", '"priority":'+prio+'');
}
function requestClearAll()
{
$(window.hyperion).trigger({type:"stopBrowerScreenCapture"});
requestPriorityClear(-1)
}
function requestPlayEffect(effectName, duration)
{
$(window.hyperion).trigger({type:"stopBrowerScreenCapture"});
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'"},"priority":'+window.webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+window.webOrigin+'"');
}
function requestSetColor(r,g,b,duration)
{
$(window.hyperion).trigger({type:"stopBrowerScreenCapture"});
sendToHyperion("color", "", '"color":['+r+','+g+','+b+'], "priority":'+window.webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+window.webOrigin+'"');
}
@ -410,6 +432,10 @@ function requestWriteConfig(config, full)
sendToHyperion("config","setconfig", '"config":'+JSON.stringify(window.serverConfig));
}
function requestRestoreConfig(config) {
sendToHyperion("config", "restoreconfig", '"config":' + JSON.stringify(config));
}
function requestWriteEffect(effectName,effectPy,effectArgs,data)
{
var cutArgs = effectArgs.slice(1, -1);
@ -477,9 +503,21 @@ function requestLedDeviceIdentification(type, params)
return sendAsyncToHyperion("leddevice", "identify", data, Math.floor(Math.random() * 1000));
}
async function requestLedDeviceAddAuthorization(type, params) {
let data = { ledDeviceType: type, params: params };
return sendAsyncToHyperion("leddevice", "addAuthorization", data, Math.floor(Math.random() * 1000));
}
async function requestInputSourcesDiscovery(type, params) {
let data = { sourceType: type, params: params };
return sendAsyncToHyperion("inputsource", "discover", data, Math.floor(Math.random() * 1000));
}
async function requestServiceDiscovery(type, params) {
let data = { serviceType: type, params: params };
return sendAsyncToHyperion("service", "discover", data, Math.floor(Math.random() * 1000));
}

View File

@ -1,6 +1,6 @@
var storedLang;
var availLang = ['cs', 'de', 'en', 'es', 'fr', 'it', 'nl', 'nb', 'pl', 'pt', 'ro', 'sv', 'vi', 'ru', 'tr', 'zh-CN'];
var availLangText = ['Čeština', 'Deutsch', 'English', 'Español', 'Français', 'Italiano', 'Nederlands', 'Norsk Bokmål', 'Polski', 'Português', 'Română', 'Svenska', 'Tiếng Việt', 'русский', 'Türkçe', '汉语'];
var availLang = ['ca', 'cs', 'da', 'de', 'el', 'en', 'es', 'fr', 'hu', 'it', 'ja', 'nl', 'nb', 'pl', 'pt', 'ro', 'sv', 'vi', 'ru', 'tr', 'zh-CN'];
var availLangText = ['Català', 'Čeština', 'Dansk', 'Deutsch', 'Ελληνική', 'English', 'Español', 'Français', 'Magyar', 'Italiano', '日本語', 'Nederlands', 'Norsk Bokmål', 'Polski', 'Português', 'Română', 'Svenska', 'Tiếng Việt', 'русский', 'Türkçe', '汉语'];
//$.i18n.debug = true;

View File

@ -6,8 +6,9 @@ $(document).ready(function () {
var leds;
var grabberConfig;
var lC = false;
var imageCanvasNodeCtx;
var ledsCanvasNodeCtx;
var imageCanvasNodeCtx = document.getElementById("image_preview_canv").getContext("2d");
var ledsCanvasNodeCtx = document.getElementById("leds_preview_canv").getContext("2d");
var sigDetectAreaCanvasNodeCtx = document.getElementById("grab_preview_canv").getContext("2d");
var canvas_height;
var canvas_width;
var twoDPaths = [];
@ -93,9 +94,9 @@ $(document).ready(function () {
uiLibrary: 'bootstrap',
resizable: true,
modal: false,
minWidth: 250,
minWidth: 350,
width: ledsim_width,
minHeight: 350,
minHeight: 400,
height: ledsim_height,
closeOnEscape: true,
autoOpen: false,
@ -167,7 +168,7 @@ $(document).ready(function () {
//roundRect(ledsCanvasNodeCtx, led.hmin * canvas_width, led.vmin * canvas_height, (led.hmax-led.hmin) * canvas_width, (led.vmax-led.vmin) * canvas_height, 4, true, colors[idx])
//ledsCanvasNodeCtx.fillRect(led.hmin * canvas_width, led.vmin * canvas_height, (led.hmax-led.hmin) * canvas_width, (led.vmax-led.vmin) * canvas_height);
ledsCanvasNodeCtx.fillStyle = (useColor) ? "rgba(" + colors[cPos] + "," + colors[cPos + 1] + "," + colors[cPos + 2] + ",0.75)" : "hsla(" + (idx * 360 / leds.length) + ",100%,50%,0.75)";
ledsCanvasNodeCtx.fillStyle = (useColor) ? "rgba(" + colors[cPos] + "," + colors[cPos + 1] + "," + colors[cPos + 2] + ",1.0)" : "hsla(" + (idx * 360 / leds.length) + ",100%,50%,1.0)";
ledsCanvasNodeCtx.fill(twoDPaths[idx]);
ledsCanvasNodeCtx.strokeStyle = '#323232';
ledsCanvasNodeCtx.stroke(twoDPaths[idx]);
@ -198,20 +199,14 @@ $(document).ready(function () {
canvas_height = $('#ledsim_dialog').outerHeight() - $('#ledsim_text').outerHeight() - $('[data-role=footer]').outerHeight() - $('[data-role=header]').outerHeight() - 40;
canvas_width = $('#ledsim_dialog').outerWidth() - 30;
$('#leds_canvas').html("");
var leds_html = '<canvas id="image_preview_canv" width="' + canvas_width + '" height="' + canvas_height + '" style="position: absolute; left: 0; top: 0; z-index: 99998;"></canvas>';
leds_html += '<canvas id="leds_preview_canv" width="' + canvas_width + '" height="' + canvas_height + '" style="position: absolute; left: 0; top: 0; z-index: 99999;"></canvas>';
leds_html += '<canvas id="grab_preview_canv" width="' + canvas_width + '" height="' + canvas_height + '" style="position: absolute; left: 0; top: 0; z-index: 99999;"></canvas>';
$("[id$=_preview_canv]").prop({"width": canvas_width, "height": canvas_height});
$("body").get(0).style.setProperty("--width-var", canvas_width + "px");
$("body").get(0).style.setProperty("--height-var", canvas_height + "px");
$('#leds_canvas').html(leds_html);
imageCanvasNodeCtx = document.getElementById("image_preview_canv").getContext("2d");
ledsCanvasNodeCtx = document.getElementById("leds_preview_canv").getContext("2d");
sigDetectAreaCanvasNodeCtx = document.getElementById("grab_preview_canv").getContext("2d");
create2dPaths();
printLedsToCanvas();
$("body").get(0).style.setProperty("--background-var", "none");
resetImage();
}
// ------------------------------------------------------------------
@ -227,6 +222,7 @@ $(document).ready(function () {
if (window.ledStreamActive) {
requestLedColorsStop();
ledsCanvasNodeCtx.clear();
$("body").get(0).style.setProperty("--background-var", "none");
} else {
requestLedColorsStart();
}
@ -262,9 +258,11 @@ $(document).ready(function () {
$(window.hyperion).on("cmd-ledcolors-ledstream-update", function (event) {
if (!modalOpened) {
requestLedColorsStop();
$("body").get(0).style.setProperty("--background-var", "none");
}
else {
printLedsToCanvas(event.response.result.leds)
$("body").get(0).style.setProperty("--background-var", "url(" + ($('#leds_preview_canv')[0]).toDataURL("image/jpg") + ") no-repeat top left");
}
});
@ -332,7 +330,13 @@ $(document).ready(function () {
imageCanvasNodeCtx.fillStyle = "#1c1c1c"; //90% gray
imageCanvasNodeCtx.fillRect(0, 0, canvas_width, canvas_height);
imageCanvasNodeCtx.drawImage(image, canvas_width / 2 - image.width / 2, canvas_height / 2 - image.height / 2, image.width, image.height);
var destImageWidth = image.width;
var destImageHeight = image.height;
if (destImageWidth + 40 >= canvas_width) {
destImageWidth = image.width * (canvas_width - 40) / image.width;
destImageHeight = image.height * (canvas_width - 40) / image.width;
}
imageCanvasNodeCtx.drawImage(image, 0, 0, image.width - 31, image.height, canvas_width / 2 - destImageWidth / 2, canvas_height / 2 - destImageHeight / 2, destImageWidth, destImageHeight);
}
}
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
gj.draggable={plugins:{}},gj.draggable.config={base:{handle:void 0,vertical:!0,horizontal:!0,containment:void 0}},gj.draggable.methods={init:function(a){var b,c,d=this;return gj.widget.prototype.init.call(this,a,"draggable"),c=this.data(),d.attr("data-draggable","true"),b=gj.draggable.methods.getHandleElement(d),b.on("touchstart mousedown",function(a){var e=gj.core.position(d[0]);d[0].style.top=e.top+"px",d[0].style.left=e.left+"px",d[0].style.position="fixed",d.attr("draggable-dragging",!0),d.removeAttr("draggable-x").removeAttr("draggable-y"),gj.documentManager.subscribeForEvent("touchmove",d.data("guid"),gj.draggable.methods.createMoveHandler(d,b,c)),gj.documentManager.subscribeForEvent("mousemove",d.data("guid"),gj.draggable.methods.createMoveHandler(d,b,c))}),gj.documentManager.subscribeForEvent("mouseup",d.data("guid"),gj.draggable.methods.createUpHandler(d)),gj.documentManager.subscribeForEvent("touchend",d.data("guid"),gj.draggable.methods.createUpHandler(d)),gj.documentManager.subscribeForEvent("touchcancel",d.data("guid"),gj.draggable.methods.createUpHandler(d)),d},getHandleElement:function(a){var b=a.data("handle");return b&&b.length?b:a},createUpHandler:function(a){return function(b){"true"===a.attr("draggable-dragging")&&(a.attr("draggable-dragging",!1),gj.documentManager.unsubscribeForEvent("mousemove",a.data("guid")),gj.documentManager.unsubscribeForEvent("touchmove",a.data("guid")),gj.draggable.events.stop(a,{x:a.mouseX(b),y:a.mouseY(b)}))}},createMoveHandler:function(a,b,c){return function(b){var d,e,f,g,h,i;"true"===a.attr("draggable-dragging")&&(d=Math.round(a.mouseX(b)),e=Math.round(a.mouseY(b)),h=a.attr("draggable-x"),i=a.attr("draggable-y"),h&&i?(f=c.horizontal?d-parseInt(h,10):0,g=c.vertical?e-parseInt(i,10):0,gj.draggable.methods.move(a[0],c,f,g,d,e)):gj.draggable.events.start(a,d,e),a.attr("draggable-x",d),a.attr("draggable-y",e))}},move:function(a,b,c,d,e,f){var g,h,i,j=gj.core.position(a),k=j.top+d,l=j.left+c;b.containment&&(g=gj.core.position(b.containment),h=g.top+gj.core.height(b.containment)-gj.core.height(a),i=g.left+gj.core.width(b.containment)-gj.core.width(a),k>g.top&&k<h?(g.top>=f||g.bottom<=f)&&(k=j.top):k=k<=g.top?g.top+1:h-1,l>g.left&&l<i?(g.left>=e||g.right<=e)&&(l=j.left):l=l<=g.left?g.left+1:i-1),!1!==gj.draggable.events.drag($(a),l,k,e,f)&&(a.style.top=k+"px",a.style.left=l+"px")},destroy:function(a){return"true"===a.attr("data-draggable")&&(gj.documentManager.unsubscribeForEvent("mouseup",a.data("guid")),a.removeData(),a.removeAttr("data-guid").removeAttr("data-type").removeAttr("data-draggable"),a.removeAttr("draggable-x").removeAttr("draggable-y").removeAttr("draggable-dragging"),a[0].style.top="",a[0].style.left="",a[0].style.position="",a.off("drag").off("start").off("stop"),gj.draggable.methods.getHandleElement(a).off("mousedown")),a}},gj.draggable.events={drag:function(a,b,c,d,e){return a.triggerHandler("drag",[{left:b,top:c},{x:d,y:e}])},start:function(a,b,c){a.triggerHandler("start",[{x:b,y:c}])},stop:function(a,b){a.triggerHandler("stop",[b])}},gj.draggable.widget=function(a,b){var c=this,d=gj.draggable.methods;return a.destroy||(c.destroy=function(){return d.destroy(this)}),$.extend(a,c),"true"!==a.attr("data-draggable")&&d.init.call(a,b),a},gj.draggable.widget.prototype=new gj.widget,gj.draggable.widget.constructor=gj.draggable.widget,function(a){a.fn.draggable=function(a){var b;if(this&&this.length){if("object"!=typeof a&&a){if(b=new gj.draggable.widget(this,null),b[a])return b[a].apply(this,Array.prototype.slice.call(arguments,1));throw"Method "+a+" does not exist."}return new gj.draggable.widget(this,a)}}}(jQuery);

View File

@ -226,7 +226,7 @@ function pluralRuleParser(rule, number) {
return result;
}
result = parseFloat(number, 10);
result = parseFloat(number, 10); //lgtm [js/superfluous-trailing-arguments]
debug(' -- passed n ', result);
return result;

View File

@ -384,7 +384,7 @@
// Check if the restore to Latin number flag is set:
if ( integer ) {
if ( parseFloat( num, 10 ) === num ) {
if ( parseFloat( num, 10 ) === num ) { //lgtm [js/superfluous-trailing-arguments]
return num;
}
@ -405,7 +405,7 @@
}
}
return integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;
return integer ? parseFloat( convertedNumber, 10 ) : convertedNumber; //lgtm [js/superfluous-trailing-arguments]
},
/**

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,859 @@
/*!
* jQuery Migrate - v3.3.2 - 2020-11-17T23:22Z
* Copyright OpenJS Foundation and other contributors
*/
( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module.
define( [ "jquery" ], function( jQuery ) {
return factory( jQuery, window );
} );
} else if ( typeof module === "object" && module.exports ) {
// Node/CommonJS
// eslint-disable-next-line no-undef
module.exports = factory( require( "jquery" ), window );
} else {
// Browser globals
factory( jQuery, window );
}
} )( function( jQuery, window ) {
"use strict";
jQuery.migrateVersion = "3.3.2";
// Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2
function compareVersions( v1, v2 ) {
var i,
rVersionParts = /^(\d+)\.(\d+)\.(\d+)/,
v1p = rVersionParts.exec( v1 ) || [ ],
v2p = rVersionParts.exec( v2 ) || [ ];
for ( i = 1; i <= 3; i++ ) {
if ( +v1p[ i ] > +v2p[ i ] ) {
return 1;
}
if ( +v1p[ i ] < +v2p[ i ] ) {
return -1;
}
}
return 0;
}
function jQueryVersionSince( version ) {
return compareVersions( jQuery.fn.jquery, version ) >= 0;
}
( function() {
// Support: IE9 only
// IE9 only creates console object when dev tools are first opened
// IE9 console is a host object, callable but doesn't have .apply()
if ( !window.console || !window.console.log ) {
return;
}
// Need jQuery 3.0.0+ and no older Migrate loaded
if ( !jQuery || !jQueryVersionSince( "3.0.0" ) ) {
window.console.log( "JQMIGRATE: jQuery 3.0.0+ REQUIRED" );
}
if ( jQuery.migrateWarnings ) {
window.console.log( "JQMIGRATE: Migrate plugin loaded multiple times" );
}
// Show a message on the console so devs know we're active
window.console.log( "JQMIGRATE: Migrate is installed" +
( jQuery.migrateMute ? "" : " with logging active" ) +
", version " + jQuery.migrateVersion );
} )();
var warnedAbout = {};
// By default each warning is only reported once.
jQuery.migrateDeduplicateWarnings = true;
// List of warnings already given; public read only
jQuery.migrateWarnings = [];
// Set to false to disable traces that appear with warnings
if ( jQuery.migrateTrace === undefined ) {
jQuery.migrateTrace = true;
}
// Forget any warnings we've already given; public
jQuery.migrateReset = function() {
warnedAbout = {};
jQuery.migrateWarnings.length = 0;
};
function migrateWarn( msg ) {
var console = window.console;
if ( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) {
warnedAbout[ msg ] = true;
jQuery.migrateWarnings.push( msg );
if ( console && console.warn && !jQuery.migrateMute ) {
console.warn( "JQMIGRATE: " + msg );
if ( jQuery.migrateTrace && console.trace ) {
console.trace();
}
}
}
}
function migrateWarnProp( obj, prop, value, msg ) {
Object.defineProperty( obj, prop, {
configurable: true,
enumerable: true,
get: function() {
migrateWarn( msg );
return value;
},
set: function( newValue ) {
migrateWarn( msg );
value = newValue;
}
} );
}
function migrateWarnFunc( obj, prop, newFunc, msg ) {
obj[ prop ] = function() {
migrateWarn( msg );
return newFunc.apply( this, arguments );
};
}
if ( window.document.compatMode === "BackCompat" ) {
// JQuery has never supported or tested Quirks Mode
migrateWarn( "jQuery is not compatible with Quirks Mode" );
}
var findProp,
class2type = {},
oldInit = jQuery.fn.init,
oldFind = jQuery.find,
rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
// Support: Android <=4.0 only
// Make sure we trim BOM and NBSP
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
jQuery.fn.init = function( arg1 ) {
var args = Array.prototype.slice.call( arguments );
if ( typeof arg1 === "string" && arg1 === "#" ) {
// JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0
migrateWarn( "jQuery( '#' ) is not a valid selector" );
args[ 0 ] = [];
}
return oldInit.apply( this, args );
};
jQuery.fn.init.prototype = jQuery.fn;
jQuery.find = function( selector ) {
var args = Array.prototype.slice.call( arguments );
// Support: PhantomJS 1.x
// String#match fails to match when used with a //g RegExp, only on some strings
if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {
// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
// First see if qS thinks it's a valid selector, if so avoid a false positive
try {
window.document.querySelector( selector );
} catch ( err1 ) {
// Didn't *look* valid to qSA, warn and try quoting what we think is the value
selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
return "[" + attr + op + "\"" + value + "\"]";
} );
// If the regexp *may* have created an invalid selector, don't update it
// Note that there may be false alarms if selector uses jQuery extensions
try {
window.document.querySelector( selector );
migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );
args[ 0 ] = selector;
} catch ( err2 ) {
migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );
}
}
}
return oldFind.apply( this, args );
};
// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
for ( findProp in oldFind ) {
if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
jQuery.find[ findProp ] = oldFind[ findProp ];
}
}
// The number of elements contained in the matched element set
migrateWarnFunc( jQuery.fn, "size", function() {
return this.length;
},
"jQuery.fn.size() is deprecated and removed; use the .length property" );
migrateWarnFunc( jQuery, "parseJSON", function() {
return JSON.parse.apply( null, arguments );
},
"jQuery.parseJSON is deprecated; use JSON.parse" );
migrateWarnFunc( jQuery, "holdReady", jQuery.holdReady,
"jQuery.holdReady is deprecated" );
migrateWarnFunc( jQuery, "unique", jQuery.uniqueSort,
"jQuery.unique is deprecated; use jQuery.uniqueSort" );
// Now jQuery.expr.pseudos is the standard incantation
migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos,
"jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" );
migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos,
"jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" );
// Prior to jQuery 3.1.1 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.1.1" ) ) {
migrateWarnFunc( jQuery, "trim", function( text ) {
return text == null ?
"" :
( text + "" ).replace( rtrim, "" );
},
"jQuery.trim is deprecated; use String.prototype.trim" );
}
// Prior to jQuery 3.2 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.2.0" ) ) {
migrateWarnFunc( jQuery, "nodeName", function( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
},
"jQuery.nodeName is deprecated" );
migrateWarnFunc( jQuery, "isArray", Array.isArray,
"jQuery.isArray is deprecated; use Array.isArray"
);
}
if ( jQueryVersionSince( "3.3.0" ) ) {
migrateWarnFunc( jQuery, "isNumeric", function( obj ) {
// As of jQuery 3.0, isNumeric is limited to
// strings and numbers (primitives or objects)
// that can be coerced to finite numbers (gh-2662)
var type = typeof obj;
return ( type === "number" || type === "string" ) &&
// parseFloat NaNs numeric-cast false positives ("")
// ...but misinterprets leading-number strings, e.g. hex literals ("0x...")
// subtraction forces infinities to NaN
!isNaN( obj - parseFloat( obj ) );
},
"jQuery.isNumeric() is deprecated"
);
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".
split( " " ),
function( _, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
migrateWarnFunc( jQuery, "type", function( obj ) {
if ( obj == null ) {
return obj + "";
}
// Support: Android <=2.3 only (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ Object.prototype.toString.call( obj ) ] || "object" :
typeof obj;
},
"jQuery.type is deprecated" );
migrateWarnFunc( jQuery, "isFunction",
function( obj ) {
return typeof obj === "function";
},
"jQuery.isFunction() is deprecated" );
migrateWarnFunc( jQuery, "isWindow",
function( obj ) {
return obj != null && obj === obj.window;
},
"jQuery.isWindow() is deprecated"
);
}
// Support jQuery slim which excludes the ajax module
if ( jQuery.ajax ) {
var oldAjax = jQuery.ajax,
rjsonp = /(=)\?(?=&|$)|\?\?/;
jQuery.ajax = function( ) {
var jQXHR = oldAjax.apply( this, arguments );
// Be sure we got a jQXHR (e.g., not sync)
if ( jQXHR.promise ) {
migrateWarnFunc( jQXHR, "success", jQXHR.done,
"jQXHR.success is deprecated and removed" );
migrateWarnFunc( jQXHR, "error", jQXHR.fail,
"jQXHR.error is deprecated and removed" );
migrateWarnFunc( jQXHR, "complete", jQXHR.always,
"jQXHR.complete is deprecated and removed" );
}
return jQXHR;
};
// Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion
// behavior is gone in jQuery 4.0 and as it has security implications, we don't
// want to restore the legacy behavior.
if ( !jQueryVersionSince( "4.0.0" ) ) {
// Register this prefilter before the jQuery one. Otherwise, a promoted
// request is transformed into one with the script dataType and we can't
// catch it anymore.
jQuery.ajaxPrefilter( "+json", function( s ) {
// Warn if JSON-to-JSONP auto-promotion happens.
if ( s.jsonp !== false && ( rjsonp.test( s.url ) ||
typeof s.data === "string" &&
( s.contentType || "" )
.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
rjsonp.test( s.data )
) ) {
migrateWarn( "JSON-to-JSONP auto-promotion is deprecated" );
}
} );
}
}
var oldRemoveAttr = jQuery.fn.removeAttr,
oldToggleClass = jQuery.fn.toggleClass,
rmatchNonSpace = /\S+/g;
jQuery.fn.removeAttr = function( name ) {
var self = this;
jQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) {
if ( jQuery.expr.match.bool.test( attr ) ) {
migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr );
self.prop( attr, false );
}
} );
return oldRemoveAttr.apply( this, arguments );
};
jQuery.fn.toggleClass = function( state ) {
// Only deprecating no-args or single boolean arg
if ( state !== undefined && typeof state !== "boolean" ) {
return oldToggleClass.apply( this, arguments );
}
migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" );
// Toggle entire class name of each element
return this.each( function() {
var className = this.getAttribute && this.getAttribute( "class" ) || "";
if ( className ) {
jQuery.data( this, "__className__", className );
}
// If the element has a class name or if we're passed `false`,
// then remove the whole classname (if there was one, the above saved it).
// Otherwise bring back whatever was previously saved (if anything),
// falling back to the empty string if nothing was stored.
if ( this.setAttribute ) {
this.setAttribute( "class",
className || state === false ?
"" :
jQuery.data( this, "__className__" ) || ""
);
}
} );
};
function camelCase( string ) {
return string.replace( /-([a-z])/g, function( _, letter ) {
return letter.toUpperCase();
} );
}
var oldFnCss,
internalSwapCall = false,
ralphaStart = /^[a-z]/,
// The regex visualized:
//
// /----------\
// | | /-------\
// | / Top \ | | |
// /--- Border ---+-| Right |-+---+- Width -+---\
// | | Bottom | |
// | \ Left / |
// | |
// | /----------\ |
// | /-------------\ | | |- END
// | | | | / Top \ | |
// | | / Margin \ | | | Right | | |
// |---------+-| |-+---+-| Bottom |-+----|
// | \ Padding / \ Left / |
// BEGIN -| |
// | /---------\ |
// | | | |
// | | / Min \ | / Width \ |
// \--------------+-| |-+---| |---/
// \ Max / \ Height /
rautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;
// If this version of jQuery has .swap(), don't false-alarm on internal uses
if ( jQuery.swap ) {
jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;
if ( oldHook ) {
jQuery.cssHooks[ name ].get = function() {
var ret;
internalSwapCall = true;
ret = oldHook.apply( this, arguments );
internalSwapCall = false;
return ret;
};
}
} );
}
jQuery.swap = function( elem, options, callback, args ) {
var ret, name,
old = {};
if ( !internalSwapCall ) {
migrateWarn( "jQuery.swap() is undocumented and deprecated" );
}
// Remember the old values, and insert the new ones
for ( name in options ) {
old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ];
}
ret = callback.apply( elem, args || [] );
// Revert the old values
for ( name in options ) {
elem.style[ name ] = old[ name ];
}
return ret;
};
if ( jQueryVersionSince( "3.4.0" ) && typeof Proxy !== "undefined" ) {
jQuery.cssProps = new Proxy( jQuery.cssProps || {}, {
set: function() {
migrateWarn( "JQMIGRATE: jQuery.cssProps is deprecated" );
return Reflect.set.apply( this, arguments );
}
} );
}
// Create a dummy jQuery.cssNumber if missing. It won't be used by jQuery but
// it will prevent code adding new keys to it unconditionally from crashing.
if ( !jQuery.cssNumber ) {
jQuery.cssNumber = {};
}
function isAutoPx( prop ) {
// The first test is used to ensure that:
// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).
// 2. The prop is not empty.
return ralphaStart.test( prop ) &&
rautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );
}
oldFnCss = jQuery.fn.css;
jQuery.fn.css = function( name, value ) {
var camelName,
origThis = this;
if ( name && typeof name === "object" && !Array.isArray( name ) ) {
jQuery.each( name, function( n, v ) {
jQuery.fn.css.call( origThis, n, v );
} );
return this;
}
if ( typeof value === "number" ) {
camelName = camelCase( name );
if ( !isAutoPx( camelName ) && !jQuery.cssNumber[ camelName ] ) {
migrateWarn( "Number-typed values are deprecated for jQuery.fn.css( \"" +
name + "\", value )" );
}
}
return oldFnCss.apply( this, arguments );
};
var oldData = jQuery.data;
jQuery.data = function( elem, name, value ) {
var curData, sameKeys, key;
// Name can be an object, and each entry in the object is meant to be set as data
if ( name && typeof name === "object" && arguments.length === 2 ) {
curData = jQuery.hasData( elem ) && oldData.call( this, elem );
sameKeys = {};
for ( key in name ) {
if ( key !== camelCase( key ) ) {
migrateWarn( "jQuery.data() always sets/gets camelCased names: " + key );
curData[ key ] = name[ key ];
} else {
sameKeys[ key ] = name[ key ];
}
}
oldData.call( this, elem, sameKeys );
return name;
}
// If the name is transformed, look for the un-transformed name in the data object
if ( name && typeof name === "string" && name !== camelCase( name ) ) {
curData = jQuery.hasData( elem ) && oldData.call( this, elem );
if ( curData && name in curData ) {
migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name );
if ( arguments.length > 2 ) {
curData[ name ] = value;
}
return curData[ name ];
}
}
return oldData.apply( this, arguments );
};
// Support jQuery slim which excludes the effects module
if ( jQuery.fx ) {
var intervalValue, intervalMsg,
oldTweenRun = jQuery.Tween.prototype.run,
linearEasing = function( pct ) {
return pct;
};
jQuery.Tween.prototype.run = function( ) {
if ( jQuery.easing[ this.easing ].length > 1 ) {
migrateWarn(
"'jQuery.easing." + this.easing.toString() + "' should use only one argument"
);
jQuery.easing[ this.easing ] = linearEasing;
}
oldTweenRun.apply( this, arguments );
};
intervalValue = jQuery.fx.interval || 13;
intervalMsg = "jQuery.fx.interval is deprecated";
// Support: IE9, Android <=4.4
// Avoid false positives on browsers that lack rAF
// Don't warn if document is hidden, jQuery uses setTimeout (#292)
if ( window.requestAnimationFrame ) {
Object.defineProperty( jQuery.fx, "interval", {
configurable: true,
enumerable: true,
get: function() {
if ( !window.document.hidden ) {
migrateWarn( intervalMsg );
}
return intervalValue;
},
set: function( newValue ) {
migrateWarn( intervalMsg );
intervalValue = newValue;
}
} );
}
}
var oldLoad = jQuery.fn.load,
oldEventAdd = jQuery.event.add,
originalFix = jQuery.event.fix;
jQuery.event.props = [];
jQuery.event.fixHooks = {};
migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat,
"jQuery.event.props.concat() is deprecated and removed" );
jQuery.event.fix = function( originalEvent ) {
var event,
type = originalEvent.type,
fixHook = this.fixHooks[ type ],
props = jQuery.event.props;
if ( props.length ) {
migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() );
while ( props.length ) {
jQuery.event.addProp( props.pop() );
}
}
if ( fixHook && !fixHook._migrated_ ) {
fixHook._migrated_ = true;
migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type );
if ( ( props = fixHook.props ) && props.length ) {
while ( props.length ) {
jQuery.event.addProp( props.pop() );
}
}
}
event = originalFix.call( this, originalEvent );
return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
};
jQuery.event.add = function( elem, types ) {
// This misses the multiple-types case but that seems awfully rare
if ( elem === window && types === "load" && window.document.readyState === "complete" ) {
migrateWarn( "jQuery(window).on('load'...) called after load event occurred" );
}
return oldEventAdd.apply( this, arguments );
};
jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
jQuery.fn[ name ] = function() {
var args = Array.prototype.slice.call( arguments, 0 );
// If this is an ajax load() the first arg should be the string URL;
// technically this could also be the "Anything" arg of the event .load()
// which just goes to show why this dumb signature has been deprecated!
// jQuery custom builds that exclude the Ajax module justifiably die here.
if ( name === "load" && typeof args[ 0 ] === "string" ) {
return oldLoad.apply( this, args );
}
migrateWarn( "jQuery.fn." + name + "() is deprecated" );
args.splice( 0, 0, name );
if ( arguments.length ) {
return this.on.apply( this, args );
}
// Use .triggerHandler here because:
// - load and unload events don't need to bubble, only applied to window or image
// - error event should not bubble to window, although it does pre-1.7
// See http://bugs.jquery.com/ticket/11820
this.triggerHandler.apply( this, args );
return this;
};
} );
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) {
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
migrateWarn( "jQuery.fn." + name + "() event shorthand is deprecated" );
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
} );
// Trigger "ready" event only once, on document ready
jQuery( function() {
jQuery( window.document ).triggerHandler( "ready" );
} );
jQuery.event.special.ready = {
setup: function() {
if ( this === window.document ) {
migrateWarn( "'ready' event is deprecated" );
}
}
};
jQuery.fn.extend( {
bind: function( types, data, fn ) {
migrateWarn( "jQuery.fn.bind() is deprecated" );
return this.on( types, null, data, fn );
},
unbind: function( types, fn ) {
migrateWarn( "jQuery.fn.unbind() is deprecated" );
return this.off( types, null, fn );
},
delegate: function( selector, types, data, fn ) {
migrateWarn( "jQuery.fn.delegate() is deprecated" );
return this.on( types, selector, data, fn );
},
undelegate: function( selector, types, fn ) {
migrateWarn( "jQuery.fn.undelegate() is deprecated" );
return arguments.length === 1 ?
this.off( selector, "**" ) :
this.off( types, selector || "**", fn );
},
hover: function( fnOver, fnOut ) {
migrateWarn( "jQuery.fn.hover() is deprecated" );
return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver );
}
} );
var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
origHtmlPrefilter = jQuery.htmlPrefilter,
makeMarkup = function( html ) {
var doc = window.document.implementation.createHTMLDocument( "" );
doc.body.innerHTML = html;
return doc.body && doc.body.innerHTML;
},
warnIfChanged = function( html ) {
var changed = html.replace( rxhtmlTag, "<$1></$2>" );
if ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) {
migrateWarn( "HTML tags must be properly nested and closed: " + html );
}
};
jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() {
jQuery.htmlPrefilter = function( html ) {
warnIfChanged( html );
return html.replace( rxhtmlTag, "<$1></$2>" );
};
};
jQuery.htmlPrefilter = function( html ) {
warnIfChanged( html );
return origHtmlPrefilter( html );
};
var oldOffset = jQuery.fn.offset;
jQuery.fn.offset = function() {
var elem = this[ 0 ];
if ( elem && ( !elem.nodeType || !elem.getBoundingClientRect ) ) {
migrateWarn( "jQuery.fn.offset() requires a valid DOM element" );
return arguments.length ? this : undefined;
}
return oldOffset.apply( this, arguments );
};
// Support jQuery slim which excludes the ajax module
// The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional`
// so it doesn't make sense for the slim build.
if ( jQuery.ajax ) {
var oldParam = jQuery.param;
jQuery.param = function( data, traditional ) {
var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
if ( traditional === undefined && ajaxTraditional ) {
migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" );
traditional = ajaxTraditional;
}
return oldParam.call( this, data, traditional );
};
}
var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
jQuery.fn.andSelf = function() {
migrateWarn( "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" );
return oldSelf.apply( this, arguments );
};
// Support jQuery slim which excludes the deferred module in jQuery 4.0+
if ( jQuery.Deferred ) {
var oldDeferred = jQuery.Deferred,
tuples = [
// Action, add listener, callbacks, .then handlers, final state
[ "resolve", "done", jQuery.Callbacks( "once memory" ),
jQuery.Callbacks( "once memory" ), "resolved" ],
[ "reject", "fail", jQuery.Callbacks( "once memory" ),
jQuery.Callbacks( "once memory" ), "rejected" ],
[ "notify", "progress", jQuery.Callbacks( "memory" ),
jQuery.Callbacks( "memory" ) ]
];
jQuery.Deferred = function( func ) {
var deferred = oldDeferred(),
promise = deferred.promise();
deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
var fns = arguments;
migrateWarn( "deferred.pipe() is deprecated" );
return jQuery.Deferred( function( newDefer ) {
jQuery.each( tuples, function( i, tuple ) {
var fn = typeof fns[ i ] === "function" && fns[ i ];
// Deferred.done(function() { bind to newDefer or newDefer.resolve })
// deferred.fail(function() { bind to newDefer or newDefer.reject })
// deferred.progress(function() { bind to newDefer or newDefer.notify })
deferred[ tuple[ 1 ] ]( function() {
var returned = fn && fn.apply( this, arguments );
if ( returned && typeof returned.promise === "function" ) {
returned.promise()
.done( newDefer.resolve )
.fail( newDefer.reject )
.progress( newDefer.notify );
} else {
newDefer[ tuple[ 0 ] + "With" ](
this === promise ? newDefer.promise() : this,
fn ? [ returned ] : arguments
);
}
} );
} );
fns = null;
} ).promise();
};
if ( func ) {
func.call( deferred, deferred );
}
return deferred;
};
// Preserve handler of uncaught exceptions in promise chains
jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;
}
return jQuery;
} );

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More