Spaces:
Sleeping
Sleeping
| title: FAL AI 视频生成器(Docker) | |
| emoji: 🎬 | |
| colorFrom: purple | |
| colorTo: indigo | |
| sdk: docker | |
| pinned: false | |
| # FAL AI 视频生成器(Hugging Face Spaces 版) | |
| 本目录为 Hugging Face Spaces 部署包,包含运行所需的前端与后端文件,开箱即用。后端与前端逻辑与根目录保持一致,仅进行目录组织与便于部署的说明。 | |
| - 后端文件:[server.js](huggingface-deploy/server.js) | |
| - 前端文件夹:[public/index.html](huggingface-deploy/public/index.html), [public/script.js](huggingface-deploy/public/script.js), [public/style.css](huggingface-deploy/public/style.css) | |
| - 包配置:[package.json](huggingface-deploy/package.json) | |
| ## 部署到 Hugging Face Spaces(Node.js) | |
| 1. 在 Hugging Face 创建 Space,选择 Runtime:Node.js。 | |
| 2. 将本目录内容上传至 Space 根目录(保持文件结构一致)。 | |
| 3. 在 Space Settings → Secrets 添加环境变量: | |
| - 名称:`FAL_KEY` | |
| - 值:您的 FAL AI API Key(从 https://fal.ai/dashboard 获取) | |
| 4. 启动命令默认使用 [package.json](huggingface-deploy/package.json) 的 `start` 脚本:`node server.js`。 | |
| 5. 端口:后端监听 `process.env.PORT || 7860` 且绑定到 `0.0.0.0`,与 Spaces 兼容。 | |
| 提示: | |
| - 若不使用环境变量,也可以在前端点击“API 密钥设置”中的“保存设置”按钮,将密钥写入服务目录下 `stored_api_key.json`(类 Space 环境可能不保证持久化,建议优先使用 Secret)。 | |
| - 本包包含完整的前端资源与功能,无需改动即可运行。 | |
| ## 本地运行 | |
| 在本地进行快速验证: | |
| - 安装依赖(Node.js 18+) | |
| - 进入部署目录后执行: | |
| - Windows:`cd huggingface-deploy && npm install && npm start` | |
| - macOS/Linux:`cd huggingface-deploy && npm install && npm start` | |
| - 启动成功后访问 `http://localhost:7860`。 | |
| 注意: | |
| - 若在本地未配置 `FAL_KEY` 环境变量,请在页面中通过“API 密钥设置”临时设置或保存密钥。 | |
| ## 前端使用说明(要点) | |
| - 打开页面后,点击右上角“API 密钥设置”: | |
| - 可临时设置或保存密钥到服务端(Space 推荐使用 Secret)。 | |
| - 提供“测试连接”,使用免配额健康检查,验证密钥是否有效。 | |
| - 三个功能页: | |
| - 图片转视频 | |
| - 文本转视频 | |
| - 视频库(生成的视频本地保存后自动列出) | |
| - 生成栏(队列): | |
| - 页面顶部标签下方新增“生成队列”,每个任务独立显示进度与状态,不再使用全屏遮罩。 | |
| - 支持同时生成多个视频;生成过程中不锁定按钮,表单可继续调整图片与提示词再次生成。 | |
| - 移动端优化: | |
| - 小屏布局优化、队列卡片化进度显示、按钮与控件间距适配。 | |
| - 配色优化: | |
| - 已移除绿色成功色系,统一采用蓝紫系主色;通知“成功”为蓝色,交互主色为蓝色/紫色。 | |
| ## 服务端端点(概览) | |
| - 保存密钥:POST `/api/save-key`(写入 `stored_api_key.json`) | |
| - 检查密钥来源:GET `/api/check-key` | |
| - 测试密钥:POST `/api/test-key`(免配额健康检查) | |
| - 图片转视频:POST `/api/image-to-video`(表单支持文件或图片URL;模型切换) | |
| - 文本转视频:POST `/api/text-to-video`(JSON;模型切换) | |
| - 获取本地视频列表:GET `/api/videos` | |
| - 静态视频访问:`/video/*` | |
| 说明: | |
| - 服务端会在生成完成后尝试下载远端视频至本地 `video/` 目录,并在“视频库”中展示。 | |
| - 若远端下载失败,仍会返回远端视频 URL,不影响主流程。 | |
| ## 目录结构(部署包) | |
| - [server.js](huggingface-deploy/server.js):Node.js/Express 服务(与根目录版本一致) | |
| - public/ | |
| - [index.html](huggingface-deploy/public/index.html):页面结构(含生成队列) | |
| - [script.js](huggingface-deploy/public/script.js):前端交互(并发生成、非全屏进度、视频库刷新) | |
| - [style.css](huggingface-deploy/public/style.css):样式(移动端优化、去绿色配色) | |
| - [package.json](huggingface-deploy/package.json):依赖与启动脚本 | |
| - README.md(本说明) | |
| ## 注意事项 | |
| - Spaces 的文件写入可能不持久,建议: | |
| - 密钥通过 Secret 注入(`FAL_KEY`)。 | |
| - 生成的视频保存在 `video/`(Spaces 持久化行为视运行类型与设置,必要时使用外部存储)。 | |
| - 若你仅通过 Secret 设置密钥,不需要点击“保存设置”;前端会识别后端已配置的环境变量状态。 | |
| - 服务默认端口 7860,可在 Space 环境由系统注入 `PORT`,服务会自动适配。 | |
| ## 更新同步 | |
| 当你在根目录修改前端或后端: | |
| - 可将根目录的 [public](public/index.html) 与 [server.js](server.js) 同步复制到本部署目录。 | |
| - 已内置的前端“生成队列”与配色优化已同步至此包,更新后同样可用。 | |
| ## 使用 Docker 本地运行 | |
| - 先决条件: | |
| - 已安装 Docker(推荐 24+) | |
| - 无需本地 Node.js 环境(镜像基于 Node 18 Alpine) | |
| - 构建镜像: | |
| - 在目录 [huggingface-deploy](huggingface-deploy) 下执行 | |
| - Windows(CMD): | |
| - `docker build -t fal-video-generator:latest .` | |
| - macOS/Linux: | |
| - `docker build -t fal-video-generator:latest .` | |
| - 运行容器(映射端口与持久化视频/上传目录): | |
| - Windows(CMD): | |
| - `docker run --rm -p 7860:7860 -e FAL_KEY=你的密钥 -v %cd%\\video:/app/video -v %cd%\\uploads:/app/uploads fal-video-generator:latest` | |
| - macOS/Linux: | |
| - `docker run --rm -p 7860:7860 -e FAL_KEY=你的密钥 -v "$(pwd)/video:/app/video" -v "$(pwd)/uploads:/app/uploads" fal-video-generator:latest` | |
| - 访问地址: | |
| - http://localhost:7860 | |
| - 说明: | |
| - 容器内服务监听 `process.env.PORT || 7860` 并绑定 `0.0.0.0`(见 [server.js](huggingface-deploy/server.js)) | |
| - 健康检查:容器每 30 秒检查一次 `/api/health`(见 [Dockerfile](huggingface-deploy/Dockerfile)) | |
| - 若希望容器重启后仍保留视频文件,务必挂载宿主机目录到 `/app/video` 和 `/app/uploads` | |
| --- | |
| ## 部署到 Hugging Face Spaces(Docker Runtime) | |
| - 创建 Space: | |
| - Runtime 选择 "Docker" | |
| - 仓库内容(Space 根目录必须包含以下文件/目录): | |
| - [Dockerfile](huggingface-deploy/Dockerfile) | |
| - [package.json](huggingface-deploy/package.json) | |
| - [server.js](huggingface-deploy/server.js) | |
| - public/ | |
| - [index.html](huggingface-deploy/public/index.html) | |
| - [script.js](huggingface-deploy/public/script.js) | |
| - [style.css](huggingface-deploy/public/style.css) | |
| - 上传方式: | |
| - 请将 [huggingface-deploy](huggingface-deploy) 目录中的“内容”上传到 Space 仓库的根目录(不要包含上层路径),确保 `Dockerfile` 位于仓库根目录 | |
| - 环境变量/Secrets: | |
| - 在 Space Settings → Secrets 添加: | |
| - `FAL_KEY`:你的 FAL AI API Key(https://fal.ai/dashboard 获取) | |
| - 端口与启动: | |
| - Spaces 会注入 `PORT` 环境变量;服务端在 [server.js](huggingface-deploy/server.js) 中已自动适配 | |
| - [Dockerfile](huggingface-deploy/Dockerfile) 使用 `CMD ["node","server.js"]`,无需额外启动命令 | |
| - EXPOSE 7860 仅为文档性声明,实际由平台端口映射管理 | |
| - 健康检查与运行状态: | |
| - [Dockerfile](huggingface-deploy/Dockerfile) 中 `HEALTHCHECK` 会探测 `/api/health`,用于平台判断容器是否健康 | |
| - 文件持久化与存储: | |
| - 容器内生成的视频保存到 `/app/video` 并在前端“视频库”页展示;Spaces 的持久化取决于运行类型与策略 | |
| - 若需长期持久化,可考虑外部对象存储或将生成结果回传至你自己的存储服务 | |
| --- | |
| ## 常见问题(Docker/Spaces) | |
| - API 密钥未配置/401: | |
| - 请在 Secrets 中设置 `FAL_KEY`,或在页面中通过“API 密钥设置”临时输入/保存(保存到 `stored_api_key.json` 的持久性由运行环境决定) | |
| - 网络受限/无法访问 FAL API: | |
| - 若平台限制出网,请在 Space 设置中开启 `Internet Access` | |
| - 生成失败/速率限制(429): | |
| - 提示“Rate Limited”,说明请求过于频繁,请降低并发或稍后重试 | |
| - Node 版本兼容: | |
| - 镜像基于 Node 18(见 [Dockerfile](huggingface-deploy/Dockerfile)),与依赖版本兼容 | |
| - 本地验证与对齐: | |
| - 你可先按“使用 Docker 本地运行”步骤验证,再将同样的目录内容上传到 Spaces | |