Keine Beschreibung

Yi Jiarui b415b2594a feat: 完善运营辅助服务与测试覆盖 vor 2 Monaten
.codegraph 34b358323e commit "功能完善" vor 3 Monaten
.githooks f18b7b6779 chore: 增加协作规范与提交辅助脚本 vor 2 Monaten
cloud-functions 340168a54b fix: 调整云函数管理器与接口调用 vor 2 Monaten
e2e 824732f0c5 feat: 完善 IP 操盘 V1 核心闭环 vor 2 Monaten
public 2bd6aab6bb Merge branch 'master' of https://git.fmode.cn/18307996893/video-workflow vor 4 Monaten
scripts f649c524fe feat: 增加云端存储与抖音数据采集能力 vor 2 Monaten
server e9a11389ce commit "IP分析" vor 3 Monaten
src b415b2594a feat: 完善运营辅助服务与测试覆盖 vor 2 Monaten
.editorconfig 9e4914a8bf new file: .editorconfig vor 4 Monaten
.env.example e9a11389ce commit "IP分析" vor 3 Monaten
.gitignore f18b7b6779 chore: 增加协作规范与提交辅助脚本 vor 2 Monaten
.prettierrc 9e4914a8bf new file: .editorconfig vor 4 Monaten
AGENTS.md f18b7b6779 chore: 增加协作规范与提交辅助脚本 vor 2 Monaten
README.md f18b7b6779 chore: 增加协作规范与提交辅助脚本 vor 2 Monaten
angular.json f18b7b6779 chore: 增加协作规范与提交辅助脚本 vor 2 Monaten
package-lock.json e9a11389ce commit "IP分析" vor 3 Monaten
package.json f18b7b6779 chore: 增加协作规范与提交辅助脚本 vor 2 Monaten
playwright.config.ts e9a11389ce commit "IP分析" vor 3 Monaten
proxy.conf.json 9e4914a8bf new file: .editorconfig vor 4 Monaten
server.js e9a11389ce commit "IP分析" vor 3 Monaten
tsconfig.app.json 9e4914a8bf new file: .editorconfig vor 4 Monaten
tsconfig.json 9e4914a8bf new file: .editorconfig vor 4 Monaten
tsconfig.spec.json 9e4914a8bf new file: .editorconfig vor 4 Monaten

README.md

# video-workflow

公司内部使用的 AI 短视频创作与运营工作台,面向抖音内容生产场景,把选题分析、脚本与素材生成、视频合成、账号运营和内容资产管理集中到一套工作流中。

package.json 中的包名仍为 tik-tok,本文统一使用仓库与产品名 video-workflow

功能特性

内容生成

  • 数字人合成:形象素材、脚本与音色生成口播视频。
  • 图片生成:根据提示词、风格和比例生成图片素材。
  • 文生视频:根据提示词、比例和时长生成视频。
  • 图生视频:使用图片、提示词和时长生成动态视频。
  • 动作迁移:使用角色图片和参考动作视频生成角色动画。
  • 素材合成视频:将多张图片、主题和音色组合为讲解视频。
  • 主题生视频:从主题出发,完成脚本、配图、配音和视频合成。
  • 批量生产:基于主题生视频模板串行执行多个生产任务。

内容运营与资产

  • 抖音视频搜索、链接分析、爆款分析和逐字稿处理。
  • 博主监测、选题池、日报、分析历史和发布复盘。
  • IP 操盘工作台:账号定位、证据分析、内容方向、脚本和发布闭环。
  • 我的创作、素材库、模板库、任务管理和视频管理。
  • AI 助手、语音合成、官方音色选择和音色复刻。

账号与数据

  • 使用手机号验证码自动登录或注册。
  • 生成、合成和训练类操作可接入积分预扣、确认和失败退款流程。
  • 用户数据按 Parse 用户 objectId 隔离。
  • 草稿和部分浏览器数据使用 IndexedDB,并保留 localStorage 回退。
  • 业务主数据和文件资产可通过 fmode 云函数持久化。

技术栈

前端

  • Angular 21.2
  • TypeScript 5.9
  • RxJS 7.8
  • Standalone Components、Signals
  • FFmpeg WebAssembly:@ffmpeg/ffmpeg@ffmpeg/core
  • Vitest、Playwright

本地后端

  • Node.js
  • Express 4.21
  • multer、cors、axios、undici
  • 系统 FFmpeg / ffprobe
  • 可选 OpenAI Whisper CLI

外部服务

  • fmode Parse、云函数和 APIG
  • 即梦 / 火山引擎视频、图片与语音能力
  • 抖音数据网关 / TikHub
  • 七牛云对象存储
  • LLM / Gemini 代理
  • Quickly 一键成片

环境要求

必需:

  • Node.js:仓库暂未在 package.json 中限定最低版本。
  • npm:仓库声明的包管理器版本为 11.6.1

按功能需要:

  • FFmpeg 和 ffprobe:本地音频提取、视频下载处理及服务端视频合成需要,并且命令必须已加入 PATH
  • Whisper CLI:仅本地 Whisper 转写功能需要。
  • Microsoft Edge:当前 Playwright 配置使用 msedge 通道。
  • PowerShell、华为云 obsutilhcloud:仅执行内部部署脚本时需要。

检查本机环境:

node --version
npm --version
ffmpeg -version
ffprobe -version

如需本地 Whisper:

pip install openai-whisper
whisper --help

安装步骤

  1. 进入项目目录。

    cd video-workflow
    
  2. 安装依赖。

    npm install
    
  3. 创建本地环境变量文件。

PowerShell:

   Copy-Item .env.example .env

Bash:

   cp .env.example .env
  1. 根据需要填写 .env。不要提交真实 token、密钥或 session token。

  2. 同时启动 Angular 前端和 Express 后端。

    npm run dev
    
  3. 打开 http://localhost:4200/

可使用后端健康检查确认本地服务是否启动:

http://localhost:3000/api/health

配置说明

server.js 启动时会读取仓库根目录的 .env。已有系统环境变量优先,不会被 .env 覆盖。

完整模板见 .env.example。以下是主要配置:

基础服务

变量 默认值/用途
PORT Express 端口,模板值为 3000
PARSE_API_HOST Parse 与 fmode API 主机。
PARSE_APP_ID Parse Application ID。
PARSE_BASE_URL fmode 云函数调用地址。

即梦生成

变量 用途
JIMENG_BASE_URL 即梦生成代理地址。
JIMENG_TOKEN 图片、视频、数字人和动作迁移等生成请求的凭证。

抖音数据与转写

变量 用途
DOUYIN_API_BASE_URL 抖音数据网关地址。
DOUYIN_API_TOKEN 抖音数据网关 token。
VOC_TOKEN / VOC_SOCIAL_TOKEN 抖音数据网关的兼容 token。
TIKHUB_BASE_URL / TIKHUB_TOKEN 明确直连 TikHub 时使用。
IFLYTEK_GATEWAY_BASE_URL 逐字稿/转写网关地址。
TRANSCRIPTION_VOC_TOKEN 转写网关 token。
VOICE_TOKEN / OPENCLAW_VOC_TOKEN 语音及转写链路使用的兼容 token。

LLM

变量 用途
LLM_BASE_URL OpenAI 兼容的 LLM 代理地址。
LLM_API_KEY AI 助手、脚本生成和媒体理解使用的密钥。

七牛云

变量 用途
QINIU_AK / QINIU_SK 七牛 Access Key 和 Secret Key。
QINIU_BUCKET 存储空间名称。
QINIU_DOMAIN / QINIU_CDN_DOMAIN 文件访问域名。
QINIU_CDN_PREFIX 上传文件的路径前缀。
QINIU_UPLOAD_URL 七牛上传地址。

语音合成

变量 用途
VOLC_TTS_TOKEN 火山 TTS token。
VOLC_SPEECH_API_KEY 火山语音 API Key 鉴权。
VOLC_SPEECH_APP_KEY / VOLC_SPEECH_ACCESS_KEY 火山语音 App Key 鉴权。
VOICE_TTS_BASE_URL 云函数语音代理地址。

Quickly

变量 用途
QUICKLY_APP_KEY / QUICKLY_APP_SECRET Quickly 应用凭证。
QUICKLY_ACCOUNT_ID Quickly 账号 ID。
QUICKLY_CALLBACK_URL 任务回调地址。
QUICKLY_RELAY_URL 云函数中继地址。
QUICKLY_UPSTREAM_FN_ID 上游一键成片函数 ID。

多数变量只在调用对应真实服务时需要。只查看界面或开发不依赖外部服务的功能时,可以先保留为空。

云函数 ID 维护在:

src/app/services/cloud-functions.ts

本地运行

同时启动前后端

npm run dev

仅启动前端

npm start

该命令会使用 proxy.conf.json。主要代理关系:

前端路径 目标
/api https://api.tikhub.io
/jimeng https://server.fmode.cn/api/volcengine/jimeng
/parse https://server.fmode.cn/parse
/functions https://server.fmode.cn/api/functions
/backend http://localhost:3000

允许局域网访问前端

npm run start:dev

该命令监听 0.0.0.0。请确认所在网络可信,并避免在前端或 URL 中暴露凭证。

仅启动本地后端

npm run server

修改 PORT 后,需同步调整 proxy.conf.json/backend 的目标地址。

开发模式持续构建

npm run watch

测试

启用提交前文档提醒

仓库提供 .githooks/pre-commit:当核心服务、Express 路由或云函数发生改动但没有同步协作文档时,会打印警告,但不会阻断提交。每个新工作副本首次使用时执行:

git config core.hooksPath .githooks

Angular 单元测试

npm test

执行一次后退出:

npm test -- --watch=false

IP 操盘 Playwright E2E

npm run e2e:ip-operator

脚本会在 127.0.0.1:4300 启动 Angular 开发服务器,并使用 Playwright 的 Edge 通道运行测试。

运行真实 LLM 用例:

npm run e2e:ip-operator:real

真实用例需要对应服务可访问并已配置凭证,可能产生外部调用。

云函数与治理校验

npm run build:cloud-functions
npm run validate:cloud-functions
npm run validate:jimeng-billing
npm run validate:storage-policy
npm run smoke:cloud
npm run review:guard
  • build:cloud-functions:生成可直接部署的单文件云函数到 cloud-functions/deployable/
  • smoke:cloud:检查已配置云函数的连通性;空函数 ID 会被跳过。
  • review:guard:检查疑似凭证和部分代码体积治理规则。

需要登录态的云函数或账号隔离验收还会使用 SMOKE_SESSION_TOKENSTORAGE_GOVERNANCE_SESSION_A 等测试环境变量。它们只能临时设置在本地终端中,不能写入源码或文档。

构建与部署

生产构建

npm run build

Angular 项目名为 Tik-tok,默认构建输出位于:

dist/Tik-tok/

前端内部部署

仓库使用根目录的 deploy.ps1 发布前端:

.\deploy.ps1

脚本会:

  1. 使用 /dev/video-workflow/ 作为 base-href 构建前端。
  2. dist/video-workflow/browser 同步到华为云 OBS。
  3. 设置公开读取权限。
  4. 刷新对应 CDN 目录。

部署地址由脚本配置为:

https://app.fmode.cn/dev/video-workflow/

执行前需检查 deploy.ps1 中的 obsutilhcloud 本机路径及部署配置。该脚本被 .gitignore 忽略,属于内部本地部署配置,不应提交或对外分享其中的凭证。

云函数部署

云函数源码位于 cloud-functions/。依赖 _session.js 的函数不能直接复制源码部署,应先运行:

npm run build:cloud-functions

然后将 cloud-functions/deployable/ 下的对应单文件版本部署到 fmode 平台,并把函数 ID 更新到:

src/app/services/cloud-functions.ts

部署后执行:

npm run smoke:cloud
npm run build

项目结构简述

video-workflow/
├── src/
│   ├── main.ts                     # Angular 启动入口
│   ├── environments/               # 开发/生产环境编译配置
│   └── app/
│       ├── app.ts                  # 应用主壳与全局工作台逻辑
│       ├── components/             # 通用 UI 组件
│       ├── models/                 # 业务模型
│       ├── pages/                  # 页面与各生成 Pipeline
│       ├── pipelines/              # Pipeline 注册中心
│       ├── pipes/                  # 展示格式化管道
│       └── services/               # API、存储和业务服务
├── server.js                       # Express 启动入口
├── server/
│   ├── config/                     # 后端运行时配置
│   └── routes/                     # Express 路由模块
├── cloud-functions/                # fmode 云函数源码与部署说明
├── scripts/                        # 构建、冒烟和治理脚本
├── e2e/                            # Playwright 端到端测试
├── public/                         # 静态资源
├── data/                           # 本地运行数据,不进入版本库
├── proxy.conf.json                 # Angular 开发代理
├── angular.json                    # Angular 构建配置
├── playwright.config.ts            # E2E 配置
├── .env.example                    # 本地配置模板
└── deploy.ps1                      # 内部前端部署脚本,本地保留

生成模式由 src/app/pipelines/pipeline-registry.ts 统一登记,但新增模式还需要同步接入页面组件、Tab 类型和主模板。

常见问题

页面能打开,但调用 /backend 失败

确认 Express 已启动:

npm run server

然后访问:

http://localhost:3000/api/health

如果修改了 PORT,还需更新 proxy.conf.json

提示未检测到 FFmpeg 或 ffprobe

安装 FFmpeg,并确保下面两个命令可在当前终端执行:

ffmpeg -version
ffprobe -version

重启终端和本地后端后再试。

Whisper 转写不可用

确认 CLI 已安装:

whisper --help

也可以访问:

http://localhost:3000/api/whisper/status

生成、LLM、抖音或上传功能提示未配置

  1. 检查 .env 中对应能力的 URL 和 token。
  2. 检查 src/app/services/cloud-functions.ts 中对应函数 ID。
  3. 重新启动 npm run server,使后端重新加载 .env
  4. 对云函数执行 npm run smoke:cloud

登录后数据为空或不同账号数据不同

这是账号隔离行为。项目使用当前 Parse 用户的 objectId 区分云端业务数据和浏览器本地数据。

Playwright 找不到浏览器

当前配置使用 Microsoft Edge。先确认本机已安装 Edge;必要时安装 Playwright 浏览器依赖:

npx playwright install msedge

deploy.ps1 提示找不到工具

检查脚本顶部配置的 obsutilhcloud 路径是否与本机一致,并确认部署账号具备 OBS 同步、ACL 修改和 CDN 刷新权限。

内部使用说明

本仓库为公司私有项目。源码、业务文档、云函数 ID、服务地址、用户数据和访问凭证不得对外分发。