{"id":13456873,"url":"https://github.com/yihong0618/bilingual_book_maker","last_synced_at":"2025-05-13T20:03:27.587Z","repository":{"id":96303169,"uuid":"608419025","full_name":"yihong0618/bilingual_book_maker","owner":"yihong0618","description":"Make bilingual epub books Using AI translate","archived":false,"fork":false,"pushed_at":"2025-04-24T03:34:11.000Z","size":1852,"stargazers_count":8434,"open_issues_count":135,"forks_count":1155,"subscribers_count":54,"default_branch":"main","last_synced_at":"2025-05-06T19:52:00.574Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yihong0618.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-03-02T01:14:25.000Z","updated_at":"2025-05-06T10:58:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"bd59afc9-ac96-4efc-9340-43312ffca131","html_url":"https://github.com/yihong0618/bilingual_book_maker","commit_stats":{"total_commits":192,"total_committers":58,"mean_commits":3.310344827586207,"dds":0.5625,"last_synced_commit":"b80f1ba785ebdec8fe223bbc3fb5efb05609d618"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yihong0618%2Fbilingual_book_maker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yihong0618%2Fbilingual_book_maker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yihong0618%2Fbilingual_book_maker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yihong0618%2Fbilingual_book_maker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yihong0618","download_url":"https://codeload.github.com/yihong0618/bilingual_book_maker/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254020473,"owners_count":22000750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T08:01:29.336Z","updated_at":"2025-05-13T20:03:27.566Z","avatar_url":"https://github.com/yihong0618.png","language":"Python","funding_links":[],"categories":["Python","A01_文本生成_文本对话","CLI","NLP","Channel Resources","UIs","search engine"],"sub_categories":["大语言对话模型及数据","Special-purpose","GitHub Projects","Command-line(shell) interface","collection"],"readme":"# bilingual_book_maker\n\nbilingual_book_maker 是一个 AI 翻译工具，使用 ChatGPT 帮助用户制作多语言版本的 epub/txt/srt 文件和图书。该工具仅适用于翻译进入公共版权领域的 epub/txt 图书，不适用于有版权的书籍。请在使用之前阅读项目的 **[免责声明](./disclaimer.md)**。\n\n![image](https://user-images.githubusercontent.com/15976103/222317531-a05317c5-4eee-49de-95cd-04063d9539d9.png)\n\n## 准备\n\n1. ChatGPT or OpenAI token [^token]\n2. epub/txt books\n3. 能正常联网的环境或 proxy\n4. python3.8+\n\n## 快速开始\n\n本地放了一个 `test_books/animal_farm.epub` 给大家测试\n\n```shell\npip install -r requirements.txt\npython3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --test\n或\npip install -U bbook_maker\nbbook --book_name test_books/animal_farm.epub --openai_key ${openai_key} --test\n```\n\n## 翻译服务\n\n- 使用 `--openai_key` 指定 OpenAI API key，如果有多个可以用英文逗号分隔(xxx,xxx,xxx)，可以减少接口调用次数限制带来的错误。\n  或者，指定环境变量 `BBM_OPENAI_API_KEY` 来略过这个选项。\n- 默认用了 [GPT-3.5-turbo](https://openai.com/blog/introducing-chatgpt-and-whisper-apis) 模型，也就是 ChatGPT 正在使用的模型。\n\n* DeepL\n\n  使用 DeepL 封装的 api 进行翻译，需要付费。[DeepL Translator](https://rapidapi.com/splintPRO/api/dpl-translator) 来获得 token\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model deepl --deepl_key ${deepl_key}\n  ```\n\n* DeepL free\n\n  使用 DeepL free\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model deeplfree\n  ```\n\n* Claude\n\n  使用 [Claude](https://console.anthropic.com/docs) 模型进行翻译\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model claude --claude_key ${claude_key}\n  ```\n\n* 谷歌翻译\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model google\n  ```\n\n* 彩云小译\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model caiyun --caiyun_key ${caiyun_key}\n  ```\n\n* Gemini\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model gemini --gemini_key ${gemini_key}\n  ```\n\n* 腾讯交互翻译\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model tencentransmart\n  ```\n\n* [xAI](https://x.ai)\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model xai --xai_key ${xai_key}\n  ```\n\n* [Ollama](https://github.com/ollama/ollama)\n\n  使用 [Ollama](https://github.com/ollama/ollama) 自托管模型进行翻译。\n  如果 ollama server 不运行在本地，使用 `--api_base http://x.x.x.x:port/v1` 指向 ollama server 地址\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --ollama_model ${ollama_model_name}\n  ```\n\n* [Groq](https://console.groq.com/keys)\n\n  GroqCloud 当前支持的模型可以查看[Supported Models](https://console.groq.com/docs/models)\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --groq_key [your_key] --model groq --model_list llama3-8b-8192\n  ```\n\n## 使用说明\n\n- 翻译完会生成一本 `{book_name}_bilingual.epub` 的双语书\n- 如果出现了错误或使用 `CTRL+C` 中断命令，不想接下来继续翻译了，会生成一本 `{book_name}_bilingual_temp.epub` 的书，直接改成你想要的名字就可以了\n\n## 参数说明\n\n- `--test`:\n\n  如果大家没付费可以加上这个先看看效果（有 limit 稍微有些慢）\n\n- `--language`: 指定目标语言\n\n  - 例如： `--language \"Simplified Chinese\"`，预设值为 `\"Simplified Chinese\"`.\n  - 请阅读 helper message 来查找可用的目标语言： `python make_book.py --help`\n\n- `--proxy`\n\n  方便中国大陆的用户在本地测试时使用代理，传入类似 `http://127.0.0.1:7890` 的字符串\n\n- `--resume`\n\n  手动中断后，加入命令可以从之前中断的位置继续执行。\n\n  ```shell\n  python3 make_book.py --book_name test_books/animal_farm.epub --model google --resume\n  ```\n\n- `--translate-tags`\n\n  指定需要翻译的标签，使用逗号分隔多个标签。epub 由 html 文件组成，默认情况下，只翻译 `\u003cp\u003e` 中的内容。例如: `--translate-tags h1,h2,h3,p,div`\n\n- `--book_from`\n\n  选项指定电子阅读器类型（现在只有 kobo 可用），并使用 `--device_path` 指定挂载点。\n\n- `--api_base ${url}`\n\n  如果你遇到了墙需要用 Cloudflare Workers 替换 api_base 请使用 `--api_base ${url}` 来替换。\n  **请注意，此处你输入的 api 应该是'`https://xxxx/v1`'的字样，域名需要用引号包裹**\n\n- `--allow_navigable_strings`\n\n  如果你想要翻译电子书中的无标签字符串，可以使用 `--allow_navigable_strings` 参数，会将可遍历字符串加入翻译队列，**注意，在条件允许情况下，请寻找更规范的电子书**\n\n- `--prompt`\n\n  如果你想调整 prompt，你可以使用 `--prompt` 参数。有效的占位符包括 `{text}` 和 `{language}`。你可以用以下方式配置 prompt:\n\n  - 如果您不需要设置 `system` 角色，可以这样：`--prompt \"Translate {text} to {language}\"` 或者 `--prompt prompt_template_sample.txt`（示例文本文件可以在 [./prompt_template_sample.txt](./prompt_template_sample.txt) 找到）。\n\n  - 如果您需要设置 `system` 角色，可以使用以下方式配置：`--prompt '{\"user\":\"Translate {text} to {language}\", \"system\": \"You are a professional translator.\"}'`，或者 `--prompt prompt_template_sample.json`（示例 JSON 文件可以在 [./prompt_template_sample.json](./prompt_template_sample.json) 找到）。\n\n  - 你也可以用环境以下环境变量来配置 `system` 和 `user` 角色 prompt：`BBM_CHATGPTAPI_USER_MSG_TEMPLATE` 和 `BBM_CHATGPTAPI_SYS_MSG`。\n  该参数可以是提示模板字符串，也可以是模板 `.txt` 文件的路径。\n\n- `--batch_size`\n\n  指定批量翻译的行数(默认行数为 10，目前只对 txt 生效)\n\n- `--accumulated_num`:\n\n  达到累计token数开始进行翻译。gpt3.5将total_token限制为4090。\n  例如，如果您使用`--accumulation_num 1600`，则可能会输出2200个令牌，另外200个令牌用于系统指令（system_message）和用户指令（user_message），1600+2200+200 = 4000，所以token接近极限。你必须选择一个自己合适的值，我们无法在发送之前判断是否达到限制\n\n- `--use_context`:\n\n  prompts the model to create a three-paragraph summary. If it's the beginning of the translation, it will summarize the entire passage sent (the size depending on `--accumulated_num`).\n  For subsequent passages, it will amend the summary to include details from the most recent passage, creating a running one-paragraph context payload of the important details of the entire translated work. This improves consistency of flow and tone throughout the translation. This option is available for all ChatGPT-compatible models and Gemini models.\n\n  模型提示词将创建三段摘要。如果是翻译的开始，它将总结发送的整个段落（大小取决于`--accumulated_num`）。\n  对于后续的段落，它将修改摘要，以包括最近段落的细节，创建一个完整的段落上下文负载，包含整个翻译作品的重要细节。 这提高了整个翻译过程中的流畅性和语气的一致性。 此选项适用于所有ChatGPT兼容型号和Gemini型号。\n\n  - `--context_paragraph_limit`:\n\n    使用`--use_context`选项时，使用`--context_paragraph_limit`设置上下文段落数限制。\n\n- `--temperature`:\n\n  使用 `--temperature` 设置 `chatgptapi`/`gpt4`/`claude`模型的temperature值.\n  如 `--temperature 0.7`.\n\n- `--block_size`:\n\n  使用`--block_size`将多个段落合并到一个块中。这可能会提高准确性并加快处理速度，但可能会干扰原始格式。必须与`--single_translate`一起使用。\n  例如：`--block_size 5 --single_translate`。\n\n- `--single_translate`:\n\n  使用`--single_translate`只输出翻译后的图书，不创建双语版本。\n\n- `--translation_style`:\n\n  如: `--translation_style \"color: #808080; font-style: italic;\"`\n\n- `--retranslate \"$translated_filepath\" \"file_name_in_epub\" \"start_str\" \"end_str\"(optional)`:\n\n  - 重新翻译，从 start_str 到 end_str 的标记:\n\n  ```shell\n  python3 \"make_book.py\" --book_name \"test_books/animal_farm.epub\" --retranslate 'test_books/animal_farm_bilingual.epub' 'index_split_002.html' 'in spite of the present book shortage which' 'This kind of thing is not a good symptom. Obviously'\n  ```\n\n  - 重新翻译, 从start_str 的标记开始:\n\n  ```shell\n  python3 \"make_book.py\" --book_name \"test_books/animal_farm.epub\" --retranslate 'test_books/animal_farm_bilingual.epub' 'index_split_002.html' 'in spite of the present book shortage which'\n  ```\n\n### 示范用例\n\n**如果使用 `pip install bbook_maker` 以下命令都可以改成 `bbook args`**\n\n```shell\n# 如果你想快速测一下\npython3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --test\n\n# 或翻译完整本书\npython3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --language zh-hans\n\n# Or translate the whole book using Gemini\npython3 make_book.py --book_name test_books/animal_farm.epub --gemini_key ${gemini_key} --model gemini\n\n# 指定环境变量来略过 --openai_key\nexport OPENAI_API_KEY=${your_api_key}\n\n# Use the DeepL model with Japanese\npython3 make_book.py --book_name test_books/animal_farm.epub --model deepl --deepl_key ${deepl_key} --language ja\n\n# Use the Claude model with Japanese\npython3 make_book.py --book_name test_books/animal_farm.epub --model claude --claude_key ${claude_key} --language ja\n\n# Use the CustomAPI model with Japanese\npython3 make_book.py --book_name test_books/animal_farm.epub --model customapi --custom_api ${custom_api} --language ja\n\n# Translate contents in \u003cdiv\u003e and \u003cp\u003e\npython3 make_book.py --book_name test_books/animal_farm.epub --translate-tags div,p\n\n# 修改prompt\npython3 make_book.py --book_name test_books/animal_farm.epub --prompt prompt_template_sample.txt\n# 或者\npython3 make_book.py --book_name test_books/animal_farm.epub --prompt \"Please translate \\`{text}\\` to {language}\"\n# 翻译 kobo e-reader 中，來自 Rakuten Kobo 的书籍\npython3 make_book.py --book_from kobo --device_path /tmp/kobo\n\n# 翻译 txt 文件\npython3 make_book.py --book_name test_books/the_little_prince.txt --test\n# 聚合多行翻译 txt 文件\npython3 make_book.py --book_name test_books/the_little_prince.txt --test --batch_size 20\n\n\n# 使用彩云小译翻译(彩云api目前只支持: 简体中文 \u003c-\u003e 英文， 简体中文 \u003c-\u003e 日语)\n# 彩云提供了测试token（3975l6lr5pcbvidl6jl2）\n# 你可以参考这个教程申请自己的token (https://bobtranslate.com/service/translate/caiyun.html)\npython3 make_book.py --model caiyun --caiyun_key 3975l6lr5pcbvidl6jl2 --book_name test_books/animal_farm.epub\n# 可以在环境变量中设置BBM_CAIYUN_API_KEY，略过--openai_key\nexport BBM_CAIYUN_API_KEY=${your_api_key}\n```\n\n更加小白的示例\n\n```shell\npython3 make_book.py --book_name 'animal_farm.epub' --openai_key sk-XXXXX --api_base 'https://xxxxx/v1'\n\n# 有可能你不需要 python3 而是python\npython make_book.py --book_name 'animal_farm.epub' --openai_key sk-XXXXX --api_base 'https://xxxxx/v1'\n```\n\n[演示视频](https://www.bilibili.com/video/BV1XX4y1d75D/?t=0h07m08s)\n[演示视频 2](https://www.bilibili.com/video/BV1T8411c7iU/)\n\n使用 Azure OpenAI service\n\n```shell\npython3 make_book.py --book_name 'animal_farm.epub' --openai_key XXXXX --api_base 'https://example-endpoint.openai.azure.com' --deployment_id 'deployment-name'\n\n# Or python3 is not in your PATH\npython make_book.py --book_name 'animal_farm.epub' --openai_key XXXXX --api_base 'https://example-endpoint.openai.azure.com' --deployment_id 'deployment-name'\n```\n\n## 注意\n\n1. Free trail 的 API token 有所限制，如果想要更快的速度，可以考虑付费方案\n2. 欢迎提交 PR\n\n# 感谢\n\n- @[yetone](https://github.com/yetone)\n\n# 贡献\n\n- 任何 issue PR 都欢迎\n- Issue 中有些 TODO 没做的都可以选\n- 提交代码前请先执行 `black make_book.py` [^black]\n\n# 其它推荐项目\n\n- 书译 iOS -\u003e [AI 全书翻译工具](https://apps.apple.com/cn/app/%E4%B9%A6%E8%AF%91-ai-%E5%85%A8%E4%B9%A6%E7%BF%BB%E8%AF%91%E5%B7%A5%E5%85%B7/id6447665417)\n\n## 赞赏\n\n谢谢就够了\n\n![image](https://user-images.githubusercontent.com/15976103/222407199-1ed8930c-13a8-402b-9993-aaac8ee84744.png)\n\n[^token]: https://platform.openai.com/account/api-keys\n[^black]: https://github.com/psf/black\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyihong0618%2Fbilingual_book_maker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyihong0618%2Fbilingual_book_maker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyihong0618%2Fbilingual_book_maker/lists"}