Find the literature for a Radiopaedia.org article, screen it, and write the article against it.
Search PubMed one line at a time or build the query concept by concept. Rank what comes back by how much it is cited and by where it was published. Sift it down with the filters, keep what is worth keeping in reading lists, then write the article — with the section structure Radiopaedia recommends for that kind of article, the citations resolved for you, their own linter run over your draft, and the formatted HTML their editor expects.
Runs on macOS, Linux and Windows. Nothing leaves your computer except the searches themselves.
Unofficial. Not affiliated with or endorsed by Radiopaedia.org.
Install
Radiowriter is a Python program that serves a page to your own browser. One command installs it, one command runs it — the same on macOS, Linux and Windows.
uv tool install git+https://github.com/gmadevs/Radiowriter
radiowriter
It opens http://localhost:8501 in your browser. Ctrl+C in the terminal
stops it. uv tool upgrade radiowriter updates it, and
uv tool uninstall radiowriter removes it — your archive stays where it is.
If you do not have uv
macOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows, in PowerShell:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
pipx install git+https://github.com/gmadevs/Radiowriter does the same job if
you already have pipx.
Why from git and not from PyPI? Because nothing has been released there yet. Installing from the repository needs no index and no account, and gives you exactly what is on
main. When the first version is published the command shortens touv tool install radiowriterand nothing else changes. How releasing works.
First run
It asks for an email address, and says why: PubMed and Unpaywall both want a contact address in every request, so they can warn whoever is calling instead of silently blocking them. There is nothing to register for, and the address stays on your computer.
Three other things are optional and can wait: an NCBI API key (raises the rate limit from 3 to 10 requests a second), a Semantic Scholar key (faster citation lookups), and your library's LibKey ID (direct full-text links through your subscription).
Journal quartiles
To see journal quartiles and SJR, download the CSV from
scimagojr.com — Download data,
top right — and drop it in the folder that radiowriter --where prints. Any
name starting with scimagojr works; the app picks the most recent one it
finds and matches your articles by ISSN.
The file is not bundled: SCImago's data is CC BY-NC, and it is a new file every year.
This is not the Journal Impact Factor. That one is Clarivate's and lives in the JCR. SCImago gives SJR, which weighs citations by the prestige of the journals making them, and cites/doc (2y), which is computed like an impact factor but over Scopus. Both are shown, both are labelled.
What it does
Search. PubMed syntax on one line, or the block builder: one block per
concept, every wording of it inside joined by OR, the blocks joined by AND.
The ISSG published search filters for guidelines and evidence syntheses are
built in. So is a generator that turns the section headings of a Radiopaedia
article into search strategies — Epidemiology becomes prevalence and
incidence, MRI becomes the MeSH terms and the words for magnetic resonance.
Screen. The archive, filtered by read, flagged, reading list, journal quartile, and sorted by citations or by SJR. Full text through LibKey if your library has it, through Unpaywall if there is a legal free copy. Reading lists you make, rename and delete; an article can be in several at once, and an article in a list is never purged.
Write. A Markdown editor that knows the twenty-three section structures
Radiopaedia recommends and can insert the ones your kind of article should
have. Cite with [@27859258] — the identifier itself — and the numbering is
worked out at export from the order of first appearance. Radiopaedia's own
linter rules run over the draft. Two buttons copy the article and the
reference list as rich text, so headings, bold and the <sup> markers survive
the paste into their editor.
Where your data lives
One SQLite file, in the place your system keeps user data:
| macOS | ~/Library/Application Support/Radiowriter |
| Linux | ~/.local/share/radiowriter |
| Windows | %LOCALAPPDATA%\Radiowriter |
radiowriter --where prints it. RADIOWRITER_HOME=/some/path radiowriter
overrides it, which is how you keep an archive on an external disk.
⇅ Export and backup in the sidebar writes a .nbib (the articles, in
PubMed's own format, readable by any reference manager) or a .json (the whole
archive, to move it to another computer). The .json deliberately leaves your
settings out, so a backup you share does not carry your email or your keys.
Running from source
git clone https://github.com/gmadevs/Radiowriter.git
cd Radiowriter
python3 -m venv .venv && . .venv/bin/activate
pip install -e .
radiowriter
The tests need no network and no configuration:
python3 check_rules.py # the Radiopaedia linter rules
python3 check_structure.py # the article structures
python3 check_search.py # query building, ISSG filters, strategies, lists
python3 check_journals.py # SCImago, journal matching, Unpaywall, backups
python3 check_app.py # the interface, driven without a browser
check_mesh_live.py is the one exception: it asks PubMed whether every MeSH
term the strategies use still exists. Run it when you change them, or when MeSH
changes — once a year, in January.
Documentation
| Install and first run | Getting it going, and the SCImago file |
| Search PubMed · in blocks | The filters, and building a query concept by concept |
| Screen · journals | Reading lists, quartiles, open access |
| Write | Structures, citations, the linter |
| Backup | Moving to another computer |
| How it works | Architecture, storage, the services it calls |
| Known limitations | What it does not do, written down |
Licence
The Radiopaedia article structures in radiowriter/data/article-structure.json
and the linter rules in radiowriter/data/lint-rules.json are transcriptions
of Radiopaedia's own published guidance, not ours. Journal metrics come from
SCImago, CC BY-NC.
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 radiowriter-0.1.0.tar.gz.
File metadata
- Download URL: radiowriter-0.1.0.tar.gz
- Upload date:
- Size: 144.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b34cf3d005152c12e8816336658019ccf73792349ca91cd37a26397f057a9ce
|
|
| MD5 |
4e1e861db18f96eb0884f086b6cd7f81
|
|
| BLAKE2b-256 |
1009f45fbc1af1dbde28be14ad7b4e10463b5b2302316b0b457b8e9f98634f46
|
Provenance
The following attestation bundles were made for radiowriter-0.1.0.tar.gz:
Publisher:
release.yml on gmadevs/Radiowriter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
radiowriter-0.1.0.tar.gz -
Subject digest:
8b34cf3d005152c12e8816336658019ccf73792349ca91cd37a26397f057a9ce - Sigstore transparency entry: 2698251864
- Sigstore integration time:
-
Permalink:
gmadevs/Radiowriter@a40380cfbf56efef9da1ad073dfdbca875276511 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gmadevs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a40380cfbf56efef9da1ad073dfdbca875276511 -
Trigger Event:
push
-
Statement type:
File details
Details for the file radiowriter-0.1.0-py3-none-any.whl.
File metadata
- Download URL: radiowriter-0.1.0-py3-none-any.whl
- Upload date:
- Size: 148.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdc64de142f3489caef22000baa90fb8b76acd4958b495a4bcdc09c5d9294a41
|
|
| MD5 |
46ec4e21a62ebc4ffe6c02fa4da3b62e
|
|
| BLAKE2b-256 |
5f72e76114928f013003cde0de1e529b7a453a39fedd065c6f668fc076afece7
|
Provenance
The following attestation bundles were made for radiowriter-0.1.0-py3-none-any.whl:
Publisher:
release.yml on gmadevs/Radiowriter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
radiowriter-0.1.0-py3-none-any.whl -
Subject digest:
cdc64de142f3489caef22000baa90fb8b76acd4958b495a4bcdc09c5d9294a41 - Sigstore transparency entry: 2698251892
- Sigstore integration time:
-
Permalink:
gmadevs/Radiowriter@a40380cfbf56efef9da1ad073dfdbca875276511 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gmadevs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a40380cfbf56efef9da1ad073dfdbca875276511 -
Trigger Event:
push
-
Statement type: