[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-denizsafak--abogen":3,"tool-denizsafak--abogen":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",157379,2,"2026-04-15T23:32:42",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":76,"owner_url":77,"languages":78,"stars":106,"forks":107,"last_commit_at":108,"license":109,"difficulty_score":10,"env_os":110,"env_gpu":111,"env_ram":112,"env_deps":113,"category_tags":123,"github_topics":125,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":146,"updated_at":147,"faqs":148,"releases":178},7875,"denizsafak\u002Fabogen","abogen","Generate audiobooks from EPUBs, PDFs and text with synchronized captions.","abogen 是一款强大的开源工具，能轻松将 EPUB、PDF、纯文本或 Markdown 文件转化为高质量的有声书，并自动生成完美同步的字幕。它主要解决了传统文字转语音流程繁琐、音画不同步以及难以批量处理文档的痛点，让用户能在几秒钟内获得自然流畅的音频内容。\n\n无论是希望将电子书变为有声读物的普通读者，还是需要为 Instagram、YouTube、TikTok 等平台快速制作配音视频的内容创作者，abogen 都能提供极大的便利。同时，由于其支持命令行调用和灵活的部署方式，开发者和研究人员也能将其集成到自动化工作流中。\n\nabogen 的核心技术亮点在于采用了先进的 Kokoro-82M 语音模型，确保生成的语音听起来自然逼真，而非机械生硬。此外，它在生成音频的同时会自动产出时间轴精准的字幕文件，极大降低了后期制作门槛。工具跨平台支持 Windows、Linux 和 macOS，并提供了一键安装脚本，即使没有深厚的编程背景，用户也能快速上手体验高效的文本转语音服务。","# abogen \u003Cimg width=\"40px\" title=\"abogen icon\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_ca222b785e3a.png\" align=\"right\" style=\"padding-left: 10px; padding-top:5px;\">\n\n[![Build Status](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Factions\u002Fworkflows\u002Ftest_pip.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Factions)\n[![GitHub Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fdenizsafak\u002Fabogen)](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Freleases\u002Flatest)\n[![Abogen PyPi Python Versions](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fabogen)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fabogen\u002F)\n[![Operating Systems](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fos-windows%20%7C%20linux%20%7C%20macos%20-blue)](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Freleases\u002Flatest)\n[![PyPi Total Downloads](https:\u002F\u002Fimg.shields.io\u002Fpepy\u002Fdt\u002Fabogen?label=downloads%20(pypi)&color=blue)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fabogen\u002F)\n[![Code style: black](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-black-000000.svg)](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-maroon.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F14433\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_4a68feb902da.png\" alt=\"denizsafak%2Fabogen | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\nAbogen is a powerful text-to-speech conversion tool that makes it easy to turn ePub, PDF, text, markdown, or subtitle files into high-quality audio with matching subtitles in seconds. Use it for audiobooks, voiceovers for Instagram, YouTube, TikTok, or any project that needs natural-sounding text-to-speech, using [Kokoro-82M](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M).\n\n\u003Cimg title=\"Abogen Main\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_895de5c249e5.png' width=\"380\"> \u003Cimg title=\"Abogen Processing\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_9beaf97b52d5.png' width=\"380\">\n\n## Demo\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F094ba3df-7d66-494a-bc31-0e4b41d0b865\n\n> This demo was generated in just 5 seconds, producing ∼1 minute of audio with perfectly synced subtitles. To create a similar video, see [the demo guide](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Ftree\u002Fmain\u002Fdemo).\n\n## `How to install?` \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fabogen\u002F\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fabogen\" alt=\"Abogen Compatible PyPi Python Versions\" align=\"right\" style=\"margin-top:6px;\">\u003C\u002Fa>\n\n### `Windows`\nGo to [espeak-ng latest release](https:\u002F\u002Fgithub.com\u002Fespeak-ng\u002Fespeak-ng\u002Freleases\u002Flatest) download and run the *.msi file.\n\n#### \u003Cb>OPTION 1: Install using script\u003C\u002Fb>\n1. [Download](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Farchive\u002Frefs\u002Fheads\u002Fmain.zip) the repository\n2. Extract the ZIP file\n3. Run `WINDOWS_INSTALL.bat` by double-clicking it\n\nThis method handles everything automatically - installing all dependencies including CUDA in a self-contained environment without requiring a separate Python installation. (You still need to install [espeak-ng](https:\u002F\u002Fgithub.com\u002Fespeak-ng\u002Fespeak-ng\u002Freleases\u002Flatest).)\n\n> [!NOTE]\n> You don't need to install Python separately. The script will install Python automatically.\n\n#### \u003Cb>OPTION 2: Install using uv\u003C\u002Fb>\nFirst, [install uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F) if you haven't already.\n\n```bash\n# For NVIDIA GPUs (CUDA 12.8) - Recommended\nuv tool install --python 3.12 abogen[cuda] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128 --index-strategy unsafe-best-match\n\n# For NVIDIA GPUs (CUDA 12.6) - Older drivers\nuv tool install --python 3.12 abogen[cuda126] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu126 --index-strategy unsafe-best-match\n\n# For NVIDIA GPUs (CUDA 13.0) - Newer drivers\nuv tool install --python 3.12 abogen[cuda130] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu130 --index-strategy unsafe-best-match\n\n# For AMD GPUs or without GPU - If you have AMD GPU, you need to use Linux for GPU acceleration, because ROCm is not available on Windows.\nuv tool install --python 3.12 abogen\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Alternative: Install using pip (click to expand)\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# Create a virtual environment (optional)\nmkdir abogen && cd abogen\npython -m venv venv\nvenv\\Scripts\\activate\n\n# For NVIDIA GPUs:\n# We need to use an older version of PyTorch (2.8.0) until this issue is fixed: https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch\u002Fissues\u002F166628\npip install torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n\n# For AMD GPUs:\n# Not supported yet, because ROCm is not available on Windows. Use Linux if you have AMD GPU.\n\n# Install abogen\npip install abogen\n```\n\n\u003C\u002Fdetails>\n\n### `Mac`\n\nFirst, [install uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F) if you haven't already.\n\n```bash\n# Install espeak-ng\nbrew install espeak-ng\n\n# For Silicon Mac (M1, M2 etc.)\nuv tool install --python 3.13 abogen --with \"kokoro @ git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git,numpy\u003C2\"\n\n# For Intel Mac\nuv tool install --python 3.12 abogen --with \"kokoro @ git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git,numpy\u003C2\"\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Alternative: Install using pip (click to expand)\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# Install espeak-ng\nbrew install espeak-ng\n\n# Create a virtual environment (recommended)\nmkdir abogen && cd abogen\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n\n# Install abogen\npip3 install abogen\n\n# For Silicon Mac (M1, M2 etc.)\n# After installing abogen, we need to install Kokoro's development version which includes MPS support.\npip3 install git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git\n```\n\n\u003C\u002Fdetails>\n\n### `Linux`\n\nFirst, [install uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F) if you haven't already.\n\n```bash\n# Install espeak-ng\nsudo apt install espeak-ng # Ubuntu\u002FDebian\nsudo pacman -S espeak-ng # Arch Linux\nsudo dnf install espeak-ng # Fedora\n\n# For NVIDIA GPUs or without GPU - No need to include [cuda] in here.\nuv tool install --python 3.12 abogen\n\n# For AMD GPUs (ROCm 6.4)\nuv tool install --python 3.12 abogen[rocm] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fnightly\u002Frocm6.4 --index-strategy unsafe-best-match\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Alternative: Install using pip  (click to expand)\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# Install espeak-ng\nsudo apt install espeak-ng # Ubuntu\u002FDebian\nsudo pacman -S espeak-ng # Arch Linux\nsudo dnf install espeak-ng # Fedora\n\n# Create a virtual environment (recommended)\nmkdir abogen && cd abogen\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n\n# Install abogen\npip3 install abogen\n\n# For NVIDIA GPUs:\n# Already supported, no need to install CUDA separately.\n\n# For AMD GPUs:\n# After installing abogen, we need to uninstall the existing torch package\npip3 uninstall torch \npip3 install --pre torch torchvision torchaudio --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fnightly\u002Frocm6.4\n```\n\u003C\u002Fdetails>\n\n\n> See [How to fix \"CUDA GPU is not available. Using CPU\" warning?](#cuda-warning)\n\n> See [How  to fix \"WARNING: The script abogen-cli is installed in '\u002Fhome\u002Fusername\u002F.local\u002Fbin' which is not on PATH\" error in Linux?](#path-warning)\n\n> See [How to fix \"No matching distribution found\" error?](#no-matching-distribution-found)\n\n> See [How to fix \"[WinError 1114] A dynamic link library (DLL) initialization routine failed\" error?](#WinError-1114)\n\n> Special thanks to [@hg000125](https:\u002F\u002Fgithub.com\u002Fhg000125) for his contribution in [#23](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F23). AMD GPU support is possible thanks to his work.\n\n\n## Interfaces\n\nAbogen offers **two interfaces**, but currently they have different feature sets. The **Web UI** contains newer features that are still being integrated into the desktop application.\n\n| Command | Interface | Features |\n|---------|-----------|----------|\n| `abogen` | PyQt6 Desktop GUI | Stable core features |\n| `abogen-web` | Flask Web UI | Core features + **Supertonic TTS**, **LLM Normalization**, **Audiobookshelf Integration** and more! |\n\n> **Note:** The Web UI is under active development. We are working to integrate these new features into the PyQt desktop app. until then, the Web UI provides the most feature-rich experience.\n\n> Special thanks to [@jeremiahsb](https:\u002F\u002Fgithub.com\u002Fjeremiahsb) for making this possible! I was honestly surprised by his [massive contribution](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F120) (>55,000 lines!) that brought the entire Web UI to life.\n\n# 🖥️ Desktop Application (PyQt)\n\n## `How to run?`\n\nYou can simply run this command to start Abogen Desktop GUI:\n\n```bash\nabogen\n```\n\n> [!TIP]\n> If you installed Abogen using the Windows installer `(WINDOWS_INSTALL.bat)`, It should have created a shortcut in the same folder, or your desktop. You can run it from there. If you lost the shortcut, Abogen is located in `python_embedded\u002FScripts\u002Fabogen.exe`. You can run it from there directly.\n\n## `How to use?`\n1) Drag and drop any ePub, PDF, text, markdown, or subtitle file (or use the built-in text editor)\n2) Configure the settings:\n    - Set speech speed\n    - Select a voice (or create a custom voice using voice mixer)\n    - Select subtitle generation style (by sentence, word, etc.)\n    - Select output format\n    - Select where to save the output\n3) Hit Start\n\n## `In action`\n\u003Cimg title=\"Abogen in action\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_57a90db0ed04.gif'> \n\nHere’s Abogen in action: in this demo, it processes ∼3,000 characters of text in just 11 seconds and turns it into 3 minutes and 28 seconds of audio, and I have a low-end **RTX 2060 Mobile laptop GPU**. Your results may vary depending on your hardware.\n\n## `Configuration`\n\n| Options | Description |\n|---------|-------------|\n| **Input Box** | Drag and drop `ePub`, `PDF`, `.TXT`, `.MD`, `.SRT`, `.ASS` or `.VTT` files (or use built-in text editor) |\n| **Queue options** | Add multiple files to a queue and process them in batch, with individual settings for each file. See [Queue mode](#queue-mode) for more details. |\n| **Speed** | Adjust speech rate from `0.1x` to `2.0x` |\n| **Select Voice** | First letter of the language code (e.g., `a` for American English, `b` for British English, etc.), second letter is for `m` for male and `f` for female. |\n| **Voice mixer** | Create custom voices by mixing different voice models with a profile system. See [Voice Mixer](#voice-mixer) for more details. |\n| **Voice preview** | Listen to the selected voice before processing. |\n| **Generate subtitles** | `Disabled`, `Line`, `Sentence`, `Sentence + Comma`, `Sentence + Highlighting`, `1 word`, `2 words`, `3 words`, etc. (Represents the number of words in each subtitle entry) |\n| **Output voice format** | `.WAV`, `.FLAC`, `.MP3`, `.OPUS (best compression)` and `M4B (with chapters)` |\n| **Output subtitle format** | Configures the subtitle format as `SRT (standard)`, `ASS (wide)`, `ASS (narrow)`, `ASS (centered wide)`, or `ASS (centered narrow)`. |\n| **Replace single newlines with spaces** | Replaces single newlines with spaces in the text. This is useful for texts that have imaginary line breaks. |\n| **Save location** | `Save next to input file`, `Save to desktop`, or `Choose output folder` |\n\n> Special thanks to [@brianxiadong](https:\u002F\u002Fgithub.com\u002Fbrianxiadong) for adding markdown support in PR [#75](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F75)\n\n> Special thanks to [@jborza](https:\u002F\u002Fgithub.com\u002Fjborza) for chapter support in PR [#10](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F10)\n\n> Special thanks to [@mleg](https:\u002F\u002Fgithub.com\u002Fmleg) for adding `Line` option in subtitle generation in PR [#94](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F94)\n\n| Book handler options | Description |\n|---------|-------------|\n| **Chapter Control** | Select specific `chapters` from ePUBs or markdown files or `chapters + pages` from PDFs. |\n| **Save each chapter separately** | Save each chapter in e-books as a separate audio file. |\n| **Create a merged version** | Create a single audio file that combines all chapters. (If `Save each chapter separately` is disabled, this option will be the default behavior.) |\n| **Save in a project folder with metadata** | Save the converted items in a project folder with available metadata files. |\n\n| Menu options | Description |\n|---------|-------------|\n| **Theme** | Change the application's theme using `System`, `Light`, or `Dark` options. |\n| **Configure max words per subtitle** | Configures the maximum number of words per subtitle entry. |\n| **Configure silence between chapters** | Configures the duration of silence between chapters (in seconds). |\n| **Configure max lines in log window** | Configures the maximum number of lines to display in the log window. |\n| **Separate chapters audio format** | Configures the audio format for separate chapters as `wav`, `flac`, `mp3`, or `opus`. |\n| **Create desktop shortcut** | Creates a shortcut on your desktop for easy access. |\n| **Open config directory** | Opens the directory where the configuration file is stored. |\n| **Open cache directory** | Opens the cache directory where converted text files are stored. |\n| **Clear cache files** | Deletes cache files created during the conversion or preview. |\n| **Use silent gaps between subtitles** | Prevents unnecessary audio speed-up by letting speech continue into the silent gaps between subtitle etries. In short, it ignores the end times in subtitle entries and uses the silent space until the beginning of the next subtitle entry. When disabled, it speeds up the audio to fit the exact time interval specified in the subtitle. (for subtitle files). |\n| **Subtitle speed adjustment method** | Choose how to speed up audio when needed: `TTS Regeneration (better quality)` re-generates the audio at a faster speed, while `FFmpeg Time-stretch (better speed)` quickly speeds up the generated audio. (for subtitle files). |\n| **Use spaCy for sentence segmentation** | When this option is enabled, Abogen uses [spaCy](https:\u002F\u002Fspacy.io\u002F) to detect sentence boundaries more accurately, instead of using punctuation marks (like periods, question marks, etc.) to split sentences, which could incorrectly cut off phrases like \"Mr.\" or \"Dr.\". With spaCy, sentences are divided more accurately. For non-English text, spaCy runs **before** audio generation to create sentence chunks. For English text, spaCy runs **during** subtitle generation to improve timing and readability. spaCy is only used when subtitle mode is `Sentence` or `Sentence + Comma`. If you prefer the old punctuation splitting method, you can turn this option off. |\n| **Pre-download models and voices for offline use** | Opens a window that displays the available models and voices. Click `Download all` button to download all required models and voices, allowing you to use Abogen completely offline without any internet connection. |\n| **Disable Kokoro's internet access** | Prevents Kokoro from downloading models or voices from HuggingFace Hub, useful for offline use. |\n| **Check for updates at startup** | Automatically checks for updates when the program starts. |\n| **Reset to default settings** | Resets all settings to their default values. |\n\n> Special thanks to [@robmckinnon](https:\u002F\u002Fgithub.com\u002Frobmckinnon) for adding Sentence + Highlighting feature in PR [#65](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F65)\n\n## `Voice Mixer`\n\u003Cimg title=\"Abogen Voice Mixer\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_3207ecf85f10.png'>\n\nWith voice mixer, you can create custom voices by mixing different voice models. You can adjust the weight of each voice and save your custom voice as a profile for future use. The voice mixer allows you to create unique and personalized voices.\n\n> Special thanks to [@jborza](https:\u002F\u002Fgithub.com\u002Fjborza) for making this possible through his contributions in [#5](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F5)\n\n## `Queue Mode`\n\u003Cimg title=\"Abogen queue mode\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_a14e95e8d85b.png'>\n\nAbogen supports **queue mode**, allowing you to add multiple files to a processing queue. This is useful if you want to convert several files in one batch.\n\n- You can add text files (`.txt`) and subtitle files (`.srt`, `.ass`, `.vtt`) directly using the **Add files** button in the Queue Manager or by dragging and dropping them into the queue list. To add PDF, EPUB, or markdown files, use the input box in the main window and click the **Add to Queue** button.\n- Each file in the queue keeps the configuration settings that were active when it was added. Changing the main window configuration afterward does **not** affect files already in the queue.\n- You can enable the **Override item settings with current selection** option to force all items in the queue to use the configuration currently selected in the main window, overriding their saved settings.\n- You can view each file's configuration by hovering over them.\n\nAbogen will process each item in the queue automatically, saving outputs as configured.\n\n> Special thanks to [@jborza](https:\u002F\u002Fgithub.com\u002Fjborza) for adding queue mode in PR [#35](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F35)\n\n---\n# 🌐 Web Application (WebUI)\n\n## `How to run?`\n\nRun this command to start the Web UI:\n\n```bash\nabogen-web\n```\nThen open http:\u002F\u002Flocalhost:8808 and drag in your documents. Jobs run in the background worker and the browser updates automatically.\n\n\u003Cimg title=\"Abogen in action\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_f343f60ca749.png'> \n\n## `Using the web UI`\n1. Upload a document (drag & drop or use the upload button).\n2. Choose voice, language, speed, subtitle style, and output format.\n3. Click **Create job**. The job immediately appears in the queue.\n4. Watch progress and logs update live. Download audio\u002Fsubtitle assets when complete.\n5. Cancel or delete jobs any time. Download logs for troubleshooting.\n\nMultiple jobs can run sequentially; the worker processes them in order.\n\n## `Container image`\nYou can build a lightweight container image directly from the repository root:\n\n```bash\ndocker build -t abogen .\nmkdir -p ~\u002Fabogen-data\u002Fuploads ~\u002Fabogen-data\u002Foutputs\ndocker run --rm \\\n  -p 8808:8808 \\\n  -v ~\u002Fabogen-data:\u002Fdata \\\n  --name abogen \\\n  abogen\n```\n\nBrowse to http:\u002F\u002Flocalhost:8808. Uploaded source files are stored in `\u002Fdata\u002Fuploads` and rendered audio\u002Fsubtitles appear in `\u002Fdata\u002Foutputs`.\n\n### Container environment variables\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `ABOGEN_HOST` | `0.0.0.0` | Bind address for the Flask server |\n| `ABOGEN_PORT` | `8808` | HTTP port |\n| `ABOGEN_DEBUG` | `false` | Enable Flask debug mode |\n| `ABOGEN_UPLOAD_ROOT` | `\u002Fdata\u002Fuploads` | Directory where uploaded files are stored |\n| `ABOGEN_OUTPUT_ROOT` | `\u002Fdata\u002Foutputs` | Directory for generated audio and subtitles (legacy alias of `ABOGEN_OUTPUT_DIR`) |\n| `ABOGEN_OUTPUT_DIR` | `\u002Fdata\u002Foutputs` | Container path for rendered audio\u002Fsubtitles |\n| `ABOGEN_SETTINGS_DIR` | `\u002Fconfig` | Container path for JSON settings\u002Fconfiguration |\n| `ABOGEN_TEMP_DIR` | `\u002Fdata\u002Fcache` (Docker) or platform cache dir | Container path for temporary audio working files |\n| `ABOGEN_UID` | `1000` | UID that the container should run as (matches host user) |\n| `ABOGEN_GID` | `1000` | GID that the container should run as (matches host group) |\n| `ABOGEN_LLM_BASE_URL` | `\"\"` | OpenAI-compatible endpoint used to seed the Settings → LLM panel |\n| `ABOGEN_LLM_API_KEY` | `\"\"` | API key passed to the endpoint above |\n| `ABOGEN_LLM_MODEL` | `\"\"` | Default model selected when you refresh the model list |\n| `ABOGEN_LLM_TIMEOUT` | `30` | Timeout (seconds) for server-side LLM requests |\n| `ABOGEN_LLM_CONTEXT_MODE` | `sentence` | Default prompt context window (`sentence`, `paragraph`, `document`) |\n| `ABOGEN_LLM_PROMPT` | `\"\"` | Custom normalization prompt template seeded into the UI |\n\nSet any of these with `-e VAR=value` when starting the container.\n\nTo discover your local UID\u002FGID for matching file permissions inside the container, run:\n\n```bash\nid -u\nid -g\n```\n\nUse those values to populate `ABOGEN_UID` \u002F `ABOGEN_GID` in your `.env` file.\n\nWhen running via Docker Compose, set `ABOGEN_SETTINGS_DIR`,\n`ABOGEN_OUTPUT_DIR`, and `ABOGEN_TEMP_DIR` in your `.env` file to the host\ndirectories you want mounted into the container. Compose maps them to\n`\u002Fconfig`, `\u002Fdata\u002Foutputs`, and `\u002Fdata\u002Fcache` respectively while exporting\nthose in-container paths to the application. Non-audio caches (e.g., Hugging\nFace downloads) stick to the container's internal cache under `\u002Ftmp\u002Fabogen-home\u002F.cache`\nby default, so only conversion scratch data touches the mounted `ABOGEN_TEMP_DIR`.\nEnsure each host directory exists and is writable by the UID\u002FGID you configure\nbefore starting the stack.\n\n### Docker Compose (GPU by default)\nThe repo includes `docker-compose.yaml`, which targets GPU hosts out of the box. Install the NVIDIA Container Toolkit and run:\n\n```bash\ndocker compose up -d --build\n```\n\nKey build\u002Fruntime knobs:\n\n- `TORCH_VERSION` – pin a specific PyTorch release that matches your driver (leave blank for the latest on the configured index).\n- `TORCH_INDEX_URL` – swap out the PyTorch download index when targeting a different CUDA build.\n- `ABOGEN_DATA` – host path that stores uploads\u002Foutputs (defaults to `.\u002Fdata`).\n\nCPU-only deployment: comment out the `deploy.resources.reservations.devices` block (and the optional `runtime: nvidia` line) inside the compose file. Compose will then run without requesting a GPU. If you prefer the classic CLI:\n\n```bash\ndocker build -f abogen\u002FDockerfile -t abogen-gpu .\ndocker run --rm \\\n  --gpus all \\\n  -p 8808:8808 \\\n  -v ~\u002Fabogen-data:\u002Fdata \\\n  abogen-gpu\n```\n\n## `LLM-assisted text normalization`\nAbogen can hand tricky apostrophes and contractions to an OpenAI-compatible large language model. Configure it from **Settings → LLM**:\n\n1. Enter the base URL for your endpoint (Ollama, OpenAI proxy, etc.) and an API key if required. Use the server root (for Ollama: `http:\u002F\u002Flocalhost:11434`)—Abogen appends `\u002Fv1\u002F...` automatically, but it also accepts inputs that already end in `\u002Fv1`.\n2. Click **Refresh models** to load the catalog, pick a default model, and adjust the timeout or prompt template.\n3. Use the preview box to test the prompt, then save the settings. The Normalization panel can synthesize a short audio preview with the current configuration.\n\nWhen you are running inside Docker or a CI pipeline, seed the form automatically with `ABOGEN_LLM_*` variables in your `.env` file. The `.env.example` file includes sample values for a local Ollama server.\n\n## `Audiobookshelf integration`\nAbogen can push finished audiobooks directly into Audiobookshelf. Configure this under **Settings → Integrations → Audiobookshelf** by providing:\n\n- **Base URL** – the HTTPS origin (and optional path prefix) where your Audiobookshelf server is reachable, for example `https:\u002F\u002Fabs.example.com` or `https:\u002F\u002Fmedia.example.com\u002Fabs`. Do **not** append `\u002Fapi`.\n- **Library ID** – the identifier of the target Audiobookshelf library (copy it from the library’s settings page in ABS).\n- **Folder (name or ID)** – the destination folder inside that library. Enter the folder name exactly as it appears in Audiobookshelf (Abogen resolves it to the correct ID automatically), paste the raw `folderId`, or click **Browse folders** to fetch the available folders and populate the field.\n- **API token** – a personal access token generated in Audiobookshelf under *Account → API tokens*.\n\nYou can enable automatic uploads for future jobs or trigger individual uploads from the queue once the connection succeeds.\n\n### Reverse proxy checklist (Nginx Proxy Manager)\nWhen Audiobookshelf sits behind Nginx Proxy Manager (NPM), make sure the API paths and headers reach the backend untouched:\n\n1. Create a **Proxy Host** that points to your ABS container or host (default forward port `13378`).\n2. Under the **SSL** tab, enable your certificate and tick **Force SSL** if you want HTTPS only.\n3. In the **Advanced** tab, append the snippet below so bearer tokens, client IPs, and large uploads survive the proxy hop:\n   ```nginx\n  proxy_set_header Host $host;\n  proxy_set_header X-Real-IP $remote_addr;\n  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  proxy_set_header X-Forwarded-Proto $scheme;\n  proxy_set_header X-Forwarded-Host $host;\n  proxy_set_header X-Forwarded-Port $server_port;\n  proxy_set_header Authorization $http_authorization;\n  client_max_body_size 5g;\n  proxy_read_timeout 300s;\n  proxy_connect_timeout 300s;\n   ```\n4. Disable **Block Common Exploits** (it strips Authorization headers in some NPM builds).\n5. Enable **Websockets Support** on the main proxy screen (Audiobookshelf uses it for the web UI, and it keeps the reverse proxy configuration consistent).\n6. If you publish Audiobookshelf under a path prefix (for example `\u002Fabs`), add a **Custom Location** with `Location: \u002Fabs\u002F` and set the **Forward Path** to `\u002F`. That rewrite strips the `\u002Fabs` prefix before traffic reaches Audiobookshelf so `\u002Fabs\u002Fapi\u002F...` on the internet becomes `\u002Fapi\u002F...` on the backend. Use the same prefixed URL in Abogen’s “Base URL” field.\n\nAfter saving the proxy host, test the API from the machine running Abogen:\n\n```bash\ncurl -i \"https:\u002F\u002Fabs.example.com\u002Fapi\u002Flibraries\" \\\n  -H \"Authorization: Bearer YOUR_API_TOKEN\"\n```\n\nIf you still receive `Cannot GET \u002Fapi\u002F...`, the proxy is rewriting paths. Double-check the **Custom Locations** table (the `Forward Path` column should be empty for `\u002Fabs\u002F`) and review the NPM access\u002Ferror logs while issuing the curl request to confirm the backend sees the full `\u002Fapi\u002Flibraries` URL.\n\nA JSON response confirming the libraries list means the proxy is routing API calls correctly. You can then use **Browse folders** to confirm the library contents, run **Test connection** in Abogen’s settings (it verifies the library and resolves the folder), and use the “Send to Audiobookshelf” button on completed jobs.\n\n## `JSON endpoints`\nNeed machine-readable status updates? The dashboard calls a small set of helper endpoints you can reuse:\n- `GET \u002Fapi\u002Fjobs\u002F\u003Cid>` returns job metadata, progress, and log lines in JSON.\n- `GET \u002Fpartials\u002Fjobs` renders the live job list as HTML (htmx uses this for polling).\n- `GET \u002Fpartials\u002Fjobs\u002F\u003Cid>\u002Flogs` renders just the log window.\n\nMore automation hooks are planned; contributions are very welcome if you need additional routes.\n\n---\n# Core Features (Available in Both)\n\n## `About Chapter Markers`\nWhen you process ePUB, PDF or markdown files, Abogen converts them into text files stored in your cache directory. When you click \"Edit,\" you're actually modifying these converted text files. In these text files, you'll notice tags that look like this:\n\n```\n\u003C\u003CCHAPTER_MARKER:Chapter Title>>\n```\nThese are chapter markers. They are automatically added when you process ePUB, PDF or markdown files, based on the chapters you select. They serve an important purpose:\n-  Allow you to split the text into separate audio files for each chapter\n-  Save time by letting you reprocess only specific chapters if errors occur, rather than the entire file\n\nYou can manually add these markers to plain text files for the same benefits. Simply include them in your text like this:\n\n```\n\u003C\u003CCHAPTER_MARKER:Introduction>>\nThis is the beginning of my text...  \n\n\u003C\u003CCHAPTER_MARKER:Main Content>> \nHere's another part...  \n```\nWhen you process the text file, Abogen will detect these markers automatically and ask if you want to save each chapter separately and create a merged version.\n\n![Abogen Chapter Marker](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_a1342b357617.png)\n\n## `About Metadata Tags`\nSimilar to chapter markers, it is possible to add metadata tags for `M4B` files. This is useful for audiobook players that support metadata, allowing you to add information like title, author, year, etc. Abogen automatically adds these tags when you process ePUB, PDF or markdown files, but you can also add them manually to your text files. Add metadata tags **at the beginning of your text file** like this:\n```\n\u003C\u003CMETADATA_TITLE:Title>>\n\u003C\u003CMETADATA_ARTIST:Author>>\n\u003C\u003CMETADATA_ALBUM:Album Title>>\n\u003C\u003CMETADATA_YEAR:Year>>\n\u003C\u003CMETADATA_ALBUM_ARTIST:Album Artist>>\n\u003C\u003CMETADATA_COMPOSER:Narrator>>\n\u003C\u003CMETADATA_GENRE:Audiobook>>\n\u003C\u003CMETADATA_COVER_PATH:path\u002Fto\u002Fcover.jpg>>\n```\n> Note: `METADATA_COVER_PATH` is used to embed a cover image into the generated M4B file. Abogen automatically extracts the cover from EPUB and PDF files and adds this tag for you.\n\n## `About Timestamp-based Text Files`\nSimilar to converting subtitle files to audio, Abogen can automatically detect text files that contain timestamps in `HH:MM:SS`, `HH:MM:SS,ms` or `HH:MM:SS.ms` format. When timestamps are found inside your text file, Abogen will ask if you want to use them for audio timing. This is useful for creating timed narrations, scripts, or transcripts where you need exact control over when each segment is spoken.\n\nFormat your text file like this:\n```\n00:00:00\nThis is the first segment of text.\n\n00:00:15\nThis is the second segment, starting at 15 seconds.\n\n00:00:45\nAnd this is the third segment, starting at 45 seconds.\n```\n\n**Important notes:**\n- Timestamps must be in `HH:MM:SS`, `HH:MM:SS,ms` or `HH:MM:SS.ms` format (e.g., `00:05:30` for 5 minutes 30 seconds, or `00:05:30.500` for 5 minutes 30.5 seconds)\n- Milliseconds are optional and provide precision up to 1\u002F1000th of a second\n- Text before the first timestamp (if any) will automatically start at `00:00:00`\n- When using timestamps, the subtitle generation mode setting is ignored\n\n## `Supported Languages`\n```\n# 🇺🇸 'a' => American English, 🇬🇧 'b' => British English\n# 🇪🇸 'e' => Spanish es\n# 🇫🇷 'f' => French fr-fr\n# 🇮🇳 'h' => Hindi hi\n# 🇮🇹 'i' => Italian it\n# 🇯🇵 'j' => Japanese: pip install misaki[ja]\n# 🇧🇷 'p' => Brazilian Portuguese pt-br\n# 🇨🇳 'z' => Mandarin Chinese: pip install misaki[zh]\n```\nFor a complete list of supported languages and voices, refer to Kokoro's [VOICES.md](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M\u002Fblob\u002Fmain\u002FVOICES.md). To listen to sample audio outputs, see [SAMPLES.md](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M\u002Fblob\u002Fmain\u002FSAMPLES.md).\n\n> See [How to fix Japanese audio not working?](#japanese-audio-not-working)\n\n---\n# Guides & Troubleshooting\n\n## `MPV Config`\nI highly recommend using [MPV](https:\u002F\u002Fmpv.io\u002Finstallation\u002F) to play your audio files, as it supports displaying subtitles even without a video track. Here's my `mpv.conf`:\n```\n# --- MPV Settings ---\nsave-position-on-quit\nkeep-open=yes\naudio-display=no\n# --- Subtitle ---\nsub-ass-override=no\nsub-margin-y=50\nsub-margin-x=50\n# --- Audio Quality ---\naudio-spdif=ac3,dts,eac3,truehd,dts-hd\naudio-channels=auto\naudio-samplerate=48000\nvolume-max=200\n```\n\n## `Similar Projects`\nAbogen is a standalone project, but it is inspired by and shares some similarities with other projects. Here are a few:\n- [audiblez](https:\u002F\u002Fgithub.com\u002Fsantinic\u002Faudiblez): Generate audiobooks from e-books. **(Has CLI and GUI support)**\n- [autiobooks](https:\u002F\u002Fgithub.com\u002Fplusuncold\u002Fautiobooks): Automatically convert epubs to audiobooks\n- [pdf-narrator](https:\u002F\u002Fgithub.com\u002Fmateogon\u002Fpdf-narrator): Convert your PDFs and EPUBs into audiobooks effortlessly.\n- [epub_to_audiobook](https:\u002F\u002Fgithub.com\u002Fp0n1\u002Fepub_to_audiobook): EPUB to audiobook converter, optimized for Audiobookshelf\n- [ebook2audiobook](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook): Convert ebooks to audiobooks with chapters and metadata using dynamic AI models and voice cloning\n\n## `Roadmap`\n- [ ] Add OCR scan feature for PDF files using docling\u002Fteserract.\n- [x] Add chapter metadata for .m4a files. (Issue [#9](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F9), PR [#10](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F10))\n- [ ] Add support for different languages in GUI.\n- [x] Add voice formula feature that enables mixing different voice models. (Issue [#1](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F1), PR [#5](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F5))\n- [ ] Add support for kokoro-onnx (If it's necessary).\n- [x] Add dark mode.\n\n## `Troubleshooting`\nIf you encounter any issues while running Abogen, try launching it from the command line with:\n```\nabogen-cli\n```\n\nIf you installed using the Windows installer `(WINDOWS_INSTALL.bat)`, go to `python_embedded\u002FScripts` and run:\n```\nabogen-cli.exe\n```\n\nThis will start Abogen in command-line mode and display detailed error messages. Please open a new issue on the [Issues](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues) page with the error message and a description of your problem.\n\n## `Common Issues & Solutions`\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"about-abogen\">About the name \"abogen\"\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> The name **\"abogen\"** comes from a shortened form of **\"audiobook generator\"**, which is the purpose of this project.  \n>\n> After releasing the project, I learned from [community feedback](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=44853064#44857237) that the prefix *\"abo\"* can unfortunately be understood as an ethnic slur in certain regions (particularly Australia and New Zealand). This was something I was not aware of when naming the project, as English is not my first language.  \n>\n> I want to make it clear that the name was chosen only for its technical meaning, with **no offensive intent**. I’m grateful to those who kindly pointed this out, as it helps ensure the project remains respectful and welcoming to everyone.  \n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"cuda-warning\">How to fix \"CUDA GPU is not available. Using CPU\" warning?\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> This message means PyTorch could not use your GPU and has fallen back to the CPU. On Windows, Abogen only supports NVIDIA GPUs with CUDA. AMD GPUs are not supported on Windows (they are only supported on Linux with ROCm). Abogen will still work on the CPU, but processing will be slower compared to a supported GPU.\n>\n> If you have a compatible NVIDIA GPU on Windows and still see this warning:\n> Open your terminal in the Abogen folder (the folder that contains `python_embedded`) and type:\n> ```bash\n> python_embedded\\python.exe -m pip install --force-reinstall torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n> ```\n>\n> If this does not resolve the issue and you are using an older NVIDIA GPU that does not support CUDA 12.8, you can try installing an older version of PyTorch that supports your GPU. For example, for CUDA 12.6, run:\n> ```bash\n> python_embedded\\python.exe -m pip install --force-reinstall torch==2.8.0+cu126 torchvision==0.23.0+cu126 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu126\n> ```\n> \n> If you have an AMD GPU, you need to use Linux and follow the Linux\u002FROCm [instructions](#linux). If you want to keep running on CPU, no action is required, but performance will just be reduced. See [#32](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F32) for more details.\n>\n> If you used `uv` to install Abogen, you can uninstall and try reinstalling with another CUDA version:\n> ```bash\n> # First uninstall Abogen\n> uv tool uninstall abogen\n> # Try CUDA 12.6 for older drivers\n> uv tool install --python 3.12 abogen[cuda126] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu126 --index-strategy unsafe-best-match\n> # If that doesn't work, try CUDA 13.0 for newer drivers\n> uv tool install --python 3.12 abogen[cuda130] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu130 --index-strategy unsafe-best-match\n> ```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"path-warning\">How to fix \"WARNING: The script abogen-cli is installed in '\u002Fhome\u002Fusername\u002F.local\u002Fbin' which is not on PATH\" error in Linux?\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> Run the following command to add Abogen to your PATH:\n> ```bash\n> echo \"export PATH=\\\"\u002Fhome\u002F$USER\u002F.local\u002Fbin:\\$PATH\\\"\" >> ~\u002F.bashrc && source ~\u002F.bashrc\n> ```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"no-matching-distribution-found\">How to fix \"No matching distribution found\" error?\u003Ca>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> Try installing Abogen on supported Python (3.10 to 3.12) versions. I recommend installing with [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F). You can also use [pyenv](https:\u002F\u002Fgithub.com\u002Fpyenv\u002Fpyenv) to manage multiple Python versions easily on Linux. Watch this [video](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=MVyb-nI4KyI) by NetworkChuck for a quick guide.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"WinError-1114\">How to fix \"[WinError 1114] A dynamic link library (DLL) initialization routine failed\" error?\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> I faced this error when trying to run Abogen in a virtual Windows machine without GPU support. Here's how I fixed it:\n> If you installed Abogen using the Windows installer `(WINDOWS_INSTALL.bat)`, go to Abogen's folder (that contains `python_embedded`), open your terminal there and run:\n> ```bash\n> python_embedded\\python.exe -m pip install --force-reinstall torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n> ```\n> If you installed Abogen using pip, open your terminal in the virtual environment and run:\n> ```bash\n> pip install torch==2.8.0 torchaudio==2.8.0 torchvision==0.23.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n> ```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"japanese-audio-not-working\">How to fix Japanese audio not working?\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> Japanese audio may require additional configuration. \n> I'm not sure about the exact solution, but it seems to be related to installing additional dependencies for Japanese support in Kokoro. Please check [#56](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F56) for more information. \n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"use-uv-instead-of-pip\">How to uninstall Abogen?\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> - From the settings menu, go to `Open configuration directory` and delete the directory.\n> - From the settings menu, go to `Open cache directory` and delete the directory.\n> - If you installed Abogen using pip, type:\n>```bash\n>pip uninstall abogen # uninstalls abogen\n>pip cache purge # removes pip cache\n>```\n>- If you installed Abogen using uv, type:\n>```bash\n>uv tool uninstall abogen # uninstalls abogen\n>uv cache clear # removes uv cache\n>```\n> - If you installed Abogen using the Windows installer (WINDOWS_INSTALL.bat), just remove the folder that contains Abogen. It installs everything inside `python_embedded` folder, no other directories are created.\n> - If you installed espeak-ng, you need to remove it separately.\n\n\u003C\u002Fdetails>\n\n## `Contributing`\nI welcome contributions! If you have ideas for new features, improvements, or bug fixes, please fork the repository and submit a pull request.\n\n### For developers and contributors\nIf you'd like to modify the code and contribute to development, you can [download the repository](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Farchive\u002Frefs\u002Fheads\u002Fmain.zip), extract it and run the following commands to build **or** install the package:\n```bash\n# Go to the directory where you extracted the repository and run:\npip install -e .[dev]       # Installs the package in editable mode with build dependencies\npython -m build             # Builds the package in dist folder (optional)\nabogen                      # Opens the GUI\n```\n> Make sure you are using Python 3.10 to 3.12. You need to create a virtual environment if needed.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Alternative: Using uv (click to expand)\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# Go to the directory where you extracted the repository and run:\nuv venv --python 3.12       # Creates a virtual environment with Python 3.12\n# After activating the virtual environment, run:\nuv pip install -e .         # Installs the package in editable mode\nuv build                    # Builds the package in dist folder (optional)\nabogen                      # Opens the GUI\n```\n\n\u003C\u002Fdetails>\n\nFeel free to explore the code and make any changes you like.\n\n## `Credits`\n- Web UI implementation by [@jeremiahsb](https:\u002F\u002Fgithub.com\u002Fjeremiahsb)\n- Abogen uses [Kokoro](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro) for its high-quality, natural-sounding text-to-speech synthesis. Huge thanks to the Kokoro team for making this possible.\n- Thanks to the [spaCy](https:\u002F\u002Fspacy.io\u002F) project for its sentence-segmentation tools, which help Abogen produce cleaner, more natural sentence segmentation.\n- Thanks to [@wojiushixiaobai](https:\u002F\u002Fgithub.com\u002Fwojiushixiaobai) for [Embedded Python](https:\u002F\u002Fgithub.com\u002Fwojiushixiaobai\u002FPython-Embed-Win64) packages. These modified packages include pip pre-installed, enabling Abogen to function as a standalone application without requiring users to separately install Python in Windows.\n- Thanks to creators of [EbookLib](https:\u002F\u002Fgithub.com\u002Faerkalov\u002Febooklib), a Python library for reading and writing ePub files, which is used for extracting text from ePub files.\n- Special thanks to the [PyQt](https:\u002F\u002Fwww.riverbankcomputing.com\u002Fsoftware\u002Fpyqt\u002F) team for providing the cross-platform GUI toolkit that powers Abogen's interface.\n- Icons: [US](https:\u002F\u002Ficons8.com\u002Ficon\u002FaRiu1GGi6Aoe\u002Fusa), [Great Britain](https:\u002F\u002Ficons8.com\u002Ficon\u002Ft3NE3BsOAQwq\u002Fgreat-britain), [Spain](https:\u002F\u002Ficons8.com\u002Ficon\u002Fly7tzANRt33n\u002Fspain), [France](https:\u002F\u002Ficons8.com\u002Ficon\u002F3muzEmi4dpD5\u002Ffrance), [India](https:\u002F\u002Ficons8.com\u002Ficon\u002FesGVrxg9VCJ1\u002Findia), [Italy](https:\u002F\u002Ficons8.com\u002Ficon\u002FPW8KZnP7qXzO\u002Fitaly), [Japan](https:\u002F\u002Ficons8.com\u002Ficon\u002FMcQbrq9qaQye\u002Fjapan), [Brazil](https:\u002F\u002Ficons8.com\u002Ficon\u002FzHmH8HpOmM90\u002Fbrazil), [China](https:\u002F\u002Ficons8.com\u002Ficon\u002FEj50Oe3crXwF\u002Fchina), [Female](https:\u002F\u002Ficons8.com\u002Ficon\u002FuI49hxbpxTkp\u002Ffemale), [Male](https:\u002F\u002Ficons8.com\u002Ficon\u002F12351\u002Fmale), [Adjust](https:\u002F\u002Ficons8.com\u002Ficon\u002F21698\u002Fadjust) and [Voice Id](https:\u002F\u002Ficons8.com\u002Ficon\u002FGskSeVoroQ7u\u002Fvoice-id) icons by [Icons8](https:\u002F\u002Ficons8.com\u002F).\n\n## `License`\nThis project is available under the MIT License - see the [LICENSE](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fblob\u002Fmain\u002FLICENSE) file for details.\n[Kokoro](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro) is licensed under [Apache-2.0](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro\u002Fblob\u002Fmain\u002FLICENSE) which allows commercial use, modification, distribution, and private use.\n\n## `Star History`\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_fef71dd6bb89.png)](https:\u002F\u002Fwww.star-history.com\u002F#denizsafak\u002Fabogen&Date)\n\n> [!NOTE]\n> Abogen supports subtitle generation for all languages. However, word-level subtitle modes (e.g., \"1 word\", \"2 words\", \"3 words\", etc.) are only available for English because [Kokoro provides timestamp tokens only for English text](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro\u002Fblob\u002F6d87f4ae7abc2d14dbc4b3ef2e5f19852e861ac2\u002Fkokoro\u002Fpipeline.py#L383). For non-English languages, Abogen uses a duration-based fallback that supports sentence-level and comma-based subtitle modes (\"Line\", \"Sentence\", \"Sentence + Comma\"). If you need word-level subtitles for other languages, please request that feature in the [Kokoro project](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro).\n\n> Tags: audiobook, kokoro, text-to-speech, TTS, audiobook generator, audiobooks, text to speech, audiobook maker, audiobook creator, audiobook generator, voice-synthesis, text to audio, text to audio converter, text to speech converter, text to speech generator, text to speech software, text to speech app, epub to audio, pdf to audio, markdown to audio, subtitle to audio, srt to audio, ass to audio, vtt to audio, webvtt to audio, content-creation, media-generation\n","# abogen \u003Cimg width=\"40px\" title=\"abogen 图标\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_ca222b785e3a.png\" align=\"right\" style=\"padding-left: 10px; padding-top:5px;\">\n\n[![构建状态](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Factions\u002Fworkflows\u002Ftest_pip.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Factions)\n[![GitHub 发布](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fdenizsafak\u002Fabogen)](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Freleases\u002Flatest)\n[![Abogen PyPi Python 版本兼容性](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fabogen)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fabogen\u002F)\n[![操作系统](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fos-windows%20%7C%20linux%20%7C%20macos%20-blue)](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Freleases\u002Flatest)\n[![PyPi 总下载量](https:\u002F\u002Fimg.shields.io\u002Fpepy\u002Fdt\u002Fabogen?label=downloads%20(pypi)&color=blue)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fabogen\u002F)\n[![代码风格：black](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-black-000000.svg)](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack)\n[![许可证：MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-maroon.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F14433\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_4a68feb902da.png\" alt=\"denizsafak%2Fabogen | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\nAbogen 是一款强大的文本转语音转换工具，可轻松将 ePub、PDF、文本、Markdown 或字幕文件在几秒钟内转换为高质量音频，并附带同步的字幕。您可以使用它来制作有声读物、为 Instagram、YouTube、TikTok 或任何需要自然语音合成的项目添加旁白，只需借助 [Kokoro-82M](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M) 即可。\n\n\u003Cimg title=\"Abogen 主界面\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_895de5c249e5.png' width=\"380\"> \u003Cimg title=\"Abogen 处理中\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_9beaf97b52d5.png' width=\"380\">\n\n## 演示\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F094ba3df-7d66-494a-bc31-0e4b41d0b865\n\n> 此演示仅用时 5 秒生成，输出约 1 分钟的音频及完美同步的字幕。如需制作类似视频，请参阅 [演示指南](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Ftree\u002Fmain\u002Fdemo)。\n\n## `如何安装？` \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fabogen\u002F\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fabogen\" alt=\"Abogen 兼容 PyPi Python 版本\" align=\"right\" style=\"margin-top:6px;\">\u003C\u002Fa>\n\n### `Windows`\n前往 [espeak-ng 最新版本](https:\u002F\u002Fgithub.com\u002Fespeak-ng\u002Fespeak-ng\u002Freleases\u002Flatest)，下载并运行 *.msi 文件。\n\n#### \u003Cb>选项 1：使用脚本安装\u003C\u002Fb>\n1. [下载](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Farchive\u002Frefs\u002Fheads\u002Fmain.zip) 仓库\n2. 解压 ZIP 文件\n3. 双击运行 `WINDOWS_INSTALL.bat`\n\n此方法会自动完成所有操作——包括在独立环境中安装所有依赖项（含 CUDA），无需单独安装 Python。（您仍需安装 [espeak-ng](https:\u002F\u002Fgithub.com\u002Fespeak-ng\u002Fespeak-ng\u002Freleases\u002Flatest)。）\n\n> [!注意]\n> 您无需单独安装 Python，脚本会自动为您安装。\n\n#### \u003Cb>选项 2：使用 uv 安装\u003C\u002Fb>\n首先，如果您尚未安装，请先 [安装 uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F)。\n\n```bash\n# 适用于 NVIDIA 显卡（CUDA 12.8）——推荐\nuv tool install --python 3.12 abogen[cuda] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128 --index-strategy unsafe-best-match\n\n# 适用于 NVIDIA 显卡（CUDA 12.6）——较旧驱动\nuv tool install --python 3.12 abogen[cuda126] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu126 --index-strategy unsafe-best-match\n\n# 适用于 NVIDIA 显卡（CUDA 13.0）——较新驱动\nuv tool install --python 3.12 abogen[cuda130] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu130 --index-strategy unsafe-best-match\n\n# 适用于 AMD 显卡或无显卡——如果您拥有 AMD 显卡，由于 ROCm 在 Windows 上不可用，您需要使用 Linux 来实现 GPU 加速。\nuv tool install --python 3.12 abogen\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>替代方案：使用 pip 安装（点击展开）\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# 创建虚拟环境（可选）\nmkdir abogen && cd abogen\npython -m venv venv\nvenv\\Scripts\\activate\n\n# 对于 NVIDIA 显卡：\n# 我们需要使用较旧版本的 PyTorch（2.8.0），直到该问题修复：https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch\u002Fissues\u002F166628\npip install torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n\n# 对于 AMD 显卡：\n# 目前尚不支持，因为 ROCm 在 Windows 上不可用。如有 AMD 显卡，请使用 Linux。\n\n# 安装 abogen\npip install abogen\n```\n\n\u003C\u002Fdetails>\n\n### `Mac`\n\n首先，如果您尚未安装，请先 [安装 uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F)。\n\n```bash\n# 安装 espeak-ng\nbrew install espeak-ng\n\n# 对于 Apple Silicon Mac（M1、M2 等）\nuv tool install --python 3.13 abogen --with \"kokoro @ git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git,numpy\u003C2\"\n\n# 对于 Intel Mac\nuv tool install --python 3.12 abogen --with \"kokoro @ git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git,numpy\u003C2\"\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>替代方案：使用 pip 安装（点击展开）\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# 安装 espeak-ng\nbrew install espeak-ng\n\n# 创建虚拟环境（推荐）\nmkdir abogen && cd abogen\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n\n# 安装 abogen\npip3 install abogen\n\n# 对于 Apple Silicon Mac（M1、M2 等）\n# 安装 abogen 后，我们需要安装 Kokoro 的开发版，其中包含 MPS 支持。\npip3 install git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git\n```\n\n\u003C\u002Fdetails>\n\n### `Linux`\n\n首先，如果您尚未安装，请先 [安装 uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F)。\n\n```bash\n# 安装 espeak-ng\nsudo apt install espeak-ng # Ubuntu\u002FDebian\nsudo pacman -S espeak-ng # Arch Linux\nsudo dnf install espeak-ng # Fedora\n\n# 对于 NVIDIA 显卡或无显卡——此处无需加入 [cuda]。\nuv tool install --python 3.12 abogen\n\n# 对于 AMD 显卡（ROCm 6.4）\nuv tool install --python 3.12 abogen[rocm] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fnightly\u002Frocm6.4 --index-strategy unsafe-best-match\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>替代方案：使用 pip 安装（点击展开）\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# 安装 espeak-ng\nsudo apt install espeak-ng # Ubuntu\u002FDebian\nsudo pacman -S espeak-ng # Arch Linux\nsudo dnf install espeak-ng # Fedora\n\n# 创建虚拟环境（推荐）\nmkdir abogen && cd abogen\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n\n# 安装 abogen\npip3 install abogen\n\n# 对于 NVIDIA 显卡：\n# 已经支持，无需单独安装 CUDA。\n\n# 对于 AMD 显卡：\n\n# 安装 abogen 后，我们需要卸载现有的 torch 包\npip3 uninstall torch \npip3 install --pre torch torchvision torchaudio --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fnightly\u002Frocm6.4\n```\n\u003C\u002Fdetails>\n\n\n> 请参阅[如何解决“CUDA GPU 不可用。正在使用 CPU”警告？](#cuda-warning)\n\n> 请参阅[如何解决 Linux 中的“WARNING: The script abogen-cli is installed in '\u002Fhome\u002Fusername\u002F.local\u002Fbin' which is not on PATH”错误？](#path-warning)\n\n> 请参阅[如何解决“No matching distribution found”错误？](#no-matching-distribution-found)\n\n> 请参阅[如何解决“[WinError 1114] 动态链接库 (DLL) 初始化例程失败”错误？](#WinError-1114)\n\n> 特别感谢 [@hg000125](https:\u002F\u002Fgithub.com\u002Fhg000125) 在 [#23](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F23) 中所做的贡献。正是由于他的工作，才得以支持 AMD GPU。\n\n\n## 界面\n\nAbogen 提供**两种界面**，但目前它们的功能集有所不同。**Web UI** 包含一些较新的功能，这些功能仍在逐步集成到桌面应用程序中。\n\n| 命令 | 界面 | 功能 |\n|---------|-----------|----------|\n| `abogen` | PyQt6 桌面 GUI | 稳定的核心功能 |\n| `abogen-web` | Flask Web UI | 核心功能 + **Supertonic TTS**、**LLM 归一化**、**Audiobookshelf 集成** 等！ |\n\n> **注意：** Web UI 目前仍在积极开发中。我们正努力将这些新功能整合到 PyQt 桌面应用中。在此之前，Web UI 提供了功能最丰富的体验。\n\n> 特别感谢 [@jeremiahsb](https:\u002F\u002Fgithub.com\u002Fjeremiahsb) 的付出！我对他[巨大的贡献](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F120)（超过 55,000 行代码！）感到非常惊讶，正是这些代码让整个 Web UI 成为了现实。\n\n# 🖥️ 桌面应用程序（PyQt）\n\n## `如何运行？`\n\n只需运行以下命令即可启动 Abogen 桌面 GUI：\n\n```bash\nabogen\n```\n\n> [!提示]\n> 如果您使用 Windows 安装程序 `(WINDOWS_INSTALL.bat)` 安装了 Abogen，它应该会在同一文件夹或您的桌面上创建一个快捷方式。您可以直接从那里运行。如果您丢失了快捷方式，Abogen 位于 `python_embedded\u002FScripts\u002Fabogen.exe`。您可以直接从那里运行。\n\n## `如何使用？`\n1) 将任何 ePub、PDF、文本、Markdown 或字幕文件拖放到界面上（或者使用内置的文本编辑器）\n2) 配置设置：\n    - 设置语速\n    - 选择语音（或使用语音混合器创建自定义语音）\n    - 选择字幕生成样式（按句子、单词等）\n    - 选择输出格式\n    - 选择保存输出的位置\n3) 点击“开始”\n\n## `实际操作`\n\u003Cimg title=\"Abogen 实际操作\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_57a90db0ed04.gif'> \n\n这里是 Abogen 的实际操作演示：在这个示例中，它仅用 11 秒就处理了约 3,000 个字符的文本，并将其转换为 3 分 28 秒的音频。而我的设备是一块低端的 **RTX 2060 Mobile 笔记本显卡**。您的结果可能会因硬件不同而有所差异。\n\n## `配置`\n\n| 选项 | 描述 |\n|---------|-------------|\n| **输入框** | 拖放 `ePub`、`PDF`、`.TXT`、`.MD`、`.SRT`、`.ASS` 或 `.VTT` 文件（或使用内置文本编辑器） |\n| **队列选项** | 将多个文件添加到队列中并批量处理，每个文件可单独设置。更多详情请参阅 [队列模式](#queue-mode)。 |\n| **语速** | 调整语速，范围从 `0.1x` 到 `2.0x` |\n| **选择语音** | 语言代码的第一个字母表示语言类型（例如，`a` 表示美式英语，`b` 表示英式英语等），第二个字母表示性别，`m` 代表男声，`f` 代表女声。 |\n| **语音混合器** | 通过混合不同的语音模型并结合个人化配置，创建自定义语音。更多详情请参阅 [语音混合器](#voice-mixer)。 |\n| **语音预览** | 在处理前试听所选语音。 |\n| **生成字幕** | `禁用`、`一行`、`一句话`、`一句话+逗号`、`一句话+高亮`、`1个词`、`2个词`、`3个词` 等（表示每条字幕包含的词数） |\n| **输出语音格式** | `.WAV`、`.FLAC`、`.MP3`、`.OPUS（最佳压缩）` 和 `M4B（带章节）` |\n| **输出字幕格式** | 可将字幕格式配置为 `SRT（标准）`、`ASS（宽版）`、`ASS（窄版）`、`ASS（居中宽版）` 或 `ASS（居中窄版）`。 |\n| **将单个换行符替换为空格** | 将文本中的单个换行符替换为空格。这对于存在人为换行符的文本非常有用。 |\n| **保存位置** | `与输入文件同目录保存`、`保存到桌面` 或 `选择输出文件夹` |\n\n> 特别感谢 [@brianxiadong](https:\u002F\u002Fgithub.com\u002Fbrianxiadong) 在 PR [#75](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F75) 中添加了 Markdown 支持。\n\n> 特别感谢 [@jborza](https:\u002F\u002Fgithub.com\u002Fjborza) 在 PR [#10](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F10) 中实现了章节支持。\n\n> 特别感谢 [@mleg](https:\u002F\u002Fgithub.com\u002Fmleg) 在 PR [#94](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F94) 中增加了字幕生成中的 `一行` 选项。\n\n| 图书处理选项 | 描述 |\n|---------|-------------|\n| **章节控制** | 从 ePUB 或 Markdown 文件中选择特定章节，或从 PDF 文件中选择“章节+页码”。 |\n| **分别保存各章节** | 将电子书中的每个章节保存为单独的音频文件。 |\n| **创建合并版本** | 创建一个包含所有章节的单个音频文件。（如果未启用“分别保存各章节”，则此选项将成为默认行为。） |\n| **以项目文件夹和元数据保存** | 将转换后的文件保存在包含可用元数据文件的项目文件夹中。 |\n\n| 菜单选项 | 描述 |\n|---------|-------------|\n| **主题** | 使用 `系统`、`浅色` 或 `深色` 选项更改应用程序主题。 |\n| **配置每条字幕的最大词数** | 设置每条字幕的最大词数。 |\n| **配置章节间的静音时长** | 设置章节间静音的时长（单位：秒）。 |\n| **配置日志窗口的最大行数** | 设置日志窗口最多显示的行数。 |\n| **分章节音频格式** | 将分章节的音频格式配置为 `wav`、`flac`、`mp3` 或 `opus`。 |\n| **创建桌面快捷方式** | 在桌面上创建快捷方式，方便快速访问。 |\n| **打开配置目录** | 打开存储配置文件的目录。 |\n| **打开缓存目录** | 打开存储已转换文本文件的缓存目录。 |\n| **清除缓存文件** | 删除在转换或预览过程中生成的缓存文件。 |\n| **在字幕间使用静音间隔** | 通过让语音延续到字幕条目之间的静音间隔，避免不必要的音频加速。简而言之，它会忽略字幕条目的结束时间，直接利用静音空间直到下一条字幕开始。若关闭此选项，则音频会按照字幕中指定的时间间隔进行加速。（适用于字幕文件） |\n| **字幕速度调整方式** | 选择在需要时加速音频的方式：`TTS 重新生成（质量更好）` 会以更快的速度重新生成音频，而 `FFmpeg 时间拉伸（速度更快）` 则会快速加速已生成的音频。（适用于字幕文件） |\n| **使用 spaCy 进行句子分割** | 启用此选项后，Abogen 将使用 [spaCy](https:\u002F\u002Fspacy.io\u002F) 更准确地检测句子边界，而不是仅依靠标点符号（如句号、问号等）来分割句子，从而避免错误地截断“Mr.”或“Dr.”等称谓短语。借助 spaCy，句子划分将更加精准。对于非英语文本，spaCy 会在音频生成 **之前** 运行以创建句子片段；而对于英语文本，则会在字幕生成 **期间** 运行，以改善时间同步性和可读性。spaCy 仅在字幕模式为 `句子` 或 `句子+逗号` 时使用。如果您更倾向于传统的标点符号分割方法，可以关闭此选项。 |\n| **预先下载模型和语音以供离线使用** | 打开一个窗口，显示可用的模型和语音。点击 `全部下载` 按钮即可下载所有必需的模型和语音，使您能够在完全无网络连接的情况下离线使用 Abogen。 |\n| **禁用 Kokoro 的互联网访问** | 阻止 Kokoro 从 HuggingFace Hub 下载模型或语音，适合离线使用。 |\n| **启动时检查更新** | 程序启动时自动检查更新。 |\n| **恢复默认设置** | 将所有设置重置为默认值。 |\n\n> 特别感谢 [@robmckinnon](https:\u002F\u002Fgithub.com\u002Frobmckinnon) 在 PR [#65](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F65) 中添加了“句子+高亮”功能。\n\n## `语音混合器`\n\u003Cimg title=\"Abogen 语音混合器\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_3207ecf85f10.png'>\n\n通过语音混合器，您可以混合不同的语音模型来创建自定义语音。您可以调整每种语音的权重，并将自定义语音保存为个人配置，以便日后使用。语音混合器让您能够创造出独特且个性化的语音。\n\n> 特别感谢 [@jborza](https:\u002F\u002Fgithub.com\u002Fjborza) 通过他在 [#5](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F5) 中的贡献，使这一功能成为可能。\n\n## `队列模式`\n\u003Cimg title=\"Abogen 队列模式\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_a14e95e8d85b.png'>\n\nAbogen 支持**队列模式**，允许您将多个文件添加到处理队列中。如果您希望一次性转换多个文件，此功能非常有用。\n\n- 您可以使用队列管理器中的**添加文件**按钮，或直接将文本文件（`.txt`）和字幕文件（`.srt`、`.ass`、`.vtt`）拖放到队列列表中来添加这些文件。要添加 PDF、EPUB 或 Markdown 文件，请使用主窗口中的输入框并单击**添加到队列**按钮。\n- 队列中的每个文件会保留其添加时所使用的配置设置。之后更改主窗口的配置**不会**影响已加入队列的文件。\n- 您可以启用**用当前选择覆盖项目设置**选项，以强制队列中的所有项目使用主窗口中当前选定的配置，从而覆盖它们保存的设置。\n- 您可以通过将鼠标悬停在每个文件上来查看其配置。\n\nAbogen 会自动处理队列中的每个项目，并按照配置保存输出文件。\n\n> 特别感谢 [@jborza](https:\u002F\u002Fgithub.com\u002Fjborza) 在 PR [#35](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F35) 中添加了队列模式\n\n---\n# 🌐 Web 应用程序 (WebUI)\n\n## `如何运行？`\n\n运行以下命令启动 Web UI：\n\n```bash\nabogen-web\n```\n然后打开 http:\u002F\u002Flocalhost:8808，并将您的文档拖入其中。作业会在后台工作进程中运行，浏览器会自动更新。\n\n\u003Cimg title=\"Abogen 运行中\" src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_f343f60ca749.png'> \n\n## `使用 Web UI`\n1. 上传文档（拖放或使用上传按钮）。\n2. 选择语音、语言、语速、字幕样式和输出格式。\n3. 单击**创建作业**。该作业会立即出现在队列中。\n4. 实时查看进度和日志更新。完成时下载音频\u002F字幕文件。\n5. 随时取消或删除作业。下载日志以进行故障排除。\n\n多个作业可以按顺序运行；工作进程会依次处理它们。\n\n## `容器镜像`\n您可以直接从仓库根目录构建一个轻量级容器镜像：\n\n```bash\ndocker build -t abogen .\nmkdir -p ~\u002Fabogen-data\u002Fuploads ~\u002Fabogen-data\u002Foutputs\ndocker run --rm \\\n  -p 8808:8808 \\\n  -v ~\u002Fabogen-data:\u002Fdata \\\n  --name abogen \\\n  abogen\n```\n\n浏览至 http:\u002F\u002Flocalhost:8808。上传的源文件存储在 `\u002Fdata\u002Fuploads` 中，生成的音频\u002F字幕则显示在 `\u002Fdata\u002Foutputs` 中。\n\n### 容器环境变量\n| 变量 | 默认值 | 用途 |\n|----------|---------|---------|\n| `ABOGEN_HOST` | `0.0.0.0` | Flask 服务器的绑定地址 |\n| `ABOGEN_PORT` | `8808` | HTTP 端口 |\n| `ABOGEN_DEBUG` | `false` | 启用 Flask 调试模式 |\n| `ABOGEN_UPLOAD_ROOT` | `\u002Fdata\u002Fuploads` | 存储上传文件的目录 |\n| `ABOGEN_OUTPUT_ROOT` | `\u002Fdata\u002Foutputs` | 生成音频和字幕的目录（`ABOGEN_OUTPUT_DIR` 的旧别名） |\n| `ABOGEN_OUTPUT_DIR` | `\u002Fdata\u002Foutputs` | 容器中渲染音频\u002F字幕的路径 |\n| `ABOGEN_SETTINGS_DIR` | `\u002Fconfig` | 容器中 JSON 设置\u002F配置的路径 |\n| `ABOGEN_TEMP_DIR` | `\u002Fdata\u002Fcache`（Docker）或平台缓存目录 | 容器中临时音频工作文件的路径 |\n| `ABOGEN_UID` | `1000` | 容器应以之运行的 UID（与主机用户匹配） |\n| `ABOGEN_GID` | `1000` | 容器应以之运行的 GID（与主机组匹配） |\n| `ABOGEN_LLM_BASE_URL` | `\"\"` | 用于填充“设置 → LLM”面板的 OpenAI 兼容端点 |\n| `ABOGEN_LLM_API_KEY` | `\"\"` | 传递给上述端点的 API 密钥 |\n| `ABOGEN_LLM_MODEL` | `\"\"` | 刷新模型列表时默认选择的模型 |\n| `ABOGEN_LLM_TIMEOUT` | `30` | 服务器端 LLM 请求的超时时间（秒） |\n| `ABOGEN_LLM_CONTEXT_MODE` | `sentence` | 默认提示上下文窗口（`sentence`、`paragraph`、`document`） |\n| `ABOGEN_LLM_PROMPT` | `\"\"` | 种子输入到 UI 中的自定义规范化提示模板 |\n\n您可以在启动容器时使用 `-e VAR=value` 来设置这些变量。\n\n要查找本地的 UID\u002FGID 以便在容器内匹配文件权限，请运行：\n\n```bash\nid -u\nid -g\n```\n\n使用这些值填充 `.env` 文件中的 `ABOGEN_UID` 和 `ABOGEN_GID`。\n\n通过 Docker Compose 运行时，将 `.env` 文件中的 `ABOGEN_SETTINGS_DIR`、`ABOGEN_OUTPUT_DIR` 和 `ABOGEN_TEMP_DIR` 设置为您希望挂载到容器中的主机目录。Compose 会将它们分别映射到 `\u002Fconfig`、 `\u002Fdata\u002Foutputs` 和 `\u002Fdata\u002Fcache`，同时将这些容器内的路径导出给应用程序。非音频缓存（例如 Hugging Face 下载）默认会保留在容器内部的 `\u002Ftmp\u002Fabogen-home\u002F.cache` 目录下，因此只有转换过程中的临时数据才会接触到挂载的 `ABOGEN_TEMP_DIR`。请确保每个主机目录都存在，并且您配置的 UID\u002FGID 对其具有写入权限，然后再启动堆栈。\n\n### Docker Compose（默认使用 GPU）\n该仓库包含 `docker-compose.yaml` 文件，默认针对配备 GPU 的主机。安装 NVIDIA Container Toolkit 并运行：\n\n```bash\ndocker compose up -d --build\n```\n\n关键构建\u002F运行参数：\n\n- `TORCH_VERSION` – 锁定与您的驱动程序匹配的特定 PyTorch 版本（留空则使用配置索引中的最新版本）。\n- `TORCH_INDEX_URL` – 当您使用不同的 CUDA 构建时，可更换 PyTorch 下载索引。\n- `ABOGEN_DATA` – 存储上传\u002F输出文件的主机路径（默认为 `.\u002Fdata`）。\n\n仅 CPU 部署：注释掉 compose 文件中的 `deploy.resources.reservations.devices` 块（以及可选的 `runtime: nvidia` 行）。Compose 将不再请求 GPU。如果您更喜欢经典 CLI：\n\n```bash\ndocker build -f abogen\u002FDockerfile -t abogen-gpu .\ndocker run --rm \\\n  --gpus all \\\n  -p 8808:8808 \\\n  -v ~\u002Fabogen-data:\u002Fdata \\\n  abogen-gpu\n```\n\n## `LLM 辅助文本规范化`\nAbogen 可以将棘手的撇号和缩略形式交由兼容 OpenAI 的大型语言模型处理。您可以从**设置 → LLM** 中进行配置：\n\n1. 输入您的端点的基本 URL（Ollama、OpenAI 代理等），如果需要，还需提供 API 密钥。使用服务器根路径（对于 Ollama：`http:\u002F\u002Flocalhost:11434`）——Abogen 会自动附加 `\u002Fv1\u002F...`，但也可以接受已经以 `\u002Fv1` 结尾的输入。\n2. 单击**刷新模型**加载目录，选择默认模型，并调整超时时间或提示模板。\n3. 使用预览框测试提示，然后保存设置。规范化面板可以使用当前配置合成一段简短的音频预览。\n\n当您在 Docker 或 CI 流水线中运行时，可通过 `.env` 文件中的 `ABOGEN_LLM_*` 变量自动填充表单。`.env.example` 文件包含本地 Ollama 服务器的示例值。\n\n## `Audiobookshelf 集成`\nAbogen 可以将完成的有声书直接推送至 Audiobookshelf。您可以在 **设置 → 集成 → Audiobookshelf** 中进行配置，提供以下信息：\n\n- **基础 URL** – 您的 Audiobookshelf 服务器可通过 HTTPS 访问的源（以及可选的路径前缀），例如 `https:\u002F\u002Fabs.example.com` 或 `https:\u002F\u002Fmedia.example.com\u002Fabs`。请**不要**在末尾添加 `\u002Fapi`。\n- **库 ID** – 目标 Audiobookshelf 库的标识符（从 ABS 的库设置页面复制）。\n- **文件夹（名称或 ID）** – 该库内的目标文件夹。请准确输入文件夹名称（Abogen 会自动将其解析为正确的 ID），粘贴原始的 `folderId`，或点击 **浏览文件夹** 来获取可用文件夹并填充字段。\n- **API 令牌** – 在 Audiobookshelf 的 *账户 → API 令牌* 中生成的个人访问令牌。\n\n连接成功后，您可以为未来的任务启用自动上传，也可以从队列中触发单个上传。\n\n### 反向代理检查清单（Nginx Proxy Manager）\n当 Audiobookshelf 部署在 Nginx Proxy Manager (NPM) 后面时，请确保 API 路径和头部信息能够原封不动地传递到后端：\n\n1. 创建一个指向您的 ABS 容器或主机的 **代理主机**（默认转发端口为 `13378`）。\n2. 在 **SSL** 选项卡中，启用您的证书，并勾选 **强制使用 SSL**（如果您仅希望使用 HTTPS）。\n3. 在 **高级** 选项卡中，添加以下代码片段，以确保承载令牌、客户端 IP 和大文件上传能够顺利通过代理：\n   ```nginx\n  proxy_set_header Host $host;\n  proxy_set_header X-Real-IP $remote_addr;\n  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  proxy_set_header X-Forwarded-Proto $scheme;\n  proxy_set_header X-Forwarded-Host $host;\n  proxy_set_header X-Forwarded-Port $server_port;\n  proxy_set_header Authorization $http_authorization;\n  client_max_body_size 5g;\n  proxy_read_timeout 300s;\n  proxy_connect_timeout 300s;\n   ```\n4. 禁用 **阻止常见漏洞** 功能（在某些 NPM 版本中，此功能会剥离 Authorization 头部）。\n5. 在主代理界面中启用 **WebSockets 支持**（Audiobookshelf 使用它来提供 Web 界面，并保持反向代理配置的一致性）。\n6. 如果您在路径前缀下发布 Audiobookshelf（例如 `\u002Fabs`），则需添加一个 **自定义位置**，设置 `Location: \u002Fabs\u002F`，并将 **转发路径** 设置为 `\u002F`。这样可以去除 `\u002Fabs` 前缀，使互联网上的 `\u002Fabs\u002Fapi\u002F...` 在后端变为 `\u002Fapi\u002F...`。请在 Abogen 的“基础 URL”字段中使用相同的带前缀的 URL。\n\n保存代理主机后，从运行 Abogen 的机器上测试 API：\n\n```bash\ncurl -i \"https:\u002F\u002Fabs.example.com\u002Fapi\u002Flibraries\" \\\n  -H \"Authorization: Bearer YOUR_API_TOKEN\"\n```\n\n如果仍然收到 `Cannot GET \u002Fapi\u002F...` 错误，则说明代理正在重写路径。请再次检查 **自定义位置** 表格（`转发路径` 列应为空），并在发出 curl 请求时查看 NPM 的访问日志和错误日志，以确认后端接收到完整的 `\u002Fapi\u002Flibraries` URL。\n\n如果返回包含库列表的 JSON 响应，则表示代理已正确路由 API 请求。随后，您可以使用 **浏览文件夹** 功能确认库内容，在 Abogen 的设置中运行 **测试连接**（验证库并解析文件夹），并在已完成的任务上使用“发送至 Audiobookshelf”按钮。\n\n## `JSON 端点`\n需要机器可读的状态更新吗？仪表板会调用一组辅助端点，您可以重复使用：\n- `GET \u002Fapi\u002Fjobs\u002F\u003Cid>` 以 JSON 格式返回作业元数据、进度和日志条目。\n- `GET \u002Fpartials\u002Fjobs` 以 HTML 格式渲染实时作业列表（htmx 使用此功能进行轮询）。\n- `GET \u002Fpartials\u002Fjobs\u002F\u003Cid>\u002Flogs` 仅渲染日志窗口。\n\n更多自动化钩子正在规划中；如果您需要额外的路由，欢迎贡献代码。\n\n---\n# 核心功能（两者均适用）\n\n## `关于章节标记`\n当您处理 ePUB、PDF 或 Markdown 文件时，Abogen 会将它们转换为文本文件，并存储在您的缓存目录中。点击“编辑”时，您实际上是在修改这些转换后的文本文件。在这些文本文件中，您会看到类似如下的标签：\n\n```\n\u003C\u003CCHAPTER_MARKER:章标题>>\n```\n这些就是章节标记。它们会在您处理 ePUB、PDF 或 Markdown 文件时，根据您选择的章节自动添加。它们具有重要作用：\n- 允许您将文本按章节分割成单独的音频文件\n- 节省时间，当出现错误时，只需重新处理特定章节，而无需重新处理整个文件\n\n您也可以手动将这些标记添加到纯文本文件中，以获得相同的好处。只需在文本中加入如下内容：\n\n```\n\u003C\u003CCHAPTER_MARKER:引言>>\n这是我的文本开头……  \n\n\u003C\u003CCHAPTER_MARKER:正文>> \n这里是另一部分内容……  \n```\n当您处理该文本文件时，Abogen 会自动检测到这些标记，并询问您是否要分别保存每个章节，同时创建合并版本。\n\n![Abogen 章节标记](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_a1342b357617.png)\n\n## `关于元数据标签`\n与章节标记类似，您也可以为 `M4B` 文件添加元数据标签。这对于支持元数据的有声书播放器非常有用，可以让您添加标题、作者、年份等信息。Abogen 在处理 ePUB、PDF 或 Markdown 文件时会自动添加这些标签，但您也可以手动将其添加到文本文件中。请在文本文件的**开头**添加元数据标签，格式如下：\n```\n\u003C\u003CMETADATA_TITLE:标题>>\n\u003C\u003CMETADATA_ARTIST:作者>>\n\u003C\u003CMETADATA_ALBUM:专辑标题>>\n\u003C\u003CMETADATA_YEAR:年份>>\n\u003C\u003CMETADATA_ALBUM_ARTIST:专辑艺人>>\n\u003C\u003CMETADATA_COMPOSER:旁白者>>\n\u003C\u003CMETADATA_GENRE:有声书>>\n\u003C\u003CMETADATA_COVER_PATH:封面图片路径.jpg>>\n```\n> 注意：`METADATA_COVER_PATH` 用于将封面图片嵌入生成的 M4B 文件中。Abogen 会自动从 ePUB 和 PDF 文件中提取封面，并为您添加此标签。\n\n## `关于基于时间戳的文本文件`\n与将字幕文件转换为音频类似，Abogen 可以自动检测包含 `HH:MM:SS`、`HH:MM:SS,ms` 或 `HH:MM:SS.ms` 格式时间戳的文本文件。当在您的文本文件中找到时间戳时，Abogen 会询问您是否希望将其用于音频定时。这对于创建需要精确控制每个片段播放时间的旁白、脚本或文字稿非常有用。\n\n请按以下格式编写您的文本文件：\n```\n00:00:00\n这是第一段文字。\n\n00:00:15\n这是第二段文字，从第 15 秒开始。\n\n00:00:45\n这是第三段文字，从第 45 秒开始。\n```\n\n**重要提示：**\n- 时间戳必须采用 `HH:MM:SS`、`HH:MM:SS,ms` 或 `HH:MM:SS.ms` 格式（例如，`00:05:30` 表示 5 分 30 秒，`00:05:30.500` 表示 5 分 30.5 秒）。\n- 毫秒部分是可选的，可提供精确到千分之一秒的时间精度。\n- 第一个时间戳之前的文本内容将自动从 `00:00:00` 开始。\n- 使用时间戳时，字幕生成模式设置将被忽略。\n\n## `支持的语言`\n```\n# 🇺🇸 'a' => 美式英语，🇬🇧 'b' => 英式英语\n# 🇪🇸 'e' => 西班牙语 es\n# 🇫🇷 'f' => 法语 fr-fr\n# 🇮🇳 'h' => 印地语 hi\n# 🇮🇹 'i' => 意大利语 it\n# 🇯🇵 'j' => 日语：pip install misaki[ja]\n# 🇧🇷 'p' => 巴西葡萄牙语 pt-br\n# 🇨🇳 'z' => 普通话：pip install misaki[zh]\n```\n有关支持的语言和语音的完整列表，请参阅 Kokoro 的 [VOICES.md](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M\u002Fblob\u002Fmain\u002FVOICES.md) 文件。如需收听示例音频输出，请查看 [SAMPLES.md](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M\u002Fblob\u002Fmain\u002FSAMPLES.md) 文件。\n\n> 请参阅 [如何解决日语音频无法正常工作的问题？](#japanese-audio-not-working)\n\n---\n# 使用指南与故障排除\n\n## `MPV 配置`\n我强烈建议使用 [MPV](https:\u002F\u002Fmpv.io\u002Finstallation\u002F) 播放您的音频文件，因为它即使没有视频轨道也能显示字幕。以下是我的 `mpv.conf` 配置：\n```\n# --- MPV 设置 ---\nsave-position-on-quit\nkeep-open=yes\naudio-display=no\n# --- 字幕 ---\nsub-ass-override=no\nsub-margin-y=50\nsub-margin-x=50\n# --- 音质 ---\naudio-spdif=ac3,dts,eac3,truehd,dts-hd\naudio-channels=auto\naudio-samplerate=48000\nvolume-max=200\n```\n\n## `类似项目`\nAbogen 是一个独立项目，但它受到其他项目的启发，并与之有一些相似之处。以下是一些相关项目：\n- [audiblez](https:\u002F\u002Fgithub.com\u002Fsantinic\u002Faudiblez)：从电子书生成有声读物。**（同时支持命令行和图形界面）**\n- [autiobooks](https:\u002F\u002Fgithub.com\u002Fplusuncold\u002Fautiobooks)：自动将 EPUB 文件转换为有声读物。\n- [pdf-narrator](https:\u002F\u002Fgithub.com\u002Fmateogon\u002Fpdf-narrator)：轻松将 PDF 和 EPUB 文件转换为有声读物。\n- [epub_to_audiobook](https:\u002F\u002Fgithub.com\u002Fp0n1\u002Fepub_to_audiobook)：EPUB 到有声读物转换工具，专为 Audiobookshelf 优化。\n- [ebook2audiobook](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook)：利用动态 AI 模型和语音克隆技术，将电子书转换为带有章节和元数据的有声读物。\n\n## `路线图`\n- [ ] 添加使用 docling\u002FTesseract 对 PDF 文件进行 OCR 扫描的功能。\n- [x] 为 .m4a 文件添加章节元数据。（问题 [#9](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F9)，拉取请求 [#10](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F10)）\n- [ ] 在图形界面上增加对多种语言的支持。\n- [x] 添加语音混合功能，允许混合不同的语音模型。（问题 [#1](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F1)，拉取请求 [#5](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F5)）\n- [ ] 如果有必要，增加对 kokoro-onnx 的支持。\n- [x] 添加深色模式。\n\n## `故障排除`\n如果您在运行 Abogen 时遇到任何问题，请尝试通过命令行启动：\n```\nabogen-cli\n```\n\n如果您是通过 Windows 安装程序 `(WINDOWS_INSTALL.bat)` 安装的，请前往 `python_embedded\u002FScripts` 目录并运行：\n```\nabogen-cli.exe\n```\n\n这将以命令行模式启动 Abogen，并显示详细的错误信息。请在 [Issues](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues) 页面上提交新问题，附上错误信息及您的问题描述。\n\n## `常见问题与解决方案`\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"about-abogen\">关于“abogen”这个名字\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> 名字 **\"abogen\"** 来自于 **\"audiobook generator\"** 的缩写，而这也是这个项目的初衷。  \n>\n> 在项目发布之后，我从 [社区反馈](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=44853064#44857237) 中了解到，“abo” 这个前缀在某些地区（尤其是澳大利亚和新西兰）可能会被误解为种族歧视用语。由于英语并非我的母语，在命名时我并没有意识到这一点。  \n>\n> 我想明确的是，这个名字仅仅是为了表达其技术含义而取的，**并无任何冒犯之意**。感谢那些善意指出这一问题的人，这有助于确保项目对所有人保持尊重和友好。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"cuda-warning\">如何解决“CUDA GPU 不可用。正在使用 CPU”警告？\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> 这条消息表示 PyTorch 无法使用您的 GPU，因此回退到了 CPU。在 Windows 系统上，Abogen 仅支持配备 CUDA 的 NVIDIA 显卡。Windows 上不支持 AMD 显卡（AMD 显卡仅在 Linux 系统上通过 ROCm 支持）。尽管 Abogen 仍然可以在 CPU 上运行，但相比支持的 GPU，处理速度会慢很多。\n>\n> 如果您在 Windows 上拥有兼容的 NVIDIA 显卡，但仍看到此警告：\n> 请在 Abogen 文件夹（包含 `python_embedded` 的文件夹）中打开终端，并输入以下命令：\n> ```bash\n> python_embedded\\python.exe -m pip install --force-reinstall torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n> ```\n>\n> 如果上述方法仍未能解决问题，并且您使用的是不支持 CUDA 12.8 的旧款 NVIDIA 显卡，您可以尝试安装一个支持您显卡的较旧版本的 PyTorch。例如，对于 CUDA 12.6，请运行：\n> ```bash\n> python_embedded\\python.exe -m pip install --force-reinstall torch==2.8.0+cu126 torchvision==0.23.0+cu126 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu126\n> ```\n>\n> 如果您使用的是 AMD 显卡，则需要切换到 Linux 系统并按照 Linux\u002FROCm 的[说明](#linux)进行操作。如果您希望继续在 CPU 上运行，则无需采取任何措施，只是性能会有所下降。更多详情请参阅 [#32](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F32)。\n>\n> 如果您使用 `uv` 安装了 Abogen，可以先卸载，然后尝试使用另一个 CUDA 版本来重新安装：\n> ```bash\n> # 首先卸载 Abogen\n> uv tool uninstall abogen\n> # 对于较旧驱动程序，尝试 CUDA 12.6\n> uv tool install --python 3.12 abogen[cuda126] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu126 --index-strategy unsafe-best-match\n> # 如果仍然不行，再尝试 CUDA 13.0，适用于较新驱动程序\n> uv tool install --python 3.12 abogen[cuda130] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu130 --index-strategy unsafe-best-match\n> ```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"path-warning\">如何修复 Linux 系统中的“WARNING: The script abogen-cli is installed in '\u002Fhome\u002Fusername\u002F.local\u002Fbin' which is not on PATH”错误？\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> 请运行以下命令将 Abogen 添加到您的 PATH 环境变量中：\n> ```bash\n> echo \"export PATH=\\\"\u002Fhome\u002F$USER\u002F.local\u002Fbin:\\$PATH\\\"\" >> ~\u002F.bashrc && source ~\u002F.bashrc\n> ```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"no-matching-distribution-found\">如何解决“No matching distribution found”错误？\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> 请尝试在受支持的 Python 版本（3.10 至 3.12）上安装 Abogen。推荐使用 [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F) 进行安装。您也可以使用 [pyenv](https:\u002F\u002Fgithub.com\u002Fpyenv\u002Fpyenv) 在 Linux 系统上轻松管理多个 Python 版本。观看 NetworkChuck 的这个[视频](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=MVyb-nI4KyI)可以获得快速指南。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"WinError-1114\">如何解决“[WinError 1114] 动态链接库 (DLL) 初始化例程失败”错误？\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> 我在尝试在一个没有 GPU 支持的虚拟 Windows 机器上运行 Abogen 时遇到了这个错误。以下是解决方法：\n> 如果您使用 Windows 安装程序 `(WINDOWS_INSTALL.bat)` 安装了 Abogen，请进入 Abogen 的文件夹（包含 `python_embedded` 的文件夹），在该目录下打开终端并运行：\n> ```bash\n> python_embedded\\python.exe -m pip install --force-reinstall torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n> ```\n> 如果您使用 pip 安装了 Abogen，请在虚拟环境的终端中运行：\n> ```bash\n> pip install torch==2.8.0 torchaudio==2.8.0 torchvision==0.23.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n> ```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"japanese-audio-not-working\">如何解决日语音频无法播放的问题？\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> 日语音频可能需要额外的配置。  \n> 我目前还不确定具体的解决方案，但似乎与为 Kokoro 安装支持日语的附加依赖有关。请查看 [#56](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F56) 获取更多信息。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>\u003Cb>\n\u003Ca name=\"use-uv-instead-of-pip\">如何卸载 Abogen？\u003C\u002Fa>\n\u003C\u002Fb>\u003C\u002Fsummary>\n\n> - 从设置菜单中，选择 `Open configuration directory` 并删除该目录。  \n> - 从设置菜单中，选择 `Open cache directory` 并删除该目录。  \n> - 如果您使用 pip 安装了 Abogen，请输入以下命令：  \n> ```bash\n> pip uninstall abogen # 卸载 Abogen\n> pip cache purge # 清除 pip 缓存\n> ```\n> - 如果您使用 uv 安装了 Abogen，请输入以下命令：  \n> ```bash\n> uv tool uninstall abogen # 卸载 Abogen\n> uv cache clear # 清除 uv 缓存\n> ```\n> - 如果您使用 Windows 安装程序 `(WINDOWS_INSTALL.bat)` 安装了 Abogen，只需删除包含 Abogen 的文件夹即可。它会将所有内容安装在 `python_embedded` 文件夹内，不会创建其他目录。  \n> - 如果您还安装了 espeak-ng，需要单独将其移除。\n\n\u003C\u002Fdetails>\n\n## `贡献`\n我欢迎各位的贡献！如果您有新的功能、改进或 bug 修复的想法，请直接 fork 该项目并提交 pull request。\n\n### 针对开发者和贡献者\n如果您希望修改代码并参与开发，可以[下载仓库](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Farchive\u002Frefs\u002Fheads\u002Fmain.zip)，解压后运行以下命令来构建**或**安装软件包：\n```bash\n# 进入您解压后的仓库目录并执行：\npip install -e .[dev]       # 以可编辑模式安装软件包，并包含构建依赖\npython -m build             # 将软件包构建到 dist 文件夹中（可选）\nabogen                      # 打开 GUI\n```\n> 请确保您使用的是 Python 3.10 到 3.12 版本。如有需要，请创建虚拟环境。\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>替代方案：使用 uv（点击展开）\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\n# 进入您解压后的仓库目录并执行：\nuv venv --python 3.12       # 创建一个基于 Python 3.12 的虚拟环境\n\n# 激活虚拟环境后，运行：\nuv pip install -e .         # 以可编辑模式安装包\nuv build                    # 在 dist 文件夹中构建包（可选）\nabogen                      # 打开 GUI\n```\n\n\u003C\u002Fdetails>\n\n欢迎探索代码并根据需要进行修改。\n\n## `致谢`\n- Web UI 实现由 [@jeremiahsb](https:\u002F\u002Fgithub.com\u002Fjeremiahsb) 完成\n- Abogen 使用 [Kokoro](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro) 进行高质量、自然流畅的文本转语音合成。衷心感谢 Kokoro 团队使这一切成为可能。\n- 感谢 [spaCy](https:\u002F\u002Fspacy.io\u002F) 项目提供的句子分割工具，这些工具帮助 Abogen 生成更清晰、更自然的句子分割结果。\n- 感谢 [@wojiushixiaobai](https:\u002F\u002Fgithub.com\u002Fwojiushixiaobai) 提供的 [Embedded Python](https:\u002F\u002Fgithub.com\u002Fwojiushixiaobai\u002FPython-Embed-Win64) 包。这些经过修改的包已预装 pip，使得 Abogen 可以作为独立应用程序运行，而无需用户在 Windows 系统上单独安装 Python。\n- 感谢 [EbookLib](https:\u002F\u002Fgithub.com\u002Faerkalov\u002Febooklib) 的开发者，这是一个用于读取和写入 ePub 文件的 Python 库，Abogen 利用它从 ePub 文件中提取文本。\n- 特别感谢 [PyQt](https:\u002F\u002Fwww.riverbankcomputing.com\u002Fsoftware\u002Fpyqt\u002F) 团队，他们提供了跨平台的 GUI 工具包，为 Abogen 的界面提供了支持。\n- 图标：[美国](https:\u002F\u002Ficons8.com\u002Ficon\u002FaRiu1GGi6Aoe\u002Fusa)、[英国](https:\u002F\u002Ficons8.com\u002Ficon\u002Ft3NE3BsOAQwq\u002Fgreat-britain)、[西班牙](https:\u002F\u002Ficons8.com\u002Ficon\u002Fly7tzANRt33n\u002Fspain)、[法国](https:\u002F\u002Ficons8.com\u002Ficon\u002F3muzEmi4dpD5\u002Ffrance)、[印度](https:\u002F\u002Ficons8.com\u002Ficon\u002FesGVrxg9VCJ1\u002Findia)、[意大利](https:\u002F\u002Ficons8.com\u002Ficon\u002FPW8KZnP7qXzO\u002Fitaly)、[日本](https:\u002F\u002Ficons8.com\u002Ficon\u002FMcQbrq9qaQye\u002Fjapan)、[巴西](https:\u002F\u002Ficons8.com\u002Ficon\u002FzHmH8HpOmM90\u002Fbrazil)、[中国](https:\u002F\u002Ficons8.com\u002Ficon\u002FEj50Oe3crXwF\u002Fchina)、[女性](https:\u002F\u002Ficons8.com\u002Ficon\u002FuI49hxbpxTkp\u002Ffemale)、[男性](https:\u002F\u002Ficons8.com\u002Ficon\u002F12351\u002Fmale)、[调整](https:\u002F\u002Ficons8.com\u002Ficon\u002F21698\u002Fadjust) 和 [语音 ID](https:\u002F\u002Ficons8.com\u002Ficon\u002FGskSeVoroQ7u\u002Fvoice-id) 图标均由 [Icons8](https:\u002F\u002Ficons8.com\u002F) 提供。\n\n## `许可证`\n本项目采用 MIT 许可证授权——详情请参阅 [LICENSE](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fblob\u002Fmain\u002FLICENSE) 文件。\n\n[Kokoro](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro) 采用 [Apache-2.0](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro\u002Fblob\u002Fmain\u002FLICENSE) 许可证，允许商业使用、修改、分发及私人使用。\n\n## `星标历史`\n[![星标历史图表](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_readme_fef71dd6bb89.png)](https:\u002F\u002Fwww.star-history.com\u002F#denizsafak\u002Fabogen&Date)\n\n> [!注意]\n> Abogen 支持所有语言的字幕生成。然而，单词级字幕模式（例如“1 个词”、“2 个词”、“3 个词”等）仅适用于英语，因为 [Kokoro 仅为英语文本提供时间戳标记](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro\u002Fblob\u002F6d87f4ae7abc2d14dbc4b3ef2e5f19852e861ac2\u002Fkokoro\u002Fpipeline.py#L383)。对于非英语语言，Abogen 会使用基于时长的回退方案，支持句子级和逗号分隔的字幕模式（“行”、“句子”、“句子 + 逗号”）。如果您需要其他语言的单词级字幕，请在 [Kokoro 项目](https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro) 中提出该功能请求。\n\n> 标签：有声书、Kokoro、文本转语音、TTS、有声书生成器、有声书、文本转语音、有声书制作工具、有声书创作者、有声书生成软件、语音合成、文本转音频、文本转音频转换器、文本转语音转换器、文本转语音生成器、文本转语音软件、文本转语音应用、ePub 转音频、PDF 转音频、Markdown 转音频、字幕转音频、SRT 转音频、ASS 转音频、VTT 转音频、WebVTT 转音频、内容创作、媒体生成","# Abogen 快速上手指南\n\nAbogen 是一款强大的文本转语音（TTS）工具，基于 [Kokoro-82M](https:\u002F\u002Fhuggingface.co\u002Fhexgrad\u002FKokoro-82M) 模型，支持将 ePub、PDF、TXT、Markdown 及字幕文件转换为高质量音频，并自动生成同步字幕。适用于有声书制作、视频配音等场景。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Windows, macOS (Intel\u002FSilicon), Linux\n- **Python 版本**: 推荐 Python 3.12 (macOS Silicon 推荐 3.13)\n- **硬件加速**:\n    - **NVIDIA GPU**: 支持 CUDA (Windows\u002FLinux\u002FmacOS)\n    - **AMD GPU**: 仅 Linux 支持 ROCm 加速\n    - **CPU**: 所有平台通用（速度较慢）\n\n### 前置依赖\n无论使用何种安装方式，均需先安装 **espeak-ng**：\n- **Windows**: 下载并运行 [espeak-ng 最新安装包 (.msi)](https:\u002F\u002Fgithub.com\u002Fespeak-ng\u002Fespeak-ng\u002Freleases\u002Flatest)。\n- **macOS**: 执行 `brew install espeak-ng`。\n- **Linux**:\n    - Ubuntu\u002FDebian: `sudo apt install espeak-ng`\n    - Arch Linux: `sudo pacman -S espeak-ng`\n    - Fedora: `sudo dnf install espeak-ng`\n\n> **注意**: 国内用户若无法访问 GitHub 或 PyPI，建议配置 pip\u002Fuv 国内镜像源（如清华源、阿里源）。\n\n## 安装步骤\n\n推荐使用 **uv** 进行安装，它会自动管理 Python 环境和依赖。\n\n### 方式一：使用 uv 安装（推荐）\n\n首先安装 [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F)。\n\n#### 1. Windows\n```bash\n# NVIDIA GPU (CUDA 12.8 - 推荐)\nuv tool install --python 3.12 abogen[cuda] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128 --index-strategy unsafe-best-match\n\n# 无 GPU 或使用 AMD GPU (AMD 在 Windows 上需使用 CPU 模式)\nuv tool install --python 3.12 abogen\n```\n*注：Windows 用户也可下载项目源码包，双击运行 `WINDOWS_INSTALL.bat` 脚本自动安装（仍需手动安装 espeak-ng）。*\n\n#### 2. macOS\n```bash\n# Apple Silicon (M1\u002FM2\u002FM3 等)\nuv tool install --python 3.13 abogen --with \"kokoro @ git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git,numpy\u003C2\"\n\n# Intel Mac\nuv tool install --python 3.12 abogen --with \"kokoro @ git+https:\u002F\u002Fgithub.com\u002Fhexgrad\u002Fkokoro.git,numpy\u003C2\"\n```\n\n#### 3. Linux\n```bash\n# NVIDIA GPU 或 纯 CPU 模式\nuv tool install --python 3.12 abogen\n\n# AMD GPU (ROCm 6.4)\nuv tool install --python 3.12 abogen[rocm] --extra-index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fnightly\u002Frocm6.4 --index-strategy unsafe-best-match\n```\n\n### 方式二：使用 pip 安装（备选）\n\n若不使用 uv，可手动创建虚拟环境安装：\n\n```bash\n# 创建并激活虚拟环境\nmkdir abogen && cd abogen\npython -m venv venv\n# Windows: venv\\Scripts\\activate\n# Mac\u002FLinux: source venv\u002Fbin\u002Factivate\n\n# 安装基础包\npip install abogen\n\n# 若需 NVIDIA GPU 加速 (以 CUDA 12.8 为例)，需先安装特定版本 PyTorch\npip install torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n```\n\n## 基本使用\n\n安装完成后，可通过命令行启动图形界面或 Web 界面。\n\n### 1. 启动桌面客户端 (PyQt GUI)\n这是最稳定的核心功能界面，适合日常使用。\n\n```bash\nabogen\n```\n\n**操作流程：**\n1.  **导入文件**：拖拽 ePub、PDF、TXT、MD 或字幕文件到输入框，或直接粘贴文本。\n2.  **配置参数**：\n    *   **Speed**: 调整语速 (0.1x - 2.0x)。\n    *   **Select Voice**: 选择音色（格式为 `语言代码 + 性别`，如 `af` 代表美式英语女性，`bm` 代表英式英语男性）。\n    *   **Generate subtitles**: 选择字幕粒度（按句子、单词数等）。\n    *   **Output format**: 选择音频格式 (WAV, MP3, M4B 等)。\n3.  **开始转换**：点击 \"Start\" 按钮，等待处理完成。\n\n### 2. 启动 Web 界面 (功能更全)\n包含 Supertonic TTS、LLM 文本规范化及 Audiobookshelf 集成等新特性。\n\n```bash\nabogen-web\n```\n启动后在浏览器访问显示的本地地址（通常为 `http:\u002F\u002F127.0.0.1:5000`）即可使用。\n\n### 常用配置说明\n- **Voice Mixer**: 可在桌面端通过混合不同声音模型创建自定义音色。\n- **Chapter Control**: 处理电子书时，可选择特定章节或每章单独保存为音频文件。\n- **Queue Mode**: 支持添加多个文件进入队列，批量处理且每个文件可独立设置参数。","一位独立知识博主急需将刚出版的 EPUB 格式行业报告转化为短视频素材，以便在抖音和 YouTube 上快速发布系列解说视频。\n\n### 没有 abogen 时\n- **流程割裂繁琐**：需要先用转换器提取文本，再找单独的 TTS 工具生成音频，最后用字幕软件手动对齐时间轴，三个步骤极易出错。\n- **音质感差且昂贵**：免费语音合成听起来像机器人，缺乏情感；若追求自然拟人效果，往往需付费购买商业 API 或聘请专业配音员。\n- **同步耗时巨大**：为确保口播内容与画面字幕精准匹配，通常需要人工逐句调整字幕时间点，处理一章内容就要耗费数小时。\n- **格式兼容困难**：面对 PDF 或 Markdown 源文件，经常遇到排版错乱、公式识别错误等问题，前期清洗数据就让人头疼。\n\n### 使用 abogen 后\n- **一键全自动流转**：直接导入 EPUB 或 PDF 文件，abogen 自动完成文本解析、高质量语音生成及字幕同步，全程无需人工干预。\n- **拟人化语音输出**：内置 Kokoro-82M 模型，生成的音频语调自然、呼吸感强，听感接近真人主播，显著提升观众留存率。\n- **字幕完美卡点**：生成的音频自带毫秒级精准同步的字幕文件（SRT\u002FVTT），直接导入剪辑软件即可使用，彻底告别手动对齐。\n- **多格式无缝支持**：原生支持 EPUB、PDF、Markdown 等多种格式，智能保留段落结构，让技术文档也能轻松变身有声书。\n\nabogen 将原本需要半天的人工制作流程压缩至几分钟，让创作者能专注于内容策划而非繁琐的技术实现。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdenizsafak_abogen_a1342b35.png","denizsafak","Deniz Şafak","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fdenizsafak_c7bf982d.jpg","I am experienced with HTML, CSS, Javascript, SQL, PHP and little bit Python.",null,"https:\u002F\u002Fgithub.com\u002Fdenizsafak",[79,83,87,91,95,99,103],{"name":80,"color":81,"percentage":82},"Python","#3572A5",71,{"name":84,"color":85,"percentage":86},"JavaScript","#f1e05a",12.7,{"name":88,"color":89,"percentage":90},"HTML","#e34c26",11.7,{"name":92,"color":93,"percentage":94},"CSS","#663399",3.7,{"name":96,"color":97,"percentage":98},"Batchfile","#C1F12E",0.8,{"name":100,"color":101,"percentage":102},"Dockerfile","#384d54",0.1,{"name":104,"color":105,"percentage":102},"Shell","#89e051",4252,265,"2026-04-14T12:14:11","MIT","Windows, macOS, Linux","非必需（支持 CPU）。NVIDIA GPU 支持 CUDA 12.6\u002F12.8\u002F13.0；AMD GPU 仅在 Linux 上支持 ROCm 6.4。Windows 不支持 AMD GPU 加速。","未说明",{"notes":114,"python":115,"dependencies":116},"1. 所有平台必须先安装系统级依赖 'espeak-ng'。2. Windows 用户若使用脚本安装可自动配置 Python 和 CUDA 环境，否则需手动安装 espeak-ng。3. macOS Silicon (M1\u002FM2) 需安装 kokoro 的开发版以支持 MPS 加速，且需注意 numpy 版本小于 2。4. AMD 显卡用户在 Windows 下无法使用 GPU 加速，必须切换至 Linux。5. 提供桌面版 (PyQt6) 和 Web 版 (Flask) 两种界面，Web 版功能更新。","3.12 (macOS Silicon 推荐 3.13)",[117,118,119,120,121,122],"torch","kokoro-82M","espeak-ng","PyQt6","Flask","numpy\u003C2",[35,14,124],"音频",[126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145],"audiobook","audiobooks","content-creation","content-creator","epub-converter","kokoro","media-generation","narrator","speech-synthesis","subtitles","text-to-audio","text-to-speech","tts","voice-synthesis","kokoro-82m","kokoro-tts","ebook","epub","llm","voice-conversion","2026-03-27T02:49:30.150509","2026-04-16T08:15:24.456085",[149,154,159,164,169,174],{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},35269,"Windows 上运行安装脚本（.bat）或 pip 安装失败怎么办？","维护者已修复该问题。请重新运行 `WINDOWS_INSTALLER.bat` 脚本即可。如果之前安装失败，建议确保没有旧进程占用文件后重试。","https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F2",{"id":155,"question_zh":156,"answer_zh":157,"source_url":158},35270,"明明安装了 CUDA 和 PyTorch，为什么程序仍提示'CUDA GPU is not available'并使用 CPU？","这通常是因为虚拟环境的 Python 版本不兼容。如果您使用 `uv` 工具，请尝试使用兼容的 Python 版本（如 3.11）重新创建虚拟环境：\n```\nuv venv --python 3.11 --seed\n```\n另外，确保在嵌入版 Python 文件夹中正确安装了 torch。","https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F24",{"id":160,"question_zh":161,"answer_zh":162,"source_url":163},35271,"程序在生成 m4a 格式时卡在 99% 不动了怎么办？","这通常是因为升级时主程序（abogen.exe）仍在运行，导致文件替换失败，版本不一致。可以通过执行“干净安装”来解决：\n1. 编辑 `abogen` 文件夹中的 `VERSION` 文件，将版本号改为 1.1.4 或更低；\n2. 删除 `python_embedded` 文件夹；\n3. 确保 abogen 未运行，然后再次运行 `WINDOWS_INSTALLER.bat`。\n这将重新下载最新版本并执行干净安装。","https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F39",{"id":165,"question_zh":166,"answer_zh":167,"source_url":168},35272,"处理 epub 或 pdf 文件时报错'expected str, bytes or os.PathLike object, not NoneType'如何解决？","维护者已在新版本中尝试修复此问题。如果仍然遇到类似错误（特别是涉及字幕格式时），可以尝试将字幕格式（Subtitle format）更改为 \"ASS (narrow)\" 作为临时解决方案。如果问题依旧，请确保升级到最新版本。","https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F88",{"id":170,"question_zh":171,"answer_zh":172,"source_url":173},35273,"支持混合声音模型（Voice Mixing）吗？如何使用权重组合不同的声音？","支持。最新发布的版本中已经添加了带有配置文件系统的声音混合器（Voice mixer with a profile system）。您可以参考最新发布版（latest release）来使用该功能，无需再手动通过 API 参数组合。","https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F1",{"id":175,"question_zh":176,"answer_zh":177,"source_url":163},35274,"如何在 Windows 上模拟干净安装以解决奇怪的升级错误或文件占用问题？","可以通过以下步骤强制进行干净安装：\n1. 编辑 `abogen` 目录下的 `VERSION` 文件，将版本号修改为比当前版本低的值（例如 1.1.4）；\n2. 删除 `python_embedded` 文件夹；\n3. 关闭所有 abogen 相关进程，运行 `WINDOWS_INSTALLER.bat`。\n这将触发程序重新下载最新依赖并进行全新安装。",[179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254,259,264,269,274],{"id":180,"version":181,"summary_zh":182,"released_at":183},280300,"v1.3.1","- 特别感谢 [@jeremiahsb](https:\u002F\u002Fgithub.com\u002Fjeremiahsb) 的[重大贡献](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fpull\u002F120)（超过 5.5 万行！），他让 Web 界面、EPUB 3 流程以及核心架构改进得以实现。\n- 新增了 EPUB 3 打包流程，能够根据生成的音频和分块元数据构建带有媒体叠加的 EPUB 文件。\n- 将分块时间元数据持久化到作业产物中，并通过自动化测试对导出器进行了验证。\n- 基于 Flask 构建了 Web 界面 (`abogen-web`)，适用于 Docker 和无头服务器部署。\n- 重新组织代码库，使 PyQt6 桌面 GUI 和 Web 界面能够共享同一套核心代码。\n- 添加了支持 GPU 加速的 Supertonic TTS 引擎。\n- 新增了实体分析和专有名词发音覆盖系统。\n- 增加了针对多声线“戏剧化”有声书的配音演员\u002F角色分配功能。\n- 集成了 Calibre OPDS 和 Audiobookshelf。\n\n更新：\n```bash\nuv tool update abogen\n```","2026-02-06T21:04:50",{"id":185,"version":186,"summary_zh":187,"released_at":188},280301,"v1.2.5","- 现在可以使用 [**uv**](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fuv) 安装 Abogen，这简化了依赖管理，并显著加快了安装过程。详情请参阅自述文件中的“如何安装？”部分：[链接](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen?tab=readme-ov-file#how-to-install-)。\n- 在队列管理器中新增了一个选项：“用当前选择覆盖项目设置”。启用后，队列中的所有项目将使用主界面中选定的全局设置进行处理，从而覆盖其各自的个性化设置；禁用时，每个项目将保留自己的特定设置。\n- 修复了在某些 Linux 发行版中因缺少 `libxcb-cursor0` 库而出现的“无法加载 Qt 平台插件 'xcb'”错误。通过在系统版本中该库不可用时条件性加载打包的库来解决此问题，相关问题由 @bmcgonag 在 #101 中提出。\n- 修复了通过 [**uv**](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fuv) 安装 Abogen 的用户遇到的“未找到名为 pip 的模块”错误。\n- 修复了在某些情况下 `replace_single_newlines` 的默认值未能正确应用的问题。\n- 修复了“为排队的 EPUB 文件单独保存章节功能被忽略”的问题，该问题由 @dymas-cz 在 #109 中提出。\n- 修复了使用 spaCy 进行句子分割时的错误：文本会在左括号后被错误地拆分。\n- 对代码和文档进行了改进。","2025-12-10T00:44:09",{"id":190,"version":191,"summary_zh":192,"released_at":193},280302,"v1.2.4","- **字幕生成功能现已支持所有语言！** Abogen 现在可以基于音频时长为非英语语言生成字幕。可用模式包括 `Line`、`Sentence` 和 `Sentence + Comma`。（注：由于 Kokoro 的时间戳标记限制，基于词级别的字幕模式仍仅支持英语。）\n- 新选项：**“使用 spaCy 进行句子切分”** 您现在可以使用 [spaCy](https:\u002F\u002Fspacy.io\u002F) 自动检测句子边界，从而生成更整洁、更易读的字幕。简要说明如下：\n    - **功能简介：** 将文本拆分为自然的句子，使字幕条目更加流畅，并与语音更自然地对齐。\n    - **为何有帮助：** 之前的基于标点符号的切分方式，容易在常见缩写（如“Mr.”、“Dr.”、“Prof.”）或首字母缩写处错误断句，导致字幕分割不当。而 spaCy 通过语言学规则识别真正的句子边界，避免了这些误切。\n    - **非英语场景：** spaCy 会在音频生成**之前**运行，为 TTS 创建更优的句子片段。\n    - **英语场景：** spaCy 会在字幕生成**过程中**运行，在 TTS 后准确找到句子断点。\n    - **注意：** spaCy 句子切分仅在字幕模式为 `Sentence` 或 `Sentence + Comma` 时生效。若关闭该选项，则会回退到简单的基于标点符号的切分方式。\n- 新选项：**预下载模型和音色以供离线使用** 您现在可以在设置菜单中使用此选项，预先下载所有必要的 Kokoro 模型、音色以及 spaCy 语言模型。这样一来，您就可以完全离线使用 Abogen，无需任何网络连接。\n- 新增对基于时间戳的文本文件中 `.` 分隔符的支持（例如 `HH:MM:SS.ms`）。\n- 优化了正则表达式的编译过程，并移除了忙等循环。\n- 或许修复了 #91 中 @xklzlxr 提到的“长段落被静默截断”问题。\n- 修复了未使用的正则表达式模式及变量命名规范。\n- 对代码和文档进行了多项改进。","2025-11-28T02:18:32",{"id":195,"version":196,"summary_zh":197,"released_at":198},280303,"v1.2.3","- **现在你可以为字幕文件配音啦！** 只需添加 `.srt`、`.ass` 或 `.vtt` 文件，即可生成带时间戳的音频。你也可以添加包含 `HH:MM:SS` 或 `HH:MM:SS,ms` 格式时间戳的文本文件，以生成与时间戳匹配的音频。详细说明请参见 [这里](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen?tab=readme-ov-file#about-timestamp-based-text-files)。\n  - 新选项：**“使用字幕间的静音间隙”**：通过让语音延续到字幕之间的静音部分，避免不必要的音频加速。\n  - 新选项：**“字幕速度调整方式”**：选择在需要时如何加快音频速度：\n    - **TTS 重新生成（音质更好）：** 以更快的速度重新生成音频，使声音更自然。\n    - **FFmpeg 时间拉伸（速度更快）：** 快速加速已生成的音频。\n- 新增对 M4B 文件嵌入封面图片的支持。Abogen 现在会自动从 EPUB 和 PDF 文件中提取封面图片。你也可以在文本文件中使用 `\u003C\u003CMETADATA_COVER_PATH:路径>>` 标签手动指定封面图片。（为防止 MPV 显示封面图片，可在 MPV 配置文件中添加 `audio-display=no`。）\n- 修复了 Windows 上的 `[WinError 1114] 动态链接库 (DLL) 初始化例程失败` 错误。通过在初始化 PyQt6 之前预加载 PyTorch 的 DLL，避免 DLL 初始化错误，此问题由 @ephr0n 在 #98 中提出。\n- 潜在修复了“CUDA GPU 不可用”的问题，方法是使用安装脚本确保在 Windows 上正确安装支持 CUDA 的 PyTorch。\n- 对代码和文档进行了改进。","2025-11-18T23:07:58",{"id":200,"version":201,"summary_zh":202,"released_at":203},280304,"v1.2.1","- 将 Abogen 的界面从 `PyQt5` 升级到 `PyQt6`，以获得更好的兼容性和长期支持。\n- 在队列管理器中添加了工具提示，用于显示已加入队列项目的书籍处理选项（“将章节单独保存”和“在最后合并章节”）。\n- 在队列管理器中为项目新增了“打开已处理文件”和“打开输入文件”选项，不再仅提供“打开文件”一项。\n- 为书籍处理窗口添加了加载 GIF 动画。\n- 修复了语音混音器中浅色主题滑块的颜色，以提高可读性（适用于非 Windows 用户）。\n- 修复了字幕字数分割逻辑，使分段更加准确。\n- 对代码和文档进行了优化改进。","2025-10-27T23:49:16",{"id":205,"version":206,"summary_zh":207,"released_at":208},280305,"v1.2.0","- 在字幕生成模式中新增了 `Line` 选项，支持根据文本中的换行符生成字幕，由 @mleg 在 #94 中实现。\n- 为书籍处理窗口添加了加载指示器，以提升书籍预处理过程中的用户体验。\n- 修复了在选择 SRT 字幕格式时出现的 `无法访问局部变量 'is_narrow'` 错误，该问题由 @Kinasa0096 在 #88 中提出。\n- 修复了文件夹和文件名的转义处理逻辑，使其能够正确处理各操作系统（Windows、Linux、macOS）特有的非法字符，从而确保在创建章节文件夹和文件时的跨平台兼容性。\n- 通过路径规范化，修复了 `\u002F` 和 `\\` 路径显示的问题。\n- 修复了书籍重复处理的问题：此前每次打开章节窗口时都会重新处理书籍，现已优化为仅在必要时才进行处理，从而提升了再次打开同一本书时的性能。\n- 修复了 Windows 系统中任务栏图标显示不正确的问题。\n- 修复了“前往文件夹”按钮在仅生成单独章节时无法打开章节输出目录的问题。\n- 对代码和文档进行了多项改进。","2025-10-20T00:58:23",{"id":210,"version":211,"summary_zh":212,"released_at":213},280306,"v1.1.9","- 在 PR #75 中，@brianxiadong 添加了对 `.md`（Markdown）文件扩展名的支持。\n- 新增选项“配置章节间的静音”，允许用户自定义章节之间的静音时长，该功能由 @lfperez1982 在 #79 中提出。\n- 在显示和管理输入文件及处理文件时，提供了更清晰的指示器和更多选项。\n- 改进了 Markdown 逻辑，使其更好地处理各种 Markdown 结构和特殊情况。\n- 修复了在逗号前分割字幕的问题，通过将标点符号与前面的单词合并来解决。\n- 修复了队列模式下保存选项无法正常工作的问题，该问题由 @jborza 在 #78 中指出。\n- 修复了“无法初始化 Qt 平台插件”的错误，该问题由 @sunrainxyz 在 #59 中提及。\n- 修复了有序列表编号未包含在 EPUB 内容转换中的问题。现在，编号已正确包含在转换后的内容中，此问题由 @jefro108 在 #47 中提出。\n- 修复了生成字幕时，标点符号前空格被删除的问题。（v1.1.9）\n- 修复了启用“替换单个换行符”后，Markdown 目录生成功能中断的问题。（v1.1.9）\n- 潜在修复了字幕生成卡在 9:59:59 的问题，该问题由 @bolaykim 在 #73 中提及。\n- 对代码和文档进行了改进。\n\n> [!重要]\n> **如果您使用的是基于 Apple Silicon 的 Mac（M1、M2 等），请再次阅读文档中的 [Mac](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen?tab=readme-ov-file#mac) 部分，因为这需要额外的配置。（如果您是从 \u003C=1.1.6 版本升级而来）**","2025-09-18T00:14:20",{"id":215,"version":216,"summary_zh":217,"released_at":218},280307,"v1.1.8","- 由 @brianxiadong 在 PR #75 中添加了 `.md`（Markdown）文件扩展名支持\n- 添加了新选项“配置章节间的静音”，允许用户自定义章节之间的静音时长，该功能由 @lfperez1982 在 #79 中提出\n- 在显示和管理输入文件及处理文件时，提供了更清晰的指示和更多选项\n- 改进了 Markdown 处理逻辑，以更好地应对各种 Markdown 结构和特殊情况\n- 修复了在逗号前分割字幕的问题，通过将标点符号与前面的单词合并来解决\n- 修复了队列模式下保存选项无法正常工作的问题，该问题由 @jborza 在 #78 中指出\n- 修复了“无法初始化 Qt 平台插件”的错误，该问题由 @sunrainxyz 在 #59 中提及\n- 修复了有序列表编号未包含在 EPUB 内容转换中的问题。现在，这些编号已正确地包含在转换后的内容中，该问题由 @jefro108 在 #47 中提出\n- 潜在地修复了字幕生成卡在 9:59:59 的问题，该问题由 @bolaykim 在 #73 中提及\n- 对代码和文档进行了多项改进。\n\n> [!重要]\n> **如果您使用的是 Silicon Mac（M1、M2 等），请务必再次阅读文档中的 [Mac](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen?tab=readme-ov-file#mac) 部分，因为这需要额外的配置。（如果您是从 \u003C1.1.6 版本升级而来）**","2025-09-17T19:17:10",{"id":220,"version":221,"summary_zh":222,"released_at":223},280308,"v1.1.7","- 增加了对 Apple Silicon Mac 的 MPS GPU 加速支持，相关讨论见 @jefro108 在 https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fissues\u002F32#issuecomment-3155902040 中的留言。\n- @robmckinnon 在 PR #65 中添加了逐字卡拉 OK 高亮功能。\n- 修复了在部分未使用 systemd 的 Linux 系统上出现的阻止系统休眠错误，该问题由 @hendrack 在 #67 中提出。\n- 对代码和文档进行了改进。\n\n> [!重要]\n> **如果您使用的是 Apple Silicon Mac（M1、M2 等），请务必再次阅读文档中的 [Mac](https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen?tab=readme-ov-file#mac) 部分，因为这需要额外的配置。**","2025-08-25T00:14:24",{"id":225,"version":226,"summary_zh":227,"released_at":228},280309,"v1.1.6","- 改进了 EPUB 章节检测：现在能够可靠地从 NAV HTML（TOC）文件中检测章节，即使在非标准 EPUB 文件中也能正常工作，修复了 @jefro108 在 #33 中提到的问题。\n- 修复了 SRT 字幕编号问题，该问题由 @page-muncher 在 #41 中提出。\n- 修复了部分 EPUB 文件中章节内容缺失的问题。\n- Windows 安装脚本现在会提示用户安装 CUDA 版本的 PyTorch，即使未检测到 NVIDIA GPU 也是如此。\n- Abogen 现已默认包含普通话（misaki[zh]），不再需要手动安装。","2025-07-29T23:34:35",{"id":230,"version":231,"summary_zh":232,"released_at":233},280310,"v1.1.5","- Changed the temporary directory path to user's cache directory, which is more appropriate for storing cache files and avoids issues with unintended cleanup.\r\n- Fixed the isssue where extra metadata information was not being saved to M4B files when they have no chapters, ensuring that all metadata is correctly written to the output file.\r\n- Fixed sleep prevention process not ending if program exited using Ctrl+C or kill.\r\n- Improved automatic filename suffixing to better prevent overwriting files with the same name, even if they have different extensions.\r\n- Improvements in code and documentation.","2025-07-16T13:49:45",{"id":235,"version":236,"summary_zh":237,"released_at":238},280311,"v1.1.4","- Fixed extra metadata information not being saved to M4B files, ensuring that all metadata is correctly written to the output file.\r\n- Reformatted the code using Black for better readability and consistency.\r\n> Rest is from v1.1.3\r\n- `M4B (with chapters)` generation is faster now, as it directly generates `m4b` files instead of converting from `wav`, which significantly reduces processing time, fixes the issue mentioned by @Milor123 in #39 \r\n- Better sleep state handling for Linux.\r\n- The app window now tries to fit the screen if its height would exceed the available display area.\r\n- Fixed issue where the app would not restart properly on Windows.\r\n- Fixed last sentence\u002Fsubtitle entry timing in generated subtitles, the end time of the final subtitle entry now correctly matches the end of the audio chunk, preventing zero or invalid timings at the end.","2025-07-16T04:16:41",{"id":240,"version":241,"summary_zh":242,"released_at":243},280312,"v1.1.3","- `M4B (with chapters)` generation is faster now, as it directly generates `m4b` files instead of converting from `wav`, which significantly reduces processing time, fixes the issue mentioned by @Milor123 in #39 \r\n- Better sleep state handling for Linux.\r\n- The app window now tries to fit the screen if its height would exceed the available display area.\r\n- Fixed issue where the app would not restart properly on Windows.\r\n- Fixed last sentence\u002Fsubtitle entry timing in generated subtitles, the end time of the final subtitle entry now correctly matches the end of the audio chunk, preventing zero or invalid timings at the end.","2025-07-16T03:33:02",{"id":245,"version":246,"summary_zh":247,"released_at":248},280313,"v1.1.2","- Now you can play the audio files while they are processing.\r\n- Audio and subtitle files are now written directly to disk during generation, which significantly reduces memory usage.\r\n- Added a better logic for detecting chapters from the epub, mentioned by @jefro108 in #33\r\n- Added a new option: `Reset to default settings`, allowing users to reset all settings to their default values.\r\n- Added a new option: `Disable Kokoro's internet access`. This lets you prevent Kokoro from downloading models or voices from HuggingFace Hub, which can help avoid long waiting times if your computer is offline.\r\n- HuggingFace Hub telemetry is now disabled by default for improved privacy. (HuggingFace Hub is used by Kokoro to download its models)\r\n- Potential fix for #37 and #38, where the program was becoming slow while processing large files.\r\n- Fixed `Open folder` and `Open file` buttons in the queue manager GUI.\r\n- Improvements in code structure.","2025-07-15T09:00:43",{"id":250,"version":251,"summary_zh":252,"released_at":253},280314,"v1.1.1","- Added queue system for processing multiple items, allowing users to add multiple files and process them in a queue, mentioned by @jborza in #30 (Special thanks to @jborza for implementing this feature in PR #35)\r\n- Added a feature that allows selecting multiple items in book handler (in right click menu), mentioned by @Crushedice in #28, fixed by @jborza in #31\r\n- Added dark theme support, allowing users to switch between light and dark themes in the settings.\r\n- Added auto-accept system to the chapter options dialog in conversion process, allowing the dialog to auto-accept after a certain time if no action is taken.\r\n- Added new option: `Configure max lines in log window` that allows configuring the maximum number of lines to display in the log window.\r\n- Improvements in documentation and code.\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fdenizsafak\u002Fabogen\u002Fcompare\u002Fv1.0.9...v1.1.1","2025-07-11T08:54:42",{"id":255,"version":256,"summary_zh":257,"released_at":258},280315,"v1.0.9","- Added chunking\u002Fsegmenting system that fixes memory outage issues when processing large audio files.\r\n- Added new option: `Subtitle format`, allowing users to choose between `srt` , `ass (wide)`, `ass (narrow)`, and `ass (centered wide)` and `ass (centered narrow)`\r\n- Improved chapter filename generation with smart word-boundary truncation at 80 characters, preventing mid-word cuts in filenames.\r\n- `Composer` and `Genre` metadata fields for M4B files are now editable from the text editor.\r\n- Improvements in documentation and code.","2025-05-28T10:41:14",{"id":260,"version":261,"summary_zh":262,"released_at":263},280316,"v1.0.8","# v1.0.8\r\n- Added support for AMD GPUs in Linux (Special thanks to @hg000125 for his contribution in #23)\r\n- Added voice preview caching system that stores generated previews in the cache folder, mentioned by @jborza in #22\r\n- Added extra metadata support for chaptered M4B files, ensuring better compatibility with audiobook players.\r\n- Added new option: `Separate chapters audio format`, allowing to choose between `wav`, `mp4`, `flac` and `opus` formats for chaptered audio files.\r\n- Added a download tracker that displays informative messages while downloading Kokoro models or voices from HuggingFace.\r\n- Skipping PyTorch CUDA installation if GPU is not NVIDIA in WINDOWS_INSTALL.bat script, preventing unnecessary installation of PyTorch.\r\n- Removed `abogen_` prefix that was adding to converted books in temp directory.\r\n- Fixed voice preview player keeps playing silently at the background after preview ends.\r\n- Fixed not writing separate chapters audio when output is OPUS.\r\n- Improved input box background color handling, fixed display issues in Linux.\r\n- Updated profile and voice mixer icons, better visibility and aesthetics in voice mixer.\r\n- Better sleep state handling for Linux.\r\n- Improvements in documentation and code.","2025-05-22T03:28:33",{"id":265,"version":266,"summary_zh":267,"released_at":268},280317,"v1.0.7","- Improve chaptered audio generation by outputting directly as `m4b` instead of converting from `wav`.\r\n- Ignore chapter markers and single newlines when calculating text length, improving the accuracy of the text length calculation.\r\n- Prevent cancellation if process is at 99%, ensuring the process is not interrupted at the last moment.\r\n- Improved process handling for subpprocess calls, ensuring better management of subprocesses.\r\n- Improved PDF handling, ignoring empty pages\u002Fchapters and better chapter handling.\r\n- Added `Save in a project folder with metadata` option in the book handler, allowing users to save the converted items in a project folder with available metadata files. Useful if you want to work with the converted files in the future, issue mentioned by @Darthagnon in #15\r\n- Added `Go to folder` button in input box, allowing users to open the folder containing the converted file.\r\n- Added `.opus` as output format for generated audio files, which is a more efficient format for audio files.\r\n- Added `Create desktop shortcut and install` option to Linux version, allowing users to create a shortcut and install \r\n- Added \"Playing...\" indicator for \"Preview\" button in the voice mixer.","2025-05-09T22:26:12",{"id":270,"version":271,"summary_zh":272,"released_at":273},280318,"v1.0.6","- Added `Insert chapter marker` button in text editor to insert chapter markers at the current cursor position.\r\n- Added `Preview` button in voice mixer to preview the voice mix with the selected settings.\r\n- Fixed `f-string: unmatched '['` error in Voice preview, mentioned in #14\r\n- Fixed the issue with the content before first chapter not being included in the output.\r\n- Fixed m4b chapter generation opens CMD window in Windows.","2025-05-04T12:26:47",{"id":275,"version":276,"summary_zh":277,"released_at":278},280319,"v1.0.5","- Added new output format: `m4b`, enabling chapter metadata in audiobooks. Special thanks to @jborza for implementing this feature in PR #10.\r\n- Better approach for determining the correct configuration folder for Linux and MacOS, using platformdirs. (Fixes Docker issue #12)\r\n- Improvements in documentation and code.","2025-05-04T08:10:58"]