Argonaut
Minimalist document translator with a Qt (PyQt5) interface that uses argos-translate-files as an offline translation engine.
Two engines are available from Settings → Engine:
- Argos Translate (default) — light per-pair models, installed and removed from Settings → Manage language packages….
- NLLB-200 — Meta's
nllb-200-distilled-600M
(int8, CTranslate2), noticeably better quality and direct translation
between any pair of 32 languages. The model (~630 MB) is downloaded on
first use and stored under
~/.local/share/argonaut/. Note that the NLLB weights are licensed CC-BY-NC 4.0 (non-commercial).
Requirements
pip install PyQt5 argos-translate-lt argos-translate-files langdetect psutil
You need at least one language package installed. Open
Settings → Manage language packages…, pick the pairs you want and
press "Install selected"; the dialog lists every package from the Argos
index with its version and download size, filters by installation state,
and lets you remove or update the installed ones (a package with a newer
version in the index is flagged and can be updated in place). They can
also be installed from the command line with argospm install translate-en_es.
Usage
Install it (provides the argonaut command):
pip install argonaut-translator
From a checkout, install in editable mode first:
pip install -e .
python3 -m argonaut
Structure
All modules live in the src/argonaut/ package:
__init__.py— package version (__version__).main.py— entry point; silences dependency warnings and launches the window.window.py— main window (PyQt5).worker.py— thread that translates the file list and emits progress signals.pdf.py— fixed PDF translator (paragraphs, progress, cancellation).translation.py— language detection, supported formats and the progress/cache wrapper.nllb.py— optional NLLB-200 backend (CTranslate2 + SentencePiece) exposing the same duck-typed API as argostranslate.packages.py— Argos package index, download, installation and removal.package_dialog.py— dialog to browse, install and remove packages.i18n.py— interface languages (English by default, Spanish, French, German, Italian and Portuguese).
Packaging lives at the top level: pyproject.toml (PyPI),
io.github.nibblex.Argonaut.yml (Flatpak manifest) and data/
(desktop entry, AppStream metainfo and icon for Flathub).
Interface language
The interface starts in English. In the Language menu you can switch
to Spanish, French, German, Italian or Portuguese; the change applies
instantly and the preference is saved (QSettings) for future launches.
To add a language just add its dictionary in i18n.py (missing keys fall
back to English). The Help menu includes "About Argonaut", showing
the version, a short description of the project, the translation engine,
the supported formats, the author and the license.
Persistent settings
When the window closes, QSettings stores — besides the interface language — the source and target languages, the output folder and the window size/position; everything is restored on the next launch. If a saved language is no longer installed or the folder no longer exists, the default value is used. The active engine and the number of CPU threads (Settings → CPU threads, capped at the detected core count and defaulting to four) are saved as soon as they change.
- Choose the source and target languages (⇄ button to swap them). By default the source is "Detect language": each document's language is detected automatically, so you can mix files in different languages in the same batch.
- Drag documents or whole folders onto the window (dropped folders are walked recursively) or add them with "Add…". Each file shows its size and the list footer shows the batch total.
- Optionally pick a folder with "Output…" where all translations are saved (× returns to the default behaviour: next to each original). Tick "Skip files already translated" to leave existing outputs untouched, which makes an interrupted batch resumable.
- Press "Translate". Each translated file is saved with the target
language suffix (e.g.
report_es.docx). - During translation you can press "Cancel": the operation stops (even mid-file) and the files already translated are kept.
Note about PDFs: they are translated paragraph by paragraph while preserving the layout, so a long document can take a while on CPU. The bar shows the real percentage of translated paragraphs and an estimate of the remaining time. Rotated text (e.g. vertical watermarks) is kept untranslated, and links from the original document are not preserved in the translated copy.
Supported formats: .txt .docx .odt .odp .pptx .epub
.html .srt .pdf
Tests
pip install -e .[test]
pytest
The suite runs Qt headless (QT_QPA_PLATFORM=offscreen) and needs no
language models: translation engines are faked. Coverage is printed at
the end of the run; CI publishes the badge on every push to main.
Releasing
To publish a new version, bump __version__ in src/argonaut/__init__.py
and add a <release> entry in data/*.metainfo.xml.
PyPI
pip install build twine
python3 -m build
twine upload dist/*
Flathub
The manifest is io.github.nibblex.Argonaut.yml. Flathub builds
have no network access, so the Python dependencies must be pinned first
with flatpak-pip-generator:
python3 flatpak-pip-generator --requirements-file=requirements.txt \
--output python3-requirements
Test locally, then lint:
flatpak-builder --user --install --force-clean build-dir \
io.github.nibblex.Argonaut.yml
flatpak run --command=flatpak-builder-lint org.flatpak.Builder \
manifest io.github.nibblex.Argonaut.yml
First submission: take a screenshot for the metainfo (see the TODO in
data/*.metainfo.xml), then open a PR against
flathub/flathub (branch
new-pr) adding the manifest, per the
submission guide.
Author and license
© 2026 Sergio Rodríguez.
This project is distributed under the GNU GPL v3 license, in line with the license of PyQt5, which the interface depends on.
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 argonaut_translator-1.4.0.tar.gz.
File metadata
- Download URL: argonaut_translator-1.4.0.tar.gz
- Upload date:
- Size: 68.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1144530fc7eb7ba687b517d85f56fdafc935abb931cb83ee36e9c30b53b08b3e
|
|
| MD5 |
3f4ac929759f6a4ef91fed71a8ec68fc
|
|
| BLAKE2b-256 |
84b8bcfe8b83579135daf02e2aec010de7a49270a3fd9cd23bb1607196f5fa58
|
Provenance
The following attestation bundles were made for argonaut_translator-1.4.0.tar.gz:
Publisher:
publish.yml on Nibblex/Argonaut
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
argonaut_translator-1.4.0.tar.gz -
Subject digest:
1144530fc7eb7ba687b517d85f56fdafc935abb931cb83ee36e9c30b53b08b3e - Sigstore transparency entry: 2241687585
- Sigstore integration time:
-
Permalink:
Nibblex/Argonaut@46c9425d49bc9b5ddd2c6957bb750489e0dc29ff -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/Nibblex
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@46c9425d49bc9b5ddd2c6957bb750489e0dc29ff -
Trigger Event:
release
-
Statement type:
File details
Details for the file argonaut_translator-1.4.0-py3-none-any.whl.
File metadata
- Download URL: argonaut_translator-1.4.0-py3-none-any.whl
- Upload date:
- Size: 51.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c7e615895684ae52b42a23308c958fd09a53b2f1ad3f8f61bd759089748c966
|
|
| MD5 |
77b3f9eb11d52f67d2d54a3387b61be8
|
|
| BLAKE2b-256 |
8fa9c7c1d1f4203a6a14bde08e738b6daeb9c7d54aa0b7ab1551be532b154847
|
Provenance
The following attestation bundles were made for argonaut_translator-1.4.0-py3-none-any.whl:
Publisher:
publish.yml on Nibblex/Argonaut
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
argonaut_translator-1.4.0-py3-none-any.whl -
Subject digest:
2c7e615895684ae52b42a23308c958fd09a53b2f1ad3f8f61bd759089748c966 - Sigstore transparency entry: 2241688220
- Sigstore integration time:
-
Permalink:
Nibblex/Argonaut@46c9425d49bc9b5ddd2c6957bb750489e0dc29ff -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/Nibblex
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@46c9425d49bc9b5ddd2c6957bb750489e0dc29ff -
Trigger Event:
release
-
Statement type: