Skip to content

sakharovaan/shimeji-python

Repository files navigation

Необходимые штуки (релиз 1.0)

Доделать GUI

  1. +Чтобы Катру можно было перемещать по левому клику
  2. +Чтобы правый клик открывал бы меню (как делать коллбеки на эти пункты?)
  3. Собирать меню (системное/дебаговое) по правому клику на основе плагинов и коллбеков
  4. +Сделать базовое окно диалога для текста
  5. +В диалоге текст показывается с анимацией посимвольно
  6. +Анимация (мигание)

Сделать систему плагинов

  1. +Какой-нибудь стандартный формат для API
  2. +Плагины на питоне, каждый цикл пробегать по всем методам on_tick в плагинах
  3. +Сделать on_boot/on_close, который исполняется один раз. on_boot это не init, в init техника, в on_boot поведение - не забывать ожидание после on_close -- start/stop plugin
  4. +Может использовать какой-то сторонний планировщик?

Сделать поведение

  1. +Движок для наложения слоёв
  2. +Слои накладываются с анимацией (периодичность)
  3. +Наложенные слои -- теггировать по именам (файл с конфигурацией эмоций)
  4. +Сделать файл с рандомными фразами
  5. +делать перенос строки
  6. +"Сейчас %(hour24), %(username)." - говорить сколько сейчас время
  7. "Очень важно поддерживать режим." -- разные фразы в зависимости от времени (реализовать в hour_dialogue_plugin)
  8. normalboottalk -- приветствовать в зависимости от времени дня, прощаться - желать хороших снов
  9. +Убрать (пока нет системы настроения) mouth с тэгом bad из рандомной ротации
  10. Ты её гладишь (средняя кнопка мыши, без разницы пока где) -- она улыбается и смотрит на тебя
  11. Несколько вариантов часового диалога
  12. Попросить сфокусировать взгляд на тебе

Общий шаблонизатор строк

  1. +Все строки в одном файле с айдишниками
  2. +Сделать возможность внедрять теги с эмоциями и %username, %hour24 переносом строки
  3. +У каждой строки несколько вариантов
  4. +Шаблонизатор генерирует как эмоцию изменить, что писать текстом и что отправлять в tts -- то есть сейчас отправляет из render_text события в очередь выражений - фильтр face
  5. +У каждого варианта есть опциональные рандомно включаемые варианты -- Сделать рандомными части диалогов. То есть строчка одна, но она может комбинироваться - фильтр optional

Управляемые выражения лица

  1. +Проще не мутить forced выражения лица, а иметь очередь выражений (LIFO). Элементы очереди -- набор нужных слоёв с временем удержания эмоции
  2. +Рендерить слои динамично
  3. +Blink plugin не трогать
  4. +По тику генератор рандомных выражений смотрит чтобы у очереди была всегда величина >=1, если меньше -- добавляет рандомное выражение
  5. +Консумер выражений берёт из очереди выражение (если пуста -- то ничего не делает), применяет open/closed_eyes состояния (если глаза закрыты они совпадают), и делает следующий свой тик исходя из времени
  6. +Если нам нужно зафорсить выражение лица -- мы вызываем прокси-метод, который вызывает tick в плагине

Динамический discovery картинок и сборка выражений из слоёв

  1. +dicovery слоёв (его ключ и значение типа mouth=shut) будет по regex с именованными группами, который будет задан в конффайле
  2. +тот, кто хочет изменить эмоцию, передаёт словарь с этими элементами ключ=значение, и мы их собираем в переданном порядке
  3. +короче, файл с эмоциями. для каждого слоя сделать один или несколько возможных вариантов. будет эмоция random со всеми сочетаниями
  4. +если ты хочешь зафорсить какое-то конкретное выражение лица (например, "смотрит вперёд"), ты указываешь в этом файле ещё одну эмоцию
  5. В теге expr сделать возможность указывать вторым параметром время (строку или число)

Доработать последовательность выхода

  1. +Избавиться от self.w.config['exit_initiated'], пусть каждый плагин сам себе ставит этот флаг, если ему нужно
  2. +dialogue: on_exit ставит флаг внутри плагина, если диалог есть -- он сразу закрывается, открывается диалог с прощанием, после рендера он готов закрываться
  3. +voice: on_exit ставит флаг внутри плагина, если сейчас есть активный tts, он останавливается, говорится диалог с прощанием, после окончания он готов закрываться

Технические штуки

  1. +Сделать папку с плагинами
  2. +Сделать наследование плагинов (конфиг, self.w, tick с зацикленностью)
  3. +Сделать динамическую инициализацию, но писать __all__ = [], чтобы можно было задавать порядок без заморочек с зависимостями -- к чёрту порядок, пусть через очереди общаются
  4. +Чтобы можно было обращаться к экземпляру класса плагина напрямую (ссылка на экземляр где-то хранилась)
  5. +наверное плагины говорения будут через очередь передавать диалоги на плагин отображения, очередь тоже в global state
  6. +нужно сделать on_start, который бы запускал плагины (в частности expr_prod) после инициализации всех плагинов
  7. +Делать strip() от диалога, и если он пустой, то ничего не выводить (мб мы хотим только поменять эмоцию)
  8. +Сделать общий диспетчер сигналов
  9. Чтобы voice plugin мог по сигналу обрывать tts (попробовать вернуть его в общий цикл со своего потока)

Технические костыли:

  1. Как поддерживать выражение лица? Можно ставить очень долгий таймер, а потом его сбрасывать
  2. Свой фильтр optional не нужен, потому что есть random от списка с фразой и пустой строкой

Рефакторинг конфигурации

  1. Сделать одну папку для конфигов в yaml, из которой бы они все автоматически загружались и объединялись в один
  2. Отдельный yaml с значениями, которые бесполезно перезагружать динамически. Остальное проверить что реально будет обновляться
  3. Динамический (по команде) релоад конфига и файла со строками
  4. Объединять конфигурацию на основе плагинов, которые её используют

Помодоро

  1. Из yaml подгружаем настройки: время работы/отдыха/количество перед большим/длительность большого
  2. Включаем помодоро -- идёт отсчёт рабочего. Мы можем сделать/отменить перерыв (таймер в 0), добавить/вычесть 5
  3. *Рабочий таймер, прежде чем начаться, отслеживает активность мыши/клавиатуры
  4. *Во время рабочего промежутка вайтлистим окна, по остальным Катра начинает делать замечание
  5. Где-то в углу (изображения Катры, не диалога) отображается таймер. Можно выбирать проценты или время
  6. Срабатывание таймера -- сначала звуковой эффект (разные, задаются в настройках, взять из eyes relax), потом Катра говорит об этом

Крутые штуки (дальше)

Более сложный gui

  1. Клик по диалогу закрывает его
  2. Двойной клик по Катре -- диалог с пунктами меню (которые собирается на основе плагинов)
  3. Сделать окно диалога (которые собирается на основе плагинов), он будет единый для диалога по дабл-клик
  4. То есть Катра может начинать диалоги с вариантами ответов и ветвлением
  5. Не делать бесполезные окна с конфигурацией, пусть лучше Катра показывает какие конфиги есть и открывает их в блокноте, и перезагружает их после

Барьер

  1. Сделать "барьер" -- словарь с семафорами, в который плагины будут писать по готовности начать рендер -- чтобы голос/текст/выражение лица стартовали синхронно
  2. При старте все будут false. Это будет не динамический словарь, мы его элементы будем задавать в main
  3. Если плагин готов начать отрисовку, то он ставит свой флаг в true и с малой задержкой начинает ждать в цикле проверять готовность остальных
  4. Когда мы полностью отрисуем всё, и будем готовы сбрасываться при новом диалоге, компоненты будут устанавливать свой флаг в false

Неясно насколько нужные технические штуки

  1. Сейчас у нас dialogue_plugin диспатчит по другим очередям, можно делать on_dialogue во всех плагинах, и чтобы они добавляли в свои очереди, и сразу воспроизводили типа
  2. Реализовать (когда будет потребность) чтобы можно было символами и голосом разное содержимое воспроизводить
  3. Возможность менять эмоции посреди диалога: передавать в dialogue_plugin в очереди dialogue_queue строку с управляющими символами и массив с эмоциями, чтобы при iter если эмоция, то dialogue_plugin пушил бы её
  4. Можно передавать в шаблонизаторе какой-то свой набор слоёв вместо заранее заданного (фильтр raw_expr?)

Возможности

  1. +Синтез голоса
  2. Чтобы она говорила идти тренироваться, спрашивала результаты и вела дневник
  3. Чтобы можно было рассказать ей про свой режим, и она бы помогала поддерживать его
  4. Чтобы она что-то делала (читала, следила за тобой)
  5. чтобы она периодически спрашивала настроение и выбирала соотв фразы -- поддерживающие, мотивирующие
  6. Чтобы у неё было своё настроение (выбор эмоции был бы не случайным), и ты бы его типа менял своими действиями
  7. Когда наводишь на неё мышку, она в любом случае начинает смотреть на тебя и улыбаться, типа ты можешь захватить внимание
  8. Система настроения -- можно повышать например "гладя по голове" (средняя кнопка мыши), то есть это уже регионы тела как в shimeji
  9. Портит настроение если что-то делать неправильно (сидеть ночью, например) или
  10. Попробовать ещё раз сделать захват заголовков активных окон и реакцию на них
  11. Локальное хранилище sqlite с синхронизацией через яндекс-диск
  12. Чтобы Катра могла чем-то заниматься. Хоть книгу читать (сделать background просто как первый слой наложения)
  13. Слушай, а пусть она мне рандомную картинку показывает иногда из папки с мемами
  14. Вообще если честно, то я хочу иметь возможность испортить ей настроение, сделать больно, неприятно, разозлить, обидеть
  15. Спрашивать её да/нет/может быть etc - на простых вероятностях
  16. Игры с Катрой (https://www.tutorialspoint.com/artificial_intelligence_with_python/artificial_intelligence_with_python_gaming.htm) от текстовых до крестиков-ноликов
  17. Можно попробовать взаимодействовать с Replika API через затравку диалога?
  18. Одежда?
  19. Чтобы она могла блокировать веб-сайты как-то, отключать компьютер, типа focus mode во время pomodoro
  20. говорить сколько осталось до сна вместе с тем сколько часов
  21. horny/emegrency mode
  22. При старте она бы показывала чеклист с какими-то вещами (принципами), чтобы я не забывал про них

Вообще подумай, что ты можешь сделать логичным, при этом рандомным?

  1. Смена эмоций на лице, моргание
  2. Влияние событий (добавлять какой-то шум, чтобы поведение не было 100% детерминировано)
  3. Рандомные фразы (и диалоги). Комбинирование частей фразы.
  4. Чтобы она что-то делала сама
  5. Чтобы она рандомно просила тебе отдохнуть пару минут во время таймера помодоро, останавливала бы таймер

Интересные идеи

  1. Катра -- кошка. Кошки боятся собак, гоняются за мышами, любят сидеть в коробках, ещё просят часто чтобы их покормили и куда-то выпустили
  2. Ещё кошки мурчат, шипят, если очень злые -- воят. Ещё они иногда хотят играть и ласки.
  3. Кошки балдеют от кошачьей мяты и валерьянки
  4. Кошки следят за птицами
  5. Кошки умываются, вылизывая себя

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages