EchoFlow 是一个基于 AI 的智能会议助手,帮助您:
- 🎙️ 录制或上传会议音频
- 🤖 AI 自动转录语音为文字
- 📝 智能生成结构化会议纪要
- 📧 一键发送给多个参会者
- 💾 下载音频备份(WAV 格式)
| 功能 | 描述 |
|---|---|
| 🎙️ 音频录制 | 浏览器内实时录音,支持暂停/继续,可视化波形显示 |
| 📤 文件上传 | 支持 MP3/WAV/M4A/OGG/WEBM,拖拽上传 |
| 📺 视频链接转录 | 粘贴 YouTube / Bilibili 链接即可转录并生成中英双语纪要 |
| 💾 音频下载 | 自动转换为 WAV 格式,持久化下载窗口,支持最小化 |
| 🤖 AI 转录 | 基于 OpenAI Whisper,高精度语音转文字 |
| 📝 智能纪要 | GPT-4 分析生成结构化会议纪要 |
| 📧 多收件人邮件 | 标签式输入,批量发送,详细反馈 |
| 💬 联系反馈 | 多收件人反馈表单 |
# 1. 克隆项目
git clone <repository-url>
cd echoflow
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入 OpenAI API Key
# 3. 一键部署
./deploy.sh
# 4. 访问应用
# 前端:http://localhost:80
# 后端:http://localhost:3000- 交互式模式:直接运行
./deploy.sh,脚本会提示输入部署模式、域名和邮箱。 - 非交互模式:可通过环境变量跳过提示。
DEPLOY_MODE=2 DOMAIN_NAME=meetandnote.com ACME_EMAIL=myemail@example.com ./deploy.shDEPLOY_MODE:1表示自签名证书,2表示 Let's Encrypt。DOMAIN_NAME:当DEPLOY_MODE=2时必填。ACME_EMAIL:当DEPLOY_MODE=2时必填。
- GitHub Actions 会在推送到
main分支后自动执行.github/workflows/deploy.yml。 - 自托管 Runner 只会运行
./deploy-update.sh,用于拉取镜像、重新构建并重启容器,不会修改证书、Traefik 配置或服务器上的.env。
- 当
CI=true时,deploy.sh不会等待任何人工输入。 - 若缺少必需参数,脚本会立即失败。
CI=true DEPLOY_MODE=2 DOMAIN_NAME=meetandnote.com ACME_EMAIL=myemail@example.com ./deploy.sh# 1. 安装后端依赖
cd backend
npm install
# 2. 安装前端依赖
cd ../frontend
npm install
# 3. 启动后端(终端1)
cd backend
npm start
# 4. 启动前端(终端2)
cd frontend
npm run dev
# 5. 访问应用
# 前端:http://localhost:5173
# 后端:http://localhost:3000- Node.js 16+
- OpenAI API Key (获取地址)
- Docker & Docker Compose(用于容器化部署)
- SMTP 邮箱(用于发送邮件功能)
创建 .env 文件并配置以下变量:
# OpenAI API(必需)
OPENAI_API_KEY=sk-your-actual-api-key
# SMTP 邮件服务(可选,用于邮件发送功能)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
# 端口配置(可选)
BACKEND_PORT=3000
FRONTEND_PORT=5173
# 视频链接转录功能(可选,默认启用)
VIDEO_URL_FEATURE_ENABLED=true
VIDEO_URL_MAX_DURATION_SECONDS=14400 # 视频最长时长(4 小时)
VIDEO_URL_MAX_TASKS_PER_HOUR=5 # 单用户每小时任务上限
VIDEO_URL_MAX_FILE_SIZE_MB=500 # 下载音频大小上限
YT_DLP_TIMEOUT_MS=600000 # yt-dlp 调用超时(10 分钟)
YT_DLP_COOKIES_FILE= # 可选,Bilibili 高清/会员视频需要💡 视频链接转录需要服务器安装
yt-dlp和ffmpeg。Docker 镜像已预装。本地开发可使用pip install yt-dlp安装。
- 点击"开始录音"按钮
- 允许浏览器访问麦克风
- 录音过程中可暂停/继续
- 点击"停止录音"完成
- 录音完成后显示下载窗口
- 查看文件信息(文件名、时长、大小)
- 点击"下载录音文件"保存 WAV 格式文件
- 或点击"跳过并开始处理"直接进入下一步
- 可点击"-"按钮最小化窗口
- 点击上传区域或拖拽文件
- 支持 MP3/WAV/M4A/OGG/WEBM 格式
- 等待上传完成
- 系统自动进行语音转文字
- AI 分析生成会议纪要
- 显示处理进度
- 查看结构化的会议纪要
- 包含:主题、参会人员、讨论要点、决策事项、待办事项
- 可一键复制全部内容
- 点击"发送邮件"按钮
- 添加收件人邮箱(支持多个)
- 点击"发送"按钮
- 查看发送结果
┌─────────────────────────────────────────────────┐
│ 用户浏览器 │
│ (React + Vite) │
└────────────────┬────────────────────────────────┘
│ HTTP/HTTPS
┌────────────────▼────────────────────────────────┐
│ 后端服务器 │
│ (Node.js + Express) │
├─────────────────────────────────────────────────┤
│ • 文件上传 (Multer) │
│ • 音频处理 (FFmpeg) │
│ • AI 转录 (OpenAI Whisper) │
│ • 智能分析 (GPT-4) │
│ • 邮件发送 (Nodemailer) │
└─────────────────────────────────────────────────┘
前端
- React 18
- Vite
- Lucide React(图标)
- CSS3
后端
- Node.js
- Express
- Multer(文件上传)
- FFmpeg(音频处理)
- OpenAI API(AI 服务)
- Nodemailer(邮件发送)
echoflow/
├── frontend/ # 前端应用
│ ├── src/
│ │ ├── App.jsx # 主组件
│ │ ├── App.css # 样式
│ │ └── main.jsx # 入口
│ └── package.json
│
├── backend/ # 后端服务
│ ├── server.js # 主服务器
│ ├── uploads/ # 上传文件
│ └── package.json
│
├── docker-compose.yml # Docker 编排
├── Dockerfile.backend # 后端镜像
├── Dockerfile.frontend # 前端镜像
├── deploy.sh # 部署脚本
├── .env.example # 环境变量示例
├── README.MD # 项目说明(本文件)
└── DOCUMENTATION.md # 完整文档
查看 DOCUMENTATION.md 获取:
- 详细功能说明
- API 文档
- 部署指南
- 常见问题
- 更新日志
A: 项目代码免费开源,但需要 OpenAI API Key(按使用量付费)。
A: OpenAI Whisper 支持多种语言,包括中文、英文、日文等。
A: 音频文件临时存储在服务器,建议定期清理 backend/uploads/ 目录。
A: 不可以,需要联网调用 OpenAI API。
A: WAV 格式,兼容性好,所有设备都能播放。
A: 多半是后端容器内 MYSQL_* 环境变量没真正生效或连错了库。请按 docs/runbook-auth.md 5 步排查;从本版本起,配置缺失或连接失败会让后端 fail-fast 退出,不会再出现"前端成功、库里没数据"。
更多问题请查看 DOCUMENTATION.md
- ✨ 新增音频下载功能(WebM 转 WAV)
- ✨ 下载窗口持久化显示,支持最小化
- 🎨 优化下载窗口 UI 设计
- ✨ 会议纪要和联系反馈支持多收件人
- 🎨 标签式收件人输入 UI
- 🔧 批量邮件发送逻辑
- 🎉 项目初始版本
欢迎贡献代码、报告问题或提出建议!
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证。详见 LICENSE 文件。
- 📮 邮箱:support@echoflow.com
- 🐛 问题反馈:[GitHub Issues]
- 📖 项目主页:[GitHub Repository]
⭐ 如果这个项目对您有帮助,请给个 Star!
Made with ❤️ by EchoFlow Team