Lingua
Uma ferramenta de terminal que transforma frases estudadas no Kindle ou digitadas manualmente em cartões enriquecidos para o Anki:
- frase original em inglês;
- tradução natural para pt-BR;
- até três itens de vocabulário;
- uma observação gramatical curta quando for útil;
- título, autor e posição do destaque;
- campo vazio para áudio gerado pelo HyperTTS.
Para entradas manuais, a frase digitada é preservada no rascunho e o modelo gera uma versão corrigida para o campo English exportado ao Anki. O áudio continua sendo gerado externamente pelo HyperTTS.
As entradas são enviadas ao OpenRouter em pequenos lotes. O arquivo inteiro do livro nunca é enviado, e as requisições usam data_collection: "deny" por padrão.
Instalação
É necessário Python 3.12 ou mais recente. Com uv:
uv tool install lingua-kindle
lingua --help
Para atualizar ou remover a instalação global do usuário:
uv tool upgrade lingua-kindle
uv tool uninstall lingua-kindle
Para instalar a versão que está sendo desenvolvida localmente, use uv tool install ..
Para desenvolver no repositório:
uv sync --extra dev
uv run lingua --help
Configuração inicial
Crie uma chave específica para o projeto no workspace do OpenRouter e defina um limite de gastos. Exporte a chave apenas no terminal atual ou coloque-a no gerenciador de segredos do seu shell:
export OPENROUTER_API_KEY="sua-chave"
lingua init
lingua doctor "/caminho/para/My Clippings.txt"
Como alternativa, copie .env.example para .env no diretório do projeto e preencha a chave. O .env é carregado automaticamente, não sobrescreve uma variável já definida no terminal e está ignorado pelo Git:
cp .env.example .env
O lingua init cria .lingua/config.toml e .lingua/lingua.db. A chave não é gravada nesses arquivos.
Fluxo diário
Liste os livros reconhecidos:
lingua books "/caminho/para/My Clippings.txt"
Prepare somente as entradas ainda não exportadas. Para Kindle, sem --book, a CLI mostra um menu:
lingua prepare "/caminho/para/My Clippings.txt"
Para praticar a escrita, copie o modelo entries.example.json para entries.json (que fica ignorado pelo Git) e use-o como um JSON append-only. Digite as frases sem consultar o original quando possível:
{
"entries": [
{"text": "I couldnt quite put my finger on what was wrong."},
{"text": "That was unexpected.", "source": "leitura"}
]
}
Processe o arquivo com o mesmo comando:
cp entries.example.json entries.json
lingua prepare entries.json
O limite padrão é de cinco entradas novas por dia, compartilhado entre Kindle e JSON. Para alterar o limite de uma execução, use --limit N; --limit 0 desativa o limite explicitamente.
Abra o TSV criado em drafts/ no LibreOffice, Excel ou editor de texto. O rascunho contém TypedEnglish, com o texto original digitado, e English, com a versão corrigida. Revise os campos e marque Include como no para descartar um cartão. Preserve os nomes e a ordem das colunas.
Depois exporte:
lingua export "drafts/nome-do-livro-data.tsv"
O arquivo de exports/ já contém as diretivas de importação do Anki. As marcações só são registradas como exportadas depois que esse arquivo é gravado com sucesso.
Escolha do modelo
Antes de adotar um modelo, você pode gerar uma avaliação cega:
lingua evaluate "/caminho/para/My Clippings.txt" --sample 12
Preencha todas as colunas Translation Score e Teaching Score com notas de 1 a 5. Em seguida:
lingua select-model "evaluations/relatorio.tsv"
O vencedor é definido pela maior média; em caso de empate, ganha o candidato de menor custo reportado. O modelo escolhido é salvo em .lingua/config.toml. A opção model também aceita um preset do workspace, como @preset/lingua-translation.
Anki e HyperTTS
Antes da primeira importação, crie o tipo de nota descrito em anki/NOTE_TYPE.md. Depois importe o TSV e gere os áudios em lote usando:
- campo de origem:
English; - campo de destino:
Audio; - voz: inglês americano (
en-US).
O primeiro campo, CardID, é estável. Ao reimportar uma nota já existente, o Anki pode atualizá-la em vez de criar uma duplicata.
Comandos úteis
lingua init Inicializa configuração e banco
lingua doctor [INPUT] Diagnostica Kindle ou JSON, configuração e API
lingua books CLIPPINGS Lista livros e destaques novos
lingua prepare INPUT Processa Kindle ou JSON e cria rascunho
lingua export DRAFT Cria TSV final do Anki
lingua evaluate INPUT Compara modelos às cegas
lingua select-model REPORT Salva o modelo vencedor
Use --workspace em qualquer comando para guardar a configuração em outro diretório.
Releases para Windows e Linux
O procedimento completo está em docs/release.md.
Ao enviar uma tag no formato vX.Y.Z, o GitHub Actions testa o projeto, publica o pacote lingua-kindle no PyPI, gera executáveis nativos para Linux AMD64 e Windows AMD64 e cria a página Release com todos esses artefatos. A tag deve ter a mesma versão de pyproject.toml; por exemplo, a versão 0.2.0 exige a tag v0.2.0.
O fluxo de release usa Trusted Publishing do GitHub Actions, sem token permanente do PyPI. Antes do primeiro lançamento, configure no PyPI e no TestPyPI um publisher para este repositório, apontando para os workflows release.yml e testpypi.yml, e associe-os aos ambientes pypi e testpypi do GitHub.
Para testar uma versão em isolamento, execute manualmente o workflow TestPyPI na aba Actions. Ele publica o pacote no TestPyPI e verifica uv tool install, lingua --help e lingua doctor.
git tag v0.2.0
git push origin v0.2.0
Depois, baixe o arquivo pela página de Releases do repositório ou com a GitHub CLI:
gh release download v0.2.0 --pattern 'lingua-*'
No Linux, torne o binário executável se necessário e execute-o:
chmod +x lingua-linux-amd64
./lingua-linux-amd64 --help
No Windows, execute lingua-windows-amd64.exe pelo PowerShell ou Explorador de Arquivos.
Metadata
Release files for lingua-kindle 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lingua_kindle-0.2.0.tar.gz | 52.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lingua_kindle-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 74.0 kB
Release files / lingua_kindle-0.2.0.tar.gz
| Download URL | lingua_kindle-0.2.0.tar.gz |
|---|---|
| Size | 52.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
426eec4089dad5f570d7525a7fa23ba3ea65d4c134e195b0bb97d9df1e369677
|
|
BLAKE2b-256 checksum How to use checksums |
ffaa35aecc068e88bf794107298aa74ee5b837f3981e5db66ff5fd1a5159fd49
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / lingua_kindle-0.2.0-py3-none-any.whl
| Download URL | lingua_kindle-0.2.0-py3-none-any.whl |
|---|---|
| Size | 21.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
05dd1e3c3ec58154034526755a6a1132b6d4c2d0ff2b1239aae4a0bf22e08a45
|
|
BLAKE2b-256 checksum How to use checksums |
b400feb48c9a330b7a87311d8c6b9bb3337360fbd746c3ad3d207047ac564756
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logSecurity for lingua-kindle 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for lingua_kindle-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.