Repository navigation
Releases: wolfgang-aura/SourceCapsule
Release list
v1.5.0 — Reply archive: capture the whole conversation
What's new
Capture the replies to a post, not just the post. Full text, author, timestamp, parent
id, and media links — exported as threaded Markdown plus a full-text CSV, so an agent can
read the whole conversation instead of only the original claim.
How to use it
On any opened post, click ... then:
- Capture replies (experimental) — one click walks all three of X's reply surfaces
(Latest → Top → Relevant) and merges them. A few minutes on a large conversation;
progress is reported per surface. Leave the tab in front. - Download reply archive — writes
sourcecapsule-replies-<id>.mdand.csv.
Replies accumulate across runs and never shrink: a populated field is never overwritten by
an empty one and the longer text always wins, so a truncated preview cannot clobber full
long-form text, and a reply that disappears from a later surface keeps what was already
captured. Storage is IndexedDB — and if a write fails, it says so rather than losing the
run silently.
Reply media is recorded as links only, deliberately: downloading media for thousands of
replies is out of scope.
How complete is it?
Measured on three real conversations, audited from the downloaded files:
| Replies on X | Archived with content | Known but uncaptured |
|---|---|---|
| 764 | 636 | 0 |
| 670 | 537 | 0 |
| 32 | 36 | 0 |
100% of the replies X actually delivered to the browser, in all three. The shortfall
against the counter in the first two is replies X never served at all — deleted, blocked,
restricted, or never returned by any surface — which are undetectable by construction. The
third row exceeds its counter because X appears to count direct replies only, while the
archive also captures nested replies-to-replies.
Every export reports what it captured, lists any reply id it knows about but could not
fetch, and refuses to treat X's public reply counter as a denominator. Coverage is best
effort and the receipt says so.
Why one click runs all three surfaces: on the 670-reply post, Latest alone reached 473
(88%) — Top and Relevant added 64 more (+13.5%). Relevant has the lowest reach but
contributes the most unique replies, because it reaches nested sub-threads the search
surfaces do not return.
Also in this release
- A shorter menu. The post drop-down had grown to ten items, which buried the common
actions; it is now six. Save locally + create AI link was two actions that are both
still listed separately, and Download ZIP (HTML + Markdown) is the non-Chromium
fallback that Save to library already falls back to on its own. Both remain fully
supported by the engine and the extension popup — they are simply no longer menu entries.
Fixed
- An image recorded by two capture layers is now one media link. X serves the same image
with and without a file extension before the query string, so images seen by both the DOM
and GraphQL layers were stored, counted, and listed twice — one real archive showed 311
image links covering only 162 distinct images. When two URLs name the same asset, the
full-size rendition wins. - The capture receipt no longer lists a reply as "uncaptured" when its body is in the same
file, no longer double-prints the@in the archive title, and no longer renders X's HTML
encoding (->) in reply bodies. - The root post is no longer archived as a reply to itself.
- The archive store is now created correctly on installs that had already picked a library
folder. Previously the shared database existed at an older version, the archive's table
was never created, and every write failed. - Reply capture no longer reports "no results" on a healthy conversation just because X had
not rendered its first reply yet, and no longer stalls a working run in a background tab —
it pauses only when the tab is hidden and nothing has rendered.
Full changelog: https://github.com/wolfgang-aura/SourceCapsule/blob/main/CHANGELOG.md
v1.2.1 - Full long-form post text, recovered passively
What's new
Long-form ("note") posts now export with their FULL text - no more preview-only captures for long posts your browser has already loaded.
How it works
X's own web app downloads the complete long-form text when you view a thread. SourceCapsule now stops throwing that data away: the existing passive network-capture layer (already used for video variants) also parses note_tweet payloads and swaps the full text into the export.
- Zero extra network requests - only data X already delivered to your browser is used
- Works for thread posts and quoted long-form posts
- Verified on a real 31-post thread: 18/18 long-form posts recovered in full, no per-post interaction needed
- Still honest: recovered posts are marked "full text recovered from data X delivered to the browser" in both HTML and llm.md; posts whose full text never reached the browser keep the truncation warning
Also
- Fixed an over-escaped regex in the injected capture bridge (its
video.twimg.combody match was unreachable)
Install / update
Installed users auto-update within ~24h via @updateURL. New users: install from Greasy Fork or click the attached sourcecapsule.user.js with Tampermonkey/Violentmonkey enabled.
🤖 Generated with Claude Code
SourceCapsule v1.2.0 — Quick save, Share with AI, full-thread by default
What's new
One-click quick save. The main button now saves the thread or Article straight to your library — no menu, no confirmation.
Full-thread capture by default. On a status page, SourceCapsule scrolls from the top and captures the same-author thread posts it can verify. Lazy-loaded media that X hid from the DOM is recovered through the syndication endpoint, and thread completeness is reported honestly in the manifest.
Share with AI. Create a private, unguessable link that expires after 1, 7, or 30 days (7 by default). Backed by a real Cloudflare Worker + R2 store with per-IP rate limiting, a 25 MB cap, noindex + CSP headers, and daily expiry cleanup. Raw video is intentionally excluded; posters + source links are kept.
Copy clean Markdown. LLM-ready context onto the clipboard in one click.
Saved context. Add an optional "saved because" note and tags before saving.
Local library index. Each library root gets a _sourcecapsule-index.md updated on every save.
Honest capture reporting. Link cards are preserved with their real URLs (t.co upgraded via syndication), long-form ("note") posts render a yellow truncation notice when X only exposed a preview, and the export menu is regrouped into 6 items.
Experimental Chrome extension. npm run build:extension generates a Manifest V3 package that runs the same source engine without Tampermonkey.
Install
Easiest: install from Greasy Fork (auto-updates), or open the attached .user.js with Tampermonkey/Violentmonkey installed. Existing installs auto-update from GitHub.
Known limitations (kept honest in every export)
- Very long threads: browser-only capture reaches the same-author posts it can verify during a progressive scroll — not a guarantee of every reply in arbitrarily long threads.
- Long-form ("note") posts: only the preview X exposes is captured, flagged with a yellow truncation notice. Full-text recovery is on the roadmap.
- Video: full MP4 inlines when X exposes it (local saves only). HLS-only videos fall back to poster + source link. Raw video is never included in share links.
Full changelog: v1.1.1...v1.2.0
SourceCapsule v1.1.1 — Article author attribution fix
Fixed
- An X Article containing an embedded quoted tweet could be attributed to the quoted tweet's author instead of the Article's actual author. Author, handle, and avatar now always come from the Article itself.
Install
Easiest: install from Greasy Fork (auto-updates), or click the attached .user.js with Tampermonkey/Violentmonkey installed.
What SourceCapsule does
One click on any X/Twitter post, thread, or Article saves it as clean Markdown for LLM context plus a self-contained offline HTML archive — images, inline video, and quoted posts embedded, with an honest manifest of anything that couldn't be captured.
Full changelog: v1.1.0...v1.1.1
SourceCapsule v1.1.0 — Save to library (agent-ready folders)
What's new
- Save to library: each export now lands in a per-post folder under a library root you pick once —
<root>/<date>/<handle>-<id>/with the offline HTML, an LLM-ready.llm.md, and amedia/folder of real image files. Built for pasting straight into an AI chat as context. - Chromium writes folders directly via the File System Access API; other browsers get a
.zipwith the same structure. - Fixes for list rendering and text-encoding detection.
Install
Easiest: install from Greasy Fork (auto-updates), or click the attached .user.js with Tampermonkey/Violentmonkey installed.
Full changelog: v1.0.0...v1.1.0
SourceCapsule v1.0.0
First public release.
Export an X (Twitter) Article or post to one self-contained, fully-offline .html archive (images, inline videos, and quoted posts embedded) plus a clean .llm.md companion for LLMs.
Honesty-first: media is either preserved offline (with byte size + SHA-256) or clearly reported as incomplete/missing — never mislabelled as captured. Includes per-post + per-article Export buttons, a HTML / Markdown / Both menu, and honest long-form-post truncation flagging.
Install: add Tampermonkey or Violentmonkey, then open sourcecapsule.user.js. See the README for details.