Dresium – AI Virtual Try-On & Fitting Room for WooCommerce

Description

Dresium is an AI virtual try-on and virtual fitting room for WooCommerce fashion stores. Shoppers upload one photo and instantly see themselves wearing your clothes, dresses and outfits, right on the product page. No app, no account, no setup for your customers.

Try the full plugin for free. Install, click one button and you get 1,000 welcome credits instantly — enough to test every feature on your real store without entering a credit card. Credits are consumed only when a real shopper generates a virtual try-on; nothing is charged for failed generations or for your own testing clicks that don’t produce an image.

Let your customers try before they buy: more confidence at checkout, higher conversion rates and fewer returns caused by “it didn’t look like that on me”.

Why fashion stores use Dresium

  • Boost conversions — shoppers see the product on their own body, not just on a model
  • Cut returns — fewer surprises on fit and look means fewer returned orders
  • Free for your customers — the Try-On button works for guest visitors and logged-in users alike, no signup required
  • Measure real impact — built-in analytics show try-ons, purchases, conversion rate and revenue attributed to the virtual try-on
  • Pay only for results — you (the merchant) pay per successful try-on generation; failed generations are refunded automatically

How the AI virtual try-on works

  1. The shopper clicks “Try it on” on a product page
  2. They upload a photo, take one with the camera or pick a sample model
  3. Dresium’s AI generates a realistic image of the shopper wearing that product in seconds
  4. They can zoom, save the result to their gallery or share it on WhatsApp, then add to cart

Key features

  • Zero-setup virtual fitting room — the Try-On button is injected automatically into WooCommerce product pages
  • Three integration methods — automatic hook (default), Gutenberg block Dresium Try-On CTA, or shortcode [dresium_tryon]
  • Analytics dashboard — real-time views, try-ons, purchases, conversion rate and attributed revenue with 7/30/90-day filters
  • Order attribution — automatic tracking of purchases and refunds within a 7-day attribution window from the try-on
  • Full appearance customization — button size, color palette presets, custom colors, typography, border radius, CTA text override
  • Category gating — show the virtual try-on only on the categories you choose (dresses, shirts, jackets, etc.)
  • Whitelabel branding and AI video try-on — unlocked when your credit balance reaches the whitelabel threshold (€100 by default)
  • Auto-topup — keeps the service always available with no interruptions
  • GDPR-ready — Privacy Policy, Data Processing Agreement (GDPR Article 28) and Terms of Service signature flow inside the WooCommerce settings
  • Multi-language storefront — Italian, English, French, German and Spanish out of the box
  • Works with your builder and theme — Elementor, Divi, WPBakery, Oxygen, Bricks and themes such as Storefront, Astra, Kadence, Woodmart and Flatsome
  • HPOS compatible — full support for WooCommerce High-Performance Order Storage

Pricing

Dresium is free to install. You pay only for the AI generations your customers actually produce (pay-per-use), with credits deposited from the Billing tab. At the current pricing a try-on generation costs €0.10 (10 credits × €0.01 per credit). Pricing is configured server-side and the Billing screen always shows the up-to-date value before you top up. See the FAQ for details on pricing and currency.

Getting started

  1. Install and activate the plugin (WooCommerce must also be active)
  2. Complete the B2B onboarding form in WooCommerce > Settings > Dresium (registers your store on Dresium and provisions an HMAC-secured API key)
  3. Sign the legal documents (Privacy, DPA, Terms) from the Legal tab — required before the Try-On button becomes visible to your customers
  4. Configure appearance, categories and advanced settings
  5. Deposit credits from the Billing tab (optional auto-topup)
  6. The virtual try-on button automatically appears on product pages within the enabled categories

Requirements

  • WordPress 6.6 or higher
  • WooCommerce 9.9 or higher
  • PHP 7.4 or higher
  • SSL/HTTPS required (Dresium API is HTTPS-only)

Third-Party Services

This plugin relies on the following external services:

Dresium API (Virtual Try-On Service)

  • Service Provider: Dresium / EasyAdv S.r.l.
  • Purpose: AI-powered virtual try-on image generation
  • When data is sent: Each time a customer clicks “Try it on” and uploads a photo
  • Data transmitted: Customer photo (for AI processing), product images (for overlay generation), your store domain and merchant ID (for HMAC authentication)
  • Data handling: Photos are processed in real-time and not permanently stored unless the customer explicitly saves them to their personal gallery. Photos are never shared with third parties or used for AI training. Dresium acts as data processor and uses the AI services listed below as sub-processors.
  • Data Processing Agreement: Merchants must accept a DPA before the Try-On button is exposed to customers, establishing Dresium as data processor under GDPR Article 28. The signature flow is inside the plugin (Legal tab).
  • Terms of Service
  • Privacy Policy
  • Data Processing Agreement

Gemini AI by Google (AI Sub-Processor)

  • Service Provider: Google LLC
  • Purpose: AI image generation for virtual try-on processing
  • When data is sent: When Dresium API processes a virtual try-on request, it may route image generation to Gemini AI
  • Data transmitted: Customer photos and product images are transmitted via Dresium servers to Google for AI processing
  • Data handling: Data is processed by Google solely for image generation. Dresium maintains data processor responsibilities.
  • Gemini API Terms of Service
  • Google Privacy Policy

Grok AI by xAI (AI Sub-Processor)

  • Service Provider: xAI Corp.
  • Purpose: AI image and video generation for virtual try-on processing
  • When data is sent: When Dresium API processes a virtual try-on request, it may route image or video generation to Grok AI
  • Data transmitted: Customer photos and product images are transmitted via Dresium servers to xAI for AI processing
  • Data handling: Data is processed by xAI solely for image and video generation. Dresium maintains data processor responsibilities.
  • Terms of Service
  • Privacy Policy

Claude AI by Anthropic (AI Sub-Processor)

  • Service Provider: Anthropic PBC
  • Purpose: AI-powered customer support agent
  • When data is sent: When a user interacts with the Dresium support chatbot
  • Data transmitted: Chat messages and conversation context are transmitted to Anthropic for response generation
  • Data handling: Data is processed by Anthropic solely for customer support purposes. No customer photos are sent to this service.
  • Terms of Service
  • Privacy Policy

WhatsApp Sharing (Social Sharing Feature)

  • Service Provider: WhatsApp LLC (Meta Platforms, Inc.)
  • Purpose: Allow users to share their virtual try-on results via WhatsApp
  • When data is sent: Only when a user explicitly clicks the “Share on WhatsApp” button
  • Data transmitted: A sharing URL is opened via the WhatsApp API (api.whatsapp.com) – no image data is sent directly, only a link to the shared page
  • WhatsApp Terms of Service
  • WhatsApp Privacy Policy

Screenshots

Blocks

This plugin provides 1 block.

  • Dresium Try-On CTA Displays the Dresium AI Try-On call-to-action button on a product page.

Installation

  1. Go to Plugins > Add New in your WordPress admin
  2. Search for “Dresium”
  3. Click “Install Now” and then “Activate”
  4. Ensure WooCommerce is installed and active
  5. Go to WooCommerce > Settings > Dresium and complete the onboarding form
  6. Sign the legal documents in the Legal tab
  7. Deposit initial credits from the Billing tab (or enable auto-topup)

FAQ

How does virtual try-on work in WooCommerce?

Dresium adds a “Try it on” button to your product pages. The shopper uploads a photo and the AI generates an image of them wearing the product. Everything happens on your store, with no redirect to external sites.

Is it a virtual fitting room for clothes?

Yes. Dresium works as an AI virtual fitting room for clothing: t-shirts, shirts, jackets, dresses, pants, hoodies and more. Enable the Try-On button only on your fashion categories from the Categories tab.

Do my customers need to register on Dresium?

No. Dresium 3.x is a B2B service: you (the merchant) buy credits, your customers use the virtual try-on for free with no signup required. Guest access is enabled by default.

How much does a try-on cost?

The plugin is free to install. Each successful image generation consumes credits from your Dresium balance, and failed generations are refunded automatically. At the current pricing a try-on generation costs €0.10 (10 credits × €0.01 per credit). Pricing is dynamic: the credit price, credits per generation and minimum recharge are configured server-side by Dresium and fetched by the plugin every hour. The Billing tab always shows the current cost per generation that will apply to your next top-up. Existing credits are always spent at the rate contracted at purchase — future pricing changes never invalidate deposits already made.

Which currency are credits billed in?

Credits are billed in EUR (€) via secure Stripe checkout. Merchants outside the Eurozone see the checkout amount in EUR; the actual charge on your card is in your local currency at your bank’s daily exchange rate (banks typically add a 0–3% FX fee depending on the card issuer; fintech cards such as Revolut, Wise or N26 usually have 0% FX fee).

Does virtual try-on really reduce returns?

Shoppers see the product on themselves before buying, which removes many “it looked different” returns. The Analytics dashboard tracks purchases and refunds attributed to try-ons, so you can measure the effect on your own store.

Does it work with any theme?

Dresium is designed to work with most WooCommerce themes. It has been tested with Storefront, Astra, Kadence, Woodmart and Flatsome. The button can be positioned via three integration methods: automatic hook, Gutenberg block, or the [dresium_tryon] shortcode.

How do I add the Try-On button on a theme with a page builder (Divi, Elementor, WPBakery)?

Themes built with page builders often replace the WooCommerce product page layout with their own, which prevents the automatic hook from firing. In this case, add the button manually where you want it inside the builder:

  • Divi: add a “Text” or “Code” module and paste the shortcode [dresium_tryon]
  • Elementor: add the “Shortcode” widget and paste [dresium_tryon]
  • WPBakery: add a generic shortcode element with [dresium_tryon]
  • Gutenberg / Block editor: search for the “Dresium Try-On CTA” block

The shortcode reads the current product from the WooCommerce loop, so no parameters are required. When you use the shortcode or the Gutenberg block, we recommend also disabling the auto-injection in “WooCommerce > Settings > Dresium > Advanced > Auto-injection” to avoid duplicate buttons on themes that partially respect the WooCommerce hooks.

Can I use Dresium on platforms other than WooCommerce?

Yes, Dresium is available as an official Shopify app: https://apps.shopify.com/dresium. For other e-commerce platforms (BigCommerce, Magento, custom systems) a universal JavaScript SDK is on the roadmap. Contact support@dresium.com if you want to be notified when it is released.

Is it compatible with HPOS?

Yes, Dresium is fully compatible with WooCommerce High-Performance Order Storage (HPOS).

How are customer photos handled?

Photos are transmitted over HTTPS to Dresium servers for AI processing. They are not permanently stored unless the customer explicitly saves them. Photos are never shared with third parties or used for AI training. See the Data Processing Agreement for full details.

Is it GDPR compliant?

Yes. Before the Try-On button is exposed to customers, you must sign a Data Processing Agreement inside the Legal tab (GDPR Article 28). If the DPA is not signed, the button stays invisible on the storefront and no data is transmitted. Customers can request deletion of their photos at any time.

How does the attribution work?

When a customer generates a try-on and purchases the same product within 7 days, the sale is attributed to Dresium in the Analytics dashboard. Refunds within the same window are subtracted from attributed revenue. Guest purchases (no customer_id) are not attributed.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Dresium – AI Virtual Try-On & Fitting Room for WooCommerce” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

3.4.16

  • Documentation: added explicit price per generation (€0.10) in both the Pricing section and the FAQ — merchants can now see the current cost (10 credits × €0.01 per credit = €0.10 per try-on) directly on the WordPress.org listing without having to install and open the Billing tab. The disclaimer that pricing is dynamic and that the Billing tab always shows the live value before top-up is preserved.

3.4.15

  • Fixed: 41 admin strings were showing in English regardless of the WordPress locale — several merchant-facing strings in the Dresium settings (Billing/currency notice, Low-balance email reminder section, Categories page explanatory text, Advanced tab “Shadow DOM” and “JS fallback for page builders” descriptions, “Reactivation needed” notices, “Font preview is approximate” warning) were present in the source code but missing from the translation files. All six locales (Italian, French, German, Spanish, English US and GB) now have the complete translations.
  • Changed: internationalized the “Font preview is approximate” warning — the warning on the Appearance tab was previously hard-coded in Italian, so merchants on non-Italian stores saw Italian text. The source has been translated to English and the Italian translation moved to the PO file.

3.4.14

  • Removed: legacy B2B onboarding form (admin.php?page=dresium-b2b-onboarding) — the pre-v3.4.0 manual onboarding form has been removed. The sole onboarding flow from now on is the “Claim 1,000 free credits” button in the Dresium admin home (added in v3.4.0), which registers the merchant AND grants the welcome bonus in a single click. Having both flows was confusing: merchants who used the legacy form got a 0-credit account and often didn’t realize they also needed to click Claim to receive the bonus. The two “Complete onboarding” / “Complete setup” buttons in the Statistics page and in Dresium > Settings tabs now redirect to the plugin home where the Claim button lives.

3.4.13

  • Fixed: WordPress.org readme compliance — removed the easyadv entry from the Contributors header because it is not a valid WordPress.org username (import warning), and shortened the Short Description from 196 to 136 characters to stay within the 150-character limit required by the plugin directory.

3.4.12

  • Changed: FAQ updated — Shopify app is now live, no longer “coming soon” — the FAQ answer “Can I use Dresium on platforms other than WooCommerce?” previously said the Shopify app was coming soon. The Dresium Shopify app is now officially published on the Shopify App Store (https://apps.shopify.com/dresium), and the FAQ has been updated accordingly.

3.4.11

  • Fixed: residual camera icon and “No photos uploaded” text during the first photo upload — follow-up to 3.4.10. The two “Upload your first photo” / “Or take a selfie” buttons were hidden during the upload procedure, but the camera icon and the “No photos uploaded” text in the same container were still visible on top of the grid loading the newly uploaded photo. Now the entire empty-state block (icon + text + buttons) is hidden together while the upload is in progress.

3.4.10

  • Fixed: no more flash of the empty-state buttons when confirming the crop of the first photo — follow-up to the fix in 3.4.9. The “Upload your first photo” and “Or take a selfie” buttons are now hidden as soon as the user clicks either one of them, stay hidden through the crop step, and are restored only if the user cancels the procedure (closing the file picker without choosing a file, closing the crop modal with the X / backdrop / Cancel, denying webcam access, or canceling the webcam dialog). This eliminates the brief visual flicker between crop-confirm and the newly uploaded photo tile appearing in the grid.
  • Internal: CropModal.open now accepts a third argument onCancel that fires when the user closes the crop modal without confirming. Previously there was no way to tell apart “crop confirmed” from “crop cancelled” at the call site.

3.4.9

  • Fixed: hover feedback restored on the empty-state photo upload buttons — the “Upload your first photo” and “Or take a selfie” buttons in the empty Photos tab had an override that forced their background to stay white on hover, making them look non-interactive. They now use the standard secondary-button hover (#f9fafb) consistent with the rest of the Try-On UI.
  • Fixed: flash of empty-state buttons after cropping and confirming the first photo — after confirming the crop of the first uploaded photo, there was a brief visual flicker where the “Upload your first photo” and “Or take a selfie” buttons appeared alongside the newly uploaded photo tile. The empty-state container is now hidden immediately when the photo grid starts loading, so the user never sees the old empty UI during the reload.

3.4.8

  • Improved: clearer feedback when a photo is already the default — in the Setting modal, after a customer uploads their first photo (which is auto-selected as the default), the “Select this photo” button becomes disabled with no explanation, leaving the user wondering what to do. The button label now switches to “Photo selected” (localized in IT/EN/FR/DE/ES) whenever it is disabled, making the state obvious. When another photo is clicked, the label switches back to the original “Select this photo” and the button becomes clickable again.

3.4.7

  • Fixed: Try-On modals now actually get localized when Shadow DOM isolation is enabled — this was the root cause of all residual Italian strings reported on non-Italian storefronts. When Shadow DOM CSS isolation is enabled (available since 3.0.14, now the default on new installs since 3.4.1), the Try-On dialog markup is moved from the light DOM into the <dresium-tryon-app> custom element’s Shadow DOM. The hydrateI18n() function used document.querySelectorAll('[data-i18n]') which does NOT traverse Shadow DOM, so every data-i18n element inside the dialog markup (161 elements per the test instance — size modal title, setting sidebar labels, step headers, all buttons, etc.) kept the fallback Italian text from the PHP template regardless of the browser locale. hydrateI18n() now explicitly recurses into every shadowRoot under the scope. All i18n-eligible elements are now properly translated at page load.

3.4.6

  • Fixed: Try-On storefront UI now ALWAYS follows the browser language, not the store language — previous versions prioritized the WordPress site locale (set by the merchant) over the shopper’s browser locale on WooCommerce, so a shopper with an English browser visiting an Italian store would see Italian strings in the Try-On widget (e.g. “Qual è la tua taglia?” instead of “What’s your size?”). The locale picker is now navigator.language → navigator.languages[] → data-locale → html[lang] on both WooCommerce and Shopify, matching the original design intent and the behavior shoppers expect. The site locale remains as a secondary fallback only if the shopper’s browser language is not one of the five supported languages (IT/EN/FR/DE/ES).
  • Internal: both pickI18nDict() (UI strings) and pickLang() (curiosities language) now share the same browser-first priority order.

3.4.5

  • Fixed: “Sign in to continue” overlay now localized — the overlay shown to guest shoppers who open the Try-On settings/gallery (title, description and “Sign in” button) was hardcoded in Italian regardless of the browser locale. Now fully localized in IT/EN/FR/DE/ES.
  • Fixed: fullscreen gallery arrow buttons now read correctly in screen readers — the “Previous” / “Next” ARIA labels on the zoom modal navigation were set to Italian at creation time and only replaced on page load (not when the buttons were newly created). Now set to the user’s browser language from the start.
  • Fixed: “My Dresium look” share title and “Copy the link” prompt now localized — the title passed to the native Web Share API and the fallback copy-link prompt were in Italian. Now in the user’s language.
  • Fixed: “Checking…” transient tooltip on the Animate button — brief tooltip during eligibility check was in Italian. Now localized.
  • Fixed: “Generated outfit” alt text on gallery tiles — now follows the browser language instead of being hardcoded in English, improving screen-reader experience for non-English shoppers.

3.4.4

  • Fixed: more residual Italian strings localized — follow-up to 3.4.3. Fixed the video badges in the gallery (“Generate video”, “Generating…”, “Play video”, “Stop video”) that remained in Italian regardless of the browser locale, the “Saved” confirmation on Setting dropdowns, and the “Preset occasion” / “Close” ARIA labels in several modals that lacked a client-side translation attribute. All strings are now covered in IT/EN/FR/DE/ES.

3.4.3

  • Fixed: storefront UI no longer shows a mix of languages — several hard-coded Italian strings in the gallery and share flows (button titles “Delete / View / Share / Open fullscreen”, “Error: …”, “Network error”, Instagram share instructions) were previously shown in Italian regardless of the browser language. These strings are now fully localized in all 5 supported languages (IT/EN/FR/DE/ES).
  • Fixed: race condition in client-side locale detection — if the i18n bundle wasn’t yet loaded when the first translation lookup happened, the detector cached an empty dictionary and every subsequent string fell back to the hard-coded fallback (always Italian) for the rest of the session. The cache now only stores a non-empty dictionary.
  • Fixed: automatic English fallback when a key is missing — if a translation key is missing from the user’s locale (e.g. French), the lookup now falls back to English before falling back to the hard-coded Italian fallback in the source. Previously French/German/Spanish shoppers would see occasional Italian strings scattered through the UI.
  • Added: missing “common.*” translation keys — delete, view, share, fullscreen, error, unknown, networkError, networkErrorReload, share.instagramTitle, share.instagramInstructions — in all 5 languages.

3.4.2

  • Fixed: Try-On button now appears out of the box after activation — on fresh installs with the default category configuration, clicking “Activate the Try-On button” now immediately shows the button on all product pages, without requiring manual category selection. Previously the storefront kept the button hidden until at least one category was explicitly saved.
  • Fixed: your Style preferences are now reflected everywhere automatically — the preferences you set in Settings > Style (scene, action, time of day, weather, expression, framing) are now pre-populated in the Try-On wizard’s “Personalize scene” step without requiring a Save click first. Changes auto-save on every dropdown change (debounced), synced to both your local browser and your server account.
  • Fixed: “Claim 1,000 free credits” flow no longer loops after a server-side reset — an edge case where clicking the claim button could ping-pong between “already claimed” and “please claim” has been resolved. The claim rate limit was also relaxed from 1/5min to 5/5min per IP to accommodate normal retries.
  • Changed: legal setup is now a soft, dismissible reminder — the Legal tab banner no longer says “try-on generation is blocked”; it now explains that signing Privacy, DPA and Terms is optional but recommended for GDPR compliance. The reminder is shown as a dismissible card on the Dresium admin home (not as a WordPress admin notice) and can be hidden for 30 days.
  • Changed: Categories tab shows the current state clearly — the Categories tab now displays an info banner explaining “Try-On is shown on all categories by default” with all categories pre-selected. Uncheck specific categories and save to limit the Try-On button to a subset.
  • Added: “Reactivation needed” banner on the Settings tabs — if your Dresium account was reset or deleted server-side, the Settings tabs now show a clear path back to the Dashboard with a one-click reactivation CTA, instead of raw “Cannot load…” error messages.
  • Improved: Try-On activation card UI — removed the 720px max-width constraint so the activation card uses the full admin width on wide screens. Fixed button overflow and the loss of rounded corners on focus/active states; buttons no longer inherit WordPress admin’s default button border.
  • Improved: copy on the free-credits CTA — reworded for clarity (“no financial commitment, no card required”) and expanded to a short narrative pitch instead of a terse button label.
  • Improved: full translations in all 6 locales — Italian, English (US / GB), French, German and Spanish retranslated for all v3.4.x strings (legal tab, activation card, reactivation banner, info banners, Settings style preferences).
  • Internal: diagnostic endpoint opcache-reset.php (admin-only) added for troubleshooting merchant HMAC state on live servers where WP-CLI is unavailable. Reverted a shadow-DOM CSS bundle change that caused a regression in a subset of themes; v3.4.1 shadow-DOM behavior is restored. A developer-only “Reset locale” button is also available in the admin home when DRESIUM_DEV_MODE is defined in wp-config.php.

3.4.1

  • Added: “Dashboard” quick link in the Plugins list — a direct shortcut to the Dresium admin landing right from the “Installed plugins” row, next to Settings and Deactivate.
  • Added: one-click Try-On activation on your product pages — a dedicated card on the Dresium admin page lets you turn on the Try-On button on your WooCommerce products with a single click. Works on both classic WooCommerce templates and modern block themes (Gutenberg / Full Site Editing). You can disable the automatic placement in one click if you prefer the shortcode or Gutenberg block.
  • Changed: automatic Try-On button is now OFF by default on new installs — nothing appears on your storefront until you explicitly activate it. Existing installs keep their current behavior unchanged.
  • Changed: readme highlights the 1,000 free credits — the plugin page on WordPress.org now makes clear that the full plugin is testable for free with 1,000 welcome credits.

3.4.0

  • Added: 1,000 free credits to try the plugin — the first time you open the Dresium admin page, a welcome box offers 1,000 free credits with a single click. Credits are added immediately, no payment or billing setup required. They are consumed only when a shopper actually generates a virtual try-on on your storefront.
  • Added: video tutorial in the admin landing — a 2-minute embedded walkthrough shows exactly what shoppers experience and how to configure the plugin.
  • Changed: legal acceptance is now optional — the “Privacy / DPA / Terms” banner is no longer blocking. Try-On works out of the box; signing the GDPR legal pack is a one-click reminder you can dismiss for 30 days from the Dresium admin page. This mirrors how our Shopify app behaves, removes friction for new installs, and leaves the data-controller responsibility with the merchant.
  • Changed: no more forced onboarding redirect — opening WooCommerce Settings Dresium no longer forces a redirect to a mandatory onboarding form. The merchant account is created automatically the first time you claim the 1,000 free credits.
  • Changed: storefront no longer hidden when legal is unsigned — the Try-On button now appears on your product pages even if you haven’t signed Privacy/DPA/Terms yet.
  • Internal: client support for the new /woocommerce/claim-free-credits endpoint.

3.3.1

  • Fixed: event presets now consistently generate the matching scene — tapping “First date”, “Fashion show”, “Job interview” or “Wedding” sometimes produced an unrelated background (e.g. a fashion-show preset generated a beach scene) because any saved Style defaults (scene/time/weather/action) could compete with the event preset at generation time. The event preset now always wins over saved custom scene fields; if no event preset is selected, saved defaults keep working exactly as before.

3.3.0

  • Added: body-shape picker before each try-on — shoppers choose an approximate size (XS to XXL) with a visual silhouette before generating. This hint helps the AI render body proportions more accurately. Visually a 2×3 grid of silhouette thumbnails; one tap and continue. The chosen size is remembered in the browser for subsequent try-ons but can be changed any time. Does not change which product variant goes into the cart — that’s still the variant selected on the product page.
  • Removed: redundant “Build” dropdown from Custom Scene and Guest wizard — the new body-shape step replaces it. The Style settings page keeps a default build selector for logged-in customers who want to set a profile-wide preference.

3.2.3

  • Fixed: SVG icons clipped when the merchant used a custom radius — the cascade that applies the merchant-configured corner radius to modal elements was also rounding/clipping the icon SVGs inside modals (close × , back arrows, download, play, share, chevrons, check marks). Re-applied the targeted neutralization rule (border-radius 0 + overflow visible + no mask/clip) on all <svg> descendants of Dresium dialogs. The fix was in place in a previous version but was lost during a modal split refactor.

3.2.2

  • Added: visual feedback on the Add-to-cart button — after a successful click the button animates from brand purple to green with a check-mark icon, confirming the item was added. No toast, no popup — zero friction UX.

3.2.1

  • Fixed: Add-to-cart from the try-on result modal didn’t actually add items — WooCommerce initializes the cart/session only during standard page requests, not during REST API calls, so the backend add silently failed. The endpoint now bootstraps WC session + customer + cart handlers before adding, and explicitly persists the cart cookie after the add. Both guest and logged-in sessions work.

3.2.0

  • Added: Add-to-cart button in the try-on result modal — after a successful virtual try-on, shoppers can add the product to their cart in one click without leaving the result modal. The size and any variant currently selected on the product page (or the first available variant if none selected) is used automatically — no size picker, no interruption. Mini-cart badge refreshes via standard WooCommerce fragments; works on all WC-compliant themes.

3.1.0

  • Added: low-balance email reminder — enable optional email alerts in WooCommerce > Settings > Dresium > Billing. When your credit balance drops below your chosen threshold, Dresium sends a reminder to your contact email (at most once per day while the balance stays low). Email language follows your WordPress admin language, with English fallback. Delivered from info@dresium.com via your site’s existing SMTP setup.

3.0.16

  • Fixed: misleading error message when the store runs out of credits — the storefront previously showed “Oops! The service is being updated. Please try again in a few minutes.” for a 402 insufficient-balance response. It now correctly says “The store has run out of credits. Please try again later.” in all 5 supported languages (IT/EN/FR/DE/ES).
  • Fixed: generic daily rate limit fell back to Italian in all languages — the i18n key for the generic 429 message was missing from the storefront bundle, so non-Italian shoppers saw the Italian fallback. Added main.rateLimit localization in IT/EN/FR/DE/ES.
  • Fixed: AI service unavailable (503) showed raw backend text — when the AI pipeline is temporarily down, the storefront now shows a dedicated localized message (“The service is temporarily unavailable. Please try again in a few minutes.”) instead of a raw Italian server message. Both guest and logged-in flows are covered.

3.0.15

  • Fixed: crop modal could accidentally close during drag — when a crop drag ended outside the image area, the modal treated it as a backdrop click and closed, cancelling the operation. It now closes only on a real click on the modal backdrop.
  • Added: take a selfie on the spot when logged in — previously only guest visitors had this shortcut. On mobile it opens the front camera directly; on desktop it opens a webcam capture dialog. The existing “upload from device” path is unchanged.

3.0.14

  • Shadow DOM CSS isolation — try-on modals are now fully isolated from your theme’s CSS. Enabled by default on fresh installs, disabled by default on existing installs (opt-in from WooCommerce > Dresium > Advanced, to avoid any visual change without your consent). Solves cross-theme conflicts on themes with aggressive CSS resets (Kadence, Astra, Divi, Bricks, and themes based on normalize.css / html5boilerplate). Includes a JavaScript fallback for page builders that skip WooCommerce hooks (Elementor Pro Product Templates, Divi Theme Builder, Bricks Builder).
  • Product category picker — the Advanced tab now shows product categories as a nested tree with strict parent-child logic: enabling a subcategory requires its parent to be enabled too. Much clearer to configure than the previous flat list.
  • Fullscreen gallery: video first — when a product image has an associated video, the fullscreen gallery now opens directly on the video instead of the static image.
  • Minor bug fixes.

3.0.13

Critical fix: theme compatibility. Some WordPress themes (with CSS resets inherited from normalize.css / html5boilerplate) applied dialog { display: block }, which overrode the browser default dialog:not([open]) { display: none } and caused all Dresium try-on modals to appear as visible blocks at the bottom of product pages when closed. Fixed by restoring the browser default via a targeted rule on Dresium dialogs only.

3.0.12

Minor bug fixes

3.0.11

Minor bug fixes

3.0.10

Minor bug fixes

3.0.9

Minor bug fixes

3.0.8

Minor bug fixes

3.0.7

Post-3.0.3 refinement release. Consolidates fixes and UX improvements from 3.0.4 3.0.7 development iterations. Backwards compatible with 3.0.3 — no data migration, no re-onboarding required.

Admin UX — Appearance tab

  • Live preview on the Preview button and on the Button Size tiles (small/medium/large) now reflects all style changes in real time: palette, custom colors, uppercase, show-icon, CTA text, border radius and font family — previously radius and font were applied silently only after saving.
  • Border radius is applied live to the Preview button and the Button Size tiles via JavaScript listeners on the slider and the number input.
  • Font family is applied live to the Preview button and the Button Size tiles by loading the 12 Google Fonts of the whitelist (Inter, Poppins, Montserrat, Roboto, Open Sans, Lato, Raleway, Nunito, Playfair Display, Merriweather, Lora, DM Sans) directly in the admin page via <link rel="stylesheet"> output in output_section_appearance() (bypassing wp_enqueue_style which could HTML-escape the & characters in the CSS2 URL bundle).
  • Font application uses document.fonts.ready to re-sync the preview once the Google Fonts WOFF2 files are actually downloaded, avoiding the initial pageload flashing with the system font.
  • Fallback family per-font-category (serif vs sans-serif) so if a Google Fonts file fails to load, the preview at least maintains the correct typography category.
  • Added a yellow disclaimer under the Typography section informing merchants that the font preview is approximate and that the accurate rendering can be verified only by saving and opening a product page in a new tab.

Admin UX — Financials tab (B2B Pricing Configuration)

  • Introduced a new pricing input model with 4 primary fields (image total cost in €, credits per image, video total cost in €, credits per video). The credit price is derived automatically from the image_price / image_credits ratio.
  • All fields accept EUR values with 2-decimal precision (0.01 step). Backend stores in cents (integer) with round(eur * 100). Retrocompatibility layer accepts legacy *_cents POST parameters.
  • Live preview info box (blue) shows internal derived credit price, example €100 top-up conversion in credits and video intrinsic value with warning if declared video cost diverges from the intrinsic value.
  • New backend getters Dresium_Merchant_Balance::get_image_price_cents() and get_video_price_cents() return the costs saved directly by the admin — no more derivation via credit_price × credits which caused rounding-to-integer-cents artifacts (€0.30 / 20 credits → €0.015 was rounded to €0.02 making €0.30 incorrectly rendered as €0.40 after save).
  • The endpoint /merchants/self and /pricing/current now expose image_price_cents and video_price_cents as the source of truth. Frontend (Shopify Remix admin, storefront extension, WooCommerce client plugin) consume these instead of recomputing from credit price. Fallback to legacy calculation for merchants pre-3.0.7 without the new options stored.
  • Stripe checkout now uses float precision for credit calculation: credits = floor(topup_cents / (image_price_cents / image_credits)) instead of intdiv(topup_cents, credit_price_cents). Fixes an issue where a €100 top-up produced 5000 credits instead of the expected 6666 (with €0.30/20 credits config).
  • Hint box in the B2B Pricing Configuration section with concrete example configuration and derived calculations to help merchants understand the credit model.

Storefront — theme compatibility

  • Fixed the fullscreen zoom modal close button (X icon) being invisible on Astra theme. Astra’s default button rule applies padding: 15px 30px !important-equivalent and font-size: 16px to any button element, overriding the Dresium close button’s fixed 40×40 sizing and squishing the SVG X.
  • Fix: theme-guard now applies explicit width: 48px, height: 48px, padding: 0, font-size: 0 and line-height: 1 with !important to #dresium-tryon-zoom-modal .dresium-zoom-modal__close. The inner SVG has explicit width/height: 24px and color: #ffffff with !important.

Compatibility

  • No breaking changes. All previously stored merchant balances, subscriptions and auto-topup configurations continue to work unchanged.
  • Zero-config upgrade: existing pricing configuration (10 credits per image, 40 credits per video, €0.10 per credit, €10 minimum recharge, €100 whitelabel threshold) is preserved. Merchants can adopt the new 4-input pricing model at any time from Financials tab.

3.0.3

B2B Dynamic Pricing refactor

  • New Dresium_Pricing_Cache client fetches the current B2B pricing (credit price, credits per image try-on, credits per animate video, minimum recharge and whitelabel threshold) from the Dresium server every hour via the public endpoint GET /wp-json/dresium/v1/pricing/current. Cached in a WP transient. Fallback to hardcoded defaults if the endpoint is unreachable.
  • Auto-topup help strings (“1 try-on = 10 credits, 1 video = 40 credits”, “€10 = 100 credits”, “0 = unlimited. No cap…”) converted from static text to sprintf(__()) with placeholders — automatically reflect the current pricing.
  • Analytics dashboard help item “Each try-on = 10 credits” converted to dynamic plural via _n(...).
  • Translation POT + .po/.mo regenerated across DE / EN_GB / EN_US / ES / FR / IT to preserve translation for the new placeholder-based strings.
  • Existing credits are always spent at the rate contracted at purchase — the checkout captures a full pricing snapshot in Stripe metadata (dresium_price_per_cred, dresium_image_credits_at_purchase, dresium_video_credits_at_purchase, dresium_min_topup_at_purchase, dresium_wl_threshold_at_purchase). Future pricing changes never invalidate deposits already made.
  • Auto-topup minimum recharge now respects the server-side configurable minimum topup (previously hardcoded €10).
  • readme.txt Pricing & currency section rewritten to explicitly explain that the values shown are current defaults and that the Billing screen always shows the up-to-date pricing.

Compatibility

  • No breaking changes. All previously stored merchant balances, subscriptions and auto-topup configurations continue to work unchanged.
  • Zero-config upgrade: if the merchant has not customised any pricing option on the server, the defaults resolve to the exact same values shipped in 3.0.2 (10 credits per image, 40 credits per video, €0.10 per credit, €10 minimum recharge, €100 whitelabel threshold).

3.0.0

First stable release of the B2B model. Consolidates all fixes and refinements shipped during the beta cycle. Backwards compatible with 3.0.0-beta.1/beta.2 — no data migration, no re-onboarding required. Users upgrading from 2.x should read the 3.0.0-beta.1 changelog for the breaking-change details.

Admin UI

  • Admin panel fully translated in Italian, English, French, German and Spanish (fixed mixed-language rendering when WordPress locale differed from the plugin source language).
  • Regenerated the translation POT covering 635 strings (was 373); all five .po/.mo files brought to 100% coverage.
  • Home landing page: hero, KPI tiles, CTA row, animated bento grid, integration cards for Shopify and WooCommerce, cinematic showcase and final CTA.
  • Analytics dashboard: fixed KPI key mismatches (purchases, refunded revenue, conversion rate), corrected order-status attribution windows, retroactive migration for orders already in the database when the plugin was upgraded.
  • Appearance tab: fixed palette presets not persisting the actual colors — selecting Sunset/Ocean/Forest now writes the real hex values into the DB, storefront picks them up on next page load.
  • Appearance preview: live update of the CTA button preview when changing palette, custom colors or button size, without a page reload.

Storefront button and modals

  • CTA button and inner modal primary buttons now consume the merchant’s chosen colors dynamically via CSS custom properties, both on :root and on the .dresium-tryon-block container (fixes theme override on themes with block-scoped defaults like Kadence).
  • Fixed a class of theme conflicts where button:hover/focus/active in the parent theme (Kadence, Astra, Woodmart) overrode the Try-On button on click, briefly making the label unreadable.
  • Kept the gear/settings button neutral gray regardless of the merchant’s palette (design decision: it must remain distinct from the primary CTA).
  • All modal corner radii now follow --dresium-tryon-radius — step badges, close buttons, notice boxes, preview containers, replace-photo button, gallery navigation arrows, gallery scope toggle, loading progress bar and reference images all react to the merchant’s radius setting instead of being hardcoded.
  • Guest modal, step 1 (Upload/Camera): replaced the four sample reference photos with a new set that alternates female/male subjects (previously all female).
  • Guest modal, step 3 (Special occasions): four scene tiles refreshed with production-quality imagery for First Date, Fashion Show, Job Interview and Wedding.

Video generation and lazy loading

  • Whitelabel unlock is now evaluated on the current merchant balance (was cumulative lifetime spending) — dropping below the €100 threshold hides the whitelabel bonus again, per contract.
  • Video generation flag auto-enabled the moment whitelabel unlocks; auto-disabled when the balance drops below threshold.

Webcam authorization

  • User-friendly wording when the browser blocks webcam access: title changed from “Errore” to “Autorizza la webcam” (localized), body rewritten as an actionable instruction that points the user to the lock icon in the address bar. All five languages.

i18n runtime

  • Fixed a legacy string that contained a literal <script> tag in the FAQ content; it broke next-intl’s ICU parser and caused the placeholder key to leak into the rendered page.
  • Reworked all storefront JS translation lookup paths to guarantee the correct locale is selected on the visitor’s browser, independently of the merchant’s WordPress locale.

Guest flow — WooCommerce parity with Shopify

  • Complete port of the guest flow 5-step wizard that shipped on Shopify: photo intake (upload / camera / sample) identity confirmation occasion selection outfit customization generation. Includes daily credit caps per customer, radius cascade to modal primary buttons, per-locale CTA copy.
  • Contact form fix on the Brand landing page: the interest field was made optional on the backend since the redesigned form no longer collects it. …