Changelog
What's new in Fictura, release by release.
- Fictura: Report an Issue. A new link in the Settings header opens a form to report a bug directly from the app — title, description, optional screenshots/clips, your email, and an opt-in for status update emails. fictura.app forwards it straight into a GitHub issue (attachments hosted on fictura.app and linked inline), and automatically emails you when the issue's status label changes (In progress, Needs more info, Slated for release, Released) if you opted in.
- Portfolio Website: a matching "Report an Issue" link at the bottom of the Studio sidebar, same form, routed through your own site's backend so your Fictura license key never reaches the browser.
- Portfolio Website: Books. A new product category for selling print-ready photo books through Prodigi — upload a book's interior PDF (page count is read from the file itself and validated against the chosen book's SKU family) plus cover/spine/back marketing images, then assign it to a Books preset. A new 3D book showcase component and public book page present it on the storefront, and checkout/quote/order handling now prices and submits book line items.
- Portfolio Website: Classic Frame now offers every paper and mounted-frame option Prodigi actually sells (previously only one unmounted paper was available), plus a per-preset restriction on which frame colors are sellable.
- Portfolio Website: collections support a custom media order — drag photos/videos/audio into any order within a collection, or sort by title/date/device; the order persists and survives re-sync.
- Fictura: new InDesign CSV export for a collection's media, for handing off to print production layout.
- Portfolio Website: print masters and web variants now sync to stable, photo-id-traceable S3 keys instead of content-hashed filenames — re-syncing a photo now truly overwrites the existing object, fixing a bug where the old and new files were both left behind side by side. A one-time migration moved every existing photo's masters and variants onto the new key scheme.
- Portfolio Website: the Sync diff step is noticeably faster on larger libraries — its per-photo staleness check now runs with bounded concurrency instead of one photo at a time.
- Portfolio Website: Sync no longer shows its own progress bar in the Website view (the global job panel already covers it); a "nothing to sync" result now shows a clear, dismiss-only notice instead of leaving the screen blank.
- Portfolio Website: Stripe and Prodigi integration fixes, order tax calculation, and a new remote inventory report for the admin.
- Portfolio Website: social sharing. A new composer shares a photo or collection to Bluesky, Meta (Facebook/Instagram/Threads), and X directly from the admin — hashtag autocomplete sourced from your own tag library, a per-network preview card, and a short link for the post. Instagram gets its own in-card crop tool with a real, persisted crop (survives closing and reopening the dialog) — drag any corner or edge, hold Option to lock to a square or Control to keep the current shape while resizing.
- Portfolio Website: Business Name override. A new Studio → Commerce → Business page lets you set the name shown in the site's header/footer and SEO without re-publishing from the desktop app — it overrides whatever the last publish sent, falling back to that, then the domain, if left blank.
- Fictura: fixed photo tags not appearing in the Portfolio Website's hashtag autocomplete — the sync/publish pipeline was reading an empty legacy table instead of each photo's real, comma-separated tag list.
- Portfolio Website: object storage settings now correctly display credentials that were set via a first S3 publish (written to the server's environment) rather than showing blank fields until manually re-entered.
- Portfolio Website: fixed a rare case where switching quickly between photo thumbnails in the print-offering preview could paint an older photo over a newer one.
- Portfolio Website: fixed legal pages showing a redundant heading and slightly misaligned left padding; the About page's bio now reads left-aligned.
- Portfolio Website: the deploy file now installs and starts the site itself. When you create the server with the generated cloud-init / setup-server script it downloads, installs and launches the Portfolio Website — so the box is serving your (empty) site on your domain before you publish anything. Publish and Sync only move content now; the new Site update section is the one place the site's version changes.
- Portfolio Website: works on Ubuntu 26.04. Its cloud-init runs setup steps in a different order than 24.04, which broke the previous deploy scripts several ways: files written before the deploy user existed, the deploy user's home ending up unwritable (Yarn couldn't install), and
apt upgrade restarting cloud-init mid-install and leaving a half-installed site. All fixed; the deploy is now idempotent and re-run safe. - Portfolio Website: first Publish uploads your print masters. The private storage bucket is populated on the first publish, so print checkout works immediately.
- Portfolio Website: Server Setup no longer needs a server IP to generate the provisioning file (you paste it at droplet-creation time, before the IP exists); tearing down a server clears its recorded version so the next deploy installs cleanly; the admin-password fields have per-field show/hide.
- Portfolio Website: the generated cloud-init file is plain ASCII — a stray typographic dash used to break the file's parsing on some hosts, leaving the server unprovisioned.
- Portfolio Website: Publish is now first-run only; Sync handles every update. After the first publish the Publish button disables. "Sync" shows exactly what changed in Fictura since the last publish/sync — photos to add, photos to remove (hidden on the site, never deleted), and photos to update (caption/meta, new variants, or a new print master) — you confirm, and only the delta is transmitted. A server-side admin edit alone is never treated as a change.
- Portfolio Website: S3 storage credentials now flow to the server automatically. The bucket and access key you enter once in Fictura are written to the box on publish — no retyping them into the site's admin. The nginx
/media/variants/ route is also reconciled to the current serving mode on every publish, so an older box picks up the S3-serving fix. - Portfolio Website: choose the admin email and password during setup. Step 1 now asks for both (with a show/copy control); the server comes up with exactly those and skips the forced first-login change. Once set up, a Reset button propagates a new password to the live server.
- Portfolio Website: safer upgrades. Before installing a new site package the server dry-runs the pending database migrations and refuses if one would fail — leaving the live site untouched. The post-deploy health check now verifies the database opens and the site actually renders (not just that the process is up) before the switch-over, and rolls back automatically if it doesn't. A new Server history panel shows the box's current and previous versions and its pre-publish database backups, with a guarded roll-back.
- Portfolio Website: the admin site is at
/studio — surfaced in the app after a publish, along with the login URL and (first run) the seeded credentials. - Portfolio Website admin: object-storage credential fields keep their real length when pasted, and gained a reveal (eye) and copy button; a pasted key is no longer collapsed to a masked placeholder.
- Portfolio Website: backups are a point-in-time snapshot you control. Run a Database backup (store DB + secrets) or a Full backup (adds every web variant and print master — off disk, or downloaded from your buckets) from the Website view; it lands in your Downloads folder and the app's history. Restoring puts the whole site back to that snapshot — database always, media too for a full backup — and updates the site to the backup's version first if it needs a newer one. The site no longer backs itself up on a timer, and the server-side copy is not browsable.
- Portfolio Website: S3 storage no longer needs an anonymously-readable public bucket. Web-image variants are served through the site's own backend with an authenticated read, the same way print masters already are — so a provider that refuses bucket-level public access (DigitalOcean Spaces) works with a plain read/write access key. Set a CDN base URL to keep the direct-from-CDN path for a genuinely public, CDN-fronted bucket.
- Portfolio Website: Test Connection reports storage problems instead of failing. A wrong access key, region, or bucket name now shows as a red row with a fix, rather than a generic error. The "Nginx" check also verifies the service is actually running with a valid config.
- Portfolio Website: the pre-publish page is served (a "Coming soon" placeholder) rather than a raw nginx 503; the deploy user's home is left traversable so nginx can reach it.
- Portfolio Website (desktop): the Server Setup / Backups / Sync sections have a clearer heading hierarchy and consistent controls; the pre-check screen shows the standard loading indicator instead of a "Loading…" string.
- Docs: the Portfolio Website server guide clarifies Domain vs. Server IP, the Login user / Remote directory fields, and the supported Ubuntu versions.
- Site: a shared
doc-info affordance (a small themable circle linking to the docs) replaces inline explanatory prose in the UI; the marketing site renders the visitor's theme server-side with no post-load flash; the download page and changelog list published releases straight from ColdStorage.
- Releases now publish to ColdStorage only. The per-tag GitHub Release carries the changelog as notes and no binary assets — GitHub's Release storage quota was exhausted. The desktop auto-updater and the download page already read installers from ColdStorage via fictura.app.
- Tagging a release now also deploys fictura.app (the marketing site + license/commerce API) automatically, after every platform installer and the portfolio bundle are uploaded — an app release and its website move as one unit. Manual
deploy/push.sh stays the hotfix path. - Portfolio Website: directory storage mode — serve media from the server's own disk instead of object storage.
setup-server.sh provisions the media tree and a variants-only nginx location; print masters stay private and are synced to the box over rsync. Object storage remains fully supported. - Portfolio Website: the desktop "connect your server" flow verifies the target (SSH reachability, deploy user, directory layout) before the first publish and reports what's missing.
- Site: checkout and the account page now collect a structured billing address (country-aware fields, ISO country list) for tax and invoicing; a new
/api/account profile endpoint backs it. - Site: per-license Cancel controls, combined à-la-carte checkout, and "Annual License" copy (carried over from 1.0.0-alpha.1's site work, now shipped in a tagged build).
- Fictura: Much faster RAW editing. Interactive previews now use a cached, downscaled 16-bit copy of the photo instead of decoding the full-resolution frame on every slider move (about 2.7s down to 0.3s per preview on a 40MP RAW). For a RAW, the editor goes live roughly 0.3s after the file is read rather than waiting for the full decode, which carries on in the background for export, zoom and spatial filters. Opening a RAW over a network share no longer freezes the server while the file is copied.
- Fictura: Smoother photo modal. Switching between a photo's variant and the live GPU preview now dissolves instead of jumping, and discarding edits restores the original cleanly.
- Fictura: Selective Color picker redesign. Ranges are chosen from a 3x3 swatch grid (hues, secondaries, tonal ranges) with a dot marking ranges that already carry an adjustment, and the CMYK sliders push toward their ink or its complement. The video tone-mapping controls were reworked to match.
- Fictura: Selection panel and page refresh. Selecting media opens a floating panel with rating, portfolio, share and collection actions. Media and LUTs share one header, grid and pager layout, and the Sync, Export, Import, Settings and Forecasts views sit on the same surface as the photo editor.
- Fictura: Dragging text no longer closes dialogs. Selecting text in a dialog field and releasing the mouse over the backdrop used to close the dialog. This is now handled globally in Fictura, the Portfolio Website and fictura.app.
- Fictura: fixed the Add to Collections confirm button being covered by the pager when adding from the selection panel.
- Fictura: weather map and forecast refresh-settings styling tweaks, and consistent styling for the export, Bluesky and LUT import dialogs.
- Fictura: Forecast map weather overlay. A new Map / Clouds / Precip / Temp / Wind row above the forecast map layers live NOAA weather over it, with a time slider and play button. Precip plays the last couple of hours of radar and carries on into the forecast; the other layers step through the National Weather Service forecast up to about a week ahead. The map opens on Map — no overlay — and the overlay is US-only (outside the US the map says so). No account or API key needed.
- Fictura: Forecast map fixed. The map background had gone blank because its tile provider now requires an API key. Map tiles are now served through fictura.app, so no key is needed on your machine, but the map needs an active Fictura license and an internet connection. If tiles can't load, the map now says why instead of showing broken tiles, and the OpenStreetMap / CARTO attribution is visible again.
- Fictura: Golden Hour forecasts match again. The precipitation chance from the National Weather Service wasn't being passed through to forecast conditions, so a type that limits it (Golden Hour) could never match and "Upcoming Matching Forecasts" was always empty. Switching forecast types also no longer leaves a location selected that doesn't belong to the new type.
- Fictura: Report an Issue — closing a GitHub issue now emails the reporter if they opted in to status updates. Password-reset and issue-status emails use a new HTML template with the Fictura icon, a call-to-action button, and support / fictura.app / unsubscribe links; status emails carry a one-click unsubscribe.
- Fictura: fixed the next-photo button in the photo modal when browsing a collection — it stepped from the wrong position because it used the All Media page offset.
- Fictura / Portfolio Website: dialog and modal buttons (close, next/previous and similar) share a consistent round style, and the forecast preset form now has a proper background.
- Releases: package versions are synced across the app, site, and Portfolio Website and the release tag is created automatically when a new CHANGELOG entry lands on
main.