Add value sources for dynamic brightness control on LED targets

Introduces a new Value Source entity that produces a scalar float (0.0-1.0)
for dynamic brightness modulation. Three subtypes: Static (constant),
Animated (sine/triangle/square/sawtooth waveform), and Audio-reactive
(RMS/peak/beat from mono audio source). Value sources can be optionally
attached to LED targets to control brightness each frame.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 12:19:40 +03:00
parent 27720e51aa
commit ef474fe275
26 changed files with 1704 additions and 14 deletions

View File

@@ -760,5 +760,54 @@
"audio_source.updated": "Audio source updated",
"audio_source.deleted": "Audio source deleted",
"audio_source.delete.confirm": "Are you sure you want to delete this audio source?",
"audio_source.error.name_required": "Please enter a name"
"audio_source.error.name_required": "Please enter a name",
"streams.group.value": "Value Sources",
"value_source.group.title": "🎚️ Value Sources",
"value_source.add": "Add Value Source",
"value_source.edit": "Edit Value Source",
"value_source.name": "Name:",
"value_source.name.placeholder": "Brightness Pulse",
"value_source.name.hint": "A descriptive name for this value source",
"value_source.type": "Type:",
"value_source.type.hint": "Static outputs a constant value. Animated cycles through a waveform. Audio reacts to sound input.",
"value_source.type.static": "Static",
"value_source.type.animated": "Animated",
"value_source.type.audio": "Audio",
"value_source.value": "Value:",
"value_source.value.hint": "Constant output value (0.0 = off, 1.0 = full brightness)",
"value_source.waveform": "Waveform:",
"value_source.waveform.hint": "Shape of the brightness animation cycle",
"value_source.waveform.sine": "Sine",
"value_source.waveform.triangle": "Triangle",
"value_source.waveform.square": "Square",
"value_source.waveform.sawtooth": "Sawtooth",
"value_source.speed": "Speed (cpm):",
"value_source.speed.hint": "Cycles per minute — how fast the waveform repeats (1 = very slow, 120 = very fast)",
"value_source.min_value": "Min Value:",
"value_source.min_value.hint": "Minimum output of the waveform cycle",
"value_source.max_value": "Max Value:",
"value_source.max_value.hint": "Maximum output of the waveform cycle",
"value_source.audio_source": "Audio Source:",
"value_source.audio_source.hint": "Mono audio source to read audio levels from",
"value_source.mode": "Mode:",
"value_source.mode.hint": "RMS measures average volume. Peak tracks loudest moments. Beat triggers on rhythm.",
"value_source.mode.rms": "RMS (Volume)",
"value_source.mode.peak": "Peak",
"value_source.mode.beat": "Beat",
"value_source.sensitivity": "Sensitivity:",
"value_source.sensitivity.hint": "Gain multiplier for the audio signal (higher = more reactive)",
"value_source.smoothing": "Smoothing:",
"value_source.smoothing.hint": "Temporal smoothing (0 = instant response, 1 = very smooth/slow)",
"value_source.description": "Description (optional):",
"value_source.description.placeholder": "Describe this value source...",
"value_source.description.hint": "Optional notes about this value source",
"value_source.created": "Value source created",
"value_source.updated": "Value source updated",
"value_source.deleted": "Value source deleted",
"value_source.delete.confirm": "Are you sure you want to delete this value source?",
"value_source.error.name_required": "Please enter a name",
"targets.brightness_vs": "Brightness Source:",
"targets.brightness_vs.hint": "Optional value source that dynamically controls brightness each frame (overrides device brightness)",
"targets.brightness_vs.none": "None (device brightness)"
}

View File

@@ -760,5 +760,54 @@
"audio_source.updated": "Аудиоисточник обновлён",
"audio_source.deleted": "Аудиоисточник удалён",
"audio_source.delete.confirm": "Удалить этот аудиоисточник?",
"audio_source.error.name_required": "Введите название"
"audio_source.error.name_required": "Введите название",
"streams.group.value": "Источники значений",
"value_source.group.title": "🎚️ Источники значений",
"value_source.add": "Добавить источник значений",
"value_source.edit": "Редактировать источник значений",
"value_source.name": "Название:",
"value_source.name.placeholder": "Пульс яркости",
"value_source.name.hint": "Описательное имя для этого источника значений",
"value_source.type": "Тип:",
"value_source.type.hint": "Статический выдаёт постоянное значение. Анимированный циклически меняет форму волны. Аудио реагирует на звук.",
"value_source.type.static": "Статический",
"value_source.type.animated": "Анимированный",
"value_source.type.audio": "Аудио",
"value_source.value": "Значение:",
"value_source.value.hint": "Постоянное выходное значение (0.0 = выкл, 1.0 = полная яркость)",
"value_source.waveform": "Форма волны:",
"value_source.waveform.hint": "Форма цикла анимации яркости",
"value_source.waveform.sine": "Синус",
"value_source.waveform.triangle": "Треугольник",
"value_source.waveform.square": "Прямоугольник",
"value_source.waveform.sawtooth": "Пила",
"value_source.speed": "Скорость (цикл/мин):",
"value_source.speed.hint": "Циклов в минуту — как быстро повторяется волна (1 = очень медленно, 120 = очень быстро)",
"value_source.min_value": "Мин. значение:",
"value_source.min_value.hint": "Минимальный выход цикла волны",
"value_source.max_value": "Макс. значение:",
"value_source.max_value.hint": "Максимальный выход цикла волны",
"value_source.audio_source": "Аудиоисточник:",
"value_source.audio_source.hint": "Моно-аудиоисточник для считывания уровня звука",
"value_source.mode": "Режим:",
"value_source.mode.hint": "RMS измеряет среднюю громкость. Пик отслеживает самые громкие моменты. Бит реагирует на ритм.",
"value_source.mode.rms": "RMS (Громкость)",
"value_source.mode.peak": "Пик",
"value_source.mode.beat": "Бит",
"value_source.sensitivity": "Чувствительность:",
"value_source.sensitivity.hint": "Множитель усиления аудиосигнала (выше = более реактивный)",
"value_source.smoothing": "Сглаживание:",
"value_source.smoothing.hint": "Временное сглаживание (0 = мгновенный отклик, 1 = очень плавный/медленный)",
"value_source.description": "Описание (необязательно):",
"value_source.description.placeholder": "Опишите этот источник значений...",
"value_source.description.hint": "Необязательные заметки об этом источнике значений",
"value_source.created": "Источник значений создан",
"value_source.updated": "Источник значений обновлён",
"value_source.deleted": "Источник значений удалён",
"value_source.delete.confirm": "Удалить этот источник значений?",
"value_source.error.name_required": "Введите название",
"targets.brightness_vs": "Источник яркости:",
"targets.brightness_vs.hint": "Необязательный источник значений для динамического управления яркостью каждый кадр (переопределяет яркость устройства)",
"targets.brightness_vs.none": "Нет (яркость устройства)"
}