
Read2Me是一個FastAPI應用程序,可從提供的URL中獲取內容,處理文本,使用Microsoft Azure的Edge TTS或Local TTS型號F5-TTS,StyletTS2或Piper TTS將其轉換為語音,並將其標記為使用Metadata的結果mp3文件。您可以將全文轉換為音頻,也可以讓LLM將種子文本轉換為播客。目前,支持Ollama和任何兼容API。您可以將提供的鉻擴展安裝在任何基於鉻的瀏覽器(例如Chrome或Microsoft Edge)中,以將當前URL或任何文本發送到SEVER,添加源和關鍵字以自動獲取。
這是當前的Beta版本,但我計劃將其擴展以支持其他內容類型(例如EPUB),並為英語以外的其他語言提供更強大的支持。當前,當使用默認的Azure Edge TTS時,它已經支持其他語言並試圖從文本中自動進行自動檢測,但是質量可能會因語言而異。
requirements.txt中列出的依賴項。 克隆存儲庫:
git clone https://github.com/WismutHansen/READ2ME.git
cd read2me創建並激活虛擬環境:
python -m venv .venv
source .venv/bin/activate # On Windows: .venvScriptsactivate或者,如果您想將UV用於包裝管理:
uv venv
source .venv/bin/activate # On Windows: .venvScriptsactivate安裝依賴項:
pip install -r requirements.txt (or uv pip install -r requirements.txt)對於本地styletts2文本到語音模型,還請安裝其他依賴項:
pip install -r requirements_stts2.txt (or uv pip install -r requirements_stts2.txt)對於F5-TTS模型,請安裝其他依賴項:
pip install -r requirements_F5.txt (or uv pip install -r requirements_F5.txt)安裝劇作家
playwright install如果使用UV,請還安裝:
uv pip install pip對於本地pipertts支持:
python3 -m TTS.piper_tts.instalpipertts (MacOS and Linux) or python -m TTS.piper_tts.instalpipertts (on Windows)注意:使用styletts2或pipertts將WAV文件轉換為MP3時,需要FFMPEG。 STYLETTS還需要在系統上安裝尤其是NG。
設置環境變量:
.env命名.env.example
OUTPUT_DIR=Output # Directory to store output files
SOURCES_FILE=sources.json # File containing sources to retrieve articles from twice a day
IMG_PATH=front.jpg # Path to image file to use as cover
OLLAMA_BASE_URL=http://localhost:11434 # Standard Port for Ollama
OPENAI_BASE_URL=http://localhost:11434/v1 # Example for Ollama Open AI compatible endpoint
OPENAI_API_KEY=skxxxxxx # Your OpenAI API Key in case of using the official OpenAI API
MODEL_NAME=llama3.2:latest
LLM_ENGINE=Ollama # Valid Options: Ollama, OpenAI您可以將Ollama或任何OpenAI兼容API用於標題和播客腳本生成(摘要功能也很快即將推出)
克隆存儲庫並切換到其中:
git clone https://github.com/WismutHansen/READ2ME.git && cd read2me將.ENV.example複製為.env並編輯內容:重要:使用本地LLM-engine,例如Ollama時,URL需要遵循此格式“ host.docker.docker.internal.internal:11434”(for Ollama)或“ host.docker.docker.docker.internal.internal:1234”(for lmstudio)
構建Docker容器
docker build -t read2me . 注意:建立時間需要很長時間,請耐心等待
運行Docker容器
docker run -p 7777:7777 -d read2me注意:建立時間需要很長時間,請耐心等待
將.env.example複製並重命名為.env 。按照您的意願編輯此文件的內容,指定輸出目錄,任務文件和圖像路徑,用於MP3文件封面以及源和關鍵字文件。
運行FastAPI應用程序:
uvicorn main:app --host 0.0.0.0 --port 7777或者,如果您連接到Linux服務器,例如通過SSH連接,並希望在關閉會話後保持應用程序運行
nohup uvicorn main:app --host 0.0.0.0 --port 7777 &這將在您當前的工作目錄中將所有命令行輸出寫入一個名為nohup.out的文件中。
添加用於處理的URL:
將郵政請求發送到http://localhost:7777/v1/url/full包含url的JSON主體:
{
"url" : " https://example.com/article "
}您可以使用curl或像Postman這樣的任何API客戶端以這樣的方式發送此請求:
curl -X POST http://localhost:7777/v1/url/full/
-H " Content-Type: application/json "
-d ' {"url": "https://example.com/article"} '
-d ' {"tts-engine": "edge"} '該存儲庫還包含一個有效的鉻擴展名,您可以在啟用開發人員設置時將其安裝在任何基於鉻的瀏覽器(例如Google Chrome)中。
處理URL:
該應用程序會定期檢查tasks.json文件是否要處理新作業。它獲取給定URL的內容,提取文本,將其轉換為語音,並使用適當的元數據保存所得的MP3文件。
指定自動檢索的來源和關鍵字:
創建一個名為sources.json的文件,在您的當前工作目錄中,使用URL到您要監視新文章的網站的文件。您還可以將全局關鍵字和每源關鍵字設置為自動檢索的過濾器。如果您為源設置“*”,則將檢索所有新文章。這是一個示例結構:
{
"global_keywords" : [
" globalkeyword1 " ,
" globalkeyword2 "
],
"sources" : [
{
"url" : " https://example.com " ,
"keywords" : [ " keyword1 " , " keyword2 " ]
},
{
"url" : " https://example2.com " ,
"keywords" : [ " * " ]
}
]
}兩個文件的位置均可在.env文件中配置。
要使用Next.js Frontend,請確保您在系統上安裝了node.js。注意:Frontend目前處於早期實驗階段,因此期望很多錯誤:首先,切換到前端目錄
cd frontend然後安裝所需的節點依賴項:
npm install然後開始前端運行:
npm run dev您可以在http:// localhost:3000上訪問前端
POST/V1/URL/FULL
將URL添加到處理列表中。
請求主體:
{
"url" : " https://example.com/article " ,
"tts-engine" : " edge "
}回覆:
{
"message" : " URL added to the processing list "
}POST/V1/url/播客
POST/V1/TEXT/FULL
POST/V1/TEXT/PODCAST
分叉存儲庫。
創建一個新分支:
git checkout -b feature/your-feature-name進行更改並提交它們:
git commit -m ' Add some feature '推到分支:
git push origin feature/your-feature-name提交拉動請求。
該項目均根據2004年1月的Apache許可證版本2.0版獲得許可,除了根據MIT許可證獲得許可的STYLETTS2代碼。 F5-TTS ABD STYLETTS2預培訓模型屬於自己的許可。
STYLETTS2預訓練的模型:在使用這些預訓練的模型之前,您同意通知聽眾,除非您有許可使用您合成的語音,否則先前訓練的模型會合成語音樣本。也就是說,您只同意使用其說話者許可的聲音直接或通過許可來克隆聲音,然後才能在公開合成的聲音公開之前,或者您必須公開宣布,如果您沒有使用這些聲音的許可,則這些聲音是合成的。
我要感謝以下存儲庫和作者的靈感和代碼: