Settings
Settings is where you configure app-wide behavior that doesn't belong to any one photo, video, or audio file — most of it set once during onboarding and rarely touched again, but all of it changeable at any time. Fields marked (requires restart) below take effect the next time the app starts, not immediately on save; everything else applies right away.
Appearance
A single Theme selector: System (follows your OS), Warm Dark, Warm Light, Cool Dark, Cool Light, Monotone Dark, or Monotone Light. Independent of this website's own theme toggle, which is stored separately.
Updates
Electron builds only — not shown in browser dev. Check for an available update, download it, and restart to install, all from Settings rather than a separate updater window.
Import
Everything applied automatically as new media comes in:
- Scan directories — the folders Fictura watches and searches when importing new media or repairing broken file paths during Sync. Add every location your media might live — external drives, network shares, or plain folders on your internal disk. The more accurate this list, the better Sync's automatic path-repair works when files get moved or drives get renamed; an incomplete list is the most common reason a "Fix Paths" pass can't find a moved file automatically.
- Fallback directory (requires restart) — where an import lands if a file doesn't match any more specific per-type rule below.
- Per-type folder structure and default import directory — photo, video, and audio each have their own default import directory and destination folder pattern (e.g.
{YYYY}/{YYYYMMDD}), so a photo import and a video import can land in entirely different places on disk using different date-based structures. - Preview batch size — how many items the import preview screen loads and thumbnails at once before you confirm the import; lower it on slower drives or very large batches.
- Copy originals — off by default, consistent with the local-first design described in Getting Started. When off, Fictura indexes your source files where they already live instead of duplicating them into its own storage.
- RAW match threshold — how strict the similarity check is when Fictura pairs a RAW file with its matching JPEG/rendered counterpart during import.
- AI features — image analysis and transcription, applied automatically during import when enabled: a master Enabled toggle, plus which vision/Whisper models to use, the local AI service's URL and timeout, and independent switches for auto-generating a title, a description, and tags per photo, extracting a screenshot timestamp for video, and transcribing audio. Title, description, and tag generation require Ollama running locally; transcription uses a separate local tool and doesn't need Ollama. Face detection is not part of this block — it's its own Facial Recognition section further down, since it also feeds the dedicated Faces view.
Default edit settings
This is the one setting that's actually configured as raw JSON, under the Edit section of Settings: the filter stack automatically seeded into every photo, video, and audio file's v001 baseline on import (see Versions for what v001 means). Think of it as your default "look" — applied to everything as it comes in, before you've made any deliberate edit of your own.
This is edit.photo.defaultSettings exactly as configured in a running Fictura install — a tone curve, a full adjustments block, and a LUT, all enabled by default on every imported photo:
{
"edit": {
"photo": {
"defaultSettings": {
"adjustments": {},
"colorBalance": null,
"whiteBalance": "as-shot",
"temperature": null,
"lutId": "17406c89-7fcb-407e-a196-8d92442c6c7f",
"imageFilters": [
{
"id": "tone_curve",
"instanceId": "tone_curve_1",
"enabled": true,
"params": {
"preset": "film",
"points": "[]"
}
},
{
"id": "adjustments",
"instanceId": "adjustments_1",
"enabled": true,
"params": {
"exposure": 0,
"highlights": 0,
"highlightDynamics": 33,
"shadows": 0,
"shadowDynamics": 33,
"midtones": 0,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"vibrance": 0,
"clarity": 0,
"blackPoint": 0,
"whitePoint": 0
}
},
{
"id": "lut",
"instanceId": "lut_1",
"enabled": true,
"params": {
"lutId": "17406c89-7fcb-407e-a196-8d92442c6c7f",
"name": "Cinematic Warm"
}
}
]
}
}
}
}
edit.video.defaultSettings mirrors this same shape. edit.audio.defaultSettings is simpler — just a filters array (same {id, params} shape as the Audio Filters Reference) plus default trim points (inPoint/outPoint).
imageFilters— an array in the exact same shape used everywhere else in the app: each entry is{ id, instanceId, enabled, params }, matching the Image Filters Reference's per-filter JSON structure. Add, remove, or reorder entries here the same way you would in the editor's own JSON editor. In this example, every import starts with a "film" tone curve preset, a neutral (all-zero) adjustments block ready to tweak, and a LUT applied.lutId— set at both the top level and inside the matching"lut"entry inimageFilters— every import starts pre-graded with that LUT. This is the value actually applied at render time.params.name(on the"lut"entry) — optional. A human-readable label for the LUT, used only so the Settings UI can show and autocomplete a name instead of a raw UUID; it isn't required for the filter to work and is resolved back tolutIdon save. Leave it out and the LUT still applies correctly by ID alone.whiteBalance/temperature/colorBalance/adjustments— shorthand top-level defaults for the most commonly adjusted values, independent of whether you've also added an explicitadjustmentsorcolor-balanceentry toimageFilters. Here they're left at"as-shot"/null/{}, so the real per-filter defaults above are what actually apply.
Setting any of this to an empty/null default means new imports start completely untouched, exactly like manually creating v001 with no filters — this JSON only ever seeds the starting state, never anything applied irreversibly.
Alongside the JSON, the Photo subsection also has a Color space selector — Detect from source (default), sRGB, Display P3, Adobe RGB, BT.2020, BT.601, or NTSC — controlling the working color space the edit pipeline assumes when none can be detected from the file itself.
Export
- Internal staging directory (requires restart) — where Fictura assembles files during an export before copying them to their final destination.
- Destinations — named local paths you can pick from in the Export view's destination selector, instead of typing a path every time.
- Backup — the path and reminder behavior described under Backups further down.
- SSH — host, user, key path, and remote directory for pushing exports directly to a remote destination over SSH, as an alternative to a local folder.
Server
Advanced, rarely touched: port and CORS origin, both (requires restart). Changing the port also changes the URL the app itself is served from — only touch this if you know you need to.
Photo, Video, and Audio Variants
Per-type sections for editing the resolution/quality/codec of every existing export variant and adding entirely new custom-named ones. Covered in full, with every variant's purpose and default settings, on the dedicated Variants page — this section in Settings is where that configuration actually lives.
Social
Credentials and preferences for optional sharing integrations: Bluesky (DID, handle, app password), Framer (API key, artist URL, SSH export URL), and Instagram (access token, business account ID). Secret-like fields (Bluesky's app password, Framer's API key, Instagram's access token) are masked as password inputs with a show/hide toggle, and are never sent back to the browser in plain text by the settings API — only what you've explicitly typed and saved this session is visible.
Facial Recognition
The one AI feature with its own dedicated settings section, since it also feeds the Faces view: an Enabled toggle, which local model to use, a minimum confidence threshold below which a detected face is ignored, and whether detection should run automatically right after import (versus only when you trigger it manually). All processing happens locally — nothing is sent to a third-party service, consistent with the local-first design described in Getting Started. A "Manage Faces" shortcut jumps straight to the Faces view.
Forecast
How many days ahead Forecasts plans for, plus notification preferences: system notifications, in-app notifications, how wide a radius (in miles) around your saved locations counts as relevant, and how many hours ahead an alert can fire before the conditions it's watching for actually occur.
Backups
Export's Backup settings (above) also control where and how often Fictura reminds you to back up your library database and media. Fictura never runs backups silently in the background — this only controls the reminder; you still choose when to actually run one from Sync.
Where this data lives
Settings are stored in your local library database alongside your media metadata — they travel with your library, not with any particular installation of the app, so restoring a library on a new machine restores your settings with it.