mrleo1nidandClaude Opus 5.5 364b312064 Initial MVP: local visual novel library with Ren'Py → PGVN converter
- FastAPI backend: admin bootstrap with forced credential change, admin-created
  users with one-time generated passwords, roles as permission sets
- Games and versions with content-addressed blob storage; forks copy only the
  manifest, so mods share assets with the original
- Worker: archive/RPA extraction, unrpyc for .rpyc, own .rpy parser, Python
  subset translated via ast, media converted to WebP/Opus/WebM
- React panel (library search, game page, upload, users, roles) and a
  framework-free web player with saves, history, skip/auto, transitions
- docker compose: postgres, backend, worker, nginx on a single HTTP port

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 02:41:32 +03:00

PGames — локальная библиотека визуальных новелл

Загружаете архив с игрой на Ren'Py — сервер распаковывает его, переводит скрипты и ассеты в собственный формат PGVN (JSON-скрипты, WebP, Opus, WebM) и удаляет исходники. Играете в браузере во встроенном плеере. У каждой игры может быть несколько версий (форков) от разных пользователей; версии делят общие ассеты, поэтому форк почти не занимает места.

Подробности устройства — в docs/ARCHITECTURE.md.

Установка на VM

git clone <repo> pgames && cd pgames
cp .env.example .env
# обязательно поменяйте SECRET_KEY (openssl rand -hex 32) и пароли
docker compose up -d --build

Приложение слушает http://<IP VM>:8080 (порт — HTTP_PORT в .env). Caddy на хосте Proxmox:

games.example.lan {
    reverse_proxy 192.168.1.50:8080
}

Если в браузере сайт открывается по HTTPS через Caddy, оставьте COOKIE_SECURE=true; при доступе напрямую по HTTP поставьте false, иначе браузер не сохранит сессию.

Первый вход

Логин admin / пароль из ADMIN_PASSWORD (по умолчанию admin). Сразу после входа нужно задать свой логин и пароль.

Регистрации нет: пользователей создаёт админ в разделе «Пользователи». Сервер генерирует пароль и показывает его один раз — передайте его человеку, при первом входе он задаст свой. Права настраиваются через роли («Роли»): admin, moderator, player плюс свои.

Данные и бэкап

  • ./data/blobs — сконвертированные игры (неизменяемые файлы по sha256);
  • том db — PostgreSQL (пользователи, игры, версии, сохранения).

Для бэкапа достаточно pg_dump и копии data/blobs.

Разработка

cd backend && pip install -r requirements.txt pytest && python -m pytest
cd frontend && npm install && npm run dev   # проксирует /api на :8000
python -m tests.make_sample sample.zip      # тестовая игра (из backend/)

Что поддерживает конвертер Ren'Py

label, реплики (в т.ч. атрибуты, extend, centered, NVL), scene/show/hide с at/as/behind/zorder/with, переходы (dissolve, fade, Fade(...), vpunch, wipe/slide…), menu с условиями и set, if/elif/else, while, jump/call/return (включая expression), $/python:/init python: (подмножество Python: переменные, выражения, списки/словари, циклы), define/default, Character(...), image (файлы, цвета, Transform, im.*, Composite, ConditionSwitch, простые ATL), transform со статическими свойствами, play/queue/stop/voice, pause, .rpa, .rpyc (через unrpyc), автоопределение картинок из images/, GUI-текстбокс и шрифты игры.

Пока не поддерживается: screen-язык (кастомные экраны и мини-игры), анимации ATL, layeredimage, функции/классы в python — такие места перечислены в отчёте конвертации у версии.

S
Description
No description provided
Readme
1.9 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 46.8%
Python 38.3%
JavaScript 11.1%
CSS 3.5%
Batchfile 0.2%