对齐 vivid 6039423/5802749/a1f808f/cfb6d49/aba8474/b01636f: - 新增 POST /channels/sync-models:已保存渠道手动全量同步,上游不可达/ 空清单直接报错(保存路径仍降级为告警);渠道行按钮不再弹勾选框, 表单内对已保存渠道同样直同步,新渠道保持预览+勾选即绑定 - 渠道并发 0 = 不限制(原 0=默认5),上限放开到 int32,槽位 Lua 本就 max=0 放行 - 别名与上游模型同名提交即报错「留空即同名」,前后端双校验 - 渠道列表去掉上游地址与模型两列(同 vivid),状态徽章悬浮显示失败原因 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
image2api backend
Go backend for image2api — a vivid-protocol gateway that routes generation
jobs across same-protocol upstream channels. Stack: Gin · GORM (PostgreSQL) ·
go-redis.
Architecture sketch
internal/upstream— vivid-protocol client (NDJSON generate + jobId resume,/v1/uploads,/v1/models,/v1/balance, error classification)internal/service/channel.go— channel CRUD, upstream model sync (save = full sync), AES-GCM key storageinternal/service/v1.go— channel-weighted dispatch, billing, job lifecycle, stale-job resumeinternal/http/handler/v1.go— public vivid endpoints (/v1/generate/v1/uploads/v1/models/v1/balance)
Environment
See .env.example. Required: POSTGRES_DSN, REDIS_ADDR, RUSTFS_*.
Important: CHANNEL_SECRET encrypts stored channel API keys (AES-GCM) — set a
random value and keep it stable; rotating it makes saved keys undecryptable.
cp .env.example .env # fill in values
go build -o bin/api ./cmd/api && ./bin/api