Articles: save the web to your library

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.

Usage

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

Options

What gets extracted

FieldSource (priority order)
Titleog:titletwitter:title<title><h1>
BodyReadability extraction → Markdown
Authormeta[name=author]meta[property=article:author]
Siteog:site_name → the URL's host
Descriptionmeta[name=description]og:descriptiontwitter:description
Published datearticle/OpenGraph meta → JSON-LD datePublished<time datetime> → a date in the URL path
Keywordsmeta[name=keywords]

The Articles table

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

On the timeline

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.

Pictures are stored, not linked

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.

Re-importing

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.

Size limit

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.

What is not saved

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.