FastLoupe

The command line

Everything FastLoupe does without opening a window. One flag, one pass, one exit code — built for a scheduled task rather than for a person watching a progress bar.

One flag, one pass, one exit code

FastLoupe [<library>.db | --catalog <path>] [verb]

With no verb, a window opens as usual. Each verb below instead runs one pass and exits. There is no daemon, no --watch and no sub-command tree to learn.

These are the commands a person, a launcher or a scheduled task types. The scripted and developer modes are a different thing with different rules; --help deliberately does not list them.

The verbs

--ready-sync [folder]

Update the portable copy of this library on another drive. Naming a folder also sets it as the destination, exactly as choosing it in Settings does.

--backup [folder]

Take one catalogue snapshot and print where it landed and how big it is. Photographs are never touched — this backs up the catalogue. With no folder configured it refuses rather than choosing somewhere to write gigabytes on your behalf.

--check

Print the library's health, one line per fact: how many photos, which drives are connected, thumbnail coverage, when the last backup and the last portable-copy pass finished. Writes nothing, anywhere — which is what lets it check a read-only drive.

--import <folder>

Import that folder, searched recursively as the source, using the import settings saved in the app: destination, second copy, naming template, clock offset, IPTC stationery. Verify is on and move is off, because those two are per-run checkboxes the app never saves.

--maintain

Run the configured background passes once each, in a fixed order: new files, thumbnails, faces, semantic index, backup, portable copy. Each prints a start line and an outcome, and a pass that fails never stops the ones after it.

--help · --version

Open no library, touch nothing and exit 0. --help beside a verb prints that verb's own page. --version prints what the About page shows.

--maintain continues a face-discovery pass you started in the app and never begins one: running a detector over every photograph in your library is not a thing to start on your behalf at three in the morning. It downloads nothing either, so a semantic model that is not on the machine is one skipped line rather than a surprise on your connection. And it obeys your cadences instead of overriding them — a nightly --maintain against a weekly backup setting takes one backup a week.

Which library it works on

FastLoupe --catalog D:\Pictures\zappic.db --check
FastLoupe D:\Pictures\zappic.db --backup

--catalog <path> selects the library, and a bare path to a .db does the same with no flag in front of it — for a launcher, a file association, or a file dropped onto the application. Either one composes with every verb.

Beside a verb it selects the library for that run only. It deliberately does not become the library you find open tomorrow morning: the same flag on an ordinary launch does persist, because a window opens and shows you what it switched to, and a task running at three in the morning has nobody to show. --lang <culture> sets the language for one run in the same way.

Three exit codes

Everything was fine
0

It ran, and there is nothing to look at.

Something wants attention
2

It ran, and the output names what: files skipped, a drive offline, a backup overdue, a pass stopped.

Refused, or could not be done
1

Nothing was accomplished. The reason is on standard error.

Two is the code the whole set is designed around. Completed with four files skipped is not a failure — the work was published and the next pass retries by itself — and reporting it as one produces exactly the alert somebody turns off. It is also not a clean run. A monitoring rule that treats 1 as page me and 2 as look at it tomorrow is the intended reading. --check is the sharpest illustration: 1 means nothing was measured, and 2 means it was measured and is bad.

On Windows, redirect the output

FastLoupe --check > check.log 2>&1

On Windows FastLoupe is a windowed program. It attaches to the console that started it so the lines appear at all, but a console shell does not wait for a windowed program: the prompt comes straight back and the output arrives underneath it. Redirecting or piping makes the shell wait, and is what a log wants anyway.

A scheduled task waits on the process and reads the exit code correctly either way, which is the invocation these verbs are really for.

Scheduling it

Windows Task Scheduler stores the last run result, which is the exit code above, so a nightly pass is visible without anybody reading a log. Point it at FastLoupe's own executable, wherever your installation put it.

schtasks /create /tn "FastLoupe nightly" /sc daily /st 03:00 ^
  /tr "\"%LOCALAPPDATA%\Programs\FastLoupe\FastLoupe.exe\" --maintain"

On macOS the equivalent is a launch agent. The macOS edition is on the Mac App Store now — this is the shape a scheduled pass takes there.

~/Library/LaunchAgents/com.oddbrd.fastloupe.maintain.plist

<key>ProgramArguments</key>
<array>
  <string>/Applications/FastLoupe.app/Contents/MacOS/FastLoupe</string>
  <string>--maintain</string>
</array>
<key>StartCalendarInterval</key>
<dict><key>Hour</key><integer>3</integer><key>Minute</key><integer>0</integer></dict>

launchctl load ~/Library/LaunchAgents/com.oddbrd.fastloupe.maintain.plist

The rules every verb shares

Always

  • One pass, then it exits. Nothing stays resident and nothing is scheduled by the application itself
  • It writes the app's own receipts, so a pass run at three in the morning is the pass the Library health card describes when you next open the window — and the app's automatic cadence counts it instead of repeating it
  • Ctrl+C is handled: the pass is cancelled through its own cancellation and its place is saved, so the next run continues where this one stopped
  • Anything that states a fact about your library is printed in the application's own language

Refused, by name

  • Two verbs on one command line — named in the order you typed them, rather than one of them being silently chosen
  • An argument to a verb that takes none. --check L:\Pictures is refused rather than ignored, because ignoring it would let the command look like it had checked that drive
  • Every verb that writes, on a library sitting on a read-only drive — said once, up front, instead of halfway through an import. --check is the exception, and is designed for exactly that drive
  • Any verb beside the scripted and developer modes, which point at throwaway copies while these write real backups and import real photographs

What is translated, and what is not

Anything that states a fact about your library — a progress line, a pass outcome, a health fact, an import summary — is the application's own translated string, so a terminal reads exactly like the window, in the same language.

The command line's own words are English: the usage pages, no such folder, a catalogue that will not open, a refused combination. That is what every other console message this program prints does too.

Try FastLoupe with your own library

Windows: try the app free for 30 days. Mac: download free, keep browsing and rating free, and start the optional 30-day trial for file-changing tools. No FastLoupe account; Store account and checkout requirements apply.

Start your free 30-day Windows trial Download free for Mac

Worldwide launch offer through 11 October 2026. Finland reference prices: Windows app or Mac permanent unlock €14.99; €24.99 from 12 October. Separate platform licences. Azure backup and storage cost extra. Local Store prices and availability apply.