[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-105346":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":17,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":43,"readmeContent":44,"aiSummary":10,"trendingCount":15,"starSnapshotCount":15,"syncStatus":45,"lastSyncTime":46,"discoverSource":47},105346,"minitv","xuliang2024\u002Fminitv","xuliang2024","开源的竖屏微短剧分发平台：短剧系统 \u002F 短剧分销 \u002F 短剧源码全开放，面向短剧出海。Open-source mobile vertical short-form micro drama app — short drama distribution platform and drama CMS, with full source code. 内容方入驻上传、平台审核分发、分集解锁与结算。","https:\u002F\u002Fminitv.us",null,"Python",384,1,173,0,132,396,86.9,"MIT License",false,"main",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"bunny-cdn","content-distribution","distribution-platform","drama-cms","flutter-video-player","hls-player","micro-drama","microdrama","ott","short-drama","short-drama-distribution","short-form-drama","short-play","svod","svod-platform","tiktok-style","vertical-drama","video-distribution","video-on-demand","vod-platform","2026-11-01 00:14:45","\u003Cdiv align=\"center\">\n\n\u003Ch1>MiniTV\u003C\u002Fh1>\n\n\u003Cp>\u003Cstrong>开源的短剧分发平台\u003C\u002Fstrong> —— 内容方入驻上传、平台审核分发、分集解锁与结算，一套后端撑起官网 \u002F H5 \u002F App \u002F 后台。\u003C\u002Fp>\n\n\u003Cp>React 18 · TypeScript · FastAPI · PostgreSQL · Redis · Flutter · Bunny Stream · Stripe\u003C\u002Fp>\n\n\u003C\u002Fdiv>\n\n---\n\n## 在线演示\n\n| 端 | 地址 | 说明 |\n| --- | --- | --- |\n| 🖥 官网（营销站） | \u003Chttps:\u002F\u002Fminitv.us> | 产品介绍、免费试看、套餐展示 |\n| 📱 H5 Web App | \u003Chttps:\u002F\u002Fh5.minitv.us> | 完整播放、金币、签到、评论，移动端优先 |\n| 🔐 管理后台 | \u003Chttps:\u002F\u002Fadmin.minitv.us> | 内容 \u002F 运营 \u002F 财务后台，需登录 |\n| ⚙️ API | \u003Chttps:\u002F\u002Fapi.minitv.us> | 接口服务，文档见 `\u002Fdocs` |\n\n> 演示站由维护者提供，仅用于体验产品；请勿用于压测或爬取。\n\n## 产品演示\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"100%\">\n\u003Cimg src=\"docs\u002Fscreenshots\u002Fweb-home.png\" alt=\"MiniTV 官网首屏\">\n\u003Cbr>\u003Csub>\u003Cb>官网\u003C\u002Fb> —— 首屏讲清价值主张，右侧真机模型预演产品界面，主 CTA 直达免费试看。\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"33%\" align=\"center\">\n\u003Cimg src=\"docs\u002Fscreenshots\u002Fh5-home.jpg\" alt=\"H5 首页\">\n\u003Cbr>\u003Csub>\u003Cb>H5 · 首页\u003C\u002Fb>\u003Cbr>Discover \u002F Ranking \u002F Free 多频道，主推位轮播\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd width=\"33%\" align=\"center\">\n\u003Cimg src=\"docs\u002Fscreenshots\u002Fh5-shows.jpg\" alt=\"H5 频道页\">\n\u003Cbr>\u003Csub>\u003Cb>H5 · 新剧\u003C\u002Fb>\u003Cbr>最新上架一屏尽览，三列纵向浏览\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd width=\"33%\" align=\"center\">\n\u003Cimg src=\"docs\u002Fscreenshots\u002Fapp-episodes.jpg\" alt=\"App 选集面板\">\n\u003Cbr>\u003Csub>\u003Cb>App · 选集\u003C\u002Fb>\u003Cbr>已看 \u002F 在追 \u002F 加锁三态一目了然\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\u003Cimg src=\"docs\u002Fscreenshots\u002Fadmin-dashboard.png\" alt=\"后台数据看板\">\n\u003Cbr>\u003Csub>\u003Cb>后台 · 数据看板\u003C\u002Fb> —— 活跃、播放、完播、营收按日聚合，全站累计与待办一屏掌握。\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\u003Cimg src=\"docs\u002Fscreenshots\u002Fadmin-rewards.png\" alt=\"后台金币与任务\">\n\u003Cbr>\u003Csub>\u003Cb>后台 · 金币与任务\u003C\u002Fb> —— 7 天签到阶梯与任务激励可在线上直接调参，次日生效、全程留痕。\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 功能\n\n**内容与播放**\n\n- 剧集 \u002F 分集 \u002F 标签 \u002F 首页楼层可视化编排，支持定时上架与批量上传\n- Bunny Stream 转码 + HLS 签名播放，多清晰度切换、断点续播\n- 分集解锁：免费集数、金币单价、会员权益三级控制\n\n**变现与增长**\n\n- Stripe Checkout 会员，支持「自动续费订阅」与「一次性时长包」两种计费模式，后台一键切换\n- 金币账本（append-only 流水 + 物化余额），所有消耗走幂等接口，杜绝重复扣费\n- 7 天签到阶梯、每日任务、绑定奖励，奖励配置后台可调、按生效日归档\n\n**运营与协作**\n\n- 分集评论 + 异步 AI 审核（OpenAI 兼容接口，密钥在后台加密存储）\n- 上剧方（supplier）独立角色：自助建剧、上传、提交审核，只读对账单\n- 管理后台 RBAC（运营 \u002F 财务 \u002F 管理员）、API Key + CLI、全量审计日志\n- 数据看板、财务订单、月度结算单\n\n## 技术栈\n\n| 层 | 选型 |\n| --- | --- |\n| 后端 | FastAPI · SQLAlchemy 2 · Alembic · psycopg3 · PyJWT |\n| 数据 | PostgreSQL 16 · Redis 7 |\n| 前端 | React 18 · TypeScript 5 · Vite 5 · Ant Design 5 |\n| App | Flutter（Dart SDK 3.13+，iOS \u002F Android） |\n| 媒体 | Bunny Stream（HLS 转码）· Bunny Storage + Optimizer（封面 \u002F 字幕） |\n| 支付 | Stripe Checkout + Webhook |\n| 邮件 | Resend |\n| 部署 | Cloudflare R2 托管静态站 · 单台 Linux 跑 API |\n\n## 目录结构\n\n```\n.\n├── backend\u002F            FastAPI 服务\n│   ├── app\u002Fmodules\u002F    业务模块：account \u002F content \u002F playback \u002F wallet \u002F\n│   │                   billing \u002F social \u002F ops \u002F recommend \u002F analytics\n│   ├── alembic\u002F        数据库迁移\n│   └── tests\u002F          pytest 用例（隔离库，跑前自动建表）\n├── admin\u002F              管理后台（React + Ant Design）\n├── web\u002F                官网营销站（React，含独立隐私政策页）\n├── h5\u002F                 移动端 Web App（React）\n├── app\u002F                Flutter App（iOS \u002F Android）\n├── cli\u002F                单文件 CLI（纯标准库，Python 3.8+）\n├── scripts\u002F            数据导入、发布、运维脚本\n├── docs\u002F               架构 \u002F 运营 \u002F 验收文档\n├── deployments\u002F        发布记录（每次发布自动生成 JSON）\n└── docker-compose.yml  本地 PostgreSQL + Redis\n```\n\n## 快速开始\n\n### 前置要求\n\n- Python **3.11+**\n- Node.js **18+**\n- Docker（跑本地 PostgreSQL \u002F Redis）\n- 可选：Flutter 3.x（只在跑 App 时需要）\n\n### 1. 拉代码并准备环境变量\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fxuliang2024\u002Fminitv.git\ncd minitv\ncp .env.example .env\n```\n\n`.env.example` 默认 `BUNNY_MODE=fake`，播放与封面走本地桩实现 —— **不填任何外部密钥也能把接口和后台跑通**。\n\n### 2. 起依赖服务\n\n```bash\ndocker compose up -d      # PostgreSQL :15432 \u002F Redis :16379\n```\n\n### 3. 装后端依赖并建表\n\n```bash\npython3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npip install -r backend\u002Frequirements.txt\n\ncd backend && alembic upgrade head && cd ..\n```\n\n### 4. 启动 API\n\n```bash\n.venv\u002Fbin\u002Fuvicorn app.main:app --app-dir backend --host 127.0.0.1 --port 18110\n```\n\n健康检查：`curl http:\u002F\u002F127.0.0.1:18110\u002Fhealth`\n\n> 快捷方式：`.\u002Fscripts\u002Fup-local.sh` 会一次性起好 Docker 依赖和 API。\n\n### 5. 启动三个前端\n\n三个终端分别执行：\n\n```bash\ncd admin && npm install && npm run dev     # http:\u002F\u002F127.0.0.1:5173\ncd web   && npm install && npm run dev     # http:\u002F\u002F127.0.0.1:5174\ncd h5    && npm install && npm run dev     # http:\u002F\u002F127.0.0.1:5175\n```\n\nVite 已配好代理，`\u002Fv1` 与 `\u002Fadmin\u002Fv1` 会自动转发到 `127.0.0.1:18110`，无需额外配置跨域。\n\n### 6. 创建第一个后台账号\n\n```bash\ncd backend\nSEED_ADMIN_PASSWORD='换成你自己的口令' ..\u002F.venv\u002Fbin\u002Fpython -m app.seed_admin\n```\n\n不带 `SEED_ADMIN_PASSWORD` 时会随机生成一个并打印一次。该脚本只在 `admin_users` 为空时执行，可安全重复运行。\n\n打开 \u003Chttp:\u002F\u002F127.0.0.1:5173>，用这个账号登录。\n\n### 本地端口一览\n\n| 服务 | 地址 |\n| --- | --- |\n| API | \u003Chttp:\u002F\u002F127.0.0.1:18110> |\n| 管理后台 | \u003Chttp:\u002F\u002F127.0.0.1:5173> |\n| 官网 | \u003Chttp:\u002F\u002F127.0.0.1:5174> |\n| H5 | \u003Chttp:\u002F\u002F127.0.0.1:5175> |\n| PostgreSQL | `127.0.0.1:15432` |\n| Redis | `127.0.0.1:16379` |\n\n### 可选：灌一些演示数据\n\n```bash\ncd backend\n..\u002F.venv\u002Fbin\u002Fpython -m app.seed_rewards          # 签到 \u002F 任务基线配置\n..\u002F.venv\u002Fbin\u002Fpython -m app.seed_users --count 20 # 假 C 端用户与钱包\n..\u002F.venv\u002Fbin\u002Fpython -m app.seed_catalog_episodes # 从本地片库导入剧集（需自备 catalog）\n```\n\n### 环境自检\n\n```bash\npython3 scripts\u002Fcheck_local_env.py\n```\n\n检查 `.env`、PostgreSQL、Redis 与 Python 依赖；Flutter \u002F Android \u002F iOS 工具链单独报告，不影响后端启动。\n\n## 运行 App\n\n```bash\ncd app\nflutter pub get\n\n# iOS 模拟器（默认就连本机 API）\nflutter run\n\n# Android 模拟器 \u002F 真机需要显式指定 API 地址\nflutter run --dart-define=API_BASE=http:\u002F\u002F10.0.2.2:18110\n```\n\n## 命令行工具\n\n`cli\u002Fminitv` 是单文件、零依赖的 CLI（Python 3.8+，当前 0.4.0），覆盖剧集 \u002F 分集 \u002F 标签 \u002F 分组 \u002F 排期 \u002F 上传 \u002F 上剧方等 **57 条命令**。\n\n```bash\ncurl -fsSL https:\u002F\u002Fminitv.us\u002Fcli\u002Finstall.sh | sh\nminitv config set-key                      # 交互式写入 API Key（不落 shell 历史）\nminitv drama list --status published\nminitv episode upload 12345 .\u002Fep01.mp4\nminitv doctor                              # 自检：连通 \u002F 身份 \u002F 权限\n```\n\n完整命令见 [`docs\u002Fcli-reference.md`](docs\u002Fcli-reference.md)。\n\n## 发布\n\n线上发布统一走一个入口，内含共享锁与自动版本号：\n\n```bash\npython3 scripts\u002Frelease.py status          # 先看锁和线上版本\npython3 scripts\u002Frelease.py r2   --dist web\u002Fdist --source web\npython3 scripts\u002Frelease.py run  --target server -- .\u002Fscripts\u002Fdeploy_server.sh\n```\n\n版本形如 `v2026.10.29.1`，由脚本在锁内生成并打 tag；回滚同样走脚本。细节见 [`docs\u002Frelease-process.md`](docs\u002Frelease-process.md)。\n\n> 这些日期构建号属于**本地部署记账**，权威记录是 `deployments\u002Freleases\u002F*.json`（含版本号与提交 SHA）。它们不推送到远端——公开仓库只保留语义化版本 tag，当前为 [`v1.0.0`](https:\u002F\u002Fgithub.com\u002Fxuliang2024\u002Fminitv\u002Freleases\u002Ftag\u002Fv1.0.0)。\n\n## 文档\n\n| 文档 | 内容 |\n| --- | --- |\n| [`docs\u002Ftechnical-architecture.md`](docs\u002Ftechnical-architecture.md) | 技术拓扑、密钥边界、部署架构 |\n| [`docs\u002Frelease-process.md`](docs\u002Frelease-process.md) | 发布 \u002F 回滚流程与故障处理 |\n| [`docs\u002Fmembership-coins-unlock.md`](docs\u002Fmembership-coins-unlock.md) | 会员、金币、解锁的账务设计 |\n| [`docs\u002Fcomment-architecture.md`](docs\u002Fcomment-architecture.md) | 评论与异步审核链路 |\n| [`docs\u002Fsupplier-role-plan.md`](docs\u002Fsupplier-role-plan.md) | 上剧方角色的权限与结算设计 |\n| [`docs\u002Fcli-reference.md`](docs\u002Fcli-reference.md) | CLI 全部命令 |\n\n## 交流与反馈\n\n部署踩坑、功能建议、想聊聊短剧出海怎么做，都欢迎。\n\n\u003Cp align=\"center\">\u003Cimg src=\"docs\u002Fassets\u002Fwechat.png\" width=\"260\" alt=\"扫码加微信，备注 MiniTV 进交流群\">\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Cstrong>扫码加微信，备注「MiniTV」，拉你进交流群\u003C\u002Fstrong>\u003C\u002Fp>\n\n遇到 Bug 也可以直接开 [Issue](https:\u002F\u002Fgithub.com\u002Fxuliang2024\u002Fminitv\u002Fissues)。\n\n## 许可证\n\n本项目基于 [MIT License](LICENSE) 开源，© 2026 MiniTV。\n\n可自由用于商业项目，保留版权声明即可。如需改为 Apache-2.0（附带专利授权条款），替换 `LICENSE` 文件并同步本节即可。\n",2,"2026-10-31 04:26:29","CREATED_QUERY"]