自托管 AI 创作平台:图像、视频、角色卡与节点工作流。
界面默认深色,沿用 Vercel 式的克制排版与边框层次,不绑定单一模型厂商。
SanHub 是一个渠道聚合的创作后台,而不是某个封闭模型的套壳。管理员在后台接入图像 / 视频 / 对话渠道后,用户在统一创作页提交任务、在历史里回看,在工作区里把节点串成流程。
界面默认黑色(hsl(220 14% 6%) 底、浅字、细边框)。没有独立的亮色主题。
/create:图片 / 视频统一入口,按已启用模型切换- 文生图、图生图、参考图复用
- 视频支持参考图、时长与比例(取决于渠道)
- 任务异步提交,状态轮询,失败退积分
/workspace/[id]:独立编辑器布局,不套仪表盘侧栏- 按节点类型懒加载 catalog
- 图像 / 视频 / 对话节点可连接
- 从视频或参考图提取角色
- 历史页独立 tab,工作区可引用
/history:图像 / 视频 / 角色卡,顶栏统计全部进行中任务/square:可选社区浏览(后台开关)
- 用户、积分、卡密、邀请码
- 图像渠道、视频渠道、对话模型,按模型定价
- 公告、注册开关、图床(PicUI / S3 兼容)
- 公开站点文案(名称、页脚、说明)
| 类别 | 技术 |
|---|---|
| 框架 | Next.js 14 App Router |
| 语言 | TypeScript |
| 样式 | Tailwind CSS,默认深色 |
| 认证 | NextAuth.js Credentials |
| 数据库 | SQLite 或 MySQL |
| 对象存储 | 本地 data/media、PicUI、S3 兼容 |
| 部署 | Docker / Vercel |
热路径按切片读配置和 catalog,不再把管理端整包打进出图 / 出视频 / 媒体服务。
git clone https://github.com/genz27/sanhub.git
cd sanhub
docker-compose up -d| 项目 | 值 |
|---|---|
| 默认管理员邮箱 | admin@sanhub.local |
| 默认管理员密码 | sanhub123 |
首次登录后立刻改密码。
docker-compose logs -f
docker-compose down
docker-compose up -d --build域名访问时在 docker-compose.yml 里设置:
environment:
- NEXTAUTH_URL=https://your-domain.com
- ADMIN_EMAIL=admin@example.com
- ADMIN_PASSWORD=your-secure-password本地 localhost:3000 不需要 NEXTAUTH_URL。
git clone https://github.com/genz27/sanhub.git
cd sanhub
npm install
cp .env.example .env.local
npm run dev.env.local 至少设置 NEXTAUTH_SECRET,以及首次管理员 ADMIN_EMAIL / ADMIN_PASSWORD。首次启动会建库并创建管理员。
| 类型 | 适用 |
|---|---|
| SQLite | 默认,开发或单机 |
| MySQL | 生产、多实例 |
DB_TYPE=sqlite
# DB_TYPE=mysql
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_DATABASE=sanhub仍兼容旧的 DB_HOST / DB_USER / DB_NAME 别名。
模型密钥和 Base URL 配在管理后台,不写死在前端。
图像渠道常见类型:gemini、openai-compatible、openai-chat、modelscope、gitee、apexerapi。
视频渠道常见类型:
openai-compatible:OpenAI Chat Completionsflow2api:POST /v1/chat/completions,支持image_urlgrok2api:Chat Completions +video_configapexerapi:/v1/videos一类任务接口
积分在 /admin/image-channels 与 /admin/video-channels 按模型配置。历史库里的旧任务类型名可能仍带历史前缀,只影响展示与兼容读取,不代表产品还绑定该厂商。
| 方式 | 说明 |
|---|---|
| PicUI | 后台配置 Token 后上传,返回 URL |
| S3 兼容 | 通过 /cache/s3 读回,支持 path prefix |
| 本地文件 | ./data/media/ |
| Data URL | 上传失败时的回退 |
sanhub/
├── app/
│ ├── (auth)/ # login / register
│ ├── (dashboard)/ # create, history, square, settings
│ ├── (editor)/workspace/ # node editor, no dashboard chrome
│ ├── admin/ # users, channels, site, billing
│ └── api/ # app and OpenAI-compatible v1
├── components/
│ ├── generator/ # image / video studio
│ ├── history/ # gallery and lightbox
│ ├── workspace/ # editor nodes
│ └── layout/ # sidebar, dashboard shell
├── lib/
│ ├── db/ # sliced reads/writes, no mega barrel on hot paths
│ ├── image-*.ts # image adapters, loaded per channel
│ └── site-config.ts # public site copy
├── data/ # sqlite + local media
└── types/
完整列表见 .env.example。渠道密钥也可以只在管理后台配置。
对外兼容层在 /v1/*(图像 generations/edits、对话 completions、视频任务)。说明见 IMAGE_API.md。这是渠道转发,不是某个厂商的官方 SDK。