Skip to content

makoMakoGo/ASMR-Transformer

Repository files navigation

ASMR Transformer

ASMR Transformer Logo

橘鸦的诱惑

简洁优雅的ASMR转录与润色工具 🥵🥵🥵

特性部署配置联动License

Next.js React TypeScript Tailwind CSS Node.js


界面预览

✨ 特性

一款简洁优雅的语音识别与文本润色工具,支持音频文件上传、从 asmrgay.com 及备用站在线导入/下载音频。

  • 🎤 语音识别 - 支持上传音频文件或粘贴 asmrgay.com 及备用站 URL,调用硅基流动 ASR API 进行高精度语音转文字
  • ✨ 智能润色 - 支持 OpenAI 兼容 LLM 润色,自动纠错、添加标点、分段排版(不再内置免费 Key)
  • 🎯 自定义润色指令 - 可自定义润色规则,适配不同场景(会议记录、采访整理、翻译等)
  • 💾 设置持久化 - 默认从服务器 .env 读取,WebUI 修改后点击「保存」写回 .env
  • 📊 实时进度 - 详细的上传进度、处理状态和运行日志
  • 🎨 清新蓝调 UI - 匹配 Logo 的蓝色调配色,圆润卡片、流畅动画

🚀 部署方式

本地运行

# 克隆项目
git clone https://github.com/makoMakoGo/ASMR-Transformer.git
cd ASMR-Transformer

# 安装依赖
npm install

# 启动开发服务器
npm run dev

# 或指定端口
npm run dev -- -p 3092

打开浏览器访问 http://localhost:3045 (或自定义端口)

🔧 配置说明

配置方式(推荐)

  1. 复制模板并创建本地配置文件:
cp .env.example .env
  1. 两种配置方式二选一:
    • 直接编辑 .env
    • 打开 WebUI → 「设置」面板修改并点击「保存」写回 .env
    • 设置页顶部提供「保存 / 重新加载 / 放弃改动」用于管理未保存改动

可选环境变量:APP_SETTINGS_ENV_FILE(指定 WebUI 读写的 .env 文件路径,默认 ./.env

语音识别 API(必填)

使用硅基流动提供的免费 ASR 服务:

  1. 访问 硅基流动官网 注册账号
  2. 在控制台获取 API Key
  3. 在工具设置中填入 API Key

默认配置:

  • API URL: https://api.siliconflow.cn/v1/audio/transcriptions
  • 模型: TeleAI/TeleSpeechASR

文本润色 API(可选)

如需使用自己的 LLM API:

  • 支持任何 OpenAI 兼容的 API(如 OpenAI、DeepSeek、通义千问等)
  • 在设置中填写 API URL、模型名称和 API Key(如果你的服务不需要 Key,可留空)

自定义润色指令

可在设置中修改润色指令,例如:

  • 默认:纠错、添加标点、分段排版
  • 会议记录:提取要点、整理成会议纪要格式
  • 翻译:将内容翻译成英文

在线音频链接

仅支持以下站点的播放页面 URL / 直链:

  • www.asmrgay.com(主站)
  • www.asmr.pw / www.asmr.loan / www.asmr.party / www.asmr.stream(备用站)

说明:播放页通过 AList API 解析后,真实下载链接可能会跳到 asmr.121231234.xyz(已允许)。其它域名会被直接拒绝。

  1. 在主界面"在线链接"输入框粘贴链接
  2. 选择操作:
    • 下载到本地 - 仅下载音频到 ./audio/ 目录,不转录
    • 直接转录 - 下载并立即转录(需先配置 ASR API Key)
  3. 服务器会自动解析播放页面、跟随跳转、校验格式与大小(默认 100MB 内)

可选环境变量:FETCH_AUDIO_MAX_BYTES(单位字节,默认 104857600)

🔗 联动食用

My_Chat_Window_Can_Not_Be_A_GalGame
🎮 把聊天窗口变成 GalGame!
配合本项目食用更佳~ ASMR 转文字 → GalGame 对话框,二次元浓度拉满!

📁 项目结构

├── app/
│   ├── api/
│   │   ├── polish/route.ts   # LLM 润色(SSE 流式)
│   │   ├── check-audio/route.ts   # 检查在线音频元信息(支持 AList 播放页面解析)
│   │   ├── proxy-audio/route.ts   # 流式代理在线音频(前端显示下载进度)
│   │   └── settings/route.ts      # WebUI 设置读写(写入 .env)
│   ├── globals.css           # 全局样式(清新蓝调设计系统)
│   ├── layout.tsx            # 根布局
│   └── page.tsx              # 主页面组件
├── lib/
│   ├── alist-utils.ts        # AList 解析工具
│   ├── env-file.ts           # .env 读写工具(WebUI 保存设置)
│   └── url-utils.ts          # URL 校验/白名单/私网拦截/扩展名 MIME 映射
├── docs/images/              # 图片资源
├── tests/                    # 测试文件
│   ├── fixtures/             # 测试资源
│   └── unit/                 # 单元测试
└── package.json

📝 使用流程

1️⃣ 点击设置图标,填入硅基流动 API Key
        ↓
2️⃣ 粘贴在线链接 或 选择本地音频文件
        ↓
3️⃣ 点击「直接转录」或「开始转录」
        ↓
4️⃣ 查看原始结果,点击「润色」进行智能排版
        ↓
5️⃣ 复制润色后的文本使用

⚠️ 页面刷新与请求中断

重要:本工具采用「即时中断」策略——当你刷新或关闭浏览器页面时,所有进行中的后端请求(音频下载、ASR 转录、LLM 润色)会立即中止,不会在后台继续运行。

操作 结果
刷新页面 当前任务中止,已完成的结果丢失
关闭标签页 当前任务中止,已完成的结果丢失
网络断开 当前任务中止

设计理由

  • 避免用户离开后 API 调用继续消耗资源/配额
  • 行为可预测:关闭即停止,不会有「幽灵任务」在后台运行
  • 如需保留结果,请在任务完成后再离开页面

🧪 测试

# 运行单元测试
npm run test:unit

# 运行所有测试
npm test

本项目以 Web 界面为主,接口路由仅用于页面内部功能(在线链接导入、润色等),不再提供对外 API 文档。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 License

MIT © 2025 makoMakoGo

About

关注橘鸦谢谢喵

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors