fix: simplify visible brand to skg logo

This commit is contained in:
2026-05-25 17:26:44 +08:00
parent 7d98de0df3
commit 2a1ceeec3e
9 changed files with 61 additions and 40 deletions

View File

@@ -45,9 +45,9 @@
"type" : "oauth_app" "type" : "oauth_app"
} }
], ],
"description" : "SKG 生图生视频:默认首页面向公司团队成员的个人隔离创作空间,主路径为文生图、图生图、文生视频、图生视频和营销图文方案生成;每个登录用户只看到自己的任务和结果。任务详情页沉淀参考图、生成图、视频候选、提示词和图文方案,可继续生成、删除和复用。生成画布用于整理多次生成结果;旧 TK 复刻\/一键出片能力保留为高级入口。", "description" : "SKG 营销内容生产平台:默认首页面向公司团队成员的个人隔离创作空间,终端可见品牌位只保留 SKG logo。主路径为文生图、图生图、文生视频、图生视频和营销图文方案生成;每个登录用户只看到自己的任务和结果。任务详情页沉淀参考图、生成图、视频候选、提示词和图文方案,可继续生成、删除和复用。画布用于整理多次生成结果;旧 TK 复刻\/一键出片能力保留为高级入口。",
"kind" : "app", "kind" : "app",
"name" : "SKG 生图生视频", "name" : "SKG 营销内容生产平台",
"ownership" : "company", "ownership" : "company",
"pin_order" : 1778664997, "pin_order" : 1778664997,
"pinned" : true, "pinned" : true,
@@ -64,7 +64,7 @@
} }
], ],
"quick_login" : { "quick_login" : {
"label" : "SKG 生图生视频", "label" : "SKG 营销内容生产平台",
"password" : "", "password" : "",
"url" : "https:\/\/marketing.skg.com\/login\/", "url" : "https:\/\/marketing.skg.com\/login\/",
"username" : "飞书免登录;备用账号见 credentials.WEB_LOGIN" "username" : "飞书免登录;备用账号见 credentials.WEB_LOGIN"

View File

@@ -1,10 +1,10 @@
# SKG 生图生视频 # SKG 营销内容生产平台
## 启动 ## 启动
- 后台启动(不弹 Terminal`./scripts/start-dev-background.sh`(通过 macOS launchd 后台托管;前端 4290 + 后端 4291日志写入 `.logs/` - 后台启动(不弹 Terminal`./scripts/start-dev-background.sh`(通过 macOS launchd 后台托管;前端 4290 + 后端 4291日志写入 `.logs/`
- 后台停止:`./scripts/stop-dev-background.sh` - 后台停止:`./scripts/stop-dev-background.sh`
- 前端 dev`cd web && npm run dev`Next.js 16端口 4290 - 前端 dev`cd web && npm run dev`Next.js 16端口 4290
- 生成画布 dev`cd web && npm run dev:canvas`Vue / Vite端口 4292生产构建会输出到 `/canvas/` - 画布 dev`cd web && npm run dev:canvas`Vue / Vite端口 4292生产构建会输出到 `/canvas/`
- 后端 dev`cd api && uvicorn main:app --host 127.0.0.1 --port 4291`FastAPI端口 4291重任务用 - 后端 dev`cd api && uvicorn main:app --host 127.0.0.1 --port 4291`FastAPI端口 4291重任务用
- 注意:后端不要带 `--reload` 跑长下载 / 抽帧 / 音频任务reload 会等待后台任务结束,导致 4291 端口占用但新请求卡住。 - 注意:后端不要带 `--reload` 跑长下载 / 抽帧 / 音频任务reload 会等待后台任务结束,导致 4291 端口占用但新请求卡住。
@@ -12,7 +12,7 @@
- 详见 `CLAUDE.md` 立项决策段 + `.memory/plan.md` 七步管线拆解 - 详见 `CLAUDE.md` 立项决策段 + `.memory/plan.md` 七步管线拆解
- 风格:`04-Dark-Gallery-Ambient`(路径:`~/Projects/research/20260305-网页风格库/04-Dark-Gallery-Ambient.md` - 风格:`04-Dark-Gallery-Ambient`(路径:`~/Projects/research/20260305-网页风格库/04-Dark-Gallery-Ambient.md`
- 第一冲刺:步骤 1-4下载 / 拆轨 / 关键帧 / ASR+翻译) - 第一冲刺:步骤 1-4下载 / 拆轨 / 关键帧 / ASR+翻译)
- 当前产品方向2026-05-25 单对话框 + 生成画布版):默认首页彻底从“信息流广告复刻管线”切换为多人通用的 SKG 生图生视频入口,服务公司内部成员同时使用。首页默认只保留一个中央对话框,不再显示侧栏、灵感区、任务列表或大结果面板;用户先选择四种生成方式之一:文生视频、文生图、首帧生视频、首尾帧生视频,然后手写提示词并点击生成。首帧 / 首尾帧模式只露必要图片上传位,图片模式显示尺寸选择,视频模式显示画幅和真实可用时长选择。后端 `/health` 向前端返回可选图片 / 视频模型、图片尺寸、视频画幅和视频时长首页允许用户选择图片模型自动、GPT Image 2、Gemini 图片兜底和视频模型Seedance、Kling、Veo 3 等别名;实际可用模型以环境变量映射为准)。当前 Doubao / Seedance 生产链路单条视频最长按 15 秒暴露,不在 UI 显示 30 秒;如后续要 30 秒,需要改成多段生成后合成。用户登录后仍只看到自己的任务、结果和详情页,继续沿用后端 owner 隔离;结果生成后从对话框下方进入 `/detail/?job=<id>` 沉淀参考图、生成图、视频候选和提示词。新增 `/canvas/` 作为个人生成画布入口,基于 huobao-canvas 交互逻辑改造为 SKG 内部版,界面去除原可见品牌/API 设置,生成调用本项目后端 `/api`,每个浏览器的画布项目先保存在本地 localStorage图片/视频资产仍按登录用户写入后端 job。旧 TK 复刻工作台、Agent Cut 一键出片和营销图文方案保留为高级/详情页能力,不再作为默认首页入口或默认理解框架。 - 当前产品方向2026-05-25 单对话框 + logo-only 画布版):默认首页彻底从“信息流广告复刻管线”切换为多人通用的 SKG 营销内容生产平台入口,服务公司内部成员同时使用。终端可见品牌位只放 SKG logo不再把“生图生视频”“SKG 生成画布”或长系统名放在主界面上。首页默认只保留一个中央对话框,不再显示侧栏、灵感区、任务列表或大结果面板;用户先选择四种生成方式之一:文生视频、文生图、首帧生视频、首尾帧生视频,然后手写提示词并点击生成。首帧 / 首尾帧模式只露必要图片上传位,图片模式显示尺寸选择,视频模式显示画幅和真实可用时长选择。后端 `/health` 向前端返回可选图片 / 视频模型、图片尺寸、视频画幅和视频时长首页允许用户选择图片模型自动、GPT Image 2、Gemini 图片兜底和视频模型Seedance、Kling、Veo 3 等别名;实际可用模型以环境变量映射为准)。当前 Doubao / Seedance 生产链路单条视频最长按 15 秒暴露,不在 UI 显示 30 秒;如后续要 30 秒,需要改成多段生成后合成。用户登录后仍只看到自己的任务、结果和详情页,继续沿用后端 owner 隔离;结果生成后从对话框下方进入 `/detail/?job=<id>` 沉淀参考图、生成图、视频候选和提示词。新增 `/canvas/` 作为个人画布入口,基于 huobao-canvas 交互逻辑改造为 SKG 内部版,界面去除原可见品牌/API 设置,生成调用本项目后端 `/api`,每个浏览器的画布项目先保存在本地 localStorage图片/视频资产仍按登录用户写入后端 job。旧 TK 复刻工作台、Agent Cut 一键出片和营销图文方案保留为高级/详情页能力,不再作为默认首页入口或默认理解框架。
## 部署事实 ## 部署事实
- 平台VPS `76.13.31.179`Ubuntu 24.04 / Docker Compose / Coolify Traefik - 平台VPS `76.13.31.179`Ubuntu 24.04 / Docker Compose / Coolify Traefik
@@ -63,7 +63,7 @@
- 最近部署验证2026-05-20`f1c710e` 已推送并部署到 `/opt/skg-marketing-studio`;本地 `web/npm run build` 通过,生产 Docker 重建后 `./scripts/verify-prod-docker.sh` 通过web/API 容器 Up、`/login/` 200、缺失 `_next` 资源 404、未登录 `/api/health` 401、容器内 `api:health ok`)。转换层中间栏先清空为待重构占位,不再接收拖拽或触发 subject-agent / subject-assets右侧主体元素输出逻辑保持不变。 - 最近部署验证2026-05-20`f1c710e` 已推送并部署到 `/opt/skg-marketing-studio`;本地 `web/npm run build` 通过,生产 Docker 重建后 `./scripts/verify-prod-docker.sh` 通过web/API 容器 Up、`/login/` 200、缺失 `_next` 资源 404、未登录 `/api/health` 401、容器内 `api:health ok`)。转换层中间栏先清空为待重构占位,不再接收拖拽或触发 subject-agent / subject-assets右侧主体元素输出逻辑保持不变。
- 最近部署验证2026-05-20`7e763cf` 已推送并部署到 `/opt/skg-marketing-studio`;本地 `web/npm run build` 通过,生产 Docker 重建后 `./scripts/verify-prod-docker.sh` 通过web/API 容器 Up、`/login/` 200、缺失 `_next` 资源 404、未登录 `/api/health` 401、容器内 `api:health ok`)。转换层改为参考帧分析 + 对话生成提示词 + 弹窗确认后再生成主体套图;右侧主体元素输出逻辑保持不变。部署时发现服务器 `WEB_AUTH_*` 环境变量缺失导致 `/auth/check` 503已从 `/root/skg-marketing-studio-login.txt` 和新 session secret 恢复服务器 `deploy/.env.production` 后重启验证通过;后续同步生产代码必须继续排除服务器真实 `deploy/.env.production` - 最近部署验证2026-05-20`7e763cf` 已推送并部署到 `/opt/skg-marketing-studio`;本地 `web/npm run build` 通过,生产 Docker 重建后 `./scripts/verify-prod-docker.sh` 通过web/API 容器 Up、`/login/` 200、缺失 `_next` 资源 404、未登录 `/api/health` 401、容器内 `api:health ok`)。转换层改为参考帧分析 + 对话生成提示词 + 弹窗确认后再生成主体套图;右侧主体元素输出逻辑保持不变。部署时发现服务器 `WEB_AUTH_*` 环境变量缺失导致 `/auth/check` 503已从 `/root/skg-marketing-studio-login.txt` 和新 session secret 恢复服务器 `deploy/.env.production` 后重启验证通过;后续同步生产代码必须继续排除服务器真实 `deploy/.env.production`
- 主站 / 前端:`https://marketing.skg.com` - 主站 / 前端:`https://marketing.skg.com`
- 生成画布:`https://marketing.skg.com/canvas/` - 画布:`https://marketing.skg.com/canvas/`
- API / 后端:`https://marketing.skg.com/api` - API / 后端:`https://marketing.skg.com/api`
- 代码仓库 / Gitea`https://git.kang-kang.com/kangwan/20260512-skg-tk` - 代码仓库 / Gitea`https://git.kang-kang.com/kangwan/20260512-skg-tk`
- 文档 / 解析:`docs/source-analysis.html`(项目内独立文档,不公开挂主应用路由) - 文档 / 解析:`docs/source-analysis.html`(项目内独立文档,不公开挂主应用路由)
@@ -72,7 +72,7 @@
- 生产部署唯一入口:`./scripts/deploy-prod-safe.sh`(先在服务器备份 `deploy/.env.production``data/jobs`、资源库和 `secrets`,再用受保护 rsync 同步代码,最后 Docker 重建并运行 `verify-prod-docker.sh` - 生产部署唯一入口:`./scripts/deploy-prod-safe.sh`(先在服务器备份 `deploy/.env.production``data/jobs`、资源库和 `secrets`,再用受保护 rsync 同步代码,最后 Docker 重建并运行 `verify-prod-docker.sh`
- 生产容器重建命令:`docker compose -f docker-compose.prod.yml --env-file deploy/.env.production up -d --build`;只允许脚本内部或明确只重启容器时使用,不允许再用裸 `rsync --delete` 手动同步。 - 生产容器重建命令:`docker compose -f docker-compose.prod.yml --env-file deploy/.env.production up -d --build`;只允许脚本内部或明确只重启容器时使用,不允许再用裸 `rsync --delete` 手动同步。
- 独立预览容器重建命令:服务器 `/opt/skg-marketing-studio` 下执行 `docker compose -f docker-compose.standalone.yml --env-file deploy/.env.production up -d --build`Web 暴露 `0.0.0.0:4290->80`,后端仅在 compose 内部网络暴露,`/api/` 由 Web 容器 Nginx 反代并复用应用内登录校验。 - 独立预览容器重建命令:服务器 `/opt/skg-marketing-studio` 下执行 `docker compose -f docker-compose.standalone.yml --env-file deploy/.env.production up -d --build`Web 暴露 `0.0.0.0:4290->80`,后端仅在 compose 内部网络暴露,`/api/` 由 Web 容器 Nginx 反代并复用应用内登录校验。
- 生产架构:`web` 容器用 Nginx 承载 Next 静态导出;`/login/``/_next/``/assets/``/skg-logo-black.svg``/oasis-source/` 等登录页必需静态资源公开访问;未登录访问工作台跳转 `/login/``/canvas/` 是受同一登录保护的 Vue / Vite 生成画布静态应用Nginx fallback 到 `/canvas/index.html``/api/` 通过 Nginx `auth_request` 校验 FastAPI 会话 Cookie 后反代到 `skg-marketing-api:4291`Traefik 通过 `coolify` 外部网络接入 80/443 - 生产架构:`web` 容器用 Nginx 承载 Next 静态导出;`/login/``/_next/``/assets/``/skg-logo-black.svg``/oasis-source/` 等登录页必需静态资源公开访问;未登录访问工作台跳转 `/login/``/canvas/` 是受同一登录保护的 Vue / Vite 画布静态应用Nginx fallback 到 `/canvas/index.html``/api/` 通过 Nginx `auth_request` 校验 FastAPI 会话 Cookie 后反代到 `skg-marketing-api:4291`Traefik 通过 `coolify` 外部网络接入 80/443
- Web 验收必须以生产 Docker 形态为准:前端是 `next export` 静态产物 + Nginx不是 `next dev` / `next start`。任何 Web 改动部署后必须运行 `./scripts/verify-prod-docker.sh`,确认 `/login/``/_next/``/api/health`、本地 API 地址泄漏和 API 镜像 `.env` 污染检查通过;不能只用本地 `npm run build` 作为上线依据。 - Web 验收必须以生产 Docker 形态为准:前端是 `next export` 静态产物 + Nginx不是 `next dev` / `next start`。任何 Web 改动部署后必须运行 `./scripts/verify-prod-docker.sh`,确认 `/login/``/_next/``/api/health`、本地 API 地址泄漏和 API 镜像 `.env` 污染检查通过;不能只用本地 `npm run build` 作为上线依据。
- 当前音频解析:`https://ai.skg.com/azure/v1``gpt-4o-transcribe` 当前返回 `DeploymentNotFound`,且官方 Azure OpenAI transcription 路径探测也未返回可用部署;生产临时复制本地成功策略,直接使用容器内多语言 `faster-whisper` 真实转写,默认语种为 `auto`,支持中文、英文和其他多语言原文识别,关闭 Gemini 多模态音频兜底。拿到真实 Azure ASR deployment 名后再恢复 `ASR_REMOTE_ENABLED=true`,并保持 `ASR_LANGUAGE` 为空或 `auto`,除非明确只想强制单一语种。 - 当前音频解析:`https://ai.skg.com/azure/v1``gpt-4o-transcribe` 当前返回 `DeploymentNotFound`,且官方 Azure OpenAI transcription 路径探测也未返回可用部署;生产临时复制本地成功策略,直接使用容器内多语言 `faster-whisper` 真实转写,默认语种为 `auto`,支持中文、英文和其他多语言原文识别,关闭 Gemini 多模态音频兜底。拿到真实 Azure ASR deployment 名后再恢复 `ASR_REMOTE_ENABLED=true`,并保持 `ASR_LANGUAGE` 为空或 `auto`,除非明确只想强制单一语种。
- 持久化目录:服务器 `./data/jobs` 挂载到后端 `/data/jobs`;全局资源中心持久化在 `./data/asset_library``./data/prompt_library``./data/_trash` - 持久化目录:服务器 `./data/jobs` 挂载到后端 `/data/jobs`;全局资源中心持久化在 `./data/asset_library``./data/prompt_library``./data/_trash`

File diff suppressed because one or more lines are too long

View File

@@ -12,8 +12,8 @@ const _playfairDisplay = Playfair_Display({
}) })
export const metadata: Metadata = { export const metadata: Metadata = {
title: "SKG 生图生视频", title: "SKG",
description: "SKG AI 图片视频生成入口", description: "SKG AI 图片视频和图文内容生产入口",
} }
export default function RootLayout({ export default function RootLayout({

View File

@@ -142,7 +142,6 @@ export default function LoginPage() {
<section className="login-auth-panel login-source-auth-panel login-source-combo-panel rounded-[8px]"> <section className="login-auth-panel login-source-auth-panel login-source-combo-panel rounded-[8px]">
<div className="login-top-brand" aria-hidden="true"> <div className="login-top-brand" aria-hidden="true">
<img className="login-top-brand__logo" src="/skg-logo-black.svg" alt="" /> <img className="login-top-brand__logo" src="/skg-logo-black.svg" alt="" />
<span className="login-top-brand__system"></span>
</div> </div>
<div className="login-source-character-strip" aria-hidden="true"> <div className="login-source-character-strip" aria-hidden="true">
<AnimatedLoginCharacters mood={mood} eyeOffset={eyeOffset} /> <AnimatedLoginCharacters mood={mood} eyeOffset={eyeOffset} />

View File

@@ -358,11 +358,8 @@ export default function Home() {
<Toaster richColors position="top-center" /> <Toaster richColors position="top-center" />
<div className="flex min-h-screen flex-col"> <div className="flex min-h-screen flex-col">
<header className="flex h-14 shrink-0 items-center justify-between px-4 text-xs text-white/42 sm:px-6"> <header className="flex h-14 shrink-0 items-center justify-between px-4 text-xs text-white/42 sm:px-6">
<div className="inline-flex items-center gap-2"> <div className="inline-flex h-8 items-center rounded-full bg-white px-3 shadow-[0_10px_30px_rgba(0,0,0,0.24)]">
<span className="flex h-6 w-6 items-center justify-center rounded-lg bg-cyan-400/12 text-cyan-200"> <img src="/skg-logo-black.svg" alt="SKG" className="h-4 w-auto" />
<Sparkles className="h-3.5 w-3.5" />
</span>
SKG
</div> </div>
{job ? ( {job ? (
<a href={`/detail/?job=${job.id}`} className="inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-white/52 transition hover:bg-white/8 hover:text-white"> <a href={`/detail/?job=${job.id}`} className="inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-white/52 transition hover:bg-white/8 hover:text-white">
@@ -517,7 +514,7 @@ export default function Home() {
className="inline-flex h-10 items-center justify-center gap-2 rounded-full border border-white/10 bg-white/6 px-4 text-sm font-semibold text-white/72 transition hover:border-cyan-200/24 hover:text-cyan-100" className="inline-flex h-10 items-center justify-center gap-2 rounded-full border border-white/10 bg-white/6 px-4 text-sm font-semibold text-white/72 transition hover:border-cyan-200/24 hover:text-cyan-100"
> >
<ExternalLink className="h-4 w-4" /> <ExternalLink className="h-4 w-4" />
</a> </a>
<button <button
type="button" type="button"

View File

@@ -1,6 +1,6 @@
# SKG 生成画布 # SKG 画布
这是 SKG 生图生视频的内部画布模块,部署在主站 `/canvas/` 路径下。 这是 SKG 营销内容生产平台的内部画布模块,部署在主站 `/canvas/` 路径下。
## 内部使用方式 ## 内部使用方式

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/skg-logo-black.svg" /> <link rel="icon" type="image/svg+xml" href="/skg-logo-black.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SKG 生成画布</title> <title>SKG</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@@ -4,9 +4,8 @@
<!-- Header | 顶部导航 --> <!-- Header | 顶部导航 -->
<AppHeader> <AppHeader>
<template #left> <template #left>
<div class="flex items-center gap-3"> <div class="flex h-8 items-center rounded-full bg-white px-3 shadow-sm">
<img src="/skg-logo-black.svg" alt="SKG" class="h-6 w-auto dark:invert" /> <img src="/skg-logo-black.svg" alt="SKG" class="h-6 w-auto dark:invert" />
<span class="text-sm font-semibold text-[var(--text-secondary)]">生图生视频</span>
</div> </div>
</template> </template>
</AppHeader> </AppHeader>
@@ -15,9 +14,9 @@
<main class="max-w-5xl mx-auto px-4 py-8 md:py-16"> <main class="max-w-5xl mx-auto px-4 py-8 md:py-16">
<!-- Welcome section | 欢迎区域 --> <!-- Welcome section | 欢迎区域 -->
<section class="text-center mb-12"> <section class="text-center mb-12">
<div class="flex items-center justify-center gap-4 mb-8"> <div class="flex items-center justify-center mb-8">
<img src="/skg-logo-black.svg" alt="SKG" class="h-9 w-auto dark:invert" /> <img src="/skg-logo-black.svg" alt="SKG" class="h-12 w-auto dark:invert" />
<h1 class="text-2xl md:text-4xl font-bold text-[var(--text-primary)]">SKG 生成画布</h1> <h1 class="sr-only">SKG</h1>
</div> </div>
<!-- Input area | 输入区域 --> <!-- Input area | 输入区域 -->