Skip to main content

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)

Source distribution for lingua-kindle 0.2.0
File Size Uploaded Provenance
lingua_kindle-0.2.0.tar.gz 52.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for lingua-kindle 0.2.0
File Interpreter ABI Platform
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page