Loading library…
a quiet, powerful place for documents, images & studying
everything runs locally in your browser — files never leave your device
AI agent, PDF/Word viewer, flashcards
Save, search and reopen your work
Canvas · type text directly · Ctrl+Z
System & online natural voices
Live transcript as you speak
Combine multiple PDFs
Extract page ranges
Drag, drop, rotate pages
Write with markup — get a clean PDF
Pictures, headings & lists preserved
Stamp PDFs & Word documents
Reduce file size
View, edit, remove backgrounds
Combine images into PDF
Batch reduce image size
Re-encode MP4/MKV smaller
Extract audio from video
Shrink audio to AAC or MP3
Image format converter
Create QR codes
Split image across pages
Video converter · Doc → PDF · CSV ↔ JSON
Saved only in this browser. Clearing this site's cookies / site data wipes your library — a cache-only clear is safe.
Loading library…
Drop a PDF or Word (.docx) file anywhere in this pane, or open one. You get thumbnails, outline, full-text search, selection → AI, and one-click narration. Reader documents are read-only here, so there is no edit undo control.
Ask anything about what you’re studying — pick AI or Web below the box. Answers stream in live as they’re written. Select text in the Reader for one-tap Explain.
Auto picks the best browser voice when one is available and falls back to the online natural voice otherwise; Online streams a natural voice from a free Google service (it falls back to the system voice if blocked); System uses only this browser’s own voices. Natural / Neural / Microsoft voices sort to the top of the list.
A slower pace inserts natural pauses between phrases and sentences — ideal for writing along. Speech speed itself changes only gently.
Open a PDF, Word file or plain text — or paste anything — and it will be read aloud, sentence by sentence, with the current line highlighted.
Load text — articles, notes, study material — and Lumen will turn it into flashcards for spaced repetition review.
Tap the card to reveal the answer
Make a quiz from the open Reader document or pasted text. Pick a question style and count, then Generate — Lumen writes and presents the questions, and grades your long-answer replies with your AI provider.
No saved quizzes yet — generate one and it joins the current notebook. Choose Save Notebook in the top bar to keep it.
Stack any number of PDFs into one file, in order.
or click to choose — add as many as you like
Extract ranges, or burst a PDF into parts.
or click to choose one
Drag pages into a new order, rotate or delete them.
or click to choose one
Write with markup — get a clean, paginated PDF.
Markup: # h1 · ## h2 · ### h3 · **bold** · *italic* · `code` · > quote · - list · 1. list · --- rule · ``` code block```
Standard PDF fonts cover Latin scripts — other writing systems become “?”.
Pictures, headings, lists, bold & italic are preserved — margins on every side.
.docx — with its images, in their original order
Stamp text across every page of a PDF or a Word document.
.pdf · .docx — Word is converted first, pictures intact
Clean up the structure, or rasterise pages for real savings.
or click to choose one
A genuine FFmpeg re-encode — with a cancel button, because in-browser encoding is slow.
mp4, mkv, webm, mov — re-encoded locally, never renamed
H.264 with the fastest preset. Honest speed note: browser FFmpeg encodes roughly at (or slower than) real-time — a 5-minute clip can take 5+ minutes. Use Cancel if you change your mind; the engine reloads on the next run.
Re-encode any audio or video’s sound at a smaller bitrate.
mp3, m4a, wav, flac, ogg — or a video file (sound only)
Real FFmpeg re-encoding, on this device. MP3 uses the LAME encoder; if your build lacks it, the tool falls back to AAC automatically.
Zoom (wheel or pinch), crop, draw, remove backgrounds, invert — every pixel stays local.
or click to choose, or paste from the clipboard (Ctrl+V) — PNG, JPEG, WebP, GIF
Combine images into one tidy document.
or click to choose — PNG, JPEG, WebP, GIF, BMP
Batch-shrink images and see exactly how much you saved.
or click to choose — add as many as you like
Pull the sound track out of any video — decoded locally, exported as WAV.
or click to choose — mp4, webm, mov, mkv, mp3, m4a, wav…
PNG, JPEG and WebP — one file or a whole batch.
or click to choose — add as many as you like
Crisp codes as PNG or SVG — links, Wi-Fi, text, anything.
Split one image across printable pages — cut lines automatically avoid slicing through words.
or click to choose one
Drop any file in — get a useful format out. All conversions run on this device.
or click to choose — images, audio/video, txt/md, csv, json, docx
Connect this website to Ollama on your computer.
Lumen can connect directly to Ollama running on your own computer, allowing you to use your locally installed AI models inside Lumen.
This is useful because your model runs locally rather than requiring a cloud AI API.
There is one important catch, though:
Lumen is a website, while Ollama is a local server.
Your browser therefore has to make a request from Lumen's website to your computer.
The two addresses are:
Lumen https://lumendesk.pages.dev
and
Ollama http://127.0.0.1:11434
Because these are different origins, your browser applies a security mechanism called CORS (Cross-Origin Resource Sharing).
If Ollama doesn't explicitly allow Lumen's origin, the browser request can be rejected with:
403 Forbidden
Lumen then interprets this as Ollama being unreachable.
The solution is to tell Ollama:
Allow requests coming from https://lumendesk.pages.dev.
That's what OLLAMA_ORIGINS does.
If you're unfamiliar with environment variables, PowerShell, or restarting background services, you can use an AI coding/terminal agent to help configure this.
Examples include:
The agent doesn't need to modify Lumen itself. Its job is simply to:
OLLAMA_ORIGINS configuration.Very little. This isn't a large coding project. A capable agent should normally only need a small number of terminal commands and a short conversation. For example, the agent may need to:
Check Ollama Check OLLAMA_ORIGINS Set variable Restart Ollama Run CORS test Done
So you shouldn't need to spend hundreds of thousands of tokens on this. A few thousand tokens or less is generally plenty for the actual troubleshooting. If an agent somehow turns this into a 47-file software architecture project, it has gotten way too excited.
Give the agent the prompt below before letting it make changes. That way, it knows exactly what you're trying to accomplish and is less likely to start changing unrelated settings.
Copy this into OpenCode, Codex, Antigravity, or a similar agent:
Don't give an agent unnecessary permissions just because it says it needs them. For this task, it should not need to:
The task is basically an environment-variable + restart + test job.
Before beginning, make sure you have:
For example:
Check your installed models:
Open this in your browser:
You should see:
If you don't, launch Ollama and wait for it to start.
You can also run:
If Ollama is working, you'll receive JSON containing your installed models.
This is the actual CORS fix. Set:
Variable name
Variable value
Click OK through all the dialogs.
Run:
Changing the environment variable doesn't automatically update an Ollama process that is already running. Ollama needs to start again so it can read the new value.
Quit Ollama completely and relaunch it.
If you're running Ollama as a system service:
The restart is essential. Without it, you can correctly set OLLAMA_ORIGINS and still get a 403 because the old Ollama process is still running with its previous configuration.
This is the best way to determine whether the problem is actually fixed. On Windows:
You want:
Great! Ollama accepted a request carrying Lumen's origin. You can move on to Lumen.
Ollama is still rejecting the origin. Continue to Troubleshooting.
Open:
Go to Settings and select:
Provider: Ollama
Base URL:
Then select a model that you've already downloaded with Ollama. For example:
Send a test message. If everything is configured correctly, Lumen should now be able to communicate with your local model.
Check the environment variable:
It should output exactly:
Make sure there aren't:
Then fully restart Ollama again.
If you're certain everything looks correct but you're still getting 403, you can temporarily test whether the problem is definitely the origin restriction.
Set:
Restart Ollama. Then run the CORS test again:
If you now get 200, then you've confirmed that the problem is the origin configuration.
Don't leave it at * unnecessarily. Set it back to:
Then restart Ollama one more time.
Work through these checks:
Open: http://127.0.0.1:11434 — Does it say Ollama is running?
Run: ollama list — Make sure at least one model is installed.
Run: curl.exe http://127.0.0.1:11434/api/tags — You should receive JSON.
Run the CORS test above. You want 200.
If Lumen still can't connect using http://127.0.0.1:11434, try http://localhost:11434 as the Base URL.
This setup is designed to keep Ollama local.
The intended architecture is:
Internet
|
v
+-----------------+
| Lumen |
| lumendesk.pages |
+--------+--------+
|
Browser request
|
v
+-----------------+
| 127.0.0.1 |
| :11434 |
+--------+--------+
|
v
+----------+
| Ollama |
+----+-----+
|
v
Your local model
You do not need to expose Ollama to the internet.
Avoid doing things like:
OLLAMA_HOST=0.0.0.011434It's worth understanding what you're changing. The browser essentially tells Ollama:
"I'm making this request from: https://lumendesk.pages.dev"
Ollama checks whether that origin is allowed.
Without the configuration:
Lumen -> Ollama
X Origin not allowed
-> 403
With OLLAMA_ORIGINS=https://lumendesk.pages.dev:
Lumen -> Ollama
OK: Origin allowed
-> 200
Your model itself doesn't change. Your downloaded model files don't change. You're simply telling Ollama which web origin is allowed to communicate with it.
If you're comfortable with the terminal:
Quit Ollama completely -> launch it again.
You want: 200
Provider: Ollama Base URL: http://127.0.0.1:11434
Choose your installed model. Done.
If you aren't comfortable with the terminal, I recommend using an agent like OpenCode, Codex, or Antigravity for this setup.
This is exactly the kind of small system-configuration task where an agent is useful: it can inspect your current configuration, run the appropriate commands, restart Ollama, and verify the result rather than making you hunt through Windows settings yourself.
And importantly, this should be a very small agent task. You don't need to burn through a giant context window or use an expensive model. A lightweight but competent coding model should generally be more than enough.
Just give the agent the prompt above and tell it:
Diagnose this first. Don't make unrelated changes.
That one sentence can save you from the classic AI-agent experience of asking it to fix one environment variable and watching it decide that your entire computer needs a spiritual reboot.