Embedded images for Power BI Image Plume
Your base64 images, finally shown well: even beyond 32,766 characters, placed, sized, clipped into circles or shapes, and filtering the report on click.
Interactive demo
The real Power BI visual, running in your browser with the sample report's fictitious data. Switch scenario, style or year: the visual updates as it does in Power BI. Premium ★ features are shown here without the watermark; in Power BI, without a license, they show “Plume Visuals · Premium preview”.
Image Plume shows the images stored in your model: a base64 or data URI column or measure (PNG, JPEG, GIF, WebP, BMP, SVG), or an image pasted in the Format pane. Power BI cuts a text at 32,766 characters: split long images into rows, add the chunk index, and the visual joins them back, one image per product, place or person. No web address is ever loaded: images show offline, in PDF and in the service. 9-point position, six sizes (fit, fill, stretch, original, fixed, share), rounded corners, circle and 22 free shapes with an outline, opacity, brightness, contrast, grayscale, a gallery that filters on click. With premium: a slideshow by date (play axis), drop shadow, saturation, blur, rotation and flips, 131 more shapes and your own SVG as a mask, carousel, before / after slider, layers, image picked by a value (traffic lights, conditional logos), sepia, vintage and duotone filters in your style colors, magnifier.
Use cases
- Product photos, customer or store logos that follow the filters
- Round team portraits, a who's who that filters the report
- Traffic light or status icon picked from a score, without DAX
- Before / after works, plans and photos over the years
FreeIncluded for free
- Raw base64 or data URI from a column or a measure; image pasted in the pane (a logo with no field, or a fallback)
- Images over 32,766 characters: “Chunk index” field, the visual joins the chunks (one image per key)
- 9-point position and offset; fit, fill and crop, stretch, original size, fixed size, share of the frame
- Rounded corners, ellipse or circle, 22 free shapes; outline that follows the shape
- Opacity, brightness, contrast, grayscale
- Gallery with captions, click = cross-filtering, highlighting, tooltips
- Web addresses refused with a clear message: nothing is loaded, everything shows offline and in PDF
- Link opened on click (https), "Brighter" hover; clicks filter even without an image key
- Dynamic formats: fx button on colors and texts, any option driven by DAX
PremiumPremium features
- Slideshow by date or year with the play axis (shared Plume player: play, slider, speed, cross-fade)
- Drop shadow that follows the shape, saturation, blur, rotation and flips
- 131 more mask shapes (maps, containers, objects, transport) and your own SVG
- Carousel with arrows, dots and auto-advance; before / after slider; stacked layers
- Image by value: pick the image by thresholds or fade below a threshold, without DAX
- Sepia, vintage, warm, cool, duotone in your style colors, negative and hue filters; magnifier on hover
- Per-layer settings: show or hide each layer, own opacity
- Catalog-wide styles (Neon, Newspaper, Nordic…), palettes, theme JSON
Usable without a key to try them, with a watermark.
Tutorials
Start with Getting started, then pick from the how-to guides. The Fields and settings page describes every option of the Format pane.
- Getting startedBeginner6 min readShow base64 images in Power BI, even beyond 32,766 charactersGet started with Image Plume: prepare a table of base64 images, split long images into chunks, insert the visual, pick size, position and a round mask.
- How-to guidesIntermediate6 min readImage Plume: 10 recipes (logos, galleries, slideshows, before / after)Default logo, image of the selected product, DAX measure, slideshow, shapes, before / after, light by score, carousel, filters and SVG clipping.
- Fields and settingsIntermediate20 min readImage Plume: every field and setting explainedEvery field well and every Format pane setting of Image Plume: layout, position and size, mask, outline, image adjustments, caption, thresholds, interactions.
- BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.
Fields to drop into the visual
| Field | Content | |
|---|---|---|
| Image (base64) | Base64 or data URI column or measure; with the index, one chunk per row | Required |
| Image key (category) | One image per value: gallery, carousel, click to filter | Optional |
| Chunk index | Order of the chunks of an image split beyond 32,766 characters | Optional |
| Caption | Text shown with the image and read by screen readers | Optional |
| Value (thresholds) | Picks the image by thresholds (traffic lights, conditional logos) | OptionalPremium |
| Play axis | Year, month: slideshow with cross-fade | OptionalPremium |
| Tooltips | Extra measures | Optional |
| Dynamic format | Measures renamed card.setting (e.g. title.text): the Format pane driven by DAX | Optional |
Missing a feature? We adapt our visuals or build custom ones. Request a custom visual
Found a bug in Image Plume, or have an idea to improve it? Report a bug · Suggest an idea
Technical reference for AI assistants
This section is meant for AI assistants (ChatGPT, Claude, Copilot…): every field, every Format pane option with its internal name, the expected data shape and DAX examples. Generated from the visual's code, version 1.1.0.0. Paste it into your assistant so it can guide you.
Raw Markdown version (/ai/visuals/image.md)# Image Plume: technical reference for AI assistants
> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.1.0.0**. This page is generated from the visual's source code at each site build: field names, option names and defaults are exact for this version.
Use it to help someone build a report with Image Plume: which fields to drag, how to shape the data, which Format pane option to change, or how to write the visual's settings in a PBIP `visual.json` file.
- Product page: https://plumevisuals.com/en/visuals/image (French: https://plumevisuals.com/fr/visuels/image)
- Summary: Your base64 images, finally shown well: even beyond 32,766 characters, placed, sized, clipped into circles or shapes, and filtering the report on click.
- Power BI visual GUID (`visualType`): `plumeImageF765EB2CC018408786BADCD7A1C0464F`
- Power BI visuals API: 5.11.1
- Support: https://plumevisuals.com/support · contact@plumevisuals.com
- Index of everything on the site for AI assistants: https://plumevisuals.com/llms.txt
## What the visual does
Image Plume (identifier `image`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; not yet on AppSource) that shows **images stored in the report as base64 text or data URIs**. It never loads a web address.
**New in version 1.1.0.0 (30/10/2026):** Free native-parity additions: cross-filtering without an "Image key" field, **link opened on click** (web URL action), "Brighter" hover state.
- **Sources**: a column or a measure in the `image` role (raw base64, `data:image/png|jpeg|gif|webp|bmp;base64,…`, `data:image/svg+xml` or SVG markup), or an image pasted in **Format › Pasted image and fallback** (`fallback.pasted`), shown when no field is set (a logo) or as a fallback for empty images (`fallback.whenEmpty` = `fallback`).
- **Images over 32,766 characters** (the limit of Power BI column texts): split them into rows (one chunk per row) and drop the chunk number in **Chunk index** (`chunkIndex`): the visual sorts the chunks numerically (2 before 10), keeps a repeated index once, joins them, one image per **Image key**, and reports missing indexes in edit mode. A DAX measure with `CONCATENATEX` works too (a measure is not limited to 32,766 characters).
- **Web addresses refused**: `http(s)://`, `//`, `www.`, `file:`, `ftp:`, `blob:`, `C:\…`, `\\server` are never loaded (Microsoft certification); a message explains it in edit mode ("Embedded images only: web addresses are never loaded (convert the image to base64)"). SVGs are cleaned (whitelist: scripts, `foreignObject`, external links, event handlers, `<text>` and `<image>` removed) and re-encoded.
- **Displays** (`layout.mode`): `single` (first or last row, a highlighted image first), `grid` (gallery: automatic or fixed columns, spacing, cell shape, maximum number of images, vertical scrolling), `carousel` ★ (arrows, dots, auto-advance with pause, fade or slide), `compare` ★ (before / after slider: first two images), `stack` ★ (layers: the first image opaque, the others at `layout.layerOpacity`).
- **Position and size**: 9-point `position.align` + `offsetX` / `offsetY`, `padding`; `sizeMode` `fit` (whole image), `fill` (frame full, cropped; the position picks the visible part), `stretch`, `original` (pixels), `fixed` (`width` × `height`, `keepRatio`), `percent` (share of the frame); premium `rotate` ★ `90` | `180` | `270` (default `0`), `flipH` ★, `flipV` ★.
- **Masks** (`mask.kind`): `rounded` (`radius` px), `ellipse` (`circle` = perfect circle), `shape` (153 shapes of the Plume library, 22 free), `svg` ★ (`mask.svg`: markup, SVG data URI or a path "d"); `fit` `contain` | `stretch`, `scale` (10–100 %). The outline and the drop shadow ★ follow the mask.
- **Adjustments**: opacity, brightness, contrast, grayscale; ★ saturation (0–300 %), ★ blur, ★ sepia, vintage, warm, cool, duotone (style colors or `duoDark` / `duoLight`), negative, hue.
- **Image by value ★** (`conditional`): with the `value` role, `pick` shows the 1st image below `t1`, the 2nd between `t1` and `t2`, the 3rd from `t2` (traffic lights, conditional logos, no DAX); `fade` greys images below `t1` and rings images from `t2` (in a gallery).
- **Play axis ★** (`play` role, premium since the 22/10/2026 rebalancing: watermark as soon as the field holds data): slideshow, one image (or one gallery) per date / year with the shared Plume player (play, slider, speed, loop, cross-fade).
- Selection and cross-filtering by **Image key**, highlighting from other visuals, tooltips (key, caption, value, Tooltips measures, image size in pixels), magnifier ★ on hover.
## Free vs premium (★)
- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes and `style.themeJson` ("Theme JSON ★") are **premium**.
- Free in Image Plume: every source (column, measure, pasted image, chunks), single image and grid, every position and size option (without rotation and flips), masks `rounded`, `ellipse` and the 22 free shapes (`circle`, `square`, `roundedSquare`, `rectangle`, `triangle`, `diamond`, `hexagon`, `star`, `heart`, `cloud`, `drop`, `bubble`, `arrow`, `person`, `house`, `barrel`, `bottle`, `glass`, `wineGlass`, `thermometer`, `battery`, `batteryVertical`), outline, opacity, brightness, contrast, grayscale, captions, selection, tooltips, "Slight zoom" hover.
- Premium features of Image Plume: `layout.mode` = `carousel`, `compare` or `stack` (with at least two images); `mask.kind` = `svg`; any other `mask.shape` (131 shapes); `adjust.preset` = `sepia`, `vintage`, `warm`, `cool`, `duotone`, `invert`; `adjust.hue` ≠ 0; `conditional.show` with the Value field; `interaction.hover` = `loupe`; and since 22/10/2026: a filled **Play axis** field, `outline.shadow`, `adjust.saturation` ≠ 100, `adjust.blur` > 0, `position.rotate` ≠ `0`, `position.flipH`, `position.flipV`.
- Without a valid key, a premium feature in use shows, in edit mode, a "Premium preview" note in the footer; in reading view, **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») is repeated lightly across the whole visual, without catching the mouse. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the **first card** of the Format pane. Premium options and list values have " ★" appended to their label.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `image` or the whole catalog. In edit mode, a wrong key shows "Invalid license key", "License expired (date)" or "This key does not cover this visual".
- Licenses last one year (one-time payment, no automatic renewal). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack.
## Expected data shape
One row per image, or one row per chunk of an image.
| Image key (`category`) | Chunk index (`chunkIndex`) | Image (`image`) | Caption (`label`) |
|---|---|---|---|
| Arcachon | 1 | `iVBORw0KGgo…` (30,000 characters) | Bay and stilt huts |
| Arcachon | 2 | `…` | Bay and stilt huts |
| Sarlat | 1 | `iVBORw0KGgo…` | Medieval town |
- **Image (base64)** (`image`, « Image (base64) », one column **or** measure, required unless an image is pasted in the pane): the image text. As a column it is used as is (no aggregation).
- **Image key (category)** (`category`, « Clé de l'image (catégorie) », one column): one image per value; selection and cross-filtering.
- **Chunk index** (`chunkIndex`, « Index du morceau », one column of numbers): order of the chunks.
- **Caption** (`label`, « Légende », one column or measure): text with the image; in a grid or carousel, the key is shown when it is empty.
- **Value (thresholds) ★** (`value`, « Valeur (seuils) ★ », one measure) for Image by value.
- **Play axis** (`play`, « Axe de lecture », one column), **Tooltips** (`tooltips`), **Dynamic format** (`format`).
- Volume: windows of 30,000 rows, more fetched with `fetchMoreData`; only displayed images are decoded (at most `layout.maxImages`, default 100, max 500).
## Power Query and DAX recipes
```m
// A folder of images → one row per 30,000-character chunk (Name, Chunk index, Chunk)
let
Source = Folder.Files("C:\Images"),
Bin = Table.AddColumn(Source, "B64", each Binary.ToText([Content], BinaryEncoding.Base64), type text),
Chunks = Table.AddColumn(Bin, "Chunks", each let t = [B64], n = Number.RoundUp(Text.Length(t) / 30000)
in Table.FromColumns({ {1..n}, List.Transform({0..n - 1}, (i) => Text.Middle(t, i * 30000, 30000)) }, { "Chunk index", "Chunk" })),
Rows = Table.ExpandTableColumn(Table.SelectColumns(Chunks, { "Name", "Chunks" }), "Chunks", { "Chunk index", "Chunk" })
in
Rows
```
```dax
// One image per filter context, joined in DAX (alternative to the Chunk index field)
Full image = "data:image/png;base64," & CONCATENATEX ( Images, Images[Chunk], "", Images[Chunk index], ASC )
// Default logo when nothing is selected: return BLANK and set fallback.whenEmpty = fallback with a pasted logo
Logo shown = IF ( HASONEVALUE ( Companies[Company] ), SELECTEDVALUE ( Companies[Logo] ), BLANK () )
```
## Interactions with the report
- Click an image (with an Image key): select and cross-filter; Ctrl + click for several; click the background to clear. Other images fade (`interaction.dim`, 30 %). Highlighting from other visuals fades non-highlighted images (single mode: the highlighted image is shown).
- Context menu everywhere (images, captions, carousel controls, slider, empty area, landing page).
- Keyboard: Tab to the visual; arrows move between images (grid), change image (carousel), move the before / after slider (Shift = 10 %, Home, End) or the play axis; Enter selects; Esc clears. Screen readers: role img with the alternative text (`fallback.alt`, else caption, else key), slider role for the before / after handle, announcements in French and English.
- Nothing is saved with persistProperties: carousel position, slider and magnifier are session state.
## Dynamic formats
- **fx button** on colors and texts (e.g. `outline.color`, `caption.color`, `fallback.pasted`).
- **"Dynamic format" well** (`format`): measures renamed `card.setting` (e.g. `adjust.brightness`, `mask.kind`, `title.text`) drive any setting. Driving a ★ setting by DAX still shows the watermark without a key.
```dax
// renamed title.text
Featured title = "Featured: " & SELECTEDVALUE ( Places[Place], "Nouvelle-Aquitaine" )
// renamed adjust.brightness
Brightness by filter = IF ( HASONEVALUE ( Places[Place] ), 100, 90 )
```
## Format pane: option IDs
- Card order: `license`, `style`, `layout`, `position`, `mask`, `outline`, `adjust`, `caption`, `conditional`, `interaction`, `fallback`, `play` (only with a Play axis field), then `title`, `source`, `container`, `texts`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `layout`, `layers`, `position`, `mask`, `outline`, `adjust`, `caption`, `conditional`, `fallback`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `layout`: `mode` (`single` | `grid` | `carousel` ★ | `compare` ★ | `stack` ★), `pick` (`first` | `last`), `columns` (0 = auto, 0–24), `gap` (0–60, 8), `cellRatio` (`auto` | `square` | `landscape` | `wide` | `portrait`), `maxImages` (1–500, 100), `interval` (1,000–30,000 ms, 4,000), `autoAdvance`, `effect` (`fade` | `slide` | `none`), `arrows`, `dots`, `split` (0–100, 50), `compareLabels`, `layerOpacity` (0–100, 60).
- `position`: `align` (`topLeft` | `top` | `topRight` | `left` | `center` | `right` | `bottomLeft` | `bottom` | `bottomRight`), `sizeMode` (`fit` | `fill` | `stretch` | `original` | `fixed` | `percent`), `width`, `height` (160), `keepRatio`, `percent` (80), `offsetX`, `offsetY`, `padding`, `rotate` (`0` | `90` ★ | `180` ★ | `270` ★), `flipH` ★, `flipV` ★.
- `mask`: `kind` (`none` | `rounded` | `ellipse` | `shape` | `svg` ★), `radius` (16), `circle` (on), `shape` (153 shape IDs, default `hexagon`), `svg` ★, `fit` (`contain` | `stretch`), `scale` (10–100, 100).
- `outline`: `show`, `width` (2), `color` (empty = accent), `shadow` ★, `shadowColor`, `shadowOpacity` (30), `shadowBlur` (10), `shadowOffset` (4).
- `adjust`: `opacity`, `brightness`, `contrast`, `saturation` ★ (100), `blur` ★ (0), `preset` (`none` | `grayscale` | `sepia` ★ | `vintage` ★ | `warm` ★ | `cool` ★ | `duotone` ★ | `invert` ★), `duoDark`, `duoLight`, `hue` ★ (−180–180).
- `caption`: `show`, `position` (`below` | `above` | `overlayBottom` | `overlayTop`), `fontSize` (12), `bold`, `color`, `align`, `lines` (2), `band`.
- `conditional` ★: `show`, `mode` (`pick` | `fade`), `t1`, `t2`. `interaction`: `select`, `dim` (30), `hover` (`none` | `lift` | `loupe` ★), `loupeZoom` (250), `loupeSize` (140). `fallback`: `pasted`, `whenEmpty` (`placeholder` | `fallback` | `hide`), `alt`.
- `play` ★ (card "Playback ★"): shared player (`start`, `speed`, `loop`, `autoPlay`, `transition`, `controls`, `position`, `ticks`, `tickLabels`, `stepButtons`, `speedButton`, `showLabel`, `labelSize`, `labelPosition`).
## Editing a PBIP report (visual.json)
```json
{
"visualType": "plumeImageF765EB2CC018408786BADCD7A1C0464F",
"query": {
"queryState": {
"category": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Places" } }, "Property": "Place" } }, "queryRef": "Places.Place", "nativeQueryRef": "Place" } ] },
"chunkIndex": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Places" } }, "Property": "Chunk index" } }, "queryRef": "Places.Chunk index", "nativeQueryRef": "Chunk index" } ] },
"image": { "projections": [ { "field": { "Column": { "Expression": { "SourceRef": { "Entity": "Places" } }, "Property": "Image" } }, "queryRef": "Places.Image", "nativeQueryRef": "Image" } ] }
}
},
"objects": {
"layout": [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'grid'" } } } } } ],
"position": [ { "properties": { "sizeMode": { "expr": { "Literal": { "Value": "'fill'" } } } } } ],
"mask": [ { "properties": { "kind": { "expr": { "Literal": { "Value": "'ellipse'" } } } } } ]
}
}
```
## Common pitfalls
- Image cut or a gray placeholder: text truncated at 32,766 characters; split into chunks and add Chunk index.
- "Embedded images only…": the column holds web addresses; convert to base64.
- All chunks mixed into one image: several images without an Image key.
- One image instead of a gallery: `layout.mode` is `single`.
- Watermark visible: a filled play axis, drop shadow, saturation or blur, rotation or flips, carousel, before / after or layers with two images or more, a ★ shape or SVG mask, a ★ filter or hue, Image by value with the Value field, magnifier, a ★ style or a theme JSON, without a valid key.
- Text inside an SVG used as a mask or as an image is removed by the cleaning (draw logos with shapes).
## Features that do NOT exist (do not suggest them)
Loading images from a URL, SharePoint or OneLake; opening a web link or a report page on click; interactive cropping saved in the report; per-layer settings (each layer has the same position, size and mask); playback control of animated GIFs; exporting or downloading the image.
## Data fields (wells)
Internal name = data role name (PBIP `queryState` key). Labels as shown in Power BI (English / French). ★ = premium.
| Internal name | Label (EN) | Label (FR) | Kind | Max fields | Description |
|---|---|---|---|---|---|
| `image` | Image (base64) | Image (base64) | GroupingOrMeasure | 1 | Column or measure with base64 text or a data URI (PNG, JPEG, GIF, WebP, BMP, SVG). With “Chunk index”: one piece of the image per row. |
| `category` | Image key (category) | Clé de l'image (catégorie) | column | 1 | One image per value (product, person, site): gallery, carousel, selection and cross-filtering. |
| `chunkIndex` | Chunk index | Index du morceau | column | 1 | Order of the pieces of an image split into rows (beyond the 32,766-character limit of Power BI texts): the visual joins them back. |
| `label` | Caption | Légende | GroupingOrMeasure | 1 | Text shown with the image (and read by screen readers). |
| `value` | Value (thresholds) ★ | Valeur (seuils) ★ | measure | 1 | Number compared with the thresholds of “Image by value ★”: picks the image (traffic lights, conditional logos) or fades the images below the threshold. |
| `play` | Play axis ★ | Axe de lecture ★ | column | 1 | A date, a year or an ordered category: the visual moves from one value to the next (play button) |
| `tooltips` | Tooltips | Infobulles | measure | several | |
| `format` | Dynamic format | Format dynamique | measure | several | Measures named card.setting (e.g. title.fontSize): drive any Format option with DAX |
Data view: categorical, categories = `category` + `play` + `chunkIndex` + `image` + `label` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `image`, `label`, `value`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).
## Format pane options (156)
Columns: option ID (`object.property`), labels EN / FR as shown in Power BI, control type, PBIP literal type, default value, allowed values, notes.
### Plume Studio License / Licence Plume Studio (`license`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `license.buy` | Get a license | Obtenir une licence | info | text | `plumevisuals.com` | | |
| `license.key` | License key | Clé de licence | text | text | (empty) | | Paste the key received after purchase on plumevisuals.com (starts with PLUM1.). Checked offline. |
| `license.showOwner` | Show license holder (edit mode) | Afficher le titulaire (mode édition) | toggle | bool | `true` | true / false | |
### Style (`style`, Format pane)
**Style**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.preset` | Style | Style | dropdown | enumeration | `none` | `none` None; `minimal` Minimal; `blackWhite` Black & White; `press` Newspaper ★; `vintage` Vintage (antique plate) ★; `earth` Earth ★; `nordic` Nordic ★; `executive` Executive ★; `accessible` Accessible (high legibility) ★; `pastel` Pastel ★; `bauhaus` Bauhaus (pop) ★; `climate` Climate ★; `blueprint` Blueprint ★; `unknownPleasures` Unknown Pleasures ★; `dark` Graphite (dark) ★; `neon` Neon ★; `terminal` Terminal (Matrix) ★; `infographic` Infographic ★; `cockpit` Cockpit (HUD) ★; `hologram` Hologram ★ | Complete look shared by all Plume visuals: colors, three palettes, fonts, frame, table header, marks and effects. Customize colors below. |
| `style.themeJson` | Theme JSON ★ | Thème JSON ★ | textarea | text | (empty) | | Paste a JSON theme: see the 'JSON themes' tutorial on plumevisuals.com |
| `style.followTheme` | Follow report theme | Suivre le thème du rapport | toggle | bool | `false` | true / false | Text, background, accent and data colors come from the Power BI report theme. |
| `style.reverse` | Reverse gradients | Inverser les dégradés | toggle | bool | `false` | true / false | |
**Custom colors / Couleurs personnalisées**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.customColors` | Customize colors | Personnaliser les couleurs | toggle | bool | `false` | true / false | Start from the style and pick your own colors. A color left empty keeps the style's color. |
| `style.colorBackground` | Background | Fond | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorText` | Text | Texte | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorMuted` | Secondary text | Texte secondaire | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorGrid` | Lines and grid | Traits et grille | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorAccent` | Accent | Accent | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorPositive` | Favorable | Favorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorNegative` | Unfavorable | Défavorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series1` | Series 1 | Série 1 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series2` | Series 2 | Série 2 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series3` | Series 3 | Série 3 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series4` | Series 4 | Série 4 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series5` | Series 5 | Série 5 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series6` | Series 6 | Série 6 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series7` | Series 7 | Série 7 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series8` | Series 8 | Série 8 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.palette` | Gradient palette | Palette du dégradé | dropdown | enumeration | `auto` | `auto` Style or theme palette; `crest` Plume (sequential); `crestDiverging` Plume (diverging); `viridis` Viridis ★; `magma` Magma ★; `inferno` Inferno ★; `cividis` Cividis (colorblind-safe) ★; `warmingStripes` Warming stripes ★; `rdYlBu` Red–Yellow–Blue ★; `brBG` Brown–Teal (drought) ★; `spectral` Spectral ★; `blues` Blues ★; `reds` Reds ★; `grays` Grays ★; `press` Press (ink and paper) ★; `nordic` Nordic ★; `earth` Earth (ochre to umber) ★; `pastel` Pastel ★; `okabeIto` Okabe-Ito (colorblind-safe) ★ | Visible when `style.customColors` = `true`. Gradient from the catalog (Viridis, Magma…). The start, middle and end colors below replace it. |
| `style.scaleLow` | Gradient: start | Dégradé : début | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleMid` | Gradient: middle (diverging) | Dégradé : milieu (écarts) | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleHigh` | Gradient: end | Dégradé : fin | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
**Text / Texte**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.fontFamily` | Font | Police | font | formatting | `Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif` | | Used by every text of the visual (title, axes, labels, cells). |
**Animations**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.animate` | Animations | Animations | toggle | bool | `true` | true / false | Smooth transitions when data changes. Automatically disabled when the system asks to reduce motion. |
### Layout / Disposition (`layout`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.mode` | Display | Affichage | dropdown | enumeration | `single` | `single` Single image; `grid` Grid (gallery); `carousel` Carousel ★; `compare` Before / after (slider) ★; `stack` Stacked layers ★ | One image (the first row, or the highlighted one), a gallery grid, a carousel, a before / after slider or stacked layers. |
| `layout.pick` | Image shown | Image affichée | dropdown | enumeration | `first` | `first` The first one; `last` The last one | Visible when `layout.mode` = `single`. With several rows: the first or the last one (a highlighted or selected image comes first). |
| `layout.columns` | Columns (0 = automatic) | Colonnes (0 = automatique) | number | integer | `0` | 0 to 24 | Visible when `layout.mode` = `grid` |
| `layout.gap` | Spacing (px) | Espacement (px) | number | integer | `8` | 0 to 60 | Visible when `layout.mode` = `grid` |
| `layout.cellRatio` | Cell shape | Format des cases | dropdown | enumeration | `auto` | `auto` Automatic (fill the visual); `square` Square; `landscape` Landscape 4:3; `wide` Wide 16:9; `portrait` Portrait 3:4 | Visible when `layout.mode` = `grid` |
| `layout.maxImages` | Maximum number of images | Nombre maximal d'images | number | integer | `100` | 1 to 500 | Visible when `layout.mode` = `grid` or `carousel` or `stack` |
| `layout.interval` | Duration of an image (ms) | Durée d'une image (ms) | number | integer | `4000` | 1000 to 30000 | Visible when `layout.mode` = `carousel` |
| `layout.autoAdvance` | Auto-advance | Défilement automatique | toggle | bool | `true` | true / false | Visible when `layout.mode` = `carousel`. Pauses on hover and keyboard focus; the pause button stops it. Never on a dashboard tile. |
| `layout.effect` | Transition | Transition | dropdown | enumeration | `fade` | `fade` Fade; `slide` Slide; `none` None | Visible when `layout.mode` = `carousel` |
| `layout.arrows` | Arrows | Flèches | toggle | bool | `true` | true / false | Visible when `layout.mode` = `carousel` |
| `layout.dots` | Navigation dots | Points de navigation | toggle | bool | `true` | true / false | Visible when `layout.mode` = `carousel` |
| `layout.split` | Initial slider position (%) | Position du curseur au départ (%) | number | integer | `50` | 0 to 100 | Visible when `layout.mode` = `compare` |
| `layout.compareLabels` | Before / after labels | Libellés avant / après | toggle | bool | `true` | true / false | Visible when `layout.mode` = `compare` |
| `layout.layerOpacity` | Opacity of upper layers (%) | Opacité des calques du dessus (%) | number | integer | `60` | 0 to 100 | Visible when `layout.mode` = `stack` |
### Per-layer settings ★ / Réglages par calque ★ (`layers`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
Per-item card: Power BI shows it once per series, category, column or KPI (an "Apply settings to" list where relevant). In PBIP `visual.json`, each entry of `objects.layers` carries a `selector` (`metadata` = the field's queryRef, or `data` for a category value); an entry without a selector applies to all items.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layers.show` | Show the layer | Afficher le calque | toggle | bool | `true` | true / false | |
| `layers.opacity` | Layer opacity (%, -1 = shared) | Opacité du calque (%, -1 = commune) | number | integer | `-1` | -1 to 100 | -1: the opacity of upper layers set in Layout. The first layer stays opaque unless you set it here. |
### Position and size / Position et taille (`position`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `position.align` | Position | Position | dropdown | enumeration | `center` | `topLeft` Top left; `top` Top; `topRight` Top right; `left` Left; `center` Center; `right` Right; `bottomLeft` Bottom left; `bottom` Bottom; `bottomRight` Bottom right | Where the image sits in its frame; with “Fill”, the part of the image that stays visible. |
| `position.sizeMode` | Size | Taille | dropdown | enumeration | `fit` | `fit` Fit (whole image); `fill` Fill (crop); `stretch` Stretch; `original` Original size; `fixed` Fixed size (px); `percent` Share of the frame (%) | |
| `position.width` | Width (px) | Largeur (px) | number | integer | `160` | 1 to 4000 | Visible when `position.sizeMode` = `fixed` |
| `position.height` | Height (px) | Hauteur (px) | number | integer | `160` | 1 to 4000 | Visible when `position.sizeMode` = `fixed` |
| `position.keepRatio` | Keep proportions | Garder les proportions | toggle | bool | `true` | true / false | Visible when `position.sizeMode` = `fixed` |
| `position.percent` | Share (%) | Proportion (%) | number | integer | `80` | 1 to 100 | Visible when `position.sizeMode` = `percent` |
| `position.offsetX` | Horizontal offset (px) | Décalage horizontal (px) | number | integer | `0` | -2000 to 2000 | |
| `position.offsetY` | Vertical offset (px) | Décalage vertical (px) | number | integer | `0` | -2000 to 2000 | |
| `position.padding` | Margin around the image (px) | Marge autour de l'image (px) | number | integer | `0` | 0 to 200 | |
| `position.rotate` | Rotation | Rotation | dropdown | enumeration | `0` | `0` None; `90` 90° (clockwise) ★; `180` 180° ★; `270` 90° (counterclockwise) ★ | |
| `position.flipH` | Flip horizontally ★ | Miroir horizontal ★ | toggle | bool | `false` | true / false | |
| `position.flipV` | Flip vertically ★ | Miroir vertical ★ | toggle | bool | `false` | true / false | |
### Mask (clipping) / Masque (découpe) (`mask`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `mask.kind` | Clip the image | Découper l'image | dropdown | enumeration | `none` | `none` No; `rounded` Rounded corners; `ellipse` Ellipse or circle; `shape` Shape from the library; `svg` Custom SVG ★ | Rounded corners, ellipse or circle, one of the 153 shapes of the library (22 free) or your own SVG ★. |
| `mask.radius` | Corner radius (px) | Rayon des angles (px) | number | integer | `16` | 0 to 1000 | Visible when `mask.kind` = `rounded` |
| `mask.circle` | Perfect circle | Cercle parfait | toggle | bool | `true` | true / false | Visible when `mask.kind` = `ellipse`. Off: an ellipse that fills the frame of the image. |
| `mask.shape` | Shape | Forme | dropdown | enumeration | `hexagon` | `circle` Basic · Circle; `square` Basic · Square; `roundedSquare` Basic · Rounded square; `rectangle` Basic · Rectangle; `triangle` Basic · Triangle; `diamond` Basic · Diamond; `hexagon` Basic · Hexagon; `star` Basic · Star; `heart` Basic · Heart; `ellipse` Basic · Ellipse ★; `pentagon` Basic · Pentagon ★; `octagon` Basic · Octagon ★; `rightTriangle` Basic · Right triangle ★; `parallelogram` Basic · Parallelogram ★; `trapezoid` Basic · Trapezoid ★; `ring` Basic · Ring ★; `semicircle` Basic · Semicircle ★; `arch` Basic · Arch ★; `capsule` Basic · Pill ★; `star6` Basic · Six-pointed star ★; `seal` Basic · Seal ★; `cross` Basic · Cross ★; `arrow` Arrows and symbols · Arrow; `arrowUp` Arrows and symbols · Arrow up ★; `arrowDown` Arrows and symbols · Arrow down ★; `arrowLeft` Arrows and symbols · Arrow left ★; `doubleArrow` Arrows and symbols · Double arrow ★; `chevron` Arrows and symbols · Chevron ★; `check` Arrows and symbols · Check mark ★; `close` Arrows and symbols · Close (X) ★; `plus` Arrows and symbols · Plus ★; `minus` Arrows and symbols · Minus ★; `warning` Arrows and symbols · Warning ★; `info` Arrows and symbols · Information ★; `playButton` Arrows and symbols · Play button ★; `bubble` Arrows and symbols · Speech bubble; `thought` Arrows and symbols · Thought bubble ★; `flag` Arrows and symbols · Flag ★; `bookmark` Arrows and symbols · Bookmark ★; `tag` Arrows and symbols · Tag ★; `bolt` Arrows and symbols · Lightning bolt ★; `shield` Arrows and symbols · Shield ★; `award` Arrows and symbols · Award ★; `puzzle` Arrows and symbols · Puzzle piece ★; `gear` Arrows and symbols · Gear ★; `lock` Arrows and symbols · Lock ★; `key` Arrows and symbols · Key ★; `bell` Arrows and symbols · Bell ★; `eye` Arrows and symbols · Eye ★; `cloud` Nature and weather · Cloud; `drop` Nature and weather · Drop; `sun` Nature and weather · Sun ★; `moon` Nature and weather · Moon ★; `snowflake` Nature and weather · Snowflake ★; `leaf` Nature and weather · Leaf ★; `pine` Nature and weather · Pine tree ★; `tree` Nature and weather · Tree ★; `flower` Nature and weather · Flower ★; `mountain` Nature and weather · Mountain ★; `wave` Nature and weather · Wave ★; `flame` Nature and weather · Flame ★; `umbrella` Nature and weather · Umbrella ★; `apple` Nature and weather · Apple ★; `fish` Nature and weather · Fish ★; `paw` Nature and weather · Paw print ★; `rain` Nature and weather · Rain ★; `sprout` Nature and weather · Sprout ★; `person` People · Person; `man` People · Man ★; `woman` People · Woman ★; `child` People · Child ★; `people` People · Group of people ★; `bust` People · User bust ★; `house` Objects and buildings · House; `building` Objects and buildings · Office building ★; `factory` Objects and buildings · Factory ★; `castle` Objects and buildings · Castle ★; `shop` Objects and buildings · Shop ★; `bank` Objects and buildings · Bank ★; `hospital` Objects and buildings · Hospital ★; `book` Objects and buildings · Book ★; `envelope` Objects and buildings · Envelope ★; `phone` Objects and buildings · Phone ★; `laptop` Objects and buildings · Laptop ★; `monitor` Objects and buildings · Monitor ★; `gift` Objects and buildings · Gift ★; `clock` Objects and buildings · Clock ★; `calendar` Objects and buildings · Calendar ★; `pencil` Objects and buildings · Pencil ★; `lightbulb` Objects and buildings · Light bulb ★; `cup` Objects and buildings · Trophy ★; `crown` Objects and buildings · Crown ★; `trashCan` Objects and buildings · Trash can ★; `barrel` Containers and gauges · Barrel; `bottle` Containers and gauges · Bottle; `wineGlass` Containers and gauges · Wine glass; `glass` Containers and gauges · Glass; `mug` Containers and gauges · Mug ★; `jar` Containers and gauges · Jar ★; `bucket` Containers and gauges · Bucket ★; `battery` Containers and gauges · Battery; `batteryVertical` Containers and gauges · Vertical battery; `thermometer` Containers and gauges · Thermometer; `testTube` Containers and gauges · Test tube ★; `tank` Containers and gauges · Tank ★; `funnel` Containers and gauges · Funnel ★; `hourglass` Containers and gauges · Hourglass ★; `bag` Containers and gauges · Bag ★; `piggyBank` Containers and gauges · Piggy bank ★; `flask` Containers and gauges · Flask ★; `beaker` Containers and gauges · Beaker ★; `can` Containers and gauges · Can ★; `coffeeCup` Containers and gauges · Coffee cup ★; `vase` Containers and gauges · Vase ★; `milkCarton` Containers and gauges · Milk carton ★; `france` Maps and places · Metropolitan France ★; `africa` Maps and places · Africa ★; `australia` Maps and places · Australia ★; `southAmerica` Maps and places · South America ★; `pin` Maps and places · Map pin ★; `globe` Maps and places · Globe ★; `foldedMap` Maps and places · Folded map ★; `compass` Maps and places · Compass ★; `city` Maps and places · City skyline ★; `target` Business · Target ★; `barChart` Business · Bar chart ★; `pieChart` Business · Pie chart ★; `trendUp` Business · Trend up ★; `coin` Business · Coin ★; `banknote` Business · Banknote ★; `wallet` Business · Wallet ★; `creditCard` Business · Credit card ★; `cart` Business · Shopping cart ★; `briefcase` Business · Briefcase ★; `percent` Business · Percent ★; `podium` Business · Podium ★; `megaphone` Business · Megaphone ★; `gem` Business · Gem ★; `medal` Business · Medal ★; `clipboard` Business · Clipboard ★; `handshake` Business · Handshake ★; `car` Transport · Car ★; `truck` Transport · Truck ★; `bus` Transport · Bus ★; `bicycle` Transport · Bicycle ★; `plane` Transport · Plane ★; `boat` Transport · Sailboat ★; `train` Transport · Train ★; `rocket` Transport · Rocket ★; `helicopter` Transport · Helicopter ★; `ship` Transport · Cargo ship ★; `fuel` Transport · Fuel pump ★; `scooter` Transport · Scooter ★ | 153 shapes in 9 families; 22 of them are free, the others ★. |
| `mask.svg` | Clipping SVG ★ | SVG de la découpe ★ | textarea | text | (empty) | | Visible when `mask.kind` = `svg`. Paste an SVG (markup, data URI or a path “d”): its filled shapes cut the image. Cleaned, nothing is ever loaded. |
| `mask.fit` | Shape fit | Ajustement de la forme | dropdown | enumeration | `contain` | `contain` Keep proportions; `stretch` Fill the frame (distorted) | Visible when `mask.kind` = `shape` or `svg` |
| `mask.scale` | Shape size (%) | Taille de la forme (%) | number | integer | `100` | 10 to 100 | Visible when `mask.kind` = `ellipse` or `shape` or `svg` |
### Outline and shadow / Contour et ombre (`outline`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `outline.show` | Outline | Contour | toggle | bool | `false` | true / false | Follows the mask. |
| `outline.width` | Width (px) | Épaisseur (px) | number | integer | `2` | 1 to 30 | Visible when `outline.show` = `true` |
| `outline.color` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color | Visible when `outline.show` = `true` |
| `outline.shadow` | Drop shadow ★ | Ombre portée ★ | toggle | bool | `false` | true / false | Follows the mask and the transparent parts of the image. |
| `outline.shadowColor` | Shadow color | Couleur de l'ombre | color | fill | `#000000` | hex color | Visible when `outline.shadow` = `true` |
| `outline.shadowOpacity` | Shadow opacity (%) | Opacité de l'ombre (%) | number | integer | `30` | 0 to 100 | Visible when `outline.shadow` = `true` |
| `outline.shadowBlur` | Shadow blur (px) | Flou de l'ombre (px) | number | integer | `10` | 0 to 60 | Visible when `outline.shadow` = `true` |
| `outline.shadowOffset` | Shadow offset (px) | Décalage de l'ombre (px) | number | integer | `4` | 0 to 40 | Visible when `outline.shadow` = `true` |
### Image adjustments / Réglages de l'image (`adjust`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `adjust.opacity` | Opacity (%) | Opacité (%) | number | integer | `100` | 0 to 100 | |
| `adjust.brightness` | Brightness (%) | Luminosité (%) | number | integer | `100` | 0 to 300 | |
| `adjust.contrast` | Contrast (%) | Contraste (%) | number | integer | `100` | 0 to 300 | |
| `adjust.saturation` | Saturation (%) ★ | Saturation (%) ★ | number | integer | `100` | 0 to 300 | |
| `adjust.blur` | Blur (px) ★ | Flou (px) ★ | number | integer | `0` | 0 to 40 | |
| `adjust.preset` | Filter | Filtre | dropdown | enumeration | `none` | `none` None; `grayscale` Grayscale; `sepia` Sepia ★; `vintage` Vintage ★; `warm` Warm ★; `cool` Cool ★; `duotone` Duotone (style colors) ★; `invert` Negative ★ | |
| `adjust.duoDark` | Duotone: shadows (empty = style) | Duotone : ombres (vide = style) | color | fill | (empty) | hex color | Visible when `adjust.preset` = `duotone` |
| `adjust.duoLight` | Duotone: highlights (empty = style) | Duotone : lumières (vide = style) | color | fill | (empty) | hex color | Visible when `adjust.preset` = `duotone` |
| `adjust.hue` | Hue (degrees) ★ | Teinte (degrés) ★ | number | integer | `0` | -180 to 180 | |
### Caption / Légende de l'image (`caption`, Format pane)
The card header toggle is `caption.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `caption.show` | Show | Afficher | toggle | bool | `true` | true / false | Text of the “Caption” field; in a gallery or a carousel, the image key when the field is empty. |
| `caption.position` | Position | Position | dropdown | enumeration | `below` | `below` Below the image; `above` Above the image; `overlayBottom` On the image, bottom; `overlayTop` On the image, top | |
| `caption.fontSize` | Size | Taille | number | formatting | `12` | 6 to 40 | |
| `caption.bold` | Bold | Gras | toggle | bool | `false` | true / false | |
| `caption.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | |
| `caption.align` | Alignment | Alignement | dropdown | enumeration | `center` | `left` Left; `center` Center; `right` Right | |
| `caption.lines` | Maximum lines | Lignes au plus | number | integer | `2` | 1 to 6 | |
| `caption.band` | Band behind the text (on the image) | Bandeau sous le texte (sur l'image) | toggle | bool | `true` | true / false | |
### Image by value ★ / Image selon la valeur ★ (`conditional`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
The card header toggle is `conditional.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `conditional.show` | Enable ★ | Activer ★ | toggle | bool | `false` | true / false | Needs the “Value (thresholds)” field. No DAX needed: traffic lights, conditional logos, status pictures. |
| `conditional.mode` | Effect | Effet | dropdown | enumeration | `pick` | `pick` Pick the image (1st, 2nd or 3rd row) by threshold; `fade` Fade below threshold 1, ring above threshold 2 | |
| `conditional.t1` | Threshold 1 | Seuil 1 | number | numeric | `0` | | |
| `conditional.t2` | Threshold 2 (ignored unless above threshold 1) | Seuil 2 (ignoré s'il n'est pas au-dessus du seuil 1) | number | numeric | `0` | | |
### Pasted image and fallback / Image collée et repli (`fallback`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `fallback.pasted` | Pasted image (base64, data URI or SVG) | Image collée (base64, data URI ou SVG) | textarea | text | (empty) | | Shown without any field (a logo), or when an image of the data is empty. Web addresses are refused. |
| `fallback.whenEmpty` | Empty or unreadable image | Image vide ou illisible | dropdown | enumeration | `placeholder` | `placeholder` Discreet placeholder; `fallback` Pasted image; `hide` Nothing | |
| `fallback.alt` | Alternative text (accessibility) | Texte de remplacement (accessibilité) | text | text | (empty) | | Read by screen readers. Empty: the caption, then the image key. |
### Playback ★ / Lecture ★ (`play`, Format pane)
This card controls premium features (★): they work without a license key but show the watermark while in use.
**Playback / Lecture**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.start` | Frame shown on opening | Image affichée à l'ouverture | dropdown | enumeration | `last` | `last` The last one (most recent); `first` The first one | |
| `play.speed` | Duration of a frame (ms) | Durée d'une image (ms) | number | integer | `1000` | 100 to 10000 | At speed ×1; the speed button of the play bar multiplies it (×0.5 to ×4) for the session. |
| `play.loop` | Loop | Lecture en boucle | toggle | bool | `false` | true / false | |
| `play.autoPlay` | Play automatically on opening | Lecture automatique à l'ouverture | toggle | bool | `false` | true / false | Once, from the first frame. Not when animations are reduced (Style › Animations or the system) nor on a dashboard tile. |
| `play.transition` | Animated transitions | Transitions animées | toggle | bool | `true` | true / false | Values, positions and colors move smoothly from one frame to the next. |
**Play bar / Barre de lecture**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.controls` | Play bar | Barre de lecture | toggle | bool | `true` | true / false | |
| `play.position` | Bar position | Position de la barre | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top | Visible when `play.controls` = `true` |
| `play.ticks` | Tick marks | Graduations | dropdown | enumeration | `auto` | `auto` Automatic; `all` Every frame; `none` None | Visible when `play.controls` = `true` |
| `play.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.stepButtons` | Start and end buttons | Boutons début et fin | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.speedButton` | Speed button | Bouton de vitesse | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
**Large value / Valeur en grand**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.showLabel` | Current value in large type | Valeur en cours en grand | toggle | bool | `true` | true / false | |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `44` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `bottomRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |
### Interactions (`interaction`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `interaction.select` | Click = filter the report | Clic = filtrer le rapport | toggle | bool | `true` | true / false | A click selects the image and filters the other visuals (Ctrl + click: several). Identity: the “Image key” field, otherwise the “Caption” or “Image” column. |
| `interaction.link` | Link opened on click (https://…) | Lien ouvert au clic (https://…) | text | text | (empty) | | Like the Web URL action of the native Image visual: Power BI asks before opening it. With a link, Ctrl + click still selects. Can come from a measure (fx). |
| `interaction.dim` | Opacity of unselected images (%) | Opacité des images non sélectionnées (%) | number | integer | `30` | 5 to 90 | |
| `interaction.hover` | Hover | Survol | dropdown | enumeration | `lift` | `none` No effect; `lift` Slight zoom; `brighten` Brighter; `loupe` Magnifier ★ | |
| `interaction.loupeZoom` | Magnifier zoom (%) | Grossissement de la loupe (%) | number | integer | `250` | 150 to 800 | Visible when `interaction.hover` = `loupe` |
| `interaction.loupeSize` | Magnifier diameter (px) | Diamètre de la loupe (px) | number | integer | `140` | 60 to 400 | Visible when `interaction.hover` = `loupe` |
### Tooltips / Infobulles (`tooltip`, Format pane)
The card header toggle is `tooltip.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `tooltip.show` | Show | Afficher | toggle | bool | `true` | true / false | Tooltip on hover (with the fields of the "Tooltips" well and report page tooltips). |
### Title / Titre (`title`, Format pane)
The card header toggle is `title.show`.
**Title / Titre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.show` | Show | Afficher | toggle | bool | `true` | true / false | |
| `title.text` | Text | Texte | text | text | (empty) | | Leave empty for an automatic title built from the fields. |
| `title.fontSize` | Size | Taille | number | formatting | `14` | 7 to 40 | |
| `title.bold` | Bold | Gras | toggle | bool | `true` | true / false | |
| `title.italic` | Italic | Italique | toggle | bool | `false` | true / false | |
| `title.underline` | Underline | Souligné | toggle | bool | `false` | true / false | |
| `title.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | |
| `title.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color | |
| `title.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right | |
| `title.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false | |
**Subtitle / Sous-titre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.subtitle` | Subtitle | Sous-titre | text | text | (empty) | | Several lines allowed: type \n to go to the next line. |
| `title.subFontSize` | Size | Taille | number | formatting | `11` | 7 to 30 | Visible when `title.subtitle` = |
| `title.subColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `title.subtitle` = |
| `title.subItalic` | Italic | Italique | toggle | bool | `false` | true / false | Visible when `title.subtitle` = |
**Divider / Séparateur**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false | |
| `title.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `title.divider` = `true` |
| `title.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `title.divider` = `true` |
| `title.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `title.divider` = `true` |
**Spacing / Espacement**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.spaceBelow` | Space below the title (px) | Espace sous le titre (px) | number | integer | `4` | 0 to 40 | |
### Source note / Note de source (`source`, Format pane)
The card header toggle is `source.show`.
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `source.show` | Show | Afficher | toggle | bool | `false` | true / false | |
| `source.text` | Text | Texte | text | text | (empty) | | |
| `source.fontSize` | Size | Taille | number | formatting | `9` | 6 to 20 | |
| `source.italic` | Italic | Italique | toggle | bool | `false` | true / false | |
| `source.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | |
| `source.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right | |
### Frame / Cadre (`container`, Format pane)
**Background / Arrière-plan**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.bgShow` | Background | Arrière-plan | toggle | bool | `false` | true / false | |
| `container.bgColor` | Color | Couleur | color | fill | `#FFFFFF` | hex color | Visible when `container.bgShow` = `true` |
| `container.bgColor2` | Gradient end (optional) | Fin du dégradé (optionnel) | color | fill | (empty) | hex color | Visible when `container.bgShow` = `true` |
| `container.bgTransparency` | Transparency (%) | Transparence (%) | slider | numeric | `0` | 0 to 100 | Visible when `container.bgShow` = `true` |
**Border / Bordure**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `false` | true / false | |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 | |
**Shadow / Ombre**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false | |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |
**Spacing / Marges**
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `8` | 0 to 40 | |
### Language and numbers / Langue et nombres (`texts`, Format pane)
| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English | |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) | | Thousands and decimal separators. Empty: same as Power BI. |