[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81593":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":17,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":41,"readmeContent":42,"aiSummary":43,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":44,"discoverSource":45},81593,"viskit-studio","MyuriKanao\u002Fviskit-studio","MyuriKanao","自托管商品视觉工作台：商品识别、AI 图片生成、二次编辑与电商营销素材套包。","https:\u002F\u002Flinux.do\u002F",null,"TypeScript",30,4,1,0,2,7,6,2.1,"MIT License",false,"main",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,5,40],"ai-image-generation","creative-automation","docker","ecommerce","fastapi","image-editing","marketing-assets","nextjs","openai-compatible","postgresql","product-photography","python","react","self-hosted","sqlite","typescript","visual-commerce","2026-06-12 02:04:17","# Viskit Studio\n\n自托管商品视觉工作台。\n\n![Viskit Studio 工作台生成预览](docs\u002Fassets\u002Fintro\u002Fworkbench-generation-preview.png)\n\n| 图片预览与二次编辑 | 商品套包概览 |\n| --- | --- |\n| ![图片预览弹窗](docs\u002Fassets\u002Fintro\u002Fasset-preview-dialog.png) | ![商品视觉套包示例](docs\u002Fassets\u002Fintro\u002Fmarketing-kit-overview.jpg) |\n\n## 现在能做什么\n\n- 商品图上传\n- 商品信息识别\n- 结构化 brief\n- 输出计划编辑\n- 支持白底图、模特图、试穿\u002F买家秀、Banner、详情模块、14 图套包\n- 生成任务队列\n- 图片预览、下载、删除、二次编辑\n- 模板库\n- 服务商配置\n- SQLite \u002F PostgreSQL\n\n## 未来事项\n\n- 支持素材向量嵌入：为模板、历史生成图、用户上传参考图和可复用素材建立 embedding 索引。\n- 支持参考素材检索：根据商品 brief、类目、目标图位、平台尺寸和风格意图，检索相似构图、色彩、场景和历史成功案例。\n- 向量仅作为素材参考层：向量检索不直接决定最终画面，只用于找到可参考的素材、构图和风格线索。\n- 增强提示词组合：将商品信息、模板目标、参考素材特征、品牌约束、色彩锁定和负面约束组合成更稳定的生图提示词。\n- 支持参考图风格统一：筛选后的参考图可作为 image edit \u002F reference image 输入，交给支持该能力的生图模型统一视觉风格。\n- 建立反馈闭环：用户下载、采纳、二次编辑或废弃的结果回写为素材质量信号，用于后续检索排序。\n\n规划中的参考流程：\n\n```mermaid\nflowchart TD\n    A[\"商品信息 \u002F brief \u002F 模板目标\"] --> B[\"向量检索参考素材\"]\n    B --> C[\"筛选素材\u003Cbr\u002F>类目、授权、品牌、色彩、构图、质量\"]\n    C --> D[\"组合提示词\u003Cbr\u002F>商品身份 + 模板目标 + 参考素材特征 + 风格锁定\"]\n    D --> E[\"参考图输入生图模型\"]\n    E --> F[\"统一风格后生成视觉套包\"]\n```\n\n## Docker 部署\n\n`docker-compose.yml`：\n\n```yaml\nservices:\n  app:\n    image: mayurikano\u002Fviskit-studio:latest\n    ports:\n      - \"3068:3000\"\n    environment:\n      DATABASE_URL: sqlite:\u002F\u002F\u002F\u002Fapp\u002Fdata\u002Fviskit.db\n      CONFIG_PATH: \u002Fapp\u002Fdata\u002Fconfig.yaml\n      IMAGEGEN_OUTPUT_DIR: \u002Fapp\u002Fdata\u002Fimagegen\n      VISKIT_AUTO_MIGRATE: \"1\"\n      VISKIT_BOOTSTRAP_WORKSPACE: \"1\"\n      NEXT_SERVER_API_BASE_URL: http:\u002F\u002F127.0.0.1:8000\n    volumes:\n      - .\u002Fdata:\u002Fapp\u002Fdata\n    restart: unless-stopped\n```\n\n## 源码部署\n\n安装 `make`：\n\n```bash\n# Debian \u002F Ubuntu\nsudo apt update && sudo apt install -y make\n\n# macOS\nxcode-select --install\n\n# Windows\nwinget install -e --id GnuWin32.Make\n```\n\nWindows 安装后，把这个目录加入系统 `Path`，然后重启 PowerShell \u002F CMD：\n\n```text\nC:\\Program Files (x86)\\GnuWin32\\bin\n```\n\n验证：\n\n```powershell\nmake -v\n```\n\n准备：\n\n```bash\nmake install-prod\n```\n\n构建：\n\n```bash\nmake build\n```\n\n启动：\n\n```bash\nmake start\n```\n\n## 开发者模式\n\n```bash\nmake bootstrap\ncp .env.example .env\nmkdir -p data\ncp config.yaml.example data\u002Fconfig.yaml\nmake db-migrate\nmake dev\n```\n\n## 检查\n\n```bash\nmake lint\nmake typecheck\nmake test\nmake web-build\n```\n\n## 环境变量\n\n| 变量 | 用途 |\n| --- | --- |\n| `VISKIT_WEB_PORT` | Web 端口，默认 `3068` |\n| `VISKIT_DATA_DIR` | 宿主机数据目录，默认 `.\u002Fdata` |\n| `VISKIT_DATABASE_URL` | Docker 里的数据库地址，默认 SQLite |\n| `VISKIT_GENERATION_JOB_CONCURRENCY` | 单个生成任务并发数，默认 `4` |\n| `NEXT_PUBLIC_API_BASE_URL` | 前端外部 API 地址；同源部署一般留空 |\n| `OPENAI_API_KEY` | OpenAI 或 OpenAI 兼容接口密钥 |\n| `ANTHROPIC_API_KEY` | Anthropic 兼容接口密钥 |\n| `APIMART_API_KEY` | API Mart 密钥 |\n| `CHATGPT2API_KEY` | chatgpt2api 密钥 |\n| `CPA_API_KEY` | CPA \u002F CLIProxyAPI 密钥 |\n| `SUB2API_API_KEY` | Sub2API 密钥 |\n| `COMPLIANCE_SCREEN_API_KEY` | 合规检查服务密钥，可选 |\n\n## 服务商配置\n\n`data\u002Fconfig.yaml`：\n\n```yaml\nproviders:\n  vision:\n    protocol: openai_compatible\n    base_url: https:\u002F\u002Fapi.example.com\n    api_key_env: OPENAI_API_KEY\n    model: gpt-4o\n\n  llm:\n    protocol: openai_compatible\n    base_url: https:\u002F\u002Fapi.example.com\n    api_key_env: OPENAI_API_KEY\n    model: gpt-4.1\n\n  image:\n    protocol: openai_compatible\n    base_url: https:\u002F\u002Fapi.example.com\n    api_key_env: OPENAI_API_KEY\n    model: gpt-image-2\n\n  compliance_screen:\n    protocol: openai_compatible\n    base_url: https:\u002F\u002Fapi.example.com\n    api_key_env: OPENAI_API_KEY\n    model: gpt-4.1-mini\n```\n\n## 图片接口\n\nOpenAI 兼容：\n\n```yaml\nproviders:\n  image:\n    protocol: openai_compatible\n    base_url: http:\u002F\u002Fyour-gateway:3000\n    api_key_env: OPENAI_API_KEY\n    model: gpt-image-2\n```\n\n接口：\n\n- `POST \u002Fv1\u002Fimages\u002Fgenerations`\n- `POST \u002Fv1\u002Fimages\u002Fedits`\n\n通用反代 \u002F 网关：\n\n- CPA \u002F CLIProxyAPI: https:\u002F\u002Fgithub.com\u002Frouter-for-me\u002FCLIProxyAPI\n- Sub2API: https:\u002F\u002Fgithub.com\u002FWei-Shaw\u002Fsub2api\n- New API: https:\u002F\u002Fgithub.com\u002FQuantumNous\u002Fnew-api\n- chatgpt2api: https:\u002F\u002Fgithub.com\u002Fbasketikun\u002Fchatgpt2api\n\n`image_generation`：\n\n```yaml\nproviders:\n  image:\n    protocol: image_generation\n    adapter: chatgpt2api\n    base_url: http:\u002F\u002Fhost.docker.internal:8317\n    api_key_env: CHATGPT2API_KEY\n    model: gpt-image-2\n```\n\n适配器：\n\n```text\ngemini\ngemini_openai\nopenai\nchatgpt2api\nvolcengine_ark\nz_image_gitee\njimeng2api\ngrok\nsiliconflow_adapter\n```\n\n## PostgreSQL\n\n```env\nUV_EXTRAS=--extra postgres\nVISKIT_DATABASE_URL=postgresql+psycopg:\u002F\u002Fviskit:viskit@postgres:5432\u002Fviskit\nPOSTGRES_DB=viskit\nPOSTGRES_USER=viskit\nPOSTGRES_PASSWORD=viskit\n```\n\n## 生成结果接口\n\n示例：\n\n```json\n{\n  \"job_id\": \"gen_xxx\",\n  \"status\": \"succeeded\",\n  \"outputs\": [\n    {\n      \"output_id\": \"out_xxx\",\n      \"status\": \"succeeded\",\n      \"image_url\": \"\u002Fapi\u002Fgeneration\u002Fjobs\u002Fgen_xxx\u002Foutputs\u002Fout_xxx\u002Fimage\",\n      \"download_url\": \"\u002Fapi\u002Fgeneration\u002Fjobs\u002Fgen_xxx\u002Foutputs\u002Fout_xxx\u002Fimage\",\n      \"image_id\": \"asset:asset_xxx\"\n    }\n  ]\n}\n```\n\n图片响应：\n\n```text\nContent-Type: image\u002Fpng\nCache-Control: no-store\n```\n\n图片 ID：\n\n```text\nasset:{asset_id}\nkit-slot:{kit_id}:{slot_id}\n```\n\n## 目录\n\n```text\napps\u002Fapi\u002F              FastAPI 后端\napps\u002Fweb\u002F              Next.js 前端\napps\u002Fweb\u002Fpublic\u002Fminipaint\u002F\n                       内置 miniPaint 静态资源\nservices\u002Fcopywriter\u002F   文案、合规、OCR\nservices\u002Feditor\u002F       图片编辑\nservices\u002Fimagegen\u002F     生图编排和模板\nservices\u002Fproviders\u002F    服务商适配\npackages\u002Fschemas\u002F      共享 schema\ninfra\u002F                 PostgreSQL 与迁移\n```\n\n## 致谢\n\n- chatgpt2api: https:\u002F\u002Fgithub.com\u002Fbasketikun\u002Fchatgpt2api\n- miniPaint: https:\u002F\u002Fgithub.com\u002Fviliusle\u002FminiPaint\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","Viskit Studio 是一个自托管的商品视觉工作台，支持商品识别、AI 图片生成、二次编辑以及电商营销素材套包的创建。其核心功能包括商品图上传与信息识别、结构化brief编辑、输出计划定制、图片预览及二次编辑等，并能够生成白底图、模特图等多种类型的营销素材。技术上，该项目采用TypeScript开发，基于Docker容器化部署，后端使用FastAPI和Python，前端则利用Next.js与React构建用户界面，数据库支持SQLite或PostgreSQL。Viskit Studio适用于需要高质量商品展示图片且希望减少人工干预成本的电子商务场景中，尤其适合追求高效创意自动化的企业和个人。","2026-06-11 04:05:37","CREATED_QUERY"]