GLM-TTS输出文件在哪?新手必看路径说明
你刚跑通GLM-TTS,点击“开始合成”后页面弹出播放按钮,音频也顺利听到了——但下一秒就卡住了:生成的WAV文件到底存哪儿了?怎么找不到?
别急,这不是你一个人的困惑。很多第一次用这个镜像的朋友,在浏览器里反复刷新、翻遍/root/GLM-TTS目录、甚至用find / -name "*.wav" 2>/dev/null全盘搜索,最后才发现:文件根本不在你默认以为的位置,而是在一个带@符号的特殊路径里。
这篇指南不讲原理、不堆参数,只聚焦一个最实际的问题:GLM-TTS生成的语音文件,确切保存在服务器哪个路径?怎么快速定位、批量提取、安全备份?
所有路径均基于科哥二次开发的CSDN星图镜像实测验证(Ubuntu 22.04 + A10G GPU),每一步都可直接复现。
1. 默认输出路径:@outputs/是核心答案
GLM-TTS WebUI 的输出行为遵循一个明确约定:所有单次合成的音频,默认保存在项目根目录下的@outputs/子目录中。
这不是临时缓存,也不是浏览器下载路径,而是模型推理完成后,由后端Python脚本主动写入磁盘的持久化文件。
1.1 路径结构与命名规则
进入服务器终端,执行以下命令即可直达:
cd /root/GLM-TTS ls -l @outputs/你会看到类似这样的输出:
-rw-r--r-- 1 root root 1245678 Dec 12 11:30 tts_20251212_113000.wav -rw-r--r-- 1 root root 2098765 Dec 12 11:35 tts_20251212_113522.wav- 路径固定:
/root/GLM-TTS/@outputs/(绝对路径) - 文件名格式:
tts_YYYYMMDD_HHMMSS.wav(年月日_时分秒) - 自动创建:该目录在首次合成时由程序自动创建,无需手动新建
注意:
@outputs前的@符号不是打字错误,它是镜像预设的专用输出标识符。不要尝试删除或重命名此目录,否则后续合成会失败并报错“Permission denied”。
1.2 为什么是@outputs/而不是outputs/或results/?
这源于科哥对WebUI架构的定制优化:
@前缀在Linux中常用于标记受控输出区,避免与用户自建目录混淆;- 镜像启动脚本(
start_app.sh)内部已硬编码该路径为输出根目录; - 所有前端“播放”按钮调用的音频URL,底层均指向
http://localhost:7860/file=@outputs/tts_20251212_113000.wav。
你可以用curl验证:
curl -I http://localhost:7860/file=@outputs/tts_20251212_113000.wav # 返回 HTTP/1.1 200 OK 即证明路径有效2. 批量推理输出:@outputs/batch/独立隔离
当你切换到「批量推理」标签页,上传JSONL任务文件并点击“开始批量合成”后,输出路径不再使用@outputs/根目录,而是自动进入子目录@outputs/batch/。
2.1 批量输出的完整路径与结构
执行以下命令查看:
ls -l @outputs/batch/典型输出:
-rw-r--r-- 1 root root 876543 Dec 12 12:01 output_001.wav -rw-r--r-- 1 root root 1123456 Dec 12 12:02 output_002.wav -rw-r--r-- 1 root root 987654 Dec 12 12:03 output_003.wav -rw-r--r-- 1 root root 12345 Dec 12 12:03 batch_result_20251212_120345.zip- 主输出目录:
/root/GLM-TTS/@outputs/batch/ - 单文件命名:默认
output_001.wav、output_002.wav…(按JSONL行序编号) - 自定义命名:若JSONL中指定了
"output_name": "my_ad_2025",则生成my_ad_2025.wav - 自动打包:任务完成后,系统会生成一个ZIP压缩包(含全部WAV及日志),方便一键下载
2.2 如何修改批量输出目录?
虽然默认路径固定,但你可以在WebUI界面中实时修改:
- 在「批量推理」页,找到「输出目录」输入框;
- 输入任意合法路径,例如:
@outputs/my_ads/或/home/user/tts_results/; - 点击“开始批量合成”,所有文件将写入你指定的新路径。
重要限制:
- 若填写绝对路径(如
/home/user/),需确保运行WebUI的用户(通常是root)对该路径有读写权限; - 若填写相对路径(如
my_custom/),它仍会以@outputs/为基准,最终路径为@outputs/my_custom/; - 不建议填
../跨目录,可能触发安全策略导致写入失败。
3. 深度排查:当文件“明明生成了却找不到”时
如果你确认已成功合成,但@outputs/目录下空空如也,或文件存在却无法播放,请按以下顺序逐项检查:
3.1 检查WebUI日志中的真实写入路径
在浏览器打开http://localhost:7860后,按下Ctrl+Shift+I(或Cmd+Option+I)打开开发者工具 → 切换到Console标签页。
点击“开始合成”后,观察控制台输出,你会看到类似日志:
INFO:root:Saving audio to @outputs/tts_20251212_113000.wav INFO:root:Audio saved successfully. Size: 1.2MB关键线索:Saving audio to后面的路径就是绝对真实的写入位置,复制它,用ls命令验证。
3.2 检查磁盘空间与inode是否耗尽
即使路径正确,也可能因存储问题导致写入静默失败:
# 查看磁盘使用率(重点关注 /root 所在分区) df -h # 查看inode使用率(小文件多时易满) df -i # 检查 @outputs/ 目录权限 ls -ld @outputs/ # 正确应显示:drwxr-xr-x 2 root root ...常见问题:
df -h显示Use%达到 100% → 清理旧文件或扩容;df -i显示IUse%接近 100% → 删除大量小文件(如历史日志);ls -ld @outputs/权限非root或缺少w写权限 → 执行chmod 755 @outputs/ && chown root:root @outputs/。
3.3 验证音频文件是否被浏览器拦截下载
有时文件已生成,但前端未触发下载,导致你以为“没生成”:
- 在WebUI中点击播放按钮,右键音频播放器 → “另存为…”;
- 浏览器地址栏会显示真实URL,例如:
http://localhost:7860/file=@outputs/tts_20251212_113000.wav; - 复制此URL,在新标签页中打开,浏览器将直接下载该WAV文件。
4. 工程化实践:3种高效管理输出文件的方法
作为生产环境使用者,不能只满足于“找到文件”,更要做到可追溯、可备份、可集成。以下是经过验证的三种实用方法:
4.1 方法一:定时同步到本地(适合个人开发者)
在你的本地电脑(Mac/Windows)上,使用rsync或WinSCP连接服务器,设置定时任务:
# Mac/Linux 终端执行(每天凌晨2点同步) 0 2 * * * rsync -avz --delete root@your-server-ip:/root/GLM-TTS/@outputs/ ~/Desktop/tts_backups/优势:
- 本地保留完整历史版本;
--delete参数确保本地与服务器严格一致;- WAV文件可直接拖入Audacity等工具编辑。
4.2 方法二:挂载NAS/对象存储(适合团队协作)
将@outputs/目录软链接到网络存储,实现一次生成、多端访问:
# 假设已挂载NAS到 /mnt/nas_tts mkdir -p /mnt/nas_tts/glm-tts-2025 # 删除原目录,创建软链接 rm -rf @outputs ln -s /mnt/nas_tts/glm-tts-2025 @outputs效果:
- 所有新生成的WAV自动落盘到NAS;
- 团队成员通过Samba或WebDAV直接访问
/nas_tts/glm-tts-2025/; - 兼容备份软件(如Veeam)自动归档。
4.3 方法三:对接自动化工作流(适合批量生产)
在批量推理JSONL中,直接指定云存储路径(需提前配置CLI):
{ "prompt_audio": "examples/prompt/voice1.wav", "input_text": "欢迎收听本期科技播客", "output_name": "podcast_ep01" }然后编写合成后处理脚本post_process.sh:
#!/bin/bash # 将最新生成的batch文件上传至阿里云OSS ossutil64 cp @outputs/batch/*.wav oss://my-tts-bucket/podcasts/ --update # 清理本地batch目录(保留最近3天) find @outputs/batch/ -name "*.wav" -mtime +3 -delete在WebUI批量任务完成后,手动运行此脚本,即可实现“生成→上传→清理”全自动。
5. 常见误区与避坑指南
新手最容易踩的几个坑,这里一次性说清:
5.1 误区一:“文件应该在 webui/outputs/ 里”
错误认知:认为Gradio类WebUI的输出都在webui/outputs/下。
正确事实:GLM-TTS镜像是独立部署的Python应用,其输出路径由app.py中的OUTPUT_DIR = "@outputs"变量定义,与Gradio默认路径无关。
5.2 误区二:“用浏览器下载按钮就能拿到所有文件”
错误操作:只依赖WebUI界面上的“下载”按钮,忽略后台文件。
正确做法:始终以@outputs/目录为唯一可信源。浏览器下载只是快捷方式,可能因网络中断失败,而磁盘文件100%可靠。
5.3 误区三:“改了output_name就一定能控制文件名”
潜在陷阱:在JSONL中写"output_name": "广告_2025",但生成的却是output_001.wav。
根本原因:output_name字段仅在批量推理中生效,且必须确保JSONL语法严格正确(无中文逗号、无尾随逗号)。推荐用VS Code打开JSONL,安装“JSON Tools”插件校验格式。
5.4 误区四:“删掉@outputs/能释放GPU显存”
危险操作:误以为删除输出文件能清理显存。
正确方案:显存由PyTorch模型占用,与音频文件无关。如需释放,点击WebUI界面上的「🧹 清理显存」按钮,或重启服务:
pkill -f "python app.py" bash start_app.sh6. 总结:掌握路径,就是掌握GLM-TTS的主动权
回顾全文,你只需记住这三条铁律:
- 单次合成 →
@outputs/tts_时间戳.wav:这是你每次点“开始合成”的第一落点,也是调试效果的最快入口; - 批量推理 →
@outputs/batch/:这是规模化生产的主战场,配合JSONL和ZIP打包,效率提升10倍; - 路径即权威 → 不信前端、不信猜测、只信
ls -l @outputs/的真实输出:所有问题,从检查这个目录开始。
现在,打开你的终端,输入ls @outputs/—— 那些你曾苦苦寻找的WAV文件,正安静地躺在那里,等待你下一步的剪辑、分发或集成。技术落地的第一步,从来不是调参,而是精准定位成果。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。