Extract key points from long articles, PDFs, and URLs with configurable summary lengths and automatic Obsidian integration
Resources
2Install
npx skillscat add marrowleaf/hermes-speed-reader Install via the SkillsCat registry.
Speed Reader
Quickly extract key points from long-form content — articles, PDFs, or URLs — and save structured summaries to your Obsidian vault with source links and reading time estimates.
Overview
Speed Reader helps you process information faster by distilling long content into digestible summaries. It supports three input types (web URLs, PDFs, and pasted text) and three summary formats (1-paragraph, 5-bullets, full digest). Summaries are automatically saved to your Obsidian vault using the PARA method.
Commands
/speed-read <input> [format]
Main command. Summarize content from a URL, PDF path, or pasted text.
Arguments:
<input>— URL, PDF file path, or quoted text[format]— Summary format:paragraph(default),bullets, ordigest
Examples:
/speed-read https://example.com/long-article paragraph
/speed-read ~/Documents/report.pdf bullets
/speed-read "Long pasted text content here..." digest/speed-read-batch <file>
Process multiple inputs from a text file (one per line).
Example:
/speed-read-batch ~/urls-to-read.txt bullets/speed-read-config
View or update configuration options.
Subcommands:
show— Display current configurationset <key> <value>— Update a settingreset— Restore defaults
/speed-read-history
Show recent summaries saved to the vault.
Configuration
| Key | Default | Description |
|---|---|---|
default_format |
paragraph |
Default summary format |
vault_path |
~/obsidian-vault |
Path to Obsidian vault |
save_to_vault |
true |
Auto-save summaries to vault |
para_folder |
3-Resources |
PARA folder for summaries |
include_source_link |
true |
Include source URL/path in note |
include_reading_time |
true |
Estimate and show reading time saved |
max_content_length |
50000 |
Max characters to process |
Workflow
1. Input Detection
The skill automatically detects input type:
- URL — Starts with
http://orhttps://, uses browser tools to scrape - PDF — Ends with
.pdf, usesocr-and-documentsskill for extraction - Text — Quoted or pasted text, processed directly
2. Content Extraction
Web Articles (URLs)
1. Use browser tools to navigate to the URL
2. Extract the main content (strip navigation, ads, footers)
3. Detect article title, author, and publish date
4. Fall back to raw HTML parsing if browser tools unavailablePDFs
1. Delegate to ocr-and-documents skill for text extraction
2. If PDF is scanned, OCR is applied automatically
3. Extract metadata (title, author, page count)
4. Return extracted text for summarizationPasted Text
1. Accept text directly from the command
2. Clean formatting artifacts
3. Proceed to summarization3. Summarization
Based on the selected format:
Paragraph — A single concise paragraph capturing the thesis and key supporting points.
Bullets (5-bullets) — Five bullet points covering:
- Main thesis/argument
- Key evidence or data point
- Notable insight or finding
- Counter-argument or limitation
- Takeaway / call to action
Digest — Full structured summary:
# [Title]
**Source:** [URL/path]
**Author:** [Author name]
**Reading Time:** [X] min (Original: [Y] min — saved [Z]%)
## Key Points
- Point 1
- Point 2
- Point 3
## Notable Quotes
> "Exact quote from the text…"
## Analysis
Brief analytical commentary.
## Action Items
- [ ] Follow up on…4. Saving to Obsidian
Summaries are saved to the vault under 3-Resources/Summaries/:
---
title: "Summary: [Article Title]"
date: 2025-01-15
source: "https://example.com/article"
author: "[Author]"
original_reading_time: 25
summary_reading_time: 2
time_saved_pct: 92
tags: [summary, topic1, topic2]
---
[Summary content here]Reading Time Estimation
Reading time is calculated at 238 words per minute (average adult reading speed).
Time saved formula:
original_words = word_count(full_content)
summary_words = word_count(summary)
original_time_min = ceil(original_words / 238)
summary_time_min = ceil(summary_words / 238)
time_saved_pct = round(100 * (1 - summary_words / original_words))Examples
Summarize a web article
User: /speed-read https://arxiv.org/abs/2401.00001 bullets
→ 📄 Fetching article...
→ 📝 Extracting content (3,240 words)
→ ✅ Summary ready (5 bullets)
**Reading time saved: 12 min → 1 min (92% reduction)**
• The paper introduces a novel architecture for…
• Key result: 15% improvement over baseline on…
• The approach uses attention mechanisms combined with…
• Limitation: only tested on English-language datasets
• Takeaway: promising direction for future multimodal research
💾 Saved to: 3-Resources/Summaries/Summary - Novel Architecture.mdSummarize a PDF
User: /speed-read ~/Documents/quarterly-report.pdf digest
→ 📄 Processing PDF (24 pages)...
→ 📝 Extracting text via ocr-and-documents...
→ ✅ Full digest ready
💾 Saved to: 3-Resources/Summaries/Summary - Q3 Report.mdBatch processing
User: /speed-read-batch ~/reading-list.txt bullets
→ Processing 12 items...
→ [1/12] ✅ https://example.com/article-1
→ [2/12] ✅ https://example.com/article-2
→ [3/12] ⚠️ https://example.com/article-3 (paywall — partial content)
→ ...
→ ✅ 11/12 summaries saved to vaultPitfalls
Paywalled content — Browser tools may not bypass paywalls. You'll get partial content with a warning. Consider asking the user for a text paste instead.
JavaScript-heavy pages — Single-page apps (SPAs) may not render full content with basic scraping. The browser tools should wait for dynamic content to load, but sometimes content is lazy-loaded.
Scanned PDFs — Without OCR, scanned PDFs return no extractable text. Always rely on
ocr-and-documentsfor PDFs, which handles this automatically.Very long documents — For documents exceeding
max_content_length, the skill truncates but warns the user. Consider usingdigestformat for long content, which provides the most comprehensive extraction.Rate limiting — Batch processing URLs too quickly can trigger rate limits. The skill adds a 2-second delay between requests by default.
Encoding issues — Non-UTF-8 content may produce garbled text. The extraction step attempts encoding detection, but unusual encodings may need manual intervention.
Missing metadata — Not all articles have clear author or date metadata. The skill uses fallbacks (OG tags, structured data) but may leave fields blank.
Obsidian folder — If the
3-Resources/Summaries/folder doesn't exist in the vault, it must be created before saving. The skill handles this, but check vault path configuration.Duplicate summaries — Re-summarizing the same URL overwrites the previous summary. The skill uses the source URL as a key for deduplication.
Reading time inaccuracy — Content with heavy images, code blocks, or data tables may have skewed reading estimates. The formula counts words only.
Verification Steps
Check skill is loaded:
/speed-read-config showShould display current configuration with vault path and default format.
Test URL summarization:
/speed-read https://example.com paragraphShould return a concise paragraph summary and confirm save location.
Test PDF summarization:
/speed-read ~/test-document.pdf bulletsVerify that
ocr-and-documentsis invoked for PDF extraction.Test text summarization:
/speed-read "The quick brown fox jumps over the lazy dog. This classic pangram contains every letter of the alphabet." paragraphShould return a summary and save to vault.
Verify Obsidian save:
Check~/obsidian-vault/3-Resources/Summaries/for the generated markdown files.Verify reading time estimates:
Confirm thatoriginal_reading_time>summary_reading_timeandtime_saved_pctis displayed.Test batch processing:
Create a text file with 2-3 URLs and run/speed-read-batchto verify sequential processing.Check error handling:
Test with an invalid URL, a non-existent PDF, and empty text to confirm graceful error messages.