🧩 Типы узлов
Пять типов узлов покрывают все тренировочные сценарии
🎯 Стимул (STIMULUS)
| Назначение | single | Одна буква Е / кольцо Ландольта / круг |
| Адаптация | V-шкала | Плавно или ступенчато по сериям |
| Ответ | направление | ▲▼◀▶ или стрелки клавиатуры |
🎬 Динамика (DYNAMIC)
| Назначение | dynamic | Плавная смена цвета + стимул |
| Отличие | 2–3 цвета | С пинг-понгом и повтором |
📖 Чтение (READING)
| Назначение | reading | Книги FB2 / EPUB / TXT |
| Особенность | колонки | Адаптивный шрифт под V |
⚖️ Сравнение (COMPARE)
| Назначение | compare | Да/Нет или найди пары |
| Ответ | да/нет | Клик по паре или кнопки |
🧠 Логика (LOGIC_IF)
| Назначение | logic | Условные переходы (зарезервировано) |
| Статус | в разработке | Пока не влияет на граф |
👁️ Острота зрения (V)
Главный параметр — связан с размером стимула, дистанцией и PPI
Основные параметры
| V старт | stimAcuity | 0.1 – 2.0 (шаг 0.1) |
| V цель | endAcuity | 0.1 – 2.0 |
| Шаг V | acuityStep | 0.05 / 0.1 / 0.2 / 0.5 |
| Дистанция | stimDistance | 0.1 – 20 м |
| PPI экрана | stimPPI | 20 – 1200 |
Формулы
Примеры размеров (1 м, 96 PPI)
| V = 0.5 | 2.91 мм | ≈11 px |
| V = 1.0 | 1.45 мм | ≈5 px |
| V = 1.5 | 0.97 мм | ≈4 px |
| V = 2.0 | 0.73 мм | ≈3 px |
📊 Серии
Разбиение тренировки на порции с порогом успеха
Параметры серий
| Всего серий | seriesCount | 1 – 50 |
| Размер серии | seriesSize | 4 / 5 / 6 / 7 / 8 |
| Порог | seriesThreshold | 1 – 8 правильных |
Автопауза
| Порог без ответов | noAnswerStreak | 3 серии подряд → пауза |
| Восстановление | resumeTraining | Кнопка «Продолжить» |
🎯 Тип стимула
Форма, направление, поведение
Форма
| Буква Е | LETTER_E | Классический знак Сивцева |
| Кольцо Ландольта | LANDOLT | Разрыв в одну из 4 сторон |
| Динамика Круг | singleCircleEnabled | Двухслойный радиальный градиент |
Направление и активность
| Случайное направление | isActive | Каждый показ новое |
| Фиксированное | stimDirectionFixed | вверх / вниз / влево / вправо |
| Случайное положение | singleRandomPos | Стимул появляется в случайной точке |
🎨 Цвета
Стимул, фон, промежуточные цвета
Базовые цвета
| Цвет стимула | stimR/G/B | Любой RGB |
| Цвет фона | bgR/G/B | Любой RGB |
Наследование по связям
| Острота (размер) | inheritSize | Следующий узел берёт V предыдущего |
| Скорость | inheritSpeed | Следующий узел берёт время показа |
🔲 Сетка положения
Стимул появляется в заданной части экрана
Параметры
| Включить сетку | singleGridEnabled | true / false |
| Столбцов (X) | singleGridX | 1 – 10 |
| Строк (Y) | singleGridY | 1 – 10 |
| Показывать линии | singleGridShowLines | Визуальная подсказка |
| Случайная клетка | singleGridRandomCell | Или фиксированная |
| Избегать повтора | singleGridAvoidRepeat | Не та же клетка дважды |
| Активные клетки | singleGridCells | Вручную выбрать подмножество |
Пример: 3×3, активны 4 клетки
🎯 Динамика Круг
Двухслойный радиальный градиент с независимыми анимациями
Внутренний диск
| Показывать | circleInnerEnabled | true / false |
| Радиус | circleInnerRadiusPct | 5 – 95 % |
| Цвет 1 (центр) | circleInnerColor1 | Любой RGB |
| Цвет 3 (середина) | circleInnerColor3 | Опционально |
| Цвет 2 (край) | circleInnerColor2 | Любой RGB |
| Время цикла | circleInnerDuration | от 0.2 с |
| Повторять | circleInnerLoop | true / false |
| Пинг-понг | circleInnerReverse | A→B→A |
Внешнее кольцо
| Показывать | circleOuterEnabled | true / false |
| Цвет 1 (у диска) | circleOuterColor1 | Прозрачный у центра |
| Цвет 3 (середина) | circleOuterColor3 | Опционально |
| Цвет 2 (край) | circleOuterColor2 | Любой RGB |
| Время цикла | circleOuterDuration | от 0.2 с |
| Повторять | circleOuterLoop | true / false |
| Пинг-понг | circleOuterReverse | A→B→A |
🎨 Динамика цвета (плавная)
Постепенный переход A → B за заданное время
Динамика стимула
| Включить | singleStimDynamicEnabled | true / false |
| Цвет 1 | singleStimColor1 | Стартовый |
| Цвет 3 (опц.) | singleStimColor3 | Промежуточный |
| Цвет 2 | singleStimColor2 | Конечный |
| Время | singleStimDuration | от 0.2 с |
| Повторять | singleStimLoop | true / false |
| Пинг-понг | singleStimReverse | A→B→A |
Динамика фона
| Включить | singleBgDynamicEnabled | true / false |
| Цвет 1 | singleBgColor1 | Стартовый |
| Цвет 3 (опц.) | singleBgColor3 | Промежуточный |
| Цвет 2 | singleBgColor2 | Конечный |
| Время | singleBgDuration | от 0.2 с |
| Повторять | singleBgLoop | true / false |
| Пинг-понг | singleBgReverse | A→B→A |
🔦 Моргание (резкая смена цвета)
Мгновенная смена цвета без плавного перехода — тренирует быстрое восприятие
Параметры моргания
| Включить | blinkEnabled | true / false |
| Цель | blinkTarget | stim / bg / both |
| Цвет A | blinkColorA | Любой RGB |
| Цвет B | blinkColorB | Любой RGB |
| Период | blinkIntervalMs | 50 – 5000 мс |
| Доля A | blinkDuty | 0.05 – 0.95 |
| Количество | blinkCount | 0 = бесконечно |
Пример: 500 мс, доля 50%
Каждое переключение — мгновенное, без lerp.
🟢 Периферийные точки
Дополнительные стимулы на границе поля зрения
Параметры
| Включить | periEnabled | true / false |
| Количество | periCount | 1 – 12 |
| Острота (V) | periAcuity | 0.1 – 1.0 |
| Радиус min | periRadiusMinPct | 20 – 100 % |
| Радиус max | periRadiusMaxPct | 20 – 100 % |
| Цвет | periColor | Любой RGB |
| Движение | periMotion | static / rotate / pulse |
| Скорость | periSpeed | 0.02 – 5 |
| Случайные углы | periRandomAngles | true / false |
Пример: 4 точки по кругу
🔴 Цифровой дефокус
Имитация периферического зрения с чёрным стимулом в центре
Параметры
| Включить | dfEnabled | true / false |
| Радиус центра | dfCenterRadiusMm | 3 – 50 мм |
| Фон центра | dfCenterBg | Обычно красный |
| Цвет стимула | dfStimColor | Обычно чёрный |
| Фон периферии | dfPeriBg | Обычно синий |
| Размытие | dfPeriBlur | 0 – 100 % |
Пример
📖 Чтение
Книги с адаптивным шрифтом и физиологическим фоном
Книга и шрифт
| Формат | bookFile | TXT / FB2 / EPUB |
| Шрифт | readingFontFamily | Sivtsev / Segoe UI / любой |
| Жирный | readingFontWeight | normal / bold |
| Острота V | readingAcuity | 0.1 – 2.0 |
| Дистанция | readingDistance | 0.1 – 20 м |
| Цвет текста | readingTextColor | Любой RGB |
| Длительность | duration | мс / с / мин |
Фон: 4 режима
| Сплошной | solid | Один цвет |
| Две половины | split | Резкая граница L/R |
| Градиент | gradient | 2 или 3 цвета |
| Динамический | dynamic | Плавная смена |
Динамический фон
| Режим | readingDynamicMode | simple / rgb / physiological |
| Цвет A | readingDynamicStartColor | Стартовый |
| Цвет B | readingDynamicEndColor | Конечный |
| Время | readingDynamicDuration | от 0.2 с |
| Повторять | readingDynamicLoop | true / false |
| Пинг-понг | readingDynamicReverse | A→B→A |
| Шаг дптр | readingDynamicStep | 0.1 – 1.6 |
| Длит. шага | readingDynamicStepDuration | от 0.1 с |
| Показывать дптр | readingDynamicShowLabel | true / false |
Физиологическая шкала (17 точек)
⚖️ Сравнение
Два подрежима: направление и «найди одинаковые»
Основные параметры
| Режим | compareMode | direction / find_same |
| Пар (для find_same) | pairsCount | 1 – 20 |
| Столбцов | gridX | 2 – 6 |
| Строк | gridY | 1 – 6 |
| Активные клетки | activeCells | Минимум 2 |
| Параметры клеток | cellParams[] | V, цвета, время для каждой |
Параметры одной клетки
| V | acuity | 0.1 – 2.0 |
| Размер | size | Расчётный px |
| Цвет стимула | stimR/G/B | RGB |
| Цвет фона | bgR/G/B | RGB |
| Время | duration | 200 – 5000 мс |
⏱ Время
Четыре фазы на каждый показ + единицы измерения
Четыре фазы
| Задержка 1 | delay1 | Пауза до показа |
| Показ | duration | Стимул на экране |
| Ожидание ответа | response | Запас на реакцию |
| Задержка 2 | delay2 | Пауза после показа |
Единицы измерения
| миллисекунды | ms | × 1 |
| секунды | s | × 1000 |
| минуты | min | × 60000 |
Единица определяется автоматически, но можно переключить вручную.
👁️ Контроль морганий (через камеру)
Автоматическое отслеживание частоты морганий через EAR
Параметры
| Включить | blinkEnabled | true / false |
| Порог EAR | blinkThreshold | 0.05 – 0.5 |
| Минимум в минуту | blinkMinRate | 0 – 60 |
| Окно подсчёта | blinkWindowSec | 5 – 120 с |
| Ждать открытых глаз | blinkLockShow | Блокировать показ |
Что отслеживается
| Общее количество | totalBlinks | За сессию |
| Долгие | longBlinks | > 400 мс |
| Асимметричные | asymBlinks | < 0.45 отношения |
| Средняя частота | avgRate | Морганий/мин |
| Минимум | minRateObserved | Худший момент |
Если частота падает ниже порога — показывается «Поморгайте».
📷 Камера и дистанция
Контроль расстояния до экрана через распознавание лица
Общие дистанции
| Общая (стимулы) | generalDistance | 0.1 – 20 м |
| Чтение | readingDistance | 0.1 – 20 м |
| Увеличение | distanceToleranceIncreasePct | 0 – 100 % |
| Уменьшение | distanceToleranceDecreasePct | 0 – 100 % |
| Таймаут | distanceRestoreTimeoutSec | 0 – 60 с |
Как работает
| Калибровка | focalLengthPx | Один раз по известной дистанции |
| Мерило | IPD = 63 мм | Межзрачковое расстояние |
| Формула | D = IPD × f / px | Дистанция в реальном времени |
| Реакция | «Не отклоняйтесь» / «Не приближайтесь» | Голос + баннер |
| Пересчёт | recalcSizesForNewDistance | После таймаута |
🔗 Связи между узлами
Обычные переходы и петли с наследованием параметров
Типы связей
| Обычная | isLoop: false | Один раз туда и дальше |
| Петля | isLoop: true | Вернуться к узлу N раз |
Параметры петли
| Количество циклов | loopLimit | 1 – 9999 |
| Инициировать по ответу | initiateByAnswer | true / false |
Наследование
| Острота зрения | inheritSize | Следующий узел = V предыдущего |
| Скорость | inheritSpeed | Следующий узел = duration |
⚙️ Генератор режимов
Быстрое создание узла или запуск тренировки без графа
Что настраивается в генераторе
| Тип тренировки | single / compare / reading | Один стимул / сравнение / чтение |
| Режим | близорукость / дальнозоркость / общая | Предустановка |
| Активная тренировка | gen-active | Случайные направления |
| Серий | gen-series | 1 – 20 |
| Размер серии | gen-series-size | 4 – 8 |
| Порог | gen-threshold | 1 – 8 |
| Тип стимула | gen-type | LETTER_E / LANDOLT |
| V старт / V цель | gen-start-acuity / end | 0.1 – 2.0 |
| Шаг V | gen-acuity-step | 0.05 / 0.1 / 0.2 / 0.5 |
| Цвета | gen-start-color / end | Любые |
| Задержки | gen-delay1 / gen-delay2 | мс / с / мин |
Специфичные секции
| Сетка положения | gen-single-grid-* | X, Y, линии, случайность |
| Динамика стимула | gen-single-stim-* | 3 цвета, время, пинг-понг |
| Динамика фона | gen-single-bg-* | 3 цвета, время, пинг-понг |
| Динамика Круг | gen-circle-* | Внутренний + внешний |
| Периферия | gen-peri-* | Точки, движение |
| Дефокус | gen-df-* | Радиус, цвета |
| Моргание | gen-blink-anim-* | Резкая смена |
| Контроль морганий | gen-blink-* | EAR-контроль |
| Дистанции | gen-general-distance / gen-reading-distance | Общая / чтение |
| Допуски | gen-tol-* | % и таймаут |
| Чтение | gen-reading-* | Текст, шрифт, фоны |
| Сравнение | gen-compare-mode | direction / find_same |