Aplicação simples em Python para ler arquivos PDF utilizando o modelo de voz aberto Kokoro. Tudo roda localmente: você escolhe o PDF, o aplicativo gera o áudio com voz em Português do Brasil e toca diretamente na interface.
Escolha uma das opções abaixo:
O modelo Kokoro é baixado automaticamente na primeira execução, mas você pode antecipar esse passo com python scripts/download_models.py (detalhes abaixo).
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# ou .venv\Scripts\activate no Windows
pip install --upgrade pip
pip install -r requirements.txt
python scripts/download_models.py
O script respeita as variáveis KOKORO_CACHE_DIR ou HF_HOME. Caso queira salvar os arquivos em outro local, informe --cache-dir /caminho/dos/modelos.
python app.py
Dica: existe um
Makefilecom alvosmake install,make download-models,make run(Tkinter) emake run-web(Flask) para automatizar os passos acima.
O áudio é gerado em streaming, bloco a bloco, facilitando a leitura de documentos grandes. A fila de processamento aparece no painel de status.
python web_app.py --host 0.0.0.0 --port 7860
Abra http://localhost:7860 no navegador para enviar o PDF, escolher a voz e tocar ou baixar o áudio gerado.
Os arquivos WAV gerados ficam em generated/ (ou no diretório configurado via GENERATED_DIR).
Um Dockerfile está incluído para facilitar a auto-hospedagem. Ele já instala dependências do sistema, Python e baixa o modelo Kokoro para /models. Há também um docker-compose.yml pronto para reproduzir a mesma configuração com um único comando.
docker build -t openpdf2voice .
Ou utilize o Docker Compose para construir e executar automaticamente:
docker compose up --build
O container inicia a aplicação Flask por padrão. Após subir, acesse http://localhost:7860 para utilizar a interface web.
docker run \
--rm \
-p 7860:7860 \
-v "$PWD/models:/models" \
openpdf2voice
docker compose up
O serviço já expõe a porta 7860 e persiste o cache de modelos em ./models. Use docker compose build para apenas construir a imagem e docker compose down para encerrar/remover containers.
Caso ainda deseje abrir a versão Tkinter dentro do container, sobrescreva o comando e compartilhe o X11/áudio manualmente:
xhost +local:docker || true
docker run \
--rm \
--net=host \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--device /dev/snd \
-v "$PWD/models:/models" \
openpdf2voice python app.py
No Docker Compose, altere o comando do serviço para python app.py e adicione os mapeamentos equivalentes.
docker run --rm -v "$PWD/models:/models" openpdf2voice python scripts/download_models.py --cache-dir /models
KOKORO_MODEL: altera qual repositório/modelo será carregado (padrão: hexgrad/Kokoro-82M).KOKORO_CACHE_DIR: diretório onde os arquivos do modelo serão salvos/consultados.KOKORO_OFFLINE=1: força modo offline, falhando se os arquivos não estiverem previamente baixados.HF_HOME: diretório padrão utilizado pelo Hugging Face; é usado como fallback do cache.GENERATED_DIR: caminho onde a interface web salva os arquivos WAV gerados (padrão: ./generated).APP_SECRET_KEY: segredo utilizado pelo Flask para sessões/flash; personalize em produção.As vozes pré-configuradas foram retiradas do arquivo VOICES.md, com ênfase em vozes claras e naturais em Português Brasileiro. Você pode acrescentar novas vozes editando o método _load_voices em tts_engine.py.
Este projeto é distribuído sob licença MIT. Consulte o arquivo LICENSE para detalhes.
10 commits
Python
80.5%
CSS
7.5%
HTML
7.4%
Dockerfile
2.7%
Makefile
2.0%
Aplicação simples em Python para ler arquivos PDF utilizando o modelo de voz aberto Kokoro. Tudo roda localmente: você escolhe o PDF, o aplicativo gera o áudio com voz em Português do Brasil e toca diretamente na interface.
Escolha uma das opções abaixo:
O modelo Kokoro é baixado automaticamente na primeira execução, mas você pode antecipar esse passo com python scripts/download_models.py (detalhes abaixo).
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# ou .venv\Scripts\activate no Windows
pip install --upgrade pip
pip install -r requirements.txt
python scripts/download_models.py
O script respeita as variáveis KOKORO_CACHE_DIR ou HF_HOME. Caso queira salvar os arquivos em outro local, informe --cache-dir /caminho/dos/modelos.
python app.py
Dica: existe um
Makefilecom alvosmake install,make download-models,make run(Tkinter) emake run-web(Flask) para automatizar os passos acima.
O áudio é gerado em streaming, bloco a bloco, facilitando a leitura de documentos grandes. A fila de processamento aparece no painel de status.
python web_app.py --host 0.0.0.0 --port 7860
Abra http://localhost:7860 no navegador para enviar o PDF, escolher a voz e tocar ou baixar o áudio gerado.
Os arquivos WAV gerados ficam em generated/ (ou no diretório configurado via GENERATED_DIR).
Um Dockerfile está incluído para facilitar a auto-hospedagem. Ele já instala dependências do sistema, Python e baixa o modelo Kokoro para /models. Há também um docker-compose.yml pronto para reproduzir a mesma configuração com um único comando.
docker build -t openpdf2voice .
Ou utilize o Docker Compose para construir e executar automaticamente:
docker compose up --build
O container inicia a aplicação Flask por padrão. Após subir, acesse http://localhost:7860 para utilizar a interface web.
docker run \
--rm \
-p 7860:7860 \
-v "$PWD/models:/models" \
openpdf2voice
docker compose up
O serviço já expõe a porta 7860 e persiste o cache de modelos em ./models. Use docker compose build para apenas construir a imagem e docker compose down para encerrar/remover containers.
Caso ainda deseje abrir a versão Tkinter dentro do container, sobrescreva o comando e compartilhe o X11/áudio manualmente:
xhost +local:docker || true
docker run \
--rm \
--net=host \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--device /dev/snd \
-v "$PWD/models:/models" \
openpdf2voice python app.py
No Docker Compose, altere o comando do serviço para python app.py e adicione os mapeamentos equivalentes.
docker run --rm -v "$PWD/models:/models" openpdf2voice python scripts/download_models.py --cache-dir /models
KOKORO_MODEL: altera qual repositório/modelo será carregado (padrão: hexgrad/Kokoro-82M).KOKORO_CACHE_DIR: diretório onde os arquivos do modelo serão salvos/consultados.KOKORO_OFFLINE=1: força modo offline, falhando se os arquivos não estiverem previamente baixados.HF_HOME: diretório padrão utilizado pelo Hugging Face; é usado como fallback do cache.GENERATED_DIR: caminho onde a interface web salva os arquivos WAV gerados (padrão: ./generated).APP_SECRET_KEY: segredo utilizado pelo Flask para sessões/flash; personalize em produção.As vozes pré-configuradas foram retiradas do arquivo VOICES.md, com ênfase em vozes claras e naturais em Português Brasileiro. Você pode acrescentar novas vozes editando o método _load_voices em tts_engine.py.
Este projeto é distribuído sob licença MIT. Consulte o arquivo LICENSE para detalhes.
10 commits
Python
80.5%
CSS
7.5%
HTML
7.4%
Dockerfile
2.7%
Makefile
2.0%