Alexandria
akb ingest article saves a web article into your knowledge base. It pulls the
page, strips the site furniture, converts what is left to Markdown, downloads the
pictures so the article still reads offline, and files it on your timeline under
the day it was published.
In the app, open the Timeline, press Import, choose Web Article, and paste the address. This works the same on the desktop and on a phone.
From the command line:
akb ingest article https://example.com/some-article
Preview without writing anything:
akb ingest article https://example.com/some-article --dry-run
--fetched-at YYYY-MM-DD - the date you retrieved the page. Recorded as
fetched-on; it is never used as the publication date. Defaults to today.--show-images - keep the downloaded pictures visible in the media gallery.
By default they are hidden, so a few dozen imported articles do not bury the
pictures you added yourself.--dry-run, --force - as for any importer; see Imports.| Field | Source (priority order) |
|---|---|
| Title | og:title → twitter:title → <title> → <h1> |
| Body | Readability extraction → Markdown |
| Author | meta[name=author] → meta[property=article:author] |
| Site | og:site_name → the URL's host |
| Description | meta[name=description] → og:description → twitter:description |
| Published date | article/OpenGraph meta → JSON-LD datePublished → <time datetime> → a date in the URL path |
| Keywords | meta[name=keywords] |
Articles tableEvery article becomes a row in Articles, with columns original-url,
author, site, description, keywords and fetched-on.
author and site are external entities, so every article by the same
writer, or from the same publication, points at one shared entry - open it to
gather everything you have saved from them. A later akb enrich run can attach
real Wikidata ids to those entries.
An article joins the timeline under its publication date, so saving a five-year-old essay files it under the year it was written, not today.
When a page does not state a date anywhere, the article is still saved - it just
does not appear on the timeline, because there is no honest moment to put it at.
fetched-on still records when you saved it, and you can fill the date in by
hand afterwards.
Each picture the article embeds is downloaded and stored in your vault, and the saved text points at the stored copy. The article therefore keeps working with no network, and keeps working after the original site reorganizes or disappears.
Stored pictures are tagged Imported Media, which records the URL each one came
from, so you can always get back to the original. They are hidden from the media
gallery by default; use --show-images to keep them visible, or toggle any
individual item later:
In the media gallery, tick Show hidden media to see them, and use an item's menu to show or hide it. From the command line:
akb list-media --include-hidden # everything, marked [hidden]
akb set-media-hidden <media-id> false
Hiding only affects that listing. A hidden picture still renders inside the article.
Only real pictures are stored: JPEG, PNG, GIF and WebP, recognized by their actual bytes rather than by what the page claims. SVG is deliberately refused, because it can carry scripts.
An article is identified by its URL, ignoring #fragments and tracking
parameters such as utm_*, so the same piece saved from a newsletter link and
from a tweet is one note, not three.
Re-importing an article you already have updates its fields in place and leaves its text alone. Note that the body is only written when the note is first created, so a re-import will not pick up edits the author has since made to the page. Nothing is downloaded twice.
An imported note's text is capped (64 KB by default) so one page cannot dominate
the vault. If an article is refused for being too long, raise Maximum imported
note size in Settings → Trash, or max_ingest_body_bytes in the vault's
preferences.json.
Pages that need JavaScript to render, and pages behind a paywall, have no article text to find. Those are reported as skipped rather than saved as an empty note.