Настройки сервера: справочник
В этом руководстве перечислены настройки сервера, которые можно менять через переменные окружения. Переменные окружения – это настройки, которые сервер читает из обычного текстового файла с именем .env. Приложение Marinara Engine работает и без настройки. Большинству она нужна, только чтобы открыть доступ другим устройствам, защитить общий сервер, перенести папку данных, повысить подробность журнала или дать медленным задачам больше времени.
Аккаунты ИИ, персонажи и параметры чатов настраиваются в самом приложении. О добавлении аккаунта ИИ читайте в руководстве Подключение к провайдеру ИИ.
Редактирование файла .env
Marinara создает пустой файл .env при первом запуске. Каждая строка имеет вид KEY=value. Строки, начинающиеся с #, – это комментарии.
| Установка | Где лежит .env |
| Обычная установка | Корневая папка проекта |
| Официальный образ Docker или Podman | /app/data/.env, в том же томе, что и ваши данные |
- Откройте
.env.exampleв той же папке. В нем перечислены все настройки со значениями по умолчанию. - Скопируйте нужную строку в
.env. - Измените значение после
=и сохраните файл.
PORT=8080
BASIC_AUTH_USER=alice
BASIC_AUTH_PASS=correct-horse-battery-stapleФайл .env – это данные, а не сценарий оболочки. Marinara не выполняет $, $(...) и другой синтаксис оболочки внутри значения. Значение, уже заданное в окружении скрипта запуска, имеет приоритет над такой же строкой в .env.
Сервер читает .env при любом способе запуска. Скрипты запуска (start.bat, start.sh, start-termux.sh) вдобавок задают HOST=0.0.0.0, чтобы могли подключаться другие устройства, и открывают браузер, когда сервер готов. AUTO_OPEN_BROWSER=false отключает это. При запуске просто через pnpm start сервер слушает только этот компьютер, пока вы не зададите HOST.
Перезапуск или применение на ходу
Marinara следит за файлом .env во время работы. Большинство настроек применяется почти сразу, без перезапуска. Для каждого изменения в журнале появляется строка [env-watcher]. Если слежение не удается запустить, сервер проверяет файл раз в 30 секунд и сообщает об этом в журнале.
Если правки не подхватываются, например когда вы правите файл с другой машины или в примонтированной папке контейнера (bind mount), задайте MARINARA_ENV_WATCH=poll. Чтобы отключить слежение, задайте MARINARA_ENV_WATCH=0. Оба варианта рассчитаны на опытных пользователей.
Следующие настройки читаются только при запуске. Изменение любой из них требует перезапуска, и журнал вас об этом предупреждает:
PORT,HOST,SSL_CERTиSSL_KEYDATA_DIR,FILE_STORAGE_DIR,ENCRYPTION_KEYиMARINARA_EAGER_STORAGEMARINARA_ENV_FILE,MARINARA_ENV_WATCHиTZAUTO_OPEN_BROWSERиAUTO_CREATE_DEFAULT_CONNECTIONLOG_DISABLE_REQUEST_LOGGINGиLOG_FORMATSTORAGE_CACHE_WINDOWS_BOOT_ID,SHUTDOWN_WINDOWS_CONSOLE_SIGNALSиSHUTDOWN_FORCE_EXIT_ON_REPEAT- Тайм-ауты и настройки опроса для изображений, видео, спрайтов и ComfyUI:
IMAGE_GEN_TIMEOUT_MS,IMAGE_GEN_MAX_RESPONSE_BYTES,VIDEO_GEN_TIMEOUT_MS,VIDEO_GEN_MAX_RESPONSE_BYTES,SPRITE_GENERATION_TIMEOUT_MS,SPRITE_ANIMATED_FFMPEG_TIMEOUT_MS,COMFYUI_GEN_TIMEOUTи четыре настройки*_VIDEO_POLL_INTERVAL_MS
Скрипты запуска читают AUTO_UPDATE_ENABLED до старта сервера, поэтому изменение применяется со следующего запуска, и журнал о нем не предупреждает.
Настройкам управления доступом и секретам (BASIC_AUTH_USER, BASIC_AUTH_PASS, IP_ALLOWLIST, ADMIN_SECRET, CSRF_TRUSTED_ORIGINS) перезапуск не нужен.
Управление доступом
Управление доступом определяет, кто может обращаться к работающему серверу. Пошаговые инструкции и примеры есть в руководстве Удаленный доступ: вход и список разрешенных адресов.
Вход можно задать и без .env: через Settings → Advanced → Access (настройки → дополнительно → доступ) в браузере, где вы уже вошли, или с помощью одноразового кода настройки из журнала сервера. Сервер печатает этот код, только пока вход не задан и сервер слушает не только loopback. Вход сохраняется в DATA_DIR/.remote-login.json. Команда node scripts/reset-login.mjs (запускайте ее в папке Marinara) удаляет его и выводит из системы все браузеры. Вход из .env имеет приоритет. Чтобы изменить или убрать вход, нужен текущий пароль. О прокси со входом читайте в разделе Прокси со входом (forward auth).
Термины, которые используются ниже:
- Loopback – компьютер, на котором работает сервер, по адресу
127.0.0.1илиlocalhost. - Диапазон CIDR – короткая запись блока IP-адресов, например
192.168.1.0/24. - Basic Auth – имя пользователя и пароль, которые отправляются с каждым запросом. Их используют скрипты и клиенты API, а браузеры используют страницу
/login. Эти данные только кодируются, но не шифруются, поэтому на публичном сервере используйте HTTPS.
Пока вход не задан, сервер принимает подключения только из доверенных источников: loopback, адресов из IP_ALLOWLIST, сети Tailscale и трафика моста Docker с того же хоста. Все остальные, включая вашу домашнюю сеть, получают ответ 403 Forbidden. Чтобы другие устройства вообще могли подключиться, сервер должен слушать доступный адрес: задайте HOST=0.0.0.0.
| Переменная | По умолчанию | Что делает |
BASIC_AUTH_USER | пусто | Имя пользователя для входа. Задайте вместе с BASIC_AUTH_PASS. |
BASIC_AUTH_PASS | пусто | Пароль для входа. Оставьте любое из двух значений пустым, чтобы отключить вход. |
BASIC_AUTH_REALM | Marinara Engine | Имя realm в запросе Basic Auth. |
IP_ALLOWLIST | пусто | IP-адреса или диапазоны CIDR через запятую, которым доступ разрешен всегда. Прямой loopback разрешен всегда. Обратный прокси на той же машине – нет. |
IP_ALLOWLIST_ENABLED | true | Значение false сохраняет список, но перестает его применять. |
ALLOW_UNAUTHENTICATED_PRIVATE_NETWORK | false | Разрешает доступ без пароля из частных сетей, когда вход не задан. Не охватывает 100.64.0.0/10 – диапазон, которым интернет-провайдеры делятся между клиентами. Добавляйте его в TRUSTED_PRIVATE_NETWORKS, только если доверяете ему. |
ALLOW_UNAUTHENTICATED_REMOTE | false | Разрешает доступ без пароля с любого адреса, включая интернет. Не рекомендуется. |
TRUSTED_PRIVATE_NETWORKS | встроенные диапазоны | Заменяет стандартные частные диапазоны. Перечислите и те стандартные, которые хотите оставить. |
BYPASS_AUTH_TAILSCALE | автоматически | Пусто: устройство пропускает вход, только если подключается напрямую к адресу Tailscale этого компьютера. Через Tailscale Serve, Funnel или другой прокси вход по-прежнему нужен. true: прежний обход всего диапазона 100.64.0.0/10. false: обычное управление доступом. |
BYPASS_AUTH_DOCKER | автоматически | Пусто: доверяет только обнаруженному интерфейсу контейнера и его шлюзу, и только пока не задан ни вход, ни IP_ALLOWLIST, ни TRUSTED_AUTH_PROXY. true: старые или нестандартные сети. false: обычное управление доступом. |
REQUIRE_AUTH_FOR_DOCKER_PROXY | true | Требует входа или списка разрешенных адресов для трафика Docker, который передает прокси. Ставьте false, только если сам прокси требует входа от каждого посетителя. |
REQUIRE_AUTH_FOR_LOOPBACK_PROXY | true | Считает удаленными запросы, которые пересылает прокси или туннель на той же машине, в том числе HTTP/1.0, например от proxy_pass nginx по умолчанию. Ставьте false, только если сам прокси требует входа от каждого посетителя. |
TRUSTED_AUTH_PROXY | пусто | IP-адреса или диапазоны CIDR прокси со входом (forward auth: tinyauth, Authelia, Authentik, oauth2-proxy), который требует входа от каждого посетителя. Его запросы пропускают вход и IP_ALLOWLIST. Прокси должен защищать каждый путь, а Marinara не должна быть доступна в обход него. |
TRUSTED_HOSTS | пусто | Дополнительные публичные имена хостов или имена прокси, на которые отвечает Marinara, например chat.example.com. Прямые IP-адреса, localhost, .local, .home.arpa и однословные имена в локальной сети работают и без этого. Имена из CSRF_TRUSTED_ORIGINS или CORS_ORIGINS тоже принимаются. |
SSL_CERT | пусто | Путь к сертификату TLS. Задайте вместе с SSL_KEY, чтобы сервер сам работал по HTTPS. |
SSL_KEY | пусто | Путь к закрытому ключу TLS. |
CSRF_TRUSTED_ORIGINS | пусто | Дополнительные браузерные источники, которым разрешено сохранять изменения, – для публичного домена или нестандартного порта. Буквальное значение null игнорируется, в том числе для APK на Android. |
Предупреждение: широкий публичный диапазон в IP_ALLOWLIST, например 0.0.0.0/0, может впустить клиентов из интернета без входа. Указывайте только адреса, которым доверяете.
Хранение данных
| Переменная | По умолчанию | Что делает |
DATA_DIR | packages/server/data | Корневая папка всех пользовательских данных. В образах Docker задан путь /app/data. |
FILE_STORAGE_DIR | папка storage внутри DATA_DIR | Переопределяет папку хранения файлов. |
ENCRYPTION_KEY | пусто | Ключ, которым шифруются сохраненные ключи API. |
MARINARA_MAX_RESIDENT_CHATS | 0 (без ограничений); 8 на SteamOS и Termux | Максимальное число чатов, которые держатся в памяти одновременно. При превышении предела после каждого сохранения чат, к которому дольше всего не обращались и в котором нет несохраненных изменений, убирается из памяти (но никогда не с диска). При недопустимом тексте берется значение платформы по умолчанию. Положительные значения меньше 2 повышаются до 2. 0 отключает вытеснение. |
MARINARA_EAGER_STORAGE | выключено | 1 загружает все чаты при запуске, как до версии 2.4.5. На больших профилях расходует намного больше памяти. Нужен перезапуск. |
Сгенерируйте ключ шифрования и вставьте его в ENCRYPTION_KEY:
openssl rand -hex 32Marinara хранит ваши данные в обычных файлах JSON, поэтому резервные копии можно копировать и читать. О том, что лежит в каждой папке, читайте в руководстве Где Marinara хранит ваши данные.
Уровни логирования
LOG_LEVEL задает, насколько подробно пишет сервер. Все, что ниже выбранного уровня, скрывается.
| Уровень | Что показывает |
error | Только серьезные сбои. |
warn | Ошибки и предупреждения. Значение по умолчанию. |
info | Добавляет записи о старте и о каждом запросе. |
debug | Все, включая полные промпты и ответы модели. Вывода очень много. |
| Переменная | По умолчанию | Что делает |
LOG_LEVEL | warn | Уровень из таблицы выше. |
LOG_PRESET | default | prompt-connections показывает те же подробности о промптах и модели, что и debug, но скрывает рутинные строки запросов, например GET /api/chats. |
LOG_DISABLE_REQUEST_LOGGING | false | true скрывает рутинные строки запросов и сохраняет ваш уровень. Нужен перезапуск. |
LOG_FORMAT | автоматически | pretty везде печатает удобочитаемые строки, например чтобы читать промпты Debug mode (режим отладки) в docker logs. json печатает по одному объекту JSON в строке. Нужен перезапуск. |
В терминале сервер печатает удобочитаемые строки. В других местах, например в журналах Docker, сервер в режиме production печатает строки JSON. Скрипт запуска Termux запрашивает удобочитаемые строки. Логирование в браузере работает отдельно, и LOG_LEVEL им не управляет.
Тайм-ауты
Тайм-аут – это максимальное время, которое сервер ждет медленную задачу. Откройте Settings → Advanced → Request timeouts (тайм-ауты запросов), чтобы задать в секундах лимиты для текста, агентов, промптов изображений Game, изображений, видео, ComfyUI и эмбеддингов. Более высокие лимиты помогают медленным локальным бэкендам. Они не отменяют ограничение, которое устанавливает сам сервис. Для сохранения нужен доступ администратора сервера.
Эти настройки действуют для всех профилей и сохраняются рядом с активным .env в файле .env.timeouts.json (или <custom-env-path>.timeouts.json). Они имеют приоритет над соответствующими переменными, не меняя .env. Изменения для текста, агентов, промптов изображений Game и эмбеддингов применяются к новым запросам. Изменениям для медиа и установленным пакетам агентов нужен перезапуск. Чтобы вернуться к переменным, удалите этот файл и перезапустите сервер.
Значения указаны в миллисекундах, если в названии не сказано иначе. Недопустимые, нулевые, отрицательные или выходящие за диапазон значения для проверяемых тайм-аутов чата, агентов и промптов изображений Game вызывают предупреждение в журнале, и берется значение по умолчанию. О задачах видео читайте в руководстве Генерация видео сцены.
| Переменная | По умолчанию | Что делает |
CHAT_GENERATION_TIMEOUT_MS | 300000 (5 минут) | Время до первого токена и промежуток между частями ответа для ответов в Conversation, Roleplay и Game. Также лимит для фоновых задач без собственного тайм-аута (Professor Mari, обновление ленты Noodle, ответы Slurp). Диапазон 10000-3600000. Не меняет тайм-ауты агентов, медиа, эмбеддингов и инструментов. |
AGENT_CALL_TIMEOUT_MS | 300000 (5 минут) | Максимальное время без данных до или во время одного обращения агента к модели, включая скачиваемых агентов. Поступающие данные запускают отсчет заново. Диапазон 10000-3600000. У агента Illustrator сохраняется как минимум встроенный 30-минутный лимит бездействия. |
GAME_DYNAMIC_IMAGE_PROMPT_TIMEOUT_MS | 45000 (45 секунд) | Ограничение общей длительности обращения к модели, которое превращает сцену Game в промпт для изображения. Диапазон 10000-3600000. |
EMBEDDING_TIMEOUT_MS | 300000 (5 минут) | Время на один запрос эмбеддинга. |
IMAGE_GEN_TIMEOUT_MS | 1800000 (30 минут) | Время на один запрос генерации изображения. |
IMAGE_GEN_MAX_RESPONSE_BYTES | 31457280 (30 MiB) | Максимальный размер принимаемого ответа с изображением. Увеличьте его, если локальный ComfyUI встраивает большие метаданные. |
VIDEO_GEN_TIMEOUT_MS | 1800000 (30 минут) | Время на один запрос видео сцены, включая процессы видео в ComfyUI. |
VIDEO_GEN_MAX_RESPONSE_BYTES | 167772160 (160 MiB) | Максимальный размер видео сцены, которое сервер согласится скачать. |
COMFYUI_GEN_TIMEOUT | 2400 (40 минут, в секундах) | Время на один процесс изображения в ComfyUI после постановки в очередь. |
SPRITE_GENERATION_TIMEOUT_MS | IMAGE_GEN_TIMEOUT_MS | Время на одну задачу генерации спрайта с помощью ИИ. |
CUSTOM_TOOL_TIMEOUT_MS | 60000 (1 минута) | Время на один вызов своего инструмента. |
MAX_TOOL_ROUNDS | 100 | Сколько циклов вызова инструментов допустимо, прежде чем модель обязана ответить. Ход Game получает не больше 4, агент – 16, а дозаполнение лорбука – 64, или значение этой переменной, если оно меньше. |
Особые действия по API (ADMIN_SECRET)
Разрушительным или рискованным действиям, таким как резервные копии, очистка данных, применение обновлений и установка тем оформления, нужен дополнительный секрет вдобавок к обычным проверкам доступа. Его можно создать в Settings → Advanced → Admin Access (доступ администратора) на компьютере, где работает сервер (см. раздел Admin Access), или задать на сервере длинное случайное значение:
ADMIN_SECRET=replace-this-with-a-long-random-secretНа компьютере, где работает сервер, такие действия обычно проходят и без секрета. Запрос, который пересылает прокси или туннель на этом компьютере, считается удаленным, если не задано REQUIRE_AUTH_FOR_LOOPBACK_PROXY=false. Прямым запросам с другого устройства секрет нужен. Вставьте то же значение в Settings → Advanced → Admin Access, и приложение будет отправлять его само. ADMIN_SECRET в .env имеет приоритет над секретом, созданным в приложении. Если секрета администратора нет, особые действия не выполняются ни с одного устройства, кроме компьютера сервера, а сообщение об ошибке предлагает задать секрет. Установленные агенты работают с любого устройства, на котором выполнен вход; для их установки, обновления и удаления нужен секрет.
| Переменная | По умолчанию | Что делает |
ADMIN_SECRET | пусто | Секрет для особых действий с удаленных устройств. |
MARINARA_REQUIRE_ADMIN_SECRET_ON_LOOPBACK | false | true требует секрет и на компьютере сервера. |
UPDATES_APPLY_ENABLED | false | Разрешает браузеру применять обновления в том же канале кнопкой Apply Update (применить обновление). Переключение канала выпусков из браузера на компьютере сервера работает и без этого. Только для установок из Git. |
UPDATES_APPLY_DISABLED | не задано | Запрещает любое применение обновлений на стороне сервера, включая переключение канала. Имеет приоритет над UPDATES_APPLY_ENABLED. Скрипты запуска для разработки и для e2e задают его. |
UPDATES_ALLOW_REMOTE_APPLY | false | Разрешает удаленному устройству применять обновления при верном секрете. |
HAPTICS_ALLOW_REMOTE | false | Разрешает удаленному устройству выполнять тактильные команды при верном секрете. |
CUSTOM_TOOL_SCRIPT_ENABLED | false | Включает свои инструменты-сценарии. Держите выключенным для непроверенных или импортированных инструментов. |
MARI_DB_ALLOW_UNSAFE_TRANSFORMS | false | Разрешает скриптам преобразования базы данных от Professor Mari работать на хостах без песочницы ОС (macOS Seatbelt или Linux Bubblewrap, которые используются, если они есть). Держите выключенным, если вы не проверили скрипт. |
ENABLE_CUSTOM_AGENT_REPOS | false | Включает ручной предпросмотр и синхронизацию репозиториев агентов с GitHub в разделе Agent Organizer. См. Свои репозитории агентов. |
MARINARA_OVERWORLD_GAMES | false | Позволяет игрокам создавать игры Overworld (набор мира и сгенерированный мир) и превращать в такую игру старую. Когда настройка выключена, мастер предлагает только игры Classic. |
ENABLE_EXTERNAL_EXTENSIONS | false | Первое из двух разрешений на импорт сторонних расширений. См. Внешние расширения. |
IMPORT_ALLOWED_ROOTS | пусто | Папки, из которых массовый импорт может читать без токена выбора файлов. |
PROFILE_EXPORT_JSON_LIMIT_BYTES | 268435456 (256 MiB) | Максимальный размер одного экспорта профиля в JSON, который собирает сервер. |
Разрешения для локальных адресов
По умолчанию исходящие запросы к сервисам ИИ, сервисам изображений и вебхукам не обращаются к частным или локальным адресам. Это защищает от SSRF (подделки запроса на стороне сервера), когда запрос обманом направляют на внутренний адрес. Серверы моделей на loopback продолжают работать. Включайте только тот переключатель, который нужен для вашего сервиса на другой машине в частной сети.
| Переменная | По умолчанию | Что делает |
PROVIDER_LOCAL_URLS_ENABLED | false | Адреса сервисов ИИ могут обращаться к частным или локальным сетевым адресам. На Android включено по умолчанию. |
IMAGE_LOCAL_URLS_ENABLED | false | Адреса сервисов изображений могут обращаться к частным или локальным сетевым адресам. Частные адреса результатов все равно должны точно совпадать с источником сервиса. |
TTS_LOCAL_URLS_ENABLED | false | Адреса синтеза речи могут обращаться к частным или локальным сетевым адресам. |
STT_LOCAL_URLS_ENABLED | false | Адрес сервера распознавания речи может обращаться к частным или локальным сетевым адресам. Сервер на той же машине работает и без этого. |
DEEPLX_LOCAL_URLS_ENABLED | false | Адреса перевода DeepLX могут обращаться к частным или локальным сетевым адресам. |
WEBHOOK_LOCAL_URLS_ENABLED | false | Вебхуки своих инструментов могут обращаться к частным или локальным сетевым адресам. |
О подключении локальной модели или модели на своем сервере читайте в руководстве Подключение локальной модели или модели на своем сервере.
Переключатели функций
Необязательные функции сервера, например повтор неудачных вызовов провайдера или стабильный выбор групп лорбука, находятся в Settings → Advanced → Features (функции). По умолчанию все выключены. У некоторых есть переменная, которая, если задана, имеет приоритет над переключателем. См. Переключатели функций.
Уведомления Marinara
Уведомления – это короткие предупреждения от мейнтейнеров, например о проблеме безопасности или о ручном шаге, который нужен вашей версии. Они показываются в виде баннера.
- При запуске, а потом каждый час сервер скачивает один небольшой файл,
notices.json, из веткиnoticesрепозитория Marinara Engine. Он оставляет только уведомления, в которых указана ваша версия. Браузер запрашивает их у вашего собственного сервера один раз при загрузке страницы, а потом каждый час. - Если скачивание не удалось, сервер сохраняет уже полученные уведомления, и запуск не задерживается.
- Запрос не отправляет никаких данных о вас, ваших чатах или настройках. Менять ветку
noticesмогут только мейнтейнеры, и каждое изменение проходит ревью. - Уведомление – это простой текст с ограничением размера. Ссылки сохраняются, только если ведут на
https://github.com/Pasta-Devs/. Уведомление не может ничего установить, запустить или изменить. - Уведомления видите только вы: на компьютере сервера, с адреса из
IP_ALLOWLISTили после входа. Остальные посетители получают пустой список.
Чтобы отключить уведомления, задайте MARINARA_NOTICES_ENABLED=false.
Предупреждение: когда уведомления отключены, Marinara не может сообщить вам об исправлениях безопасности и обязательных шагах. Следите за выпусками на GitHub сами.
Форки могут указать в MARINARA_NOTICES_URL свой файл.
Необязательный многопользовательский режим
Многопользовательский режим по умолчанию выключен. Он позволяет людям вместе пользоваться частной комнатой Conversation, Roleplay или Game без фиксированного ограничения на число участников. Каждый гость использует собственную доверенную установку Marinara. Гостям не нужен аккаунт ИИ. Аккаунты ИИ предоставляет хост, и он может читать и сохранять общее содержимое. Пока хотя бы одно из двух разрешений выключено, Marinara не выполняет фоновых проверок сессий, сертификатов и участников.
- Задайте
MULTIPLAYER_ENABLED=trueв.envкаждой участвующей установки Marinara и перезапустите ее. Работает только точное значениеtrue, и применение на ходу его не подхватывает. - Откройте Settings → Advanced → Multiplayer (многопользовательский режим), прочитайте предупреждение и включите настройку. Это не запускает прослушивание порта и не подключает к комнате.
- Чтобы стать хостом, используйте Create shared session (создать общую сессию) или Play together (играть вместе) при выборе режима или в процессе настройки. Проверьте настройки, свое отображаемое имя и текст персоны, которым вы делитесь. Существующий чат передает только выбранные настройки, но никогда не историю сообщений, заметки или воспоминания.
- На хосте задайте
SSL_CERTиSSL_KEYдля сертификата, который действителен для имени хоста комнаты и которому доверяют гости. Выберите отдельные HTTPS-адрес и порт комнаты, напримерhttps://room.example.org:7861. Этот порт открывает действие Host. Пропускайте через брандмауэр или роутер только порт комнаты. Не открывайте наружу обычный API Marinara. Проброс портов, ретранслятор и обход сертификатов за вас не настраиваются. - Задайте пароль комнаты длиной не менее 12 символов, отличный от ваших учетных данных администратора. Отправьте временное приглашение и пароль по отдельности людям, которым доверяете. Гость проверяет отпечаток имени хоста, имя комнаты и текст персоны, а затем запрашивает вход. Хост одобряет каждый запрос в Players (игроки) до отправки какой-либо истории.
Ограничения и поведение:
- Перед отправкой пароля TLS проверяет цепочку сертификата и имя хоста, а также отпечаток сертификата из приглашения. Самоподписанные сертификаты молча не принимаются. Обновленному сертификату нужно новое приглашение.
- Приглашения истекают через 30 минут. Допущенные сессии длятся не более 12 часов. Замена или отзыв прекращает действие неиспользованных приглашений. Kick (исключить) удаляет допущенного гостя.
- Хост управляет автоматическими или ручными ответами, а также Pause/Resume (приостановить и продолжить) и Stop (остановить). По умолчанию доступно 100 координированных ходов генерации за сессию размещения. Групповой ход или настройка Game может вызвать модель больше одного раза. Это лимит ходов, а не оценка стоимости.
- В Game проверьте отряд перед Start Game (начать игру). Каждый обязательный игрок отправляет действие или пропускает ход, а GM разрешает их, когда все готовы. Отключившийся игрок остается обязательным, пока не вернется или пока хост не пропустит его ход либо не удалит его. Приостановленные или прерванные раунды никогда сами не повторяют платный запрос или уже примененные изменения мира.
- Stop, Leave (уйти), выключение настройки и перезапуск сервера завершают активную сессию. После перезапуска сервер никогда сам не размещает комнату и не подключается к ней.
- Свои инструменты, инструменты пакетов и небезопасные команды в комнатах недоступны. Гости никогда не запускают планировщик и не выполняют локальные команды из полученного текста. Расписания Conversation используют планировщик хоста.
- Новые игроки и изменения персон вступают в силу со следующего раунда.
- Комнаты передают только текст ограниченного размера. Файлы, медиа, расширения и пакеты не передаются. Нативная оболочка Android не может подключаться.
Предупреждение: подключайтесь только к тем, кому доверяете, и используйте собственный клиент Marinara. Никогда не устанавливайте клиент, расширение или файл от хоста. Хост может читать то, чем вы делитесь, а общее содержимое может попасть в его сервисы ИИ. Прямые подключения раскрывают сетевые адреса. Не делитесь паролями, ключами API и личными данными. Сразу выходите, если что-то кажется подозрительным.
Точные ограничения и проверенные платформы описаны в записи о совместимости и проверках. О проблемах читайте в руководстве Устранение неполадок.
Агенты и расширения
Дополнительные официальные агенты устанавливаются в приложении: Agents → Agent Organizer (агенты → организатор агентов). Marinara сама выбирает каталог Pasta-Devs/Marinara-Agents, который соответствует ее основной версии.
- Обновления: Marinara спрашивает, прежде чем скачать новую версию установленного пакета. Not now (не сейчас) оставляет текущую версию, а Update (обновить) остается в Agent Organizer. После свежей установки пакетов нет.
- Где лежат пакеты:
DATA_DIR/capability-packages. Тома Docker, свои папки данных, резервные копии и обычные обновления их сохраняют. Это относится к компьютеру, Docker и Termux. iOS и другие браузеры используют пакеты со своего сервера. - Место на диске: Marinara хранит текущую и предыдущую версии каждого пакета, а более старые версии и временные копии в
DATA_DIR/capability-runtime-snapshotsудаляет. Данные пакетов никогда не удаляются. - Без сети: Установленные пакеты продолжают работать в своей версии, если GitHub недоступен, обновление отклонено или проверка не прошла.
Импорт своих агентов
Внешние файлы агентов, папки и репозитории заблокированы. Чтобы разрешить их, включите Allow custom Agent imports (разрешить импорт своих агентов) в Settings → Advanced → Danger Zone (опасная зона). Переменная окружения для этого не нужна. Пока вы этого не сделаете, элементы импорта остаются серыми.
Каждый импорт сначала показывает, какие возможности запрашивает агент. Разрешения нужно подтвердить явно. Вложенные функции и наборы инструментов не импортируются, сгенерированный код CSS проходит очистку, а действия из результата сверяются с одобренными возможностями. Если выключить этот переключатель, импортированные агенты перестают работать. Агентов, созданных в Marinara, и официальные пакеты это не затрагивает.
Свои репозитории агентов
Репозитории по умолчанию выключены, потому что их промпты и инструменты не проверены. Задайте ENABLE_CUSTOM_AGENT_REPOS=true, включите Allow custom Agent imports, затем откройте Agents → Agent Organizer → Custom Sources (свои источники), чтобы посмотреть публичный репозиторий GitHub. И добавление источника, и применение последующих изменений требуют подтверждения. Синхронизация только ручная: Marinara никогда не клонирует и не опрашивает репозитории в фоне. Принимаются только URL корня репозитория GitHub.
Репозиторий публикует агентов, наборы правил Game Mode или и то и другое. В корне репозитория:
agents.json– это массив в формате загружаемых агентов:
[
{
"id": "continuity-helper",
"name": "Continuity Helper",
"description": "Checks recent turns for contradictions.",
"phase": "post_processing",
"enabledByDefault": false,
"category": "writer",
"defaultPromptTemplate": "Check {{messages}} for continuity errors."
}
]rulesetsсодержит по одному набору правил в каждом файле.json, всего до 32 файлов размером до 512 KB. Читаются только файлы, лежащие прямо в этой папке. Предпросмотр показывает имя, версию и охват каждого набора правил. Текст набора правил для Game Master отправляется модели в каждой игре, которая его использует, поэтому устанавливайте наборы правил только от тех, кому доверяете.
Имена импортированных наборов правил строятся от владельца репозитория, например alice/my-5e, поэтому они никогда не займут имя официального набора. Сохраняется каждая версия, и игра идет на той версии, с которой началась. Если та же версия приходит с другим содержимым, Marinara оставляет установленную и предлагает попросить автора повысить номер версии. Файл, который Marinara не может прочитать, показывается в списке с причиной и пропускается.
При синхронизации промпты, настройки и инструменты из репозитория заменяют управляемые репозиторием значения, показанные в предпросмотре. Ваш выбор аккаунта и изображений остается локальным. Если агент исчезает из источника, он остается обычным локальным агентом и теряет только связь с репозиторием. Удаление источника работает так же, а его наборы правил остаются установленными.
Свои агенты также могут включить Previous output (предыдущий результат) в разделе Context Sources, чтобы читать свой последний успешный результат. При включенном JSON context output (вывод контекста в JSON) возвращайте {"text":"main prompt content","agent-context":"private continuation context"}. В основной промпт попадает только text. Hide output as spoilers (скрывать результаты как спойлеры) оставляет сохраненные результаты свернутыми. При повторной генерации заменяемый ход исключается, а удаленные сообщения и неактивные свайпы не могут передавать контекст.
Внешние расширения
Импорт сторонних расширений требует двух разрешений. Переменная окружения – это разрешение от того, кто держит сервер. Переключатель в Danger Zone – согласие пользователя.
- Задайте
ENABLE_EXTERNAL_EXTENSIONS=trueв.env. - Откройте Settings → Advanced → Danger Zone, прокрутите ниже элементов удаления данных, прочитайте предупреждение и включите Allow third-party extension imports (разрешить импорт сторонних расширений).
После этого раздел External Extensions (внешние расширения) появится в Settings → Addons (дополнения). Закрытие любого из разрешений отключает записи внешних расширений и останавливает их код. Записи, добавленные вручную, старые, импортированные из профиля и с неизвестным источником считаются внешними, поэтому разрешения нельзя обойти, просто положив файлы в папку. Черновикам от Professor Mari не нужно ни одно из разрешений. Они создаются выключенными, и их точный хеш кода требует одобрения.
По умолчанию используется режим Sandboxed Browser Extensions. Некоторые старые пакеты показывают Full page access (полный доступ к странице), потому что им нужна страница Marinara. В этом режиме одобренный код выполняется прямо на странице Marinara и получает доступ к содержимому страницы, хранилищу браузера, сетевым интерфейсам и вашей сессии. Режим доступен только для External Extensions, когда открыты оба разрешения, и требует отдельного подтверждения предупреждения. После отключения режима перезагрузите страницу.
Полный справочник переменных окружения
Таблицы выше описывают управление доступом, хранение данных, логирование, тайм-ауты, особые действия и разрешения для локальных адресов. Остальные переменные собраны здесь.
Сервер и запуск
| Переменная | По умолчанию | Что делает |
PORT | 7860 | Порт, который слушает сервер. На Android, в Docker и в Termux держите одно и то же значение. |
HOST | 127.0.0.1 (0.0.0.0 в скриптах запуска и образах Docker) | Сетевой интерфейс для прослушивания. Для доступа из локальной сети используйте 0.0.0.0. Файл Compose по умолчанию публикует порт Docker только на 127.0.0.1. |
MARINARA_ANDROID_SECRET | пусто | Внутренний секрет для установок Termux под управлением APK. Приложение Android создает его, а скрипт запуска Termux экспортирует. Никогда не просите пользователей задавать его. Значение должно состоять ровно из 64 шестнадцатеричных символов. Недопустимое непустое значение приводит к ошибке HTTP 503 на локальные запросы устройства. |
MARINARA_ANDROID_SECRET_FILE | ~/.marinara-engine/android-secret | Файл секрета, который используют скрипт запуска Termux и локальная команда mari. APK и скрипт запуска управляют им сами. |
AUTO_OPEN_BROWSER | true | Открывают ли скрипты запуска URL приложения. false отключает это. При установке под управлением APK эта функция выключена. |
AUTO_UPDATE_ENABLED | true | Скачивают и применяют ли скрипты запуска для установок из Git обновления перед стартом. false отключает это со следующего запуска. Скрипт запуска все равно проверяет без изменений, есть ли новые выпуски, и выводит напоминание. Ключ --skip-update пропускает обе проверки для одного запуска. |
MARINARA_NOTICES_ENABLED | true | Загружает ли сервер уведомления мейнтейнеров. См. Уведомления Marinara. |
MARINARA_NOTICES_URL | notices.json в ветке notices | Другой файл уведомлений для форков и зеркал. Он проверяется так же, а ссылки не на https://github.com/Pasta-Devs/ отбрасываются. |
MARINARA_ENV_FILE | .env в корне проекта | Другой путь к файлу .env. Задайте его до запуска. |
MARINARA_MEDIA_GENERATION_CONCURRENCY | 4 | Максимум одновременных запросов изображений или видео на весь сервер. Понизьте до 1–2, если локальному ComfyUI или SwarmUI не хватает видеопамяти. 0 снимает предел. Недопустимые значения игнорируются с предупреждением. Пакетная работа никогда не занимает последнее место. Действует поверх переключателя Queue media generation requests (ставить запросы генерации медиа в очередь) в Settings → Generations → Overall Generations (генерации → общие настройки генерации). Этот переключатель по умолчанию включен и ставит задачи изображений и видео в очередь для каждого аккаунта. |
MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS | 600000 (10 минут) | Сколько запрос ждет свободного места, прежде чем завершиться ошибкой. 0 – ждать бесконечно. |
MARINARA_SHARED_GPU_HOSTS | пусто | Список host:port через запятую для одной GPU, которую совместно используют локальная модель и локальный сервер изображений или видео (например, через llama-swap). Текстовые и медиазапросы к хосту из списка выполняются по очереди, поэтому изображение не может бесконечно ждать за ответами чата. Изображение или клип ждет не дольше MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS. Эмбеддинги не задерживаются. Применяется к новым запросам без перезапуска. |
MARINARA_ENV_WATCH | 1 | Как сервер следит за .env. По умолчанию – по событиям изменений (задержка примерно 250 мс) с проверкой раз в 30 секунд как запасным вариантом. poll: всегда проверка раз в 30 секунд. 0: слежение выключено. См. Перезапуск или применение на ходу. |
TZ | системный | Резервный часовой пояс хоста для серверных задач, например Europe/Warsaw. Оставьте его незаданным или пустым, чтобы использовать часовой пояс хоста. Для расписаний приоритет имеет сохраненная в Conversation настройка Schedule timezone (часовой пояс расписаний). |
CORS_ORIGINS | http://localhost:5173,http://127.0.0.1:5173 | Браузерные источники, которым разрешены межсайтовые запросы. |
AUTO_CREATE_DEFAULT_CONNECTION | true | Устаревший флаг. Текущие сборки не включают стартовый ключ, поэтому он ничего не создает. Добавьте свой аккаунт в приложении. |
По умолчанию Schedule timezone берет часовой пояс вашего устройства. Изменить его можно при настройке Conversation, в Chat Settings режима Conversation или в редакторе расписания персонажа. Это одна общая настройка для всех чатов Conversation, и она синхронизируется с другими клиентами на том же сервере.
Медиа и работа со спрайтами
| Переменная | По умолчанию | Что делает |
FFMPEG_PATH | пусто | Путь к ffmpeg, который используется для анимированных GIF с выражениями лица. Если не задан, берется ffmpeg из PATH. |
SPRITE_ANIMATED_FFMPEG_TIMEOUT_MS | 180000 (3 минуты) | Время на преобразование одного анимированного клипа с выражением лица. |
SPRITE_BACKGROUND_REMOVAL_ENGINE | auto | auto сначала пробует встроенную очистку, затем необязательный инструмент с ИИ. builtin использует только встроенную очистку. backgroundremover принудительно включает инструмент с ИИ. |
BACKGROUNDREMOVER_AUTO_INSTALL | false | true устанавливает необязательный инструмент удаления фона на базе ИИ при запуске. |
BACKGROUNDREMOVER_COMMAND | пусто | Путь к системной программе backgroundremover. |
BACKGROUNDREMOVER_PYTHON | пусто | Путь к Python, в котором установлен backgroundremover. |
BACKGROUNDREMOVER_TIMEOUT_MS | 600000 (10 минут) | Время на один вызов удаления фона с помощью ИИ. |
Провайдеры видео сцены
Аккаунты для видео настраиваются в приложении. Эти настройки лишь подстраивают задачи. Значения указаны в миллисекундах.
| Переменная | По умолчанию | Что делает |
GOOGLE_VEO_VIDEO_POLL_INTERVAL_MS | 10000 | Как часто сервер проверяет задачу Google Veo. |
XAI_VIDEO_POLL_INTERVAL_MS | 5000 | Как часто он проверяет задачу xAI Imagine. |
OPENROUTER_VIDEO_POLL_INTERVAL_MS | 10000 | Как часто он проверяет задачу видео в OpenRouter. |
SEEDANCE_VIDEO_POLL_INTERVAL_MS | 10000 | Как часто он проверяет задачу Seedance. |
VIDEO_REFERENCE_PUBLIC_BASE_URL | пусто | Публичный HTTPS-адрес этого сервера для сервисов, которым нужно скачать образец изображения по ссылке. |
Лорбуки
Обе настройки по умолчанию выключены и действуют со следующей генерации после изменения .env. Если LOREBOOK_STABLE_GROUP_WINNERS задана, она имеет приоритет над переключателем Stable lorebook picks (стабильный выбор лорбука) в Settings → Advanced → Features. Иначе решает переключатель. См. Переключатели функций.
| Переменная | По умолчанию | Что делает |
LOREBOOK_STABLE_GROUP_WINNERS | false | Сохраняет в чате одного и того же победителя группы включения, пока кандидаты не меняются, вместо нового розыгрыша при каждой генерации. Сохраняет начало промпта стабильным для кеширования промпта у провайдера. |
LOREBOOK_COMPACT_STORED_SCANS | false | Хранит полный текст активированных записей только у последнего сообщения ассистента или рассказчика. Старые сообщения хранят ID записей, ключи и оценки. Заметно уменьшает размер чатов с большими лорбуками. Если новые сообщения удалены, Active Context и повторы агентов показывают текущий текст записи для сообщения, которое снова стало последним. |
scripts/compact-lorebook-scans.mjs применяет то же правило к старым чатам. Сначала остановите сервер. Без --apply выполняется только пробный проход, а перед записью скрипт делает резервные копии обеих таблиц сообщений.
Устойчивость
Все настройки по умолчанию выключены, что сохраняет прежнее поведение. STORAGE_CACHE_WINDOWS_BOOT_ID, SHUTDOWN_WINDOWS_CONSOLE_SIGNALS и SHUTDOWN_FORCE_EXIT_ON_REPEAT требуют перезапуска. Остальные применяются после изменения .env. Если PROVIDER_RETRY_TRANSIENT_ERRORS задана, она имеет приоритет над переключателем Retry failed provider calls (повторять неудачные вызовы провайдера) в Settings → Advanced → Features. Иначе решает переключатель.
| Переменная | По умолчанию | Что делает |
PROVIDER_RETRY_TRANSIENT_ERRORS | false | Повторяет отказ или недоступность соединения либо ошибку 502 или 503 до двух раз с паузой не более 5 с и только до того, как к вам пришел какой-либо текст. 504 и оборванное соединение никогда не повторяются. Не используется, если у аккаунта есть резервный вариант (fallback): он пробуется сразу. Медленно отказывающий хост может задержать ошибку примерно на 20 с. |
STORAGE_SKIP_UNCHANGED_WRITES | false | При сохранении файл чата или manifest.json не перезаписывается, если его содержимое совпадает с последней записью этого сервера и файл на диске не менялся. Файл, только что восстановленный из .bak, перезаписывается всегда. |
STORAGE_YIELDING_SERIALIZE | false | Готовит большие файлы чатов к сохранению короткими порциями, чтобы сохранение очень длинного чата не приостанавливало другие запросы. Записанные байты остаются теми же. |
STORAGE_CACHE_WINDOWS_BOOT_ID | false | Только Windows. Запоминает до следующей перезагрузки проверку времени загрузки, которую блокировка хранилища выполняет при каждом запуске (около 1,5–2 с PowerShell), в файле .writer-boot-id.json внутри DATA_DIR. |
SHUTDOWN_WINDOWS_CONSOLE_SIGNALS | false | Только Windows. <kbd>Ctrl</kbd>+<kbd>Break</kbd> и закрытие консоли тоже корректно останавливают сервер и записывают ожидающие сохранения. Для закрытия консоли сроки сокращены, чтобы уложиться примерно в 5 с, которые дает Windows. |
SHUTDOWN_FORCE_EXIT_ON_REPEAT | false | Повторное нажатие <kbd>Ctrl</kbd>+<kbd>C</kbd> или <kbd>Ctrl</kbd>+<kbd>Break</kbd> более чем через 1,5 с после первого немедленно завершает сервер. Незаписанные сохранения могут потеряться. Без этой настройки повторы игнорируются и действует предел завершения 8 с. |
SHUTDOWN_EARLY_FLUSH | false | Начинает запись ожидающих сохранений сразу при сигнале остановки, пока соединения еще закрываются. Перезапуск в Advanced Settings это не использует. |
SHUTDOWN_RUNTIME_STOP_BUDGET_MS | 0 | Сколько сигнал остановки ждет фоновые среды выполнения (пакеты, расширения, встроенную модель), прежде чем закрыть хранилище. 0 ждет их все. Максимум 2500, чтобы хранилище закрылось в пределах 8 с. Перезапуск в Advanced Settings по-прежнему ждет все. |
Интеграции и прочее
| Переменная | По умолчанию | Что делает |
CLAUDE_SUBSCRIPTION_USE_INSTALLED_CLI | true | Используют ли аккаунты Claude (Subscription) программу Claude Code на этом компьютере, если она не старее встроенной копии. На Android встроенной копии нет, поэтому эту настройку нужно оставить включенной. false всегда использует встроенную копию. Изменение вступает в силу в течение пяти минут. |
DOCS_I18N_BASE_URL | официальная ветка docs-i18n | Откуда загружаются языковые пакеты документации и интерфейса. Пакеты интерфейса берутся из поддерева ui/. Нужен общедоступный хост https://. |
GIPHY_API_KEY | пусто | Ключ Giphy для поиска GIF в режиме Conversation. Поиск выключен, пока вы не зададите ключ и не перезапустите сервер. |
INTIFACE_URL | ws://127.0.0.1:12345 | Адрес по умолчанию для приложения тактильной отдачи Intiface. |
SPOTIFY_REDIRECT_URI | вычисляется из запроса | Другой адрес обратного вызова для входа в Spotify. Задайте его, если TLS завершается выше по цепочке. |
MARI_WIKI_CONTENT_MAX_BYTES | 50000 | Максимальный размер содержимого страницы вики, который Professor Mari читает до обрезки. |
MARI_WIKI_REQUEST_TIMEOUT_MS | 30000 | Время на один запрос к вики от Professor Mari. |
MARI_WIKI_CACHE_TTL_MS | 300000 | Сколько Professor Mari хранит в кеше прочитанную страницу вики. |
SIDECAR_RUNTIME_INSTALL_ENABLED | false (скрипт запуска для Windows задает true) | Разрешает устанавливать среду Built-in model (встроенная модель) без заголовка администратора на loopback. |
О Built-in model читайте в руководстве Настройка встроенной модели.
Исходящий HTTP-прокси
В некоторых сетях выход в интернет возможен только через HTTP-прокси, например v2rayN без режима TUN. Marinara может отправлять через него запросы к сервисам ИИ, сервисам изображений, серверам эмбеддингов и каталогу агентов. Задайте эти переменные в окружении, из которого запускается Marinara, или в .env, затем перезапустите ее.
| Переменная | По умолчанию | Что делает |
NODE_USE_ENV_PROXY | не задано | 1 включает прокси. Без этого Marinara, как и сам Node.js, игнорирует настройки прокси. |
HTTP_PROXY | пусто | Адрес прокси, например http://127.0.0.1:10809. Используется для всех запросов, если не задан HTTPS_PROXY. |
HTTPS_PROXY | пусто | Прокси для адресов https://, если он отличается от HTTP_PROXY. |
NO_PROXY | пусто | Хосты через запятую, которые обходят прокси. Добавьте сюда серверы моделей в вашей сети. localhost, 127.0.0.1 и ::1 обходят прокси всегда. |
Смежные руководства
- Переключатели функций
- Удаленный доступ: вход и список разрешенных адресов
- Где Marinara хранит ваши данные
- Подключение к провайдеру ИИ
- Генерация видео сцены
- Устранение неполадок в приложении Marinara Engine