User Guide

Everything you need to know to get the most out of railreader2.

Getting Started

Download and install

Download the latest release from GitHub Releases. The AI layout model is bundled in both packages.

Opening a PDF

Use File → Open or press Ctrl+O to open a PDF. You can also pass a file path as a command-line argument. When no file is open, a welcome screen shows with instructions.

First steps

Once a PDF is open, you can scroll through pages with PgDn/PgUp, zoom with +/- or the mouse wheel, and pan by dragging. When you zoom past 3x, rail mode activates automatically — this is where the AI-guided reading begins.

Rail Mode

Rail mode is the core feature of railreader2. When you zoom past the threshold (default 3x), the AI layout analysis detects text blocks and reading order, and navigation locks to those blocks. Non-active regions are dimmed so you can focus on the current block and line.

railreader2 rail mode navigating a text block line by line at high magnification with the current line highlighted
Rail mode — line-by-line reading at high magnification with the current line highlighted

Line-by-line navigation

When you reach the last line of a block, pressing Down advances to the next navigable block. At the last block on a page, it advances to the next page.

Click to jump

Click on any detected block in rail mode to jump directly to it. The view snaps to the clicked block's first line.

Horizontal scrolling

Holding Right/D scrolls horizontally along the current line with speed ramping — it starts slow and accelerates. Ctrl + mouse wheel also scrolls horizontally. The speed ramp time and max speed are configurable in Settings.

Tip: Press Shift+D to toggle the debug overlay, which shows all detected layout blocks with their class labels, confidence scores, and reading order. Useful for understanding why rail navigation behaves a certain way.

Auto-Scroll

Press P in rail mode to toggle auto-scroll. The view continuously scrolls horizontally along the current line, then advances to the next line when it reaches the edge.

The status bar shows a green "Auto-Scroll" indicator when active. Adjust speed with the rail toolbar slider or the [ / ] keys.

Jump Mode

Press J in rail mode to toggle jump mode. Instead of continuous scrolling, Right/D and Left/A perform saccade-style jumps — advancing by a configurable percentage of the visible width (default 25%).

Hold Shift with Right or Left to perform a short jump at half the normal distance. This is useful for fine-grained positioning within a line.

This mimics natural reading eye movements and is useful for scanning text quickly. Adjust jump distance with [ / ] or in Settings → Rail Reading.

Tip: Auto-scroll and jump mode are mutually exclusive. Enabling one disables the other.

Line Focus Dim

When enabled, line focus dim applies a smooth feathered dimming overlay to the entire page except the active line in rail mode. Non-active lines fade toward the background colour, reducing peripheral distraction while maintaining a clean visual transition.

railreader2 line focus dim effect fading non-active lines to reduce distraction during rail reading
Line focus dim — non-active lines are dimmed to reduce distraction

Toggle with the F key, the F button on the rail toolbar, or in Settings → Rail Reading. Dim intensity is adjustable from 0 (off) to 1 (maximum). The padding around the active line (how much extra space stays fully visible) is also configurable.

Line highlight tint

The active line in rail mode can have a configurable colour tint applied as an overlay. This makes the current line stand out more clearly, especially at high magnification.

Choose from five presets in Settings → Rail Reading:

Opacity is adjustable from 0.0 (invisible) to 1.0 (fully opaque). The default is Auto at 25% opacity.

Bionic Reading

Bionic reading is a reading aid that de-emphasises the trailing portion of each word, guiding your eye to fixation points at the start of words. The effect is applied as a GPU shader that fades non-fixation characters toward the background.

Toggle with the R key, the R button on the rail toolbar, or in Settings → Rail Reading. Two parameters are configurable:

Bionic reading composes correctly with line focus dim and colour effects.

Colour Effects

Four GPU-accelerated colour filters are available, applied only to PDF content (not the UI). Access via View → Colour Effect, Settings → Appearance, or press C to cycle through effects on the active tab.

railreader2 amber colour filter applied to PDF content via GPU-accelerated shader
Amber filter — warm tint for comfortable reading
railreader2 high contrast colour effect combined with rail mode for maximum readability
High contrast + rail mode — maximum readability

Each tab keeps its own colour effect independently — you can have one PDF in Amber and another in High Contrast. The per-tab effect is saved with the reading position and restored when you reopen the file.

Each effect has adjustable intensity (0.0 to 1.0). Rail mode overlay colours automatically adapt to the active colour effect for readable contrast.

Tip: Press C to quickly cycle through colour effects. The status bar briefly shows the active effect name.

Annotations

Right-click anywhere on the page to open the radial menu with five annotation tools:

railreader2 annotation tools showing highlights, freehand pen marks, rectangles, and text notes on a PDF page
Annotations — highlights and text notes on a PDF page

Colour picker

The Highlight and Pen segments on the radial menu have colour options. Tap the segment to reveal an outer ring of colour dots. Tap a colour to select it and activate the tool. A small indicator dot on the segment shows the currently active colour.

Popup notes

Text notes display as a compact folded-corner icon (16px). In browse mode, click the icon to expand a floating popup showing the full note text with word wrapping. Click again to collapse.

Select, move, and resize

In browse mode (no annotation tool active), click on any annotation to select it (shown with a dashed blue outline). Drag a selected annotation to move it. For freehand annotations, 8 resize handles appear on the bounding box — drag a handle to scale proportionally. All move and resize actions support undo/redo.

Delete selected annotation

Press Delete or Backspace in browse mode to remove the selected annotation. This uses the same undo-supported removal as the eraser.

Undo and redo

Ctrl+Z undoes the last annotation action (including moves, resizes, and deletions). Ctrl+Y or Ctrl+Shift+Z redoes. Each tab has an independent undo/redo stack.

Persistence

Annotations are saved automatically as JSON sidecar files alongside the PDF (e.g. paper.pdf.annotations.json). They load automatically when you reopen the file.

Export

Use File → Export with Annotations to create a new PDF with annotations rendered into the pages. The original PDF is not modified.

Text Selection

The floating toolbar in the top-left corner provides three modes:

The active mode is shown with a blue highlight on the toolbar button. Press Escape to cancel selection and return to browse mode.

Bookmarks

Press B to bookmark the current page, or click + Add Bookmark in the bookmarks panel. A dialog lets you name the bookmark (pre-filled with "Page N").

Managing bookmarks

Press Ctrl+Shift+B to open the bookmarks panel (a tab alongside the outline panel). Each bookmark shows its name and page number.

Duplicate handling

If you bookmark a page that already has a bookmark, the existing bookmark's name is updated instead of creating a duplicate.

Persistence

Bookmarks are stored in the same annotation sidecar file as highlights, notes, and other annotations. They persist across sessions automatically.

Settings

Press Ctrl+, or use the menu to open Settings. Changes take effect immediately and are saved automatically to the config file.

Appearance

Rail Reading

Auto-Scroll

Advanced

Config file

Configuration is stored at ~/.config/railreader2/config.json (Linux) or %APPDATA%\railreader2\config.json (Windows). You can edit it directly; restart the app to apply changes.

Keyboard Shortcuts

Key Action
General
Ctrl+OOpen file
Ctrl+WClose tab
Ctrl+TabNext tab
Ctrl+QQuit
Ctrl+,Settings
Ctrl+MToggle minimap
Ctrl+Shift+OToggle outline panel
Ctrl+Shift+BToggle bookmarks panel
Ctrl+GGo to page
F1Keyboard shortcuts dialog
F11Toggle fullscreen
Navigation
PgDn / PgUpNext / previous page
Home / EndFirst / last page
SpaceNext line (rail) or next page
+ / -Zoom in / out
0Fit page to window
Shift+DToggle debug overlay
Rail Mode
Down / SNext line
Up / WPrevious line
Right / DScroll forward (hold)
Left / AScroll backward (hold)
Shift+Right / Shift+LeftShort jump — half distance (jump mode)
Home / EndLine start / end
PToggle auto-scroll
JToggle jump mode
BAdd bookmark for current page
` (backtick)Navigate back to previous location
CCycle colour effect on active tab
FToggle line focus dim
RToggle bionic reading
[ / ]Adjust speed or jump distance
Shift+[ / Shift+]Adjust blur intensity
ClickJump to block
Search & Annotations
Ctrl+FOpen search panel
F3 / Shift+F3Next / previous match
1 / 2 / 3 / 4 / 5Highlight / Pen / Rectangle / Text Note / Eraser
Right-clickOpen radial menu (colour picker for Highlight/Pen)
Ctrl+ZUndo
Ctrl+YRedo
Delete / BackspaceDelete selected annotation (browse mode)
Ctrl+CCopy selected text
EscapeCancel tool / close search / stop auto-scroll / exit fullscreen

AI Agent CLI (Experimental)

Note: The AI Agent CLI is not included in the binary releases (AppImage or Windows installer). It is only available when building from source with the .NET SDK installed. This feature is experimental and may change in future releases.

RailReader includes a headless agent CLI that lets an LLM open PDFs, navigate, extract text, search, annotate, and export — all via structured tool calls.

Setup

# Set your API key
export OPENAI_API_KEY="your-key"

# Optional: specify model and base URL
export RAILREADER_MODEL="gpt-4o"
export RAILREADER_BASE_URL="https://api.example.com/v1"

Usage

# Run with a task description
dotnet run --project src/RailReader.Agent -- "Open paper.pdf and summarise page 1"

# Interactive mode (prompts for task)
dotnet run --project src/RailReader.Agent

# Capture screenshots deterministically
dotnet run --project src/RailReader.Agent -- --capture-screenshots docs/img/

Available tools

The agent has access to these tools: