Command-line tool for learning foreign languages through reverse translation of word-based sentences
Project description
CrossRS
CrossRS is a command-line tool for improving language production skills through reverse translation exercises. Given a corpus in your target language, CrossRS translates sentences into a source language you already know and asks you to translate them back, reinforcing vocabulary and grammar through word-based spaced repetition. Because CrossRS uses GPT under the hood, you must have a paid OpenAI account and an API key to run it.
How It Works
CrossRS focuses on words sorted by their frequency in the corpus. You learn the most common ones first. Each study round:
- CrossRS picks a sentence containing the next word to learn.
- The sentence is translated into your source language and shown to you.
- You translate it back into the target language.
- CrossRS evaluates your translation and provides feedback — either a ✅ confirmation or a ❌ with a highlighted diff showing the minimal corrections needed.
Sentences you translate correctly on the first try are scheduled for a single review in 29 days 20 hours. Otherwise, they enter a spaced-repetition queue with reviews at 20 hours, 6 days 20 hours, and 29 days 20 hours before being marked as learned.
Installation
Install Python 3.13 or later and pipx, then run:
pipx install crossrs # install
pipx upgrade crossrs # upgrade
pipx uninstall crossrs # uninstall
Initialize a New Language
Prepare a plain-text file that contains one sentence per line in the language you want to learn. For example, you can download a monolingual corpus from OPUS. Then run:
crossrs init <target-lang> <corpus>
<target-lang> is a language code (e.g., de, fr, uk), and <corpus> is the path to the corpus file.
Study a Language
crossrs study <target-lang> <source-lang> [--threshold T] [--model <GPT_MODEL>] [--api-key <OPENAI_KEY>] [--listen] [--asr-model <ASR_MODEL>]
<target-lang>— the language code you initialized earlier.<source-lang>— the language you want sentences translated into (e.g.,en).--threshold/-t— the learnedness threshold for words (default: 3). A word is considered fully learned once it has appeared in this many learned sentences.--model— the GPT model to use for translation and evaluation.--api-key— your OpenAI API key.--listen— enable voice input: press Enter to record your translation via microphone instead of typing.--asr-model— the ASR model for speech-to-text (e.g.,gpt-4o-transcribe). Required when--listenis used.
Instead of passing --model, --api-key, and --asr-model each time, you can set the environment variables CROSSRS_MODEL, CROSSRS_API_KEY, and CROSSRS_ASR_MODEL.
Voice Input
When --listen is enabled, pressing Enter at the translation prompt starts recording. Speak your translation and press Enter again to stop. The recording is transcribed and submitted automatically. You can also type your translation directly — only an empty Enter triggers recording.
Voice input requires the audio extra:
pipx install crossrs[audio] # or: pip install crossrs[audio]
View Your Progress
crossrs stats <target-lang> [--threshold T]
Displays:
- Sentences: learned + in queue / total
- Words: learned / total, with word-level coverage
- Total rounds: the number of translation attempts so far
Other Commands
crossrs path <target-lang> # show the path to the language data file
crossrs delete <target-lang> [--force] # delete the language data file; use --force to skip the confirmation prompt
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crossrs-0.3.0.tar.gz.
File metadata
- Download URL: crossrs-0.3.0.tar.gz
- Upload date:
- Size: 27.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
410d421a2378dc84644e5c3c361bfd0d75da28097316dbbb279d84fd8d5892c1
|
|
| MD5 |
d2ad97c15f0b4d333125d81982f6c4c6
|
|
| BLAKE2b-256 |
5359437a5a9b23181ff82134e170578127728e72d907d529c20f732f7bf90ccd
|
File details
Details for the file crossrs-0.3.0-py3-none-any.whl.
File metadata
- Download URL: crossrs-0.3.0-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d92edcad09a4290b874750ed5b1c2743f4cfc8d461491f449f12b7d5e552a483
|
|
| MD5 |
71d35242c4782ea1d2d6a778d04ab93c
|
|
| BLAKE2b-256 |
082925ce4dae4b7f98fdcb8c46c85a269c08f83898eae44e541e8085cabb96a2
|