[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92548":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":17,"hasPages":17,"topics":19,"createdAt":8,"pushedAt":8,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":14,"starSnapshotCount":14,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},92548,"pixovid","codes30\u002Fpixovid","codes30",null,"TypeScript",77,48,51,1,0,21,41.17,false,"main",[],"2026-07-22 04:02:06","# Pixovid\n\nA generative-media SaaS. Users sign in and can:\n\n- **Generate videos** from a prompt with a choice of model, duration, resolution,\n  aspect ratio, start\u002Fend frames and reference frames.\n- **Generate images** from a prompt with a choice of model, resolution, aspect\n  ratio and optional reference images.\n- **Face swap** — upload a base image and a face, and get the face swapped in.\n\nVideo and image generation are routed through\n[OpenRouter](https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Foverview\u002Fmultimodal\u002Fvideo-generation);\nface swaps run on a self-hosted [FaceFusion](https:\u002F\u002Fdocs.facefusion.io) service.\nAll generated media and uploaded inputs are stored in an S3-compatible object\nstore (MinIO).\n\n## Architecture\n\nThis is a [Turborepo](https:\u002F\u002Fturborepo.dev) monorepo managed with **bun**.\n\n| Path                      | Description                                                                 |\n| ------------------------- | --------------------------------------------------------------------------- |\n| `apps\u002Ffrontend`           | React + Vite + TypeScript SPA (Tailwind v4 + shadcn-style UI).              |\n| `apps\u002Fbackend`            | TypeScript + Express API. Auth (better-auth), OpenRouter + MinIO services.  |\n| `packages\u002Fdb`             | Prisma schema + client. Shared Postgres data layer reused by the backend.   |\n| `packages\u002Ftypescript-config` | Shared `tsconfig` presets.                                               |\n| `packages\u002Feslint-config`  | Shared ESLint config.                                                       |\n\nServices (via `docker-compose.yml`):\n\n- **Postgres** — primary database (Prisma).\n- **MinIO** — local S3-compatible object store for videos, images & face swaps.\n- **FaceFusion** — self-hosted face-swap HTTP service (`infra\u002Ffacefusion`, behind a compose profile).\n- **backend** \u002F **frontend** — the application containers.\n\n## Prerequisites\n\n- [Docker](https:\u002F\u002Fwww.docker.com\u002F) + Docker Compose\n- [bun](https:\u002F\u002Fbun.sh) `>= 1.3` (for local, non-Docker development)\n\n## Quick start (everything in Docker)\n\n```sh\n# 1. Configure environment\ncp .env.example .env\n# (optional) add OPENROUTER_API_KEY and Google OAuth creds when you have them\n\n# 2. Build & start the full stack\nbun run docker:up        # docker compose up -d --build\n\n# 3. Tail logs\nbun run docker:logs\n```\n\nOnce up:\n\n- Frontend: http:\u002F\u002Flocalhost:5173\n- Backend API: http:\u002F\u002Flocalhost:4000 (health check at `\u002Fhealth`)\n- MinIO console: http:\u002F\u002Flocalhost:9001 (user\u002Fpass from `.env`, default `minioadmin`)\n\nDatabase migrations are applied automatically when the backend container starts.\n\nStop everything:\n\n```sh\nbun run docker:down          # stop containers\nbun run docker:reset         # stop AND delete volumes (wipes DB + objects)\n```\n\n### Face swap (FaceFusion)\n\nFace swapping requires the self-hosted FaceFusion service, which is **not started\nby default** (the image is ~5GB and downloads models on first use). Start it with:\n\n```sh\nbun run docker:facefusion\n# = docker compose --profile facefusion up -d --build facefusion\n```\n\nIt exposes a small HTTP wrapper (`infra\u002Ffacefusion`) around FaceFusion's\n`headless-run` CLI at `http:\u002F\u002Flocalhost:7865\u002Fswap`. The backend reaches it via\nthe `FACEFUSION_URL` env var.\n\nOn first boot the container **pre-downloads the FaceFusion models** (lite scope,\nwhich includes the face swapper) into the `facefusion_data` volume, so the models\npersist across restarts and the first swap isn't slow. This initial download\ntakes a few minutes — the service reports healthy (and swaps work) once it\nfinishes. Subsequent starts skip the download via a marker file.\n\n## Local development (apps on host, infra in Docker)\n\nRun only Postgres + MinIO in Docker, and the apps on your machine with hot reload:\n\n```sh\n# 1. Start infra\nbun run infra:up\n\n# 2. Install deps\nbun install\n\n# 3. Configure per-app env\ncp packages\u002Fdb\u002F.env.example packages\u002Fdb\u002F.env\ncp apps\u002Fbackend\u002F.env.example apps\u002Fbackend\u002F.env\ncp apps\u002Ffrontend\u002F.env.example apps\u002Ffrontend\u002F.env\n#   -> set BETTER_AUTH_SECRET in apps\u002Fbackend\u002F.env\n\n# 4. Set up the database\nbun run db:generate\nbun run db:push          # sync schema -> Postgres (use db:migrate once you add migrations)\n\n# 5. Run all apps with hot reload\nbun run dev\n```\n\n- Frontend dev server: http:\u002F\u002Flocalhost:5173\n- Backend dev server: http:\u002F\u002Flocalhost:4000\n\n## Environment variables\n\nSecrets such as `OPENROUTER_API_KEY` and the Google OAuth client id\u002Fsecret are\n**provided later** — until then the app runs, but model listing and video\ngeneration will return errors, and Google sign-in is hidden\u002Fdisabled. See the\n`.env.example` files:\n\n- `.env.example` (root) — docker-compose variables\n- `apps\u002Fbackend\u002F.env.example`\n- `apps\u002Ffrontend\u002F.env.example`\n- `packages\u002Fdb\u002F.env.example`\n\nFor Google OAuth, set the authorized redirect URI to:\n\n```\nhttp:\u002F\u002Flocalhost:4000\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle\n```\n\n## Useful scripts\n\n| Command                 | Description                                  |\n| ----------------------- | -------------------------------------------- |\n| `bun run docker:up`     | Build & start the full stack in Docker.      |\n| `bun run docker:down`   | Stop the stack.                              |\n| `bun run docker:reset`  | Stop the stack and delete volumes.           |\n| `bun run docker:facefusion` | Build & start the FaceFusion face-swap service. |\n| `bun run infra:up`      | Start only Postgres + MinIO.                 |\n| `bun run dev`           | Run all apps locally with hot reload.        |\n| `bun run build`         | Build all apps & packages.                   |\n| `bun run check-types`   | Type-check the whole monorepo.               |\n| `bun run db:migrate`    | Run Prisma migrations.                       |\n| `bun run db:studio`     | Open Prisma Studio.                          |\n","Pixovid 是一个面向生成式媒体的 SaaS 应用，支持通过文本提示生成图像与视频，并提供人脸替换功能。核心能力包括：基于 OpenRouter 多模态 API 的文生图\u002F文生视频（可选模型、分辨率、时长、参考帧等参数），以及基于自托管 FaceFusion 服务的人脸交换。所有媒体资产与输入文件均持久化存储于本地 MinIO 对象存储中。项目采用 Turborepo 单体架构，前后端分离（React\u002FVite + Express），使用 Prisma 管理 PostgreSQL 数据层，适合中小团队快速部署私有化生成式媒体工作流，尤其适用于内容创作、营销素材生成及隐私敏感场景下的本地化 AI 媒体处理。",2,"2026-07-09 02:30:18","CREATED_QUERY"]