База данных и миграции

Всё состояние лежит в одном файле SQLite, comfyui-desktop.db в папке с данными. Его открывает main через better-sqlite3 (src/main/database.ts). Окно никогда его не открывает.

Таблицы

ТаблицаЧто хранит
settingsОдна строка: несекретные настройки (поставщик, модель, адреса, язык, анимация) и preferences_json, проверенные настройки.
secret_recordsСохранённые ключи и токены, зашифрованные хранилищем паролей системы.
projectsПроекты и версия, которую показывает каждый (current_revision_id).
graph_revisionsКаждая версия каждого графа: ноды, связи, документ ComfyUI, компоненты, название и заметки, и кто её сделал.
applied_commandsКаждая применённая команда: её actionId, исполнитель, ход, содержимое и результат.
runsХоды помощника и их состояние.
proposalsЧерновики помощника.
explanationsОбъяснения типов нод, моделей, связей и объектов графа, с источником.
chat_messagesРазговор, пока включено «Хранить историю чата в проекте».
node_catalog, node_packs, model_catalogТо, что прочитано из ComfyUI, с метаданными моделей и найденным в интернете.
sync_stateСостояние синхронизации парами «ключ и значение»: последняя синхронизация, автосинхронизация и её интервал.
schema_migrationsКакие версии схемы применены и когда.

Открытие

openDatabase в src/main/database.ts:

  1. Файл, версия схемы которого новее, чем знает это приложение, отклоняется до того, как что-то записано («Ваши данные сохранены более новой версией…»).
  2. Журнал WAL; включён secure_delete, поэтому забытый ключ перезаписывается, а не остаётся в свободных страницах.
  3. Перед обновлением файл копируется в comfyui-desktop.db.before-v<N>.bak (хранится только самая новая копия) (src/main/settings/databaseSafety.ts).
  4. migrate доводит схему до SCHEMA_VERSION (src/main/settings/migrate.ts).
  5. Ошибка распознаётся (повреждён, новее, только чтение, нет места, занят) и показывается словами; повреждённый файл можно переименовать в comfyui-desktop.db.damaged-<дата> и начать с пустыми данными.

Как добавить миграцию

  1. Увеличьте SCHEMA_VERSION в src/main/settings/migrate.ts и опишите новую версию в комментарии над ней одним предложением: что добавляет и зачем.
  2. Напишите applyVersionN(db). Сделайте её безопасной для любой базы предыдущей версии: проверяйте columnNames / tableNames перед ALTER TABLE, пишите CREATE … IF NOT EXISTS, давайте новым столбцам значение по умолчанию.
  3. Добавьте шаг в migrate, в своей транзакции, которая пишет и строку schema_migrations, как у шагов до него.
  4. Никогда не меняйте старые applyVersion…: базы у людей уже прошли через них.
  5. Проверьте в tests/unit/settingsMigration.test.ts: база предыдущей версии с настоящими строками обновляется, сохраняет строки, а сбой до записи версии оставляет её как была.

Более новую базу старое приложение не откроет, поэтому планируйте изменение, с которым можно вернуться назад: приложение откажется и скажет об этом; данные останутся нетронутыми.

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/dev/Database.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.