# snapwrite **Repository Path**: wangfsgit/snapwrite ## Basic Information - **Project Name**: snapwrite - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SnapWrite - 视频图文内容生成工具 一款基于 AI 的视频分析工具,自动提取视频关键帧并生成小红书等平台的图文宣传内容。 ## 功能特性 - 📹 **视频分析**:自动提取关键帧,AI 智能分析视频内容 - ✨ **智能生成**:基于视频内容生成标题、文案和配图 - 🎨 **多风格支持**:隐晦风格和明显风格两种选择 - 🔄 **重新生成**:不满意可随时重新生成 - ✏️ **自定义要求**:根据用户需求定制内容 - ⚙️ **灵活配置**:支持多种国产和海外 AI 服务,界面可视化配置 - 📊 **实时进度**:分析过程实时显示进度和当前步骤 ## 支持的视频格式 | 格式 | 扩展名 | |------|--------| | MP4 | .mp4 | | MOV | .mov | | AVI | .avi | | MKV | .mkv | | WebM | .webm | > 最大支持 500MB 视频文件 ## 支持的AI服务 ### 国产AI服务 | 服务商 | 文本模型 | 图片模型 | 特点 | |--------|----------|----------|------| | 通义千问 | qwen-turbo/plus/max | wanx-v1 | 阿里云DashScope,支持图文理解 | | 文心一言 | ERNIE-4.0/3.5/Speed | stable-diffusion-xl | 百度千帆,支持图文理解 | | 智谱GLM | glm-5/glm-4.5/glm-4.5v 等 | cogview-3-plus/glm-image | 智谱AI,支持图文理解、视频理解 | | 腾讯混元 | hunyuan-pro/standard/lite | hunyuan-vision | 腾讯云,支持图文理解 | ### 海外AI服务 | 服务商 | 文本模型 | 图片模型 | 特点 | |--------|----------|----------|------| | Claude | claude-sonnet-4, claude-haiku | claude-3-5-sonnet | Anthropic,强大的多模态理解 | | DALL-E | - | dall-e-3, dall-e-2 | OpenAI,专业图片生成 | ## 技术栈 ### 后端 - Python 3.10+ - FastAPI + Uvicorn - SQLAlchemy 2.0 + SQLite (异步) - Pydantic v2 - 多AI服务SDK(通义千问、文心一言、智谱GLM、腾讯混元、Claude、DALL-E) - OpenCV + MoviePy(视频处理) ### 前端 - React 18 + TypeScript - Vite 5 - TailwindCSS 3.4 - Zustand(状态管理) - React Router 6 - Axios - React Dropzone(文件上传) - Lucide React(图标) ## 快速开始 ### 环境要求 - Node.js 18+ - Python 3.10+ ### 后端设置 ```bash cd backend # 创建虚拟环境(推荐) python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate # 安装依赖 pip install -r requirements.txt # 配置环境变量(可选,也可以在界面配置) copy .env.example .env # Windows cp .env.example .env # Linux/Mac # 编辑 .env 文件,填入 API Keys # 启动后端服务 uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ### 前端设置 ```bash cd frontend # 安装依赖 npm install # 启动开发服务器 npm run dev ``` ### 访问应用 启动成功后: - **前端界面**:http://localhost:3000 - **API 文档**:http://localhost:8000/docs - **健康检查**:http://localhost:8000/health ## AI服务配置 ### 方式一:界面配置(推荐) 1. 启动应用后,访问 **设置** 页面(点击导航栏的"设置"链接) 2. 点击"添加配置"按钮 3. 选择服务商(如通义千问、文心一言等) 4. 选择模型类型(文本服务或图片服务) 5. 选择具体模型 6. 输入API Key(部分服务商还需要API Secret) 7. 保存配置 8. 点击"设为默认"将该配置设为默认服务 ### 方式二:环境变量配置 在 `.env` 文件中配置以下 API Keys: ``` # Claude API(可选) CLAUDE_API_KEY=your-claude-api-key # OpenAI API(可选) OPENAI_API_KEY=your-openai-api-key ``` ### 获取API Key | 服务商 | 获取方式 | |--------|----------| | 通义千问 | [阿里云DashScope控制台](https://dashscope.console.aliyun.com/) | | 文心一言 | [百度千帆控制台](https://console.bce.baidu.com/qianfan/) | | 智谱GLM | [智谱AI开放平台](https://open.bigmodel.cn/) | | 腾讯混元 | [腾讯云控制台](https://console.cloud.tencent.com/hunyuan) | | Claude | [Anthropic Console](https://console.anthropic.com/) | | DALL-E | [OpenAI Platform](https://platform.openai.com/) | ## 项目结构 ``` SnapWrite/ ├── backend/ │ ├── app/ │ │ ├── api/ │ │ │ └── endpoints/ # API 路由端点 │ │ │ ├── videos.py # 视频管理 │ │ │ ├── analysis.py # 视频分析 │ │ │ ├── content.py # 内容生成 │ │ │ ├── images.py # 图片生成 │ │ │ ├── config.py # AI配置管理 │ │ │ └── health.py # 健康检查 │ │ ├── core/ # 核心业务逻辑 │ │ │ ├── video_processor.py # 视频处理 │ │ │ ├── frame_extractor.py # 关键帧提取 │ │ │ └── prompt_builder.py # Prompt构建 │ │ ├── models/ # 数据库模型 │ │ ├── schemas/ # Pydantic 模型 │ │ ├── services/ # AI服务集成 │ │ │ ├── base_ai_service.py # 服务基类 │ │ │ ├── ai_service_factory.py # 服务工厂 │ │ │ ├── claude_service.py # Claude服务 │ │ │ ├── dalle_service.py # DALL-E服务 │ │ │ ├── qwen_service.py # 通义千问服务 │ │ │ ├── wenxin_service.py # 文心一言服务 │ │ │ ├── zhipu_service.py # 智谱GLM服务 │ │ │ └── tencent_service.py # 腾讯混元服务 │ │ ├── db/ # 数据库配置 │ │ ├── config.py # 应用配置 │ │ └── main.py # 应用入口 │ ├── requirements.txt # Python依赖 │ └── .env.example # 环境变量示例 │ ├── frontend/ │ ├── src/ │ │ ├── api/ # API 调用 │ │ ├── components/ # UI 组件 │ │ │ ├── layout/ # 布局组件 │ │ │ ├── video/ # 视频相关组件 │ │ │ ├── content/ # 内容相关组件 │ │ │ └── config/ # 配置相关组件 │ │ ├── pages/ # 页面 │ │ │ ├── Home/ # 首页 │ │ │ ├── VideoDetail/ # 视频详情 │ │ │ ├── ContentEdit/ # 内容编辑 │ │ │ └── Settings/ # 设置页 │ │ ├── stores/ # Zustand 状态管理 │ │ ├── types/ # TypeScript 类型定义 │ │ ├── utils/ # 工具函数 │ │ └── App.tsx # 应用入口 │ ├── package.json # Node依赖 │ ├── vite.config.ts # Vite配置 │ └── tailwind.config.js # Tailwind配置 │ └── README.md ``` ## 使用说明 1. **配置AI服务**:在设置页面添加并配置AI服务(文本模型用于分析,图片模型用于生成配图) 2. **上传视频**:拖拽或点击上传视频文件(支持 MP4、MOV、AVI、MKV、WebM) 3. **分析视频**:系统自动提取关键帧,AI 分析视频内容并生成摘要 4. **生成内容**:选择风格(隐晦/明显),点击生成图文内容 5. **编辑调整**:可手动编辑标题和文案 6. **重新生成**:输入自定义要求重新生成内容 ## API 端点 | 方法 | 端点 | 说明 | |------|------|------| | GET | `/api/v1/health` | 健康检查 | | POST | `/api/v1/videos/upload` | 上传视频 | | GET | `/api/v1/videos` | 获取视频列表 | | GET | `/api/v1/videos/{video_id}` | 获取视频详情 | | POST | `/api/v1/videos/{video_id}/analyze` | 触发视频分析 | | GET | `/api/v1/videos/{video_id}/analysis` | 获取分析结果 | | POST | `/api/v1/content/generate` | 生成图文内容 | | POST | `/api/v1/images/generate` | 生成配图 | | GET | `/api/v1/config/services` | 获取可用AI服务列表 | | GET | `/api/v1/config` | 获取配置列表 | | POST | `/api/v1/config` | 添加AI服务配置 | 完整 API 文档请访问:http://localhost:8000/docs ## 开发指南 ### 后端开发 ```bash cd backend # 安装开发依赖 pip install -r requirements.txt # 运行开发服务器(热重载) uvicorn app.main:app --reload # 运行 lint(如果有配置) # flake8 app/ ``` ### 前端开发 ```bash cd frontend # 安装依赖 npm install # 启动开发服务器 npm run dev # 构建生产版本 npm run build # 预览生产构建 npm run preview # 代码检查 npm run lint ``` ### 数据库 项目使用 SQLite 作为数据库,数据文件位于 `backend/snapwrite.db`。首次启动时会自动创建数据库表。 ## 常见问题 ### 1. 视频上传失败 - 检查视频格式是否在支持列表中 - 确认视频大小不超过 500MB - 检查 `backend/uploads` 目录是否存在且有写入权限 ### 2. AI 分析失败 - 确认已在设置页面配置 AI 服务并设为默认 - 检查 API Key 是否正确 - 查看后端日志了解详细错误信息 ### 3. 前端无法连接后端 - 确认后端服务已启动(端口 8000) - 检查 Vite 代理配置是否正确 ### 4. 关键帧提取失败 - 确保已安装 OpenCV:`pip install opencv-python` - 检查视频文件是否损坏 ## 环境变量说明 | 变量名 | 说明 | 默认值 | |--------|------|--------| | APP_NAME | 应用名称 | SnapWrite | | APP_ENV | 运行环境 | development | | DEBUG | 调试模式 | true | | SECRET_KEY | 安全密钥 | - | | DATABASE_URL | 数据库连接 | sqlite:///./snapwrite.db | | UPLOAD_DIR | 上传目录 | ./uploads | | OUTPUT_DIR | 输出目录 | ./outputs | | MAX_VIDEO_SIZE | 最大视频大小 | 524288000 (500MB) | | CLAUDE_API_KEY | Claude API Key | - | | OPENAI_API_KEY | OpenAI API Key | - | ## 📧 商业授权与联系方式 SnapWrite 基于 **MIT 许可证** 开源,允许个人及非商业项目自由使用、修改和分发。如果您计划将 SnapWrite 用于**商业用途**(例如集成到商业产品、提供付费服务或作为企业内部工具),或者需要**定制开发、技术支持、著作权授权**,请通过以下方式联系作者获取商业授权与合作支持: 微信: 界面截图 我们提供灵活的授权方案,期待与您合作!