GhostPen

Guide

Set up GhostPen, summarize links, export PDFs, record meetings, and use AI in every app.

Install

Download the file for your system from the download section or the GitHub releases.

  • Linux: the .deb (Debian, Ubuntu) and .rpm (Fedora, openSUSE) install GhostPen with what it needs (GTK 4, WebKitGTK 6.0). The AppImage runs without installing, on a system that has those libraries. They run captions, dictation and Built-in models on the GPU through Vulkan (any GPU vendor). With an NVIDIA GPU (RTX 20xx or newer) and the CUDA 13 runtime installed (Arch: cuda; others: NVIDIA’s CUDA packages), the NVIDIA CUDA downloads are 10–20% faster; without the runtime they use Vulkan too, and they update to CUDA builds.
  • Windows: run the installer; it installs for your user, no administrator needed. Captions, dictation and Built-in models run on any GPU through Vulkan (the CPU without a Vulkan driver). Windows may warn about an unknown publisher until the installer is code-signed: choose More info → Run anyway.
  • macOS: open the .dmg and drag GhostPen to Applications. The app isn’t notarized by Apple yet, so the first start is blocked (“Apple could not verify GhostPen…”): choose Done, then System Settings → Privacy & Security → Open Anyway and confirm. (Or, in Terminal: xattr -dr com.apple.quarantine /Applications/GhostPen.app.) Then macOS asks for Accessibility, which GhostPen needs to copy your selection and paste the result.

GhostPen starts in the tray (menu bar on macOS). Its menu has Dictation, Captions, Meetings, Playground and Settings.

Set up your AI

GhostPen needs a model to talk to. In Settings → AI Profiles, a profile runs on one of two things:

  • Built-in: GhostPen runs the model itself, with the llama.cpp compiled into it. Nothing is sent over the network and no other software is needed. Download a model in Settings → Built-in models and press Use: this creates a Built-in (GhostPen) profile and makes it active.
  • An AI endpoint: any OpenAI-compatible API. Presets fill in Ollama (http://localhost:11434/v1), LM Studio, OpenAI, OpenRouter and Groq; Fetch models lists what the endpoint offers.

You can keep several profiles and switch between them; the menu shows which one is active.

Built-in models

ModelSizeGood for
Qwen3.5 2B1.3 GBthe fastest; fine for proofreading
Gemma 3 4B2.5 GBa good all-rounder, many languages
Qwen3.5 4B2.7 GBbalanced
Gemma 4 E4B5.0 GBrecommended
Qwen3.5 9B6.0 GBthe best quality; needs about 8 GB of GPU memory

Downloads can be paused and resumed, and are checked against the SHA-256 that Hugging Face publishes. GGUF models already downloaded by LM Studio are found and offered too.

The model runs on the GPU when there is one (on Linux through Vulkan, on any GPU vendor; Metal on macOS; CUDA in a -Dcuda build): as many of its layers as the free GPU memory holds, the rest on the CPU. Runner settings: the context window (8k tokens by default), the GPU on or off, and how long the model stays loaded after its last use (10 minutes; it loads again in a few seconds).

Use it

In any app

  1. Select text.
  2. Press Ctrl+Shift+A (or click the tray icon).
  3. Pick an action with the mouse or its number key.

The result replaces your selection, and your clipboard is restored afterwards. Intensity (Subtle, Balanced, Strong) sets how far a rewrite goes. The prompt bar at the bottom takes any instruction (“make it a bulleted list”, “answer politely”). Press Esc to close the menu, or to stop an answer the built-in model is still writing.

Your own actions (Settings → Custom Actions) appear in the menu and the Playground next to the built-in ones.

Playground

A window to try actions on text you paste, with the answer streaming in. Open it from the tray or the flask icon in the menu.

Link summaries

Select a webpage link, open GhostPen, and choose Summarize link, or paste the URL into the Summary window. Pick Brief, Standard, or Detailed to choose how much context to keep. The answer streams into a reader with adjustable text size, serif or sans-serif type, and comfortable or compact spacing.

Read summary reads the answer aloud with the built-in voice, and Read page reads the source page. The Show thinking switch requests thinking on the next summary and reveals any the model returns. Some models do not expose it. Copy, Read summary, and exports use the answer itself.

Export a summary

  1. Open Export in the reader toolbar.
  2. Choose PDF for a formatted document, or Markdown (.md) for editable text with the original Mermaid diagram source.
  3. Choose where to save the file in the save dialog.

Mermaid diagrams render in the reader and are embedded as images in the PDF. Large drawings continue in labeled, overlapping panels so their labels stay readable. A heading stays with its first panel. PDF diagrams use a light palette, even if your reader is in dark mode. Invalid diagrams keep their readable source instead of stopping the export.

Live captions

Ctrl+Shift+L shows subtitles for what your computer plays, transcribed on your machine by whisper. Pick the whisper model in Settings → Live Captions (small is a good choice on a GPU) and download it once. Captions can be translated to English by whisper, or to any language by your AI profile. On macOS, captions need a loopback device such as BlackHole to hear the system audio.

Meetings

Keep a conversation’s audio, speaker-labelled transcript, clean text, summary, and saved questions together. Transcription and speaker detection run on your computer; proofreading, summaries, and questions use the active AI profile. Choose a Built-in profile to keep that work on your device too.

Record and revisit

Turn on 🎙 Meeting in the captions bar, then Start. The captions also record what your computer plays and your microphone (shown as “Me”), and label the other speakers by voice as they talk. Stop & save (or Esc, or the hotkey) saves the meeting: the whole audio is transcribed again with the time of each word, the speakers are told apart by voice, and your AI profile proofreads it into a clean text with a title. A notification says when it’s ready.

Tray → Meetings lists them. Press play and the word being said is highlighted; click a line to play from it, double-click to edit it. Click a speaker to rename them (every line follows); their menu merges them into another speaker or remembers their voice, so later meetings name them by themselves. Copy gives the clean text, Markdown or subtitles; Redo proofreads or finds the speakers again; right-click a meeting to rename or delete it.

Summaries and questions

The Summary tab writes an overview, key points, decisions and action items with your AI profile (a long meeting is read in parts first), and under it you can ask your own questions, such as What did Alex say about me? Answers cite the times they come from and are saved with the meeting; 🔊 Read reads the summary or an answer aloud.

Recording setup

Use a headset if you can: through speakers the microphone hears the call too. GhostPen drops those lines (same words, same moment), but a headset keeps your track clean. The speaker model (WeSpeaker, 26 MB) downloads the first time a meeting is saved; Settings → Speech → Meetings has the options.

Dictation

Ctrl+Shift+D, speak, then Enter. The transcript is proofread by your AI profile (turn Polish off for the raw text) and copied to the clipboard.

Read aloud

GhostPen reads text aloud with a natural voice (Kokoro) that runs on your computer: nothing is sent anywhere.

  • The Read action: select text, open the menu and pick Read. It reads the selection as it is, with no AI pass, in a voice for the language of the text, which GhostPen works out from the text itself.
  • 🔊 Speak on a result: when the menu shows a result, Speak (or the S key) reads it. A translated result is read in the target language’s voice.
  • The summary window: Read summary and Read page.

Press ■ Stop, S again, or Esc to stop. Long texts are read in sentence chunks, so the voice starts after the first sentence instead of waiting for the whole text.

The first time, GhostPen downloads the voice model (about 135 MB) and a voice for the language (about 0.5 MB each), checked against their SHA-256. Settings → Voices lists them, downloads or deletes them, and shows whether the voice runs on the CPU or the GPU (with a GPU build, through Vulkan or CUDA). Voices: English (US and UK), Spanish, French, Portuguese, Italian, Japanese, Chinese and Hindi. The pronunciation data ships with GhostPen, so no extra package is needed.

From a terminal:

ghostpen --say "Good morning" --lang es --voice ef_dora

The binaries that read aloud include espeak-ng (GPL-3.0-or-later) for pronunciation; GhostPen’s own code stays MIT.

Text from images

Copy an image (a screenshot) and trigger GhostPen: Extract text reads it with a vision model through your profile, and the text becomes the selection. It works with a vision model on an endpoint (e.g. gemma4:e4b in Ollama) or with a built-in model that reads images: every catalog model has an image projector, downloaded with it (or Add image support in Settings → Built-in models for one you already have), and GhostPen runs it on your GPU.

Hotkeys

The three hotkeys are set in Settings → Behaviour. On Wayland they go through the desktop’s GlobalShortcuts portal, which asks you to confirm them the first time. Where there is no portal, bind the command line flags in your compositor instead; a running GhostPen receives them:

ghostpen --trigger      # the menu
ghostpen --voice-input  # dictation
ghostpen --captions     # captions

Hyprland, for example:

bind = CTRL SHIFT, A, exec, ghostpen --trigger

Command line

ghostpen-cli runs an action from a terminal with the same settings:

echo "teh quick brown fox" | ghostpen-cli proofread
ghostpen-cli translate --lang French --stream "Good morning"
ghostpen-cli profiles
ghostpen-cli models

To inspect the application log without opening a window:

ghostpen logs
ghostpen logs --follow

Where things are

LinuxWindowsmacOS
Settings~/.config/dev.ghostpen.Oriel/%APPDATA%\dev.ghostpen.Oriel\~/Library/Application Support/dev.ghostpen.Oriel/
Models (whisper, built-in)~/.local/share/GhostPen/models/%LOCALAPPDATA%\GhostPen\models\~/Library/Application Support/GhostPen/models/
Voices (read aloud)~/.local/share/GhostPen/tts/%LOCALAPPDATA%\GhostPen\tts\~/Library/Application Support/GhostPen/tts/
Meetings~/Documents/GhostPen/Meetings/ (your Documents folder)%USERPROFILE%\Documents\GhostPen\Meetings\~/Documents/GhostPen/Meetings/
Known voices~/.local/share/GhostPen/voices.json%LOCALAPPDATA%\GhostPen\voices.json~/Library/Application Support/GhostPen/voices.json

Settings from the earlier Rust/Tauri GhostPen are imported on the first start, and its downloaded whisper models are reused.

Build from source

GhostPen is built with Oriel:

git clone https://github.com/highercomve/GhostPen
cd GhostPen
oriel doctor --fix   # Zig, Node.js, …
oriel build          # zig-out/bin/ghostpen and ghostpen-cli
oriel build -Dcuda   # with an NVIDIA GPU (needs the CUDA toolkit)
oriel build -Dvulkan # with any GPU through Vulkan (Vulkan headers, glslc)
oriel package        # deb, rpm, AppImage / setup.exe / .app and .dmg