Кнопка «Фон» в тулбаре комнаты и выбор фона в превью на входе: три готовые
сцены и свои картинки из профиля. Фон применяется процессором к самому
публикуемому треку (`LocalVideoTrack.setProcessor`), а НЕ пересозданием
`RoomOptions` — ссылка на них обязана оставаться стабильной, иначе
`LiveKitRoom` переподключается к комнате.
Фича только для ДЕСКТОПА, и «десктоп» определяется по возможностям устройства
(`pointer: fine` + `hover: hover` + `maxTouchPoints`), а НЕ по ширине окна:
узкое окно на десктопе — всё ещё десктоп, а широкий планшет — всё ещё планшет,
который сегментация греет. На мобильном кнопки нет вовсе, а не задизейбленной.
Ассеты сегментации отдаются СО СВОЕГО домена: библиотека по умолчанию тянет
wasm с jsdelivr, а модель с storage.googleapis.com, и в закрытом контуре фича
молча не работала бы. Модель (Apache 2.0, см. NOTICE.txt) лежит в репозитории,
wasm-рантайм (~19 МБ) копируется из node_modules плагином сборки. Сама
библиотека и модель грузятся ЛЕНИВО — только когда фон реально включают, вход
в конференцию не стал медленнее.
Три дефолтные сцены — собственные векторные рисунки (`design/backgrounds/`),
а не фотографии из интернета: у нарисованной сцены нет чужой лицензии, а
продукт расходится по инсталляциям, и проверять права на каждую копию некому.
Свои картинки — в профиле, до 10 штук, с уменьшением до 1280px и переводом в
WebP прямо в браузере перед отправкой. Удаление применённого сейчас фона
сбрасывает выбор на «без фона»: хранится ключ записи, а не URL картинки.
Смена камеры фон не теряет (`restartTrack` перезапускает процессор сам),
выключение и включение камеры — навешивает его на новый трек заново.
⚠️ Прокси dev-сервера для `/media/` — обязательно со слэшем: ключ `/media`
Vite матчит префиксом и перехватывает заодно `/mediapipe/...`, из-за чего
модель получала 404 и фон молча не включался.
64 lines
1.5 KiB
Plaintext
64 lines
1.5 KiB
Plaintext
# Python
|
|
.venv/
|
|
venv/
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.egg-info/
|
|
.mypy_cache/
|
|
.ruff_cache/
|
|
.pytest_cache/
|
|
.coverage
|
|
htmlcov/
|
|
# uv
|
|
.uv/
|
|
uv.lock.bak
|
|
|
|
# Node / frontend
|
|
node_modules/
|
|
dist/
|
|
.vite/
|
|
frontend/coverage/
|
|
|
|
# Env / secrets
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# Models
|
|
*.gguf
|
|
|
|
# Editors / OS
|
|
.DS_Store
|
|
.idea/
|
|
.vscode/
|
|
|
|
# Docker
|
|
deploy/**/*.local.yml
|
|
|
|
# Сгенерированные из *.template скриптом deploy/render-templates.sh —
|
|
# содержат реальные секреты/IP, рендерятся перед `docker compose up`.
|
|
deploy/coturn/turnserver.conf
|
|
deploy/livekit/livekit.yaml
|
|
deploy/egress/egress.yaml
|
|
|
|
# Артефакты Celery beat
|
|
celerybeat-schedule*.db
|
|
celerybeat-schedule
|
|
|
|
# Загруженные медиа-файлы (аватары) — dev-каталог backend/media
|
|
backend/media/
|
|
|
|
# Рабочая папка Claude Code (промпты, агенты, заметки) — не в репозиторий
|
|
.forcc/
|
|
|
|
# Локальные конфиги инструментов сессий (launch.json dev-сервера и т.п.) —
|
|
# привязаны к конкретной машине, в репозиторий не идут.
|
|
.claude/
|
|
|
|
# Wasm-рантайм MediaPipe — копируется из node_modules плагином `mediapipeWasm`
|
|
# (frontend/vite.config.ts), ~19 МБ, в репозитории ему не место.
|
|
frontend/public/mediapipe/wasm/
|
|
|
|
# Рабочая страница замера CPU (сессия 35), в репозиторий не идёт.
|
|
frontend/bg-bench.html
|