diff --git a/RULES.md b/RULES.md index 9f0b12d..019fb2f 100644 --- a/RULES.md +++ b/RULES.md @@ -25,7 +25,7 @@ - 生产启动:`docker compose -f docker-compose.prod.yml --env-file deploy/.env.production up -d --build` - 生产架构:`web` 容器用 Nginx 承载 Next 静态导出;`/login/`、`/_next/`、`/assets/`、`/skg-logo-black.svg`、`/oasis-source/` 等登录页必需静态资源公开访问;未登录访问工作台跳转 `/login/`,`/api/` 通过 Nginx `auth_request` 校验 FastAPI 会话 Cookie 后反代到 `skg-marketing-api:4291`;Traefik 通过 `coolify` 外部网络接入 80/443 - 持久化目录:服务器 `./data/jobs` 挂载到后端 `/data/jobs`;全局资源中心持久化在 `./data/asset_library`、`./data/prompt_library` 和 `./data/_trash` -- TikTok 下载登录态:云端使用服务器私有 cookies 文件 `./secrets/tiktok_cookies.txt`,只读挂载到 API 容器 `/run/secrets/tiktok_cookies.txt`,生产环境变量 `YTDLP_COOKIES_FILE=/run/secrets/tiktok_cookies.txt`;不要使用云端浏览器读取方案,也不要把 cookies 入库 +- TikTok 下载登录态:云端使用服务器私有 cookies 文件 `./secrets/tiktok_cookies.txt`,挂载到 API 容器 `/run/secrets/tiktok_cookies.txt`,生产环境变量 `YTDLP_COOKIES_FILE=/run/secrets/tiktok_cookies.txt`;`yt-dlp` 会在任务结束时回写 cookies,因此不要把该挂载设为只读;不要使用云端浏览器读取方案,也不要把 cookies 入库 - 登录凭证:用户名写下方快捷登录;密码明文备份只放服务器 `/root/skg-marketing-studio-login.txt`,生产环境变量 `WEB_AUTH_PASSWORD` / `WEB_AUTH_SESSION_SECRET` 只放服务器 `deploy/.env.production` ## 快捷登录 @@ -66,7 +66,7 @@ - `IMAGE_BASE_URL` / `IMAGE_API_KEY` / `IMAGE_MODEL`:OpenAI 兼容生图网关;当前所有生图入口一律强制使用 `gpt-image-2`,不做其他图片模型 fallback - `GPT_IMAGE_MODEL` / `SUBJECT_ASSET_IMAGE_MODEL` / `SUBJECT_ASSET_IMAGE_MODELS`:保留兼容旧环境变量名,但服务端会强制主体 6 视图和所有其他生图入口都只使用 `gpt-image-2` - `AI_HTTP_PROXY` / `IMAGE_HTTP_PROXY`:可选的 AI 网关出站代理;本地 launchd 后台进程不一定继承 shell 的 `http_proxy/https_proxy`,如生图报 DNS / ConnectError,可在本地 `api/.env` 配置后重启后端。`/health` 只回传是否配置代理,不回传代理地址。 -- `YTDLP_COOKIES_FILE` / `YTDLP_COOKIES_FROM_BROWSER`:可选 TikTok 下载登录态;生产云端固定使用 cookies 文件 `/run/secrets/tiktok_cookies.txt`(宿主机 `./secrets/tiktok_cookies.txt` 只读挂载),本地开发可临时用浏览器 cookies。cookies 文件属于敏感登录态,只能放本机或服务器私有路径,不允许入库。 +- `YTDLP_COOKIES_FILE` / `YTDLP_COOKIES_FROM_BROWSER`:可选 TikTok 下载登录态;生产云端固定使用 cookies 文件 `/run/secrets/tiktok_cookies.txt`(宿主机 `./secrets/tiktok_cookies.txt` 挂载进容器),本地开发可临时用浏览器 cookies。cookies 文件属于敏感登录态,只能放本机或服务器私有路径,不允许入库。 - `VOICE_PROVIDER`:配音通道,服务端固定使用 `azure_openai`;旧环境若写 `minimax` 会被忽略 - `AZURE_OPENAI_BASE_URL` / `AZURE_OPENAI_API_KEY`:微软 Azure OpenAI 协议配音网关;本地未单独配置 Key 时回退复用 `LLM_API_KEY` - `AZURE_TTS_MODEL` / `AZURE_TTS_VOICE_ID` / `AZURE_TTS_VOICE_POOL` / `AZURE_TTS_PATH` / `AZURE_TTS_PATHS`:Azure OpenAI TTS 模型、默认音色、音色池和 OpenAI 协议语音路径;后端会按 `AZURE_TTS_PATHS` 依次尝试,便于区分路径不对和整条语音服务不可用 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index b187768..be34247 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -18,7 +18,7 @@ services: - ./data/asset_library:/data/asset_library - ./data/prompt_library:/data/prompt_library - ./data/_trash:/data/_trash - - ./secrets/tiktok_cookies.txt:/run/secrets/tiktok_cookies.txt:ro + - ./secrets/tiktok_cookies.txt:/run/secrets/tiktok_cookies.txt restart: unless-stopped networks: - skg-marketing-internal diff --git a/docs/source-analysis.html b/docs/source-analysis.html index 9f3523f..dc8d546 100644 --- a/docs/source-analysis.html +++ b/docs/source-analysis.html @@ -572,7 +572,7 @@
当前产品方向已收窄为“信息流广告快速复刻”:主界面左侧是素材输入列,右侧是信息流复刻工作表。顶部固定显示 01-09 流程顺序和每一步的判定依据,编号不再是装饰文本,而是按素材任务、源视频、音频文案、抽帧、主体资产、产品资产、分镜文案、首尾帧和视频候选这些状态解锁。用户粘贴 TK 链接或上传视频后点击“开始分析”,系统自动下载源视频;下载完成后并行启动音频文案路和视频视觉路。音频文案路提取原音频文案/字幕,分析讲话人、语速节奏、背景音乐/环境声/音效,并为后续新口播和分镜文案提供时间轴;视频视觉路同步抽取参考帧,参考帧只用于人工选择主体并生成相似主体白底视图。产品图上传后独立形成产品资产包:自动识别视角、左右/上下/内外侧、结构点、比例和风险,并补缺角度。最终分镜规划按逐句时间轴把文案、相似主体资产和产品资产汇合;当前暂停直接调视频模型,先逐条生成并审核首帧/尾帧,确认后再决定哪些分镜进入视频候选。
有当前素材任务即通过;输入框只负责创建或切换任务。
job.video_url 存在即通过;created/downloading 视为运行中。TikTok 受限视频可通过 YTDLP_COOKIES_FILE 或 YTDLP_COOKIES_FROM_BROWSER 提供登录态;生产云端使用服务器私有 cookies 文件只读挂载,失败后可对同一素材重新下载。
job.video_url 存在即通过;created/downloading 视为运行中。TikTok 受限视频可通过 YTDLP_COOKIES_FILE 或 YTDLP_COOKIES_FROM_BROWSER 提供登录态;生产云端使用服务器私有 cookies 文件挂载,失败后可对同一素材重新下载。
audio_script.source_text 或 transcript 逐句时间轴有内容即通过。
job.frames.length > 0 即通过;参考帧只做主体重构证据。
关键帧里存在 subject_assets 即通过;生成类似创新主体,不复刻原人。
POST /auth/login、GET /auth/check、POST /auth/logoutweb/app/login/page.tsx、Nginx auth_request/api/auth/login,后端设置 HttpOnly 会话 Cookie;生产 Nginx 对工作台和 /api/ 调 /auth/check 做统一校验,未登录页面跳 /login/,API 返回 JSON 401。GET /healthgetRuntimeHealth、ModelTracemodels:ASR、本机 ASR、ASR fallback、翻译、GPT 改写、GPT 画面理解、产品视角识别 product_view、GPT 图像模型、主体 6 视图 GPT 图像模型、Azure OpenAI TTS、视频别名和 Seedance 服务商。当前 REWRITE_MODEL、AUDIO_REWRITE_MODEL 和 VISION_MODEL 默认使用 gpt-4o;如果旧环境变量仍写 gemini-*,后端会归一化回 GPT_TEXT_MODEL / REWRITE_MODEL。语音只走 Azure OpenAI TTS,models.voice_tts_paths 会回传当前尝试的语音路径,方便区分路径错误和语音服务不可用。前端所有当前主路径里会调用模型的按钮旁显示模型名,点击弹出小窗口查看模型链路和输入输出逻辑;不返回 API Key 或敏感凭证。GET /jobslistJobs?job= 时拉它回填全部历史;带 limit 可截断。POST /jobscreateJobYTDLP_COOKIES_FILE,其次使用 YTDLP_COOKIES_FROM_BROWSER;生产云端固定走 /run/secrets/tiktok_cookies.txt,由宿主机 ./secrets/tiktok_cookies.txt 只读挂载。TikTok 要求登录态时会提示上传 MP4 或配置后端 cookies。POST /jobscreateJobYTDLP_COOKIES_FILE,其次使用 YTDLP_COOKIES_FROM_BROWSER;生产云端固定走 /run/secrets/tiktok_cookies.txt,由宿主机 ./secrets/tiktok_cookies.txt 挂载进容器。TikTok 要求登录态时会提示上传 MP4 或配置后端 cookies。POST /jobs/{id}/download/retryretryJobDownloadvideo_url 的素材;清空错误、重新进入下载状态,并在后台再次执行 pipeline_download。上传视频不能重下载,需要重新上传文件。POST /jobs/uploaduploadJobDELETE /jobs/{id}deleteJobjobs/<id> 目录移除整个 job,包括源视频、关键帧、元素提取图和生成视频。问题:生产环境没有桌面浏览器,不能依赖 YTDLP_COOKIES_FROM_BROWSER 读取本机 Chrome 登录态;受限 TikTok 链接仍会在云端返回“Log in for access”。
改动:docker-compose.prod.yml 将宿主机 ./secrets/tiktok_cookies.txt 只读挂载到 API 容器 /run/secrets/tiktok_cookies.txt;deploy/.env.production.example 默认设置 YTDLP_COOKIES_FILE=/run/secrets/tiktok_cookies.txt;.gitignore 忽略 secrets/,避免 cookies 入库。
影响:云端只需要维护一个服务器私有 cookies 文件,配置后可对失败素材执行“重新下载”;cookies 过期时更换该文件并重启 API 容器即可。
+改动:docker-compose.prod.yml 将宿主机 ./secrets/tiktok_cookies.txt 挂载到 API 容器 /run/secrets/tiktok_cookies.txt;deploy/.env.production.example 默认设置 YTDLP_COOKIES_FILE=/run/secrets/tiktok_cookies.txt;.gitignore 忽略 secrets/,避免 cookies 入库。
影响:云端只需要维护一个服务器私有 cookies 文件,配置后可对失败素材执行“重新下载”;yt-dlp 会在任务结束时回写 cookies,因此该挂载不能设为只读。cookies 过期时更换该文件并重启 API 容器即可。