lindyson-ai
Health Pass
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 26 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
AI video & image generation workspace for e-commerce teams, built on Volcengine Seedance / Seedream, with MCP for ChatGPT & Codex · 面向电商团队的 AI 视频与图片生成工作台
简体中文 · English
Lindyson AI Video Generator
把一张商品图,变成能直接发布的短视频和商品图
面向电商与短视频团队的 AI 视频与图片生成工作台。
开箱自带积分计费、订阅套餐、管理后台和 MCP 接口,换个品牌就能上线自己的 AI 生成服务。
五分钟试玩 · 功能 · 准备密钥 · 部署上线 · 常见问题 · 二次开发 · 贡献 · 安全 · 联系我们
💡 为什么开源这个项目
我们自身是做 TK 的跨境卖家,很多时候都在用 AI 生成视频跑业务。比起实拍,这样不仅省下了大笔成本,而且更容易做出爆款。后来在一些同行交流会上,不少同行就找过来,想让我们也帮他们提供这项服务。
久而久之我们发现,自己这边写脚本、做视频的人手,根本跟不上这么大的需求量了。这也让我们意识到,这个市场是有真实需求的。
所以我们才开发了这套系统工具,直接开放给大家用。重点是,我们自己沉淀了一套提示词系统:客户只要上传一张图片,就能自动生成 3 套提示词方案,直接提交就能跑出很不错的效果。
这套提示词方案也不是死的。你们完全可以按自己的内容风格、积累下来的 skill,或者自己的一套逻辑去加强和改写,让它生成的方案更贴近你们的品类和打法。
它能帮到谁:
- 自己做店的卖家:上传商品图,十分钟内拿到三条不同风格的成片,直接发 TikTok。
- 代运营和 MCN 团队:多账号、多商品批量生成,素材统一归档,按积分核算成本。
- 想做 AI 生成产品的开发者:拿到一套带计费、后台、MCP 接口的完整骨架,不用从零搭。
欢迎拿它去商业化。 代码以 Apache-2.0 开源,换上自己的品牌就可以上线运营,不需要通知我们,也不需要分成。几条我们觉得值得做的方向:
- 私有部署给自己的团队或客户用,接自己的火山引擎账号,成本完全可控。
- 接入其他多模态模型。供应商层是独立的,只改
apps/api/src/providers/一处,就能换成或并行接入 ChatGPT 的 Image 2.5、MiniMax 的 H3 这类模型,让用户在同一个工作台里按效果和价格自己选。- 接自己的支付通道做 SaaS,套餐、积分、订单、发票都已经有了。
- 把提示词引擎单独拆出来,集成到你已有的选品或运营工具里。
唯一的要求是不要用 "Lindyson" 这个名字和标识,详见 TRADEMARK.md。做出了有意思的东西,欢迎回来开个 issue 告诉我们。
另外,如果你也是跨境卖家或者做 TK 的同行,不管用不用这个项目,都欢迎来聊聊:怎么选品、怎么用 AI 出爆款、哪些市场好做,这些我们天天在碰。联系方式在文末的 联系与交流。
🌱 我们的愿景
我们希望有一天,一个小卖家不用请摄影师、不用养剪辑团队,只靠一张商品图,也能做出和大品牌一样好看的视频。
我们希望这套系统不只在我们手里转。每一个拿去部署的人,都能服务好自己身边那一圈卖家,让更多好商品被更多人看见。
我们也希望它一直长下去:有人接入新的模型,有人改出更懂自己品类的提示词,有人玩出我们没想到的用法,再把这些经验带回来,让下一个人起步更容易。
做生意不该只是大公司的游戏。工具开放一点,机会就多一点。
📸 截图预览
官网
| 发布预览 | 套餐定价 |
|---|---|
![]() |
![]() |
用户端
| 仪表盘 | AI Studio:视频生成 |
|---|---|
![]() |
![]() |
| 数字资产 | TikTok 账号管理 |
![]() |
![]() |
| 发布至 TikTok | 账户中心:积分与 MCP 连接 |
![]() |
![]() |
提示词引擎(核心功能)
TK Prompt Engine 从一张商品图出发:先识别并由你确认商品事实,再设定目标市场、口播语言与画面方式,最后生成"最稳、最原生、最抓眼"三套可直接执行的分镜提示词,采用后写回 AI Studio。
| 第 1 步:确认商品事实 | 第 2 步:设置市场与创作条件 | 第 3 步:三个提示词方案 |
|---|---|---|
![]() |
![]() |
![]() |
管理后台

🚀 五分钟试玩
[!TIP]
不需要火山引擎账号,不需要填任何密钥。演示模式用一个"假供应商"代替真实模型,生成任务约 1.5 秒后返回占位结果,整条流程(上传、生成、资产、积分、后台)都能走通。
你需要:一台装了 Docker Desktop(或 Docker Engine + Compose v2.24 以上)的电脑,4 GB 以上空闲内存。
第 1 步:拉代码
git clone https://github.com/orylite/lindyson-ai.git && cd lindyson-ai
第 2 步:一条命令启动
docker compose --env-file .env.demo -f docker-compose.yml -f docker-compose.demo.yml up -d --build
第一次会构建镜像,大约 3 到 5 分钟。结束后 docker compose ps 里应该看到 postgres、redis、api、worker、web 五个容器在运行,migrate 显示已退出(exit 0)。
第 3 步:打开浏览器
访问 http://localhost:8080,点"登录",用演示管理员登录:
| 账号 | 密码 |
|---|---|
[email protected] |
Demo12345 |
进入 AI Studio,随便上传一张图片,点"生成"。大约两秒后任务完成,你会在数字资产里看到一个占位结果。再去管理后台看看用户、订单、工单和供应商用量页面。
停止与清理
docker compose --env-file .env.demo -f docker-compose.yml -f docker-compose.demo.yml down
想连数据一起清掉,在末尾加 --volumes。
[!NOTE]
演示模式的密钥和账号是公开的,并且服务端在生产模式下会拒绝这些值启动,所以它们不可能被误用于上线。想生成真实视频,请看 部署上线。
✨ 功能一览
- 🎬 AI Studio:文生视频、图生视频、参考素材复用、商品图生成与交互式编辑。提示词向导把商品信息转成分镜脚本。
- 🧠 提示词引擎:从商品图识别事实,按目标市场和口播语言生成三套可执行的分镜提示词。
- 🗂️ 数字资产:上传、文件夹、缩略图、批量操作,图片与视频统一管理。
- 💳 积分与订阅:套餐、加购包、积分流水、订单与发票。支付通道在后台配置。
- 🛠️ 管理后台:用户、订单、工单、公告、支付通道、供应商用量与成本报表。推广链接带
?utm_source=xiaohongshu(或短写?from=xhs)即可按平台统计访客、注册与收入。 - 🔌 MCP 接入:标准 MCP 服务端加 OAuth 2.1 动态注册与 PKCE,ChatGPT 与 Codex 可直接导入素材并发起生成,见 MCP_CHATGPT.md。
- 📱 TikTok 发布:账号管理与发布预览,成片直接推到 TikTok。
- 🧑 真人演员库:真人肖像授权、活体校验与撤回流程,敏感信息加密存储。
🔑 需要准备哪些账号和密钥
试玩不需要任何密钥。要生成真实视频并对外提供服务,按下面三类准备。所有变量都写在 .env 里,完整说明见 .env.example。
[!NOTE]
本项目的生成能力建立在 火山引擎方舟 之上。方舟是字节跳动的模型服务平台,Seedance 是其视频生成模型,Seedream 是图片生成与编辑模型,TOS 是火山引擎的对象存储。
必需:没有就生成不了真实内容
| 要什么 | 去哪拿 | 填到哪 |
|---|---|---|
| 方舟 API Key | 登录 火山引擎控制台,进入"火山方舟",在"API Key 管理"创建一个 Key;然后在"开通管理"里开通这几个模型:Seedance 2.0(含 fast、mini)、Seedance 2.5、Seedream 5.0 Pro、Doubao Seed 2.0 lite(提示词引擎用)。按量计费,先充少量余额即可。 | ARK_API_KEY |
| 对象存储 | 在火山引擎 TOS 新建一个私有读写的桶,再到"访问控制 IAM"里创建一个只有该桶读写权限的子用户,拿到 Access Key。任何兼容 S3 的存储也可以用。 | STORAGE_DRIVER=tos 与 TOS_* |
[!TIP]
不想绑死在火山引擎上也行。生成能力走的是独立的供应商层(apps/api/src/providers/),视频和图片各自一个接口。想接 ChatGPT 的 Image 系列、Google 的 Nano Banana,或者其他主流生图、生视频模型,照着现有的方舟实现加一个供应商就能并行提供给用户选。
按功能可选:不填该功能就关闭
| 功能 | 要什么 | 填到哪 |
|---|---|---|
| 提示词引擎 | 默认复用上面的方舟 Key,只要开通了 Doubao Seed 2.0 lite 模型就能用;要分开计费可以另建一个 Key。这一层也是可换的:DeepSeek 或其他多模态模型都能拿来写方案,换个模型、改改策略,说不定就能玩出不一样的东西 | ARK_PROMPT_WIZARD_API_KEY |
| 真人演员库 | 火山引擎 IAM 子用户的 Access Key,调用方舟 Assets API。不能复用方舟 API Key | REAL_PORTRAIT_PROVIDER_MODE=volcengine 与 VOLC_ARK_ASSET_* |
| 成本报表 | 火山引擎费用中心的只读 Access Key,用于在后台核对账单和资源包 | VOLC_BILLING_* |
| 事务邮件 | Resend 账号,并验证一个发信域名 | RESEND_* |
| ChatGPT / Codex 接入 | 不需要外部账号,只要你的站点有公网 HTTPS 地址 | MCP_*,步骤见 MCP_CHATGPT.md |
| 百度收录推送 | 百度站长平台的推送 token | BAIDU_* |
自己生成:五个随机密钥
这几个值不从任何地方申请,自己生成即可,每个都不同,不要复用:
| 变量 | 用途 | 怎么生成 |
|---|---|---|
JWT_SECRET |
登录会话签名 | openssl rand -hex 32 |
MCP_OAUTH_SECRET |
MCP 的 OAuth 签名 | openssl rand -hex 32 |
MCP_FILE_ENCRYPTION_KEY |
MCP 导入文件加密 | openssl rand -hex 32 |
REAL_PORTRAIT_TOKEN_ENCRYPTION_KEY |
真人演员库凭据加密 | openssl rand -hex 32 |
PAYMENT_CONFIG_ENCRYPTION_KEY |
支付通道密钥入库加密 | openssl rand -base64 32(必须是 32 字节的 Base64) |
支付:在后台配,自己选服务商
支付通道的密钥不写在 .env 里。登录管理后台,进入"支付通道",填写服务商给你的商户号(mchNo)、应用 ID(appId)和 API 密钥(apiKey),保存时会用上面的 PAYMENT_CONFIG_ENCRYPTION_KEY 加密入库。
支付宝和微信支付都可以直接接。项目内置的是 Jeepay 通道:在 Jeepay 里配好你自己的支付宝、微信支付商户号,再把它的商户号、应用 ID 和 API 密钥填进后台,用户付款时就直接走支付宝或微信。商户号怎么申请、用哪个主体,由你根据自己的情况决定。想换别的支付服务商,支付层在 apps/api/src/payments/ 下是独立的,照着 Jeepay 的实现加一个通道即可。
💻 本地开发
前置条件:Node.js 22 或更新、Docker。没有火山引擎账号也能跑通全流程,.env.example 默认 ENABLE_FAKE_PROVIDER=true,worker 会用假供应商生成占位结果。
npm i
cp .env.example .env
按 .env.example 的注释填写 .env。本地最小配置:JWT_SECRET 随便设一个长随机串,STORAGE_DRIVER=local,ENABLE_FAKE_PROVIDER=true,其余留空。
启动 PostgreSQL 和 Redis(也可以用自己的实例,改 DATABASE_URL 和 REDIS_URL):
docker compose up -d postgres redis
初始化数据库、写入套餐种子并创建管理员(管理员邮箱和密码取自 BOOTSTRAP_ADMIN_EMAIL、BOOTSTRAP_ADMIN_PASSWORD):
npm run db:migrate && npm run db:seed && npm run db:bootstrap-admin
分别在三个终端启动 API、worker 和前端:
npm run dev:api
npm run dev:worker
npm run dev
前端在 http://localhost:5173,API 在 http://localhost:4300,开发服务器会把 /api/ 代理到 API。打开前端应看到落地页,登录后进入仪表盘。
🌐 部署上线
一台 2 核 4G 的机器就够跑:PostgreSQL、Redis、API、worker、前端 nginx 全在一个 docker compose 里。
第 1 步:准备服务器和域名
一台能跑 Docker 的 Linux 服务器,一个解析到它的域名(下文以 ai.example.com 为例)。
第 2 步:拉代码并创建配置
git clone https://github.com/orylite/lindyson-ai.git && cd lindyson-ai
cp .env.example .env
第 3 步:编辑 .env,至少填这些:
| 变量 | 填什么 |
|---|---|
NODE_ENV |
production |
JWT_SECRET、MCP_OAUTH_SECRET、MCP_FILE_ENCRYPTION_KEY、REAL_PORTRAIT_TOKEN_ENCRYPTION_KEY、PAYMENT_CONFIG_ENCRYPTION_KEY |
按 上一节 各生成一个,不要复用 |
POSTGRES_PASSWORD |
数据库口令 |
PUBLIC_BASE_URL、APP_BASE_URL、CORS_ORIGIN |
都填 https://ai.example.com |
VITE_PUBLIC_SITE_URL |
同上,用于前端构建 |
ENABLE_FAKE_PROVIDER |
false |
ARK_API_KEY |
方舟 API Key |
STORAGE_DRIVER、TOS_* |
tos 与对象存储信息 |
BOOTSTRAP_ADMIN_EMAIL、BOOTSTRAP_ADMIN_PASSWORD |
第一个管理员账号 |
第 4 步:填写运营主体信息
页脚和法律文案读取 src/app/data/publicCompliance.json,仓库里的是占位模板。把它复制为同目录的 publicCompliance.local.json(已被 git 忽略)并填入真实的公司名、备案号和隐私联系方式,构建时自动替换。npm run check:public-compliance 可以校验是否填完整。
第 5 步:启动
docker compose up -d --build
docker compose up 会自动跑数据库迁移。第一次启动后再写入套餐种子并创建管理员:
docker compose run --rm --no-deps migrate npm --workspace apps/api run db:seed:prod
docker compose run --rm --no-deps migrate npm --workspace apps/api run db:bootstrap-admin:prod
此时浏览器打开 http://你的服务器IP 应能看到落地页。
第 6 步:加 HTTPS
最省事的是在前面放一个 Caddy,它会自动申请证书。先把 .env 里的 WEB_HTTP_PORT 改成一个内网端口(例如 8080),TRUST_PROXY 改成 2(Caddy 和 web 两跳),然后 docker compose up -d 重启;再写 Caddyfile:
ai.example.com {
reverse_proxy 127.0.0.1:8080
}
启动 Caddy 后访问 https://ai.example.com,登录管理员,到后台配置支付通道、套餐和公告,就可以开门营业了。
不用 Docker 的部署方式[!WARNING]
API 只应监听本机,公网流量必须经反向代理进入。TRUST_PROXY填反向代理的地址、CIDR 或跳数;不要在 API 端口可直连时设为true,否则客户端可伪造来源 IP 绕过限流。
API 与 worker 是同一份代码,npm run build:api 后分别用 node dist/server.js 和 node dist/worker/generationWorker.js 启动,迁移用 node dist/db/migrate.js,种子与管理员用 node dist/db/seed.js 与 node dist/db/bootstrapAdmin.js。前端 npm run build 后把 dist/ 交给任意静态服务器,并把 /api/、/mcp、/oauth/、/.well-known/oauth-* 反代到 API,参考 infra/nginx/default.conf。
- 前端构建期变量(
VITE_前缀,可写在.env.local):VITE_PUBLIC_SITE_URL是正式站点地址,用于 canonical 和社交分享;VITE_SUPPORT_QR_URL是客服二维码图片地址,留空则不显示。VITE_SEEDREAM_TUTORIAL_MEDIA_BASE_URL指向 Seedream 教程演示媒体所在目录,这些媒体是火山引擎官方素材,不随仓库分发,留空则弹窗只显示文字与官方链接。 public/robots.txt与public/sitemap.xml里的域名需要按自己的站点修改。- 生产环境会拒绝已知的弱密钥默认值、
http站点地址和公开的存储地址,启动报错时按提示修正即可。
🧯 常见问题、备份与升级
启动后打开页面是 502 或空白先看 docker compose ps。若 migrate 不是 exit 0,用 docker compose logs migrate 看迁移报错,多数是数据库口令或 DATABASE_URL 不对。若 api 反复重启,docker compose logs api 会直接打印缺了哪个环境变量。
数据库里还没有套餐数据。先执行一次种子命令(本地 npm run db:seed,Docker 里 docker compose run --rm --no-deps migrate npm --workspace apps/api run db:seed:prod),再创建管理员。种子可以重复执行,不会覆盖已有数据。
是 worker 没跑或连不上 Redis。docker compose logs worker 查看;本地开发要单独开一个终端跑 npm run dev:worker。真实模式下还要确认 ARK_API_KEY 有效且对应模型已开通。
是一张占位图或一段占位视频,任务 ID 以 fake- 开头,不会消耗火山引擎费用。它只在 NODE_ENV 不是 production 时生效。
改 .env(或 .env.demo)里的 WEB_HTTP_PORT,然后重新 up -d。
备份:数据在两个 Docker 卷里,postgres-data(数据库)和 local-storage(本地存储模式下的文件)。数据库一行备份:
docker compose exec postgres pg_dump -U lindyson lindyson > lindyson-$(date +%F).sql
对象存储模式下文件在 TOS 桶里,按云厂商的方式备份。
升级:
git pull && docker compose up -d --build
up 会自动执行新的数据库迁移。升级前先做一次备份。
🧩 二次开发
架构
flowchart LR
B[浏览器] -->|静态文件| W[web<br/>nginx + Vite/React 构建产物]
B -->|/api/ · /mcp · /oauth| W
W -->|反代| A[api<br/>Fastify]
A --> P[(PostgreSQL 16)]
A --> R[(Redis 7 · BullMQ)]
R --> K[worker]
K -->|Seedance / Seedream| V[火山引擎方舟]
K -->|文件| S[(对象存储<br/>TOS 或本地磁盘)]
A --> S
C[ChatGPT / Codex] -->|MCP + OAuth 2.1| W
目录
| 目录 | 内容 |
|---|---|
src/ |
前端。index.html → src/landing.tsx 是落地页;app.html → src/main.tsx 是登录后的工作台与后台 |
apps/api/ |
API、worker、数据库迁移(migrations/)、运维工具(src/tools/) |
apps/api/src/providers/ |
供应商层。要换模型或接别的厂商,改这里 |
packages/api-contracts/ |
前后端共享的 zod 契约 |
tests/ |
Playwright 端到端测试与 Docker 全栈测试 |
scripts/ |
全栈测试编排、公开合规配置校验、百度收录提交 |
docker-compose.yml |
单机生产栈;docker-compose.demo.yml + .env.demo 是试玩叠加;docker-compose.fullstack.yml 是测试叠加 |
开发命令
| 命令 | 作用 |
|---|---|
npm run typecheck / npm run typecheck:api |
前端 / API 类型检查 |
npm run test:unit |
前端与契约包单元测试(Vitest) |
npm run check:api |
API 类型检查与单元测试 |
npm run test:e2e |
Playwright 端到端测试(走 mock API) |
npm run test:fullstack |
用 docker-compose.yml 加 docker-compose.fullstack.yml 起一套真实 PostgreSQL、Redis、API、worker 与浏览器链路 |
npm run build / npm run build:api |
生产构建;前端构建会为文本资源额外生成 .gz |
npm run check |
以上全部,发布前跑一遍 |
贡献流程见 CONTRIBUTING.md,安全问题请按 SECURITY.md 私下报告,版本变更见 CHANGELOG.md。
📮 联系与交流
用的时候遇到问题,开 Issue 就好。想聊商业化、私有部署、接别的模型,或者只是想交流做 TK 短视频的经验,扫码加飞书:

飞书扫一扫
⭐ Star History
觉得有用的话,点个 Star 让更多卖家和开发者看到它。
📜 第三方资源与许可
随仓库分发的第三方资源清单见 NOTICE,细节见 ATTRIBUTIONS.md 和 public/fonts/说明.md。首页商品图与视频均为 AI 生成,来源记录在 src/imports/landing-masters/PROVENANCE.md,README 顶部横幅是首页截图。母版文件不在仓库里。
本项目以 Apache-2.0 许可证开源。"Lindyson" 名称与标识不随代码授权,基于本项目发布的服务请使用自己的品牌,详见 TRADEMARK.md。
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found










