К содержанию
fohbook/ TouchDesigner для света
уверенный

Автозапуск

Машина включилась — свет заработал: настройки системы, аргументы запуска, прогрев и расписание.

Инсталляция должна подниматься сама после любого выключения. Это не одна настройка, а несколько.

Настройки системы

Что Как
Автологин Вход без пароля
Автозапуск после сбоя питания В BIOS: Restore on AC Power Loss = On
Спящий режим и гашение экрана Отключить полностью
Обновления Windows Отложить максимально
Уведомления Режим «не беспокоить»
Схема питания «Максимальная производительность»
Экран блокировки Убрать

Пункт про BIOS вспоминают после первого отключения электричества в здании.

Запуск проекта

Ярлык в автозагрузку или задача в планировщике:

TouchPlayer.exe D:\show\show.toe

TouchPlayer предпочтительнее полного TouchDesigner: меньше того, что может пойти не так.

Аргументы доступны из проекта:

app.launchArgs

Так одну и ту же сборку запускают в разных режимах: --venue=hall1, --mode=demo.

Прогрев

Первые секунды нельзя показывать

При старте компилируются шейдеры, читаются файлы, инициализируются устройства. Приборы в этот момент получат мусор или ничего.

Правильная последовательность:

  1. Проект запускается с выключенным выводом DMX (Active = 0).
  2. Инициализируются входы, читается конфигурация, восстанавливается состояние.
  3. Ждём стабильных кадров (Perform CHOP) — обычно 5–15 секунд.
  4. Выставляется безопасное стартовое состояние (обычно ноль).
  5. Включается вывод.
  6. Только теперь стартует расписание.

Расписание

09:50  запуск проекта, прогрев
10:00  открыть шоу
21:00  плавно погасить
21:05  перезапустить машину

Ночной перезапуск лечит накопившееся: утечки памяти, подвисшие соединения, ошибки. Это дешевле, чем искать идеальную причину. Полный пример постоянной инсталляции — Свет по времени суток.

Реализуется либо планировщиком системы, либо внутри проекта по часам:

import datetime
now = datetime.datetime.now()
op('state').Enable(9 <= now.hour < 21)

Гашение при выходе

Приборы держат последнее значение. Закрыли проект — свет остался.

def onExit():
    op('master').par.value0 = 0
    op('dmx_out').cook(force=True)
    return

Дайте пакету уйти до закрытия. Ещё надёжнее — гасить за секунду до завершения и только потом закрываться.

Проверка

Тест выдёргиванием

Единственная честная проверка: выдернуть питание, воткнуть обратно и не трогать. Через пять минут свет должен работать сам. Не получилось — инсталляция не готова.

Повторите тест трижды, с разными состояниями: во время шоу, ночью, в момент перезапуска.

рядом по смыслу