Configuration¶
Inkfeed is configured via a single TOML file. By default, it looks for config.toml in the current directory.
General Settings¶
[general]
output_dir = "output" # Where archived content is saved
embed_assets = true # Embed images inline (base64)
output_formats = ["html", "md", "gemtext", "epub", "sleepscreen"]
max_workers = 8 # Concurrent download threads
max_retries = 3 # Retry count for failed requests
output_dir¶
Path to the output directory (relative to where you run Inkfeed). Created automatically if it doesn't exist.
embed_assets¶
When true, images are downloaded and embedded directly in the output files. This makes each file fully self-contained but increases file size.
output_formats¶
List of output formats to generate. Available formats:
| Format | Extension | Description |
|---|---|---|
html |
.html |
Rich HTML with embedded styles |
md |
.md |
Clean Markdown |
gemtext |
.gmi |
Gemini protocol format |
epub |
.epub |
E-book format |
sleepscreen |
.html |
E-ink optimized HTML for always-on displays |
max_workers¶
Number of concurrent threads for downloading articles and images. Higher values are faster but use more bandwidth.
max_retries¶
How many times to retry a failed HTTP request before giving up.
Sleepscreen Settings¶
[sleepscreen]
width = 480 # Render width in pixels
height = 800 # Render height in pixels
spotlight_count = 2 # Number of featured articles
max_headlines_per_card = 10 # Headlines per category card
max_excerpt_chars = 350 # Max chars for article excerpts
The Sleepscreen format generates static images designed for the Xteink X4 e-ink display's sleep screen feature. It renders HTML pages in a headless browser and captures screenshots as 8-bit grayscale images.
Other e-ink devices may also work if they support:
- Cycling through multiple sleep screen image files in a folder
- 8-bit grayscale images with more than 4 levels of gray
Screen LUT configuration is not yet supported, but since Sleepscreen output is primarily text-based, the default LUT should produce acceptable results.
Source Configuration¶
Each source is defined under [sources.<name>]. The <name> is a unique identifier used internally.
Common Source Fields¶
[sources.example]
type = "rss" # Source type: "api" or "rss"
display_name = "Example Feed" # Human-readable name
frequency = "daily" # Fetch frequency
enabled = true # Set to false to skip
API Sources¶
API sources use built-in archivers. Currently supported:
hackernews— see Hacker News source docskaginews— see Kagi News source docs
RSS Sources¶
Any RSS or Atom feed can be added:
[sources.my_feed]
type = "rss"
display_name = "My Favorite Blog"
frequency = "daily"
enabled = true
url = "https://example.com/rss.xml"
max_articles = 30
include_article_content = true
See RSS source docs for all options.
Full Example¶
[general]
output_dir = "output"
embed_assets = true
output_formats = ["html", "md", "gemtext", "epub", "sleepscreen"]
max_workers = 8
max_retries = 3
[sleepscreen]
width = 480
height = 800
spotlight_count = 2
max_headlines_per_card = 10
max_excerpt_chars = 350
[sources.hackernews]
type = "api"
display_name = "Hacker News"
frequency = "daily"
enabled = true
top_stories = 30
include_comments = true
max_comment_depth = 3
max_comments_per_level = 10
include_article_content = true
[sources.kaginews]
type = "api"
display_name = "Kagi News"
frequency = "daily"
enabled = true
language = "en"
max_stories_per_category = 50
categories = [
"south_korea", "usa", "world",
"business", "tech", "science",
"sports", "gaming",
]
[sources.hackaday]
type = "rss"
display_name = "Hackaday"
frequency = "daily"
enabled = true
url = "http://www.hackaday.com/rss.xml"
max_articles = 30
include_article_content = true
[sources.engadget]
type = "rss"
display_name = "Engadget"
frequency = "daily"
enabled = true
url = "https://www.engadget.com/rss.xml"
max_articles = 30
include_article_content = true