Vignette release notes October 9, 2026
Retainers stay protected during cancellations, gallery copies finish safely in the background, contracts keep their content and branding, and Vignette is more accessible across owner and client workflows.
New this week
Keep the retainer when a booking is canceled
Canceling a full booking or a mini-session client now treats the retainer as non-refundable by default while returning eligible balance payments. Before anything changes, the confirmation explains exactly how much Vignette will refund, how much retainer the studio will keep, and whether money returns through Stripe or must be reimbursed off-platform. When a client-service exception calls for it, select Refund the retainer too and the total updates before confirmation. The same policy works when one payment covered both the retainer and later installments. Vignette waits for the refund outcome before canceling the booking or reopening a mini-session slot, and an active checkout prevents a competing cancellation, so a client is never released while money is still uncertain.
Learn howGallery copies finish safely in the background
Duplicating a gallery now creates a Preparing gallery copy… card immediately and moves the file work into the background. The copy keeps the gallery details, ready photos, cover, featured photos, albums, and sneak-peek setup, while pending, failed, hidden, and still-processing photos stay out. You can leave the page or reload it and Vignette resumes watching every unfinished copy until it is ready. Manage, upload, share, download, and another duplicate stay unavailable during preparation so the copy cannot be mistaken for a finished gallery. If the copy ultimately fails, the empty card remains visible with clear delete-and-retry guidance instead of exposing a partial set of gallery photos. Watermark settings remain reusable, but protection stays off until Apply creates a complete new set for the copy.
Learn howNavigate more of Vignette without a mouse
A broad accessibility pass improves shared controls across the app and public client pages. Import People is now fully keyboard-operable; modal dialogs receive an accessible name, keep keyboard focus inside, and return focus when closed; date and time controls announce both their purpose and selected value; and form errors are linked to the fields that need attention. Keyboard focus is easier to see, including in forced-colors mode. Error notifications remain until dismissed, other notifications stay long enough to read, and each has a labeled close button. Gallery tiles identify the photo and action, upload progress is announced, the cover behaves as a real button, and fullscreen navigation announces the new image while preserving focus. Logo links, locked-field explanations, contract editor tools, merge fields, signing names, gallery tags, and high-impact share and storefront forms also have clearer names for assistive technology.
Fixes and refinements
Contracts keep their content, version, and studio branding
Duplicating a contract now makes an independent copy of every template variable, including delivery timelines and cancellation periods, so editing the copy cannot change or empty the source. Save as template supplies a valid Portrait / Family type when an older contract has none, and new contract types are checked before saving. Leaving a booking location blank omits the location cleanly from the contract instead of producing placeholder text or a dangling sentence. Legacy signed team agreements no longer claim Details changed simply because they stored the former location placeholder. If a client opens an expired, canceled, superseded, or revised contract, the page now explains the real state and reloads the current version instead of repeating a failed signature. Unsaved-change protection also works when navigating from the editor, using Browser Back more than once, or signing out. Generated and cached signed PDFs embed the studio’s current logo directly; an older PDF or one created before a logo change is rebuilt before download instead of showing a broken or stale image.
Learn howClient booking links reach the right final state
Canceled and expired bookings once again open their dedicated final screen, and canceled or unavailable contract steps no longer offer a retry that can never succeed. Public actions place one useful error beside the action that failed rather than showing a duplicate message far away or blaming the connection for validation and access decisions. A stale tab that tries to sign a replaced contract refreshes to the active booking before another attempt. Mini-session resume information is cleared when it is no longer valid, and a resume link cannot reveal the client from a previous reservation. The booking-and-contract client route also handles booking-backed contracts correctly instead of failing during load, while temporary network and rate-limit problems remain distinguishable from an unavailable link.
Learn howBooking times remain accurate from edit through confirmation
Editing an existing booking no longer clears or blocks its saved date and time just because the session is now in the past, availability cannot be checked, or a later conflict overlaps it; Vignette warns about the overlap and applies availability rules only after the schedule changes. Dates and times are grouped and labeled in the event’s saved time zone rather than the viewer’s browser time zone. Storefront confirmation now performs the final availability check as one locked calendar action, so two clients cannot confirm the same start. Past starts are rejected, unfinished storefront bookings expire, and one email address cannot hold an unlimited number of sessions or mini-session slots. Canceling a mini-session parent returns operational slots to clean reusable inventory while preserving completed and no-show history. Client pages and emails now omit an undecided location entirely, and public calendar responses no longer include the studio’s internal notes.
Learn howPayments, refunds, billing, and payouts stay in sync
Refund recovery now checks an existing Stripe refund instead of creating it again, keeps an uncertain refund pending for review, and records fee reversals consistently even when the staff member who started the refund is later removed. A failed refund can be retried from the same dialog with a fresh request, while a completed or definitively failed attempt cannot be misreported as the other. Pending bank payments remain in a clear processing state and block another checkout until settlement is known. Missed connected-account settlements are recovered against the correct Stripe account, unrelated Stripe activity is ignored, and one unavailable payout account no longer stops other studios from syncing. Subscription events cannot move newer billing state backward, a canceled subscription cannot hide an active one, expired trials do not receive an accidental extra month, and abandoned paid checkouts no longer leave trial storage at the paid limit. Account deletion also clears mutable personal details from the Stripe customer while retaining required, anonymized financial history.
Learn howGallery privacy and download rules cover every path
Public galleries now return only ready photos and never fall back to an unfinished or failed original. When watermarking is enabled, a processing failure cannot silently publish an unwatermarked image, and duplicated galleries no longer claim protection before their own watermarked set exists. Recipient download limits apply without exposing original-file addresses, including single-photo downloads; reaching a zero-photo allowance leaves the client in the gallery with a clear message instead of navigating away. Repeated image deletion cannot reduce storage or photo counts twice, upload completion is safe to retry after a lost response, and file names and media types are checked before a photo is accepted. Oversized or rejected photos remain visible in the upload list with their error, gallery invitations explain when the send limit is reached, and large ZIP requests fail before building a partial archive. Archiving a gallery finishes immediately for the photographer while durable cleanup removes its files safely in the background.
Learn howRAW Exchange and long uploads recover more gracefully
A temporary 400 or 403 while uploading a RAW multipart file now refreshes the affected part link once and retries that part instead of losing the entire transfer. Closing a RAW upload uses the same accessible confirmation dialog as the rest of Vignette, and confirming the close aborts the active upload cleanly. Size mismatches remove the unusable stored object, failed assets count toward the submission safety limit, and temporary RAW handoffs continue to use their separate private-storage lifecycle rather than consuming gallery storage. Gallery uploads now have bounded request timeouts and abort behavior, expected canceled requests no longer leave console noise, and polling for image processing or duplication avoids overlapping work and resumes after navigation.
Learn howAccount access recovers without loops or lost destinations
Signed-out visitors no longer get trapped between protected pages and the login screen. When a session expires, Vignette keeps the intended page and returns there after email or Google sign-in; a temporary token-refresh or profile-sync problem no longer signs out a valid session. Blocked, deactivated, deleted, and identity-conflict accounts receive one clear explanation with support and sign-out actions instead of partial app content, while a pending deletion can still be canceled through its narrow recovery action. Account deletion now performs the required fresh sign-in before it proceeds. Login also fences a partially completed attempt if the email changes, cross-tab identity updates cannot adopt another account, and Google or email callback errors use Vignette’s own safe wording rather than displaying provider text directly.
Learn howClearer controls and feedback across daily work
Meeting-request duration, buffer, and minimum-notice choices now use the same keyboard-accessible Vignette dropdowns as appointments. Timeline durations accept decimal hours such as 1.1, 1.25, and 1.5, round safely to whole minutes when saved, and display consistently to clients. Interactive calendar cards use the expected pointer while draggable bookings keep their grab cursor. Preview storefront now stays in the current tab, includes Back to storefront settings inside the preview banner, and works with Browser Back. Profile-photo uploads identify themselves correctly in success and failure messages, email previews retain standards-mode layout after sanitizing, critical storefront and gallery images receive the right loading priority, Finance chart labels stay inside the chart, and a failed refund remains actionable without reopening its modal. Leaving a dashboard or gallery while an expected request is being canceled no longer produces a false error notification.
Learn how