image_radio
A selection field rendered as clickable pictures. The images are matched to values by position, and the radio group has a hardcoded name, which is where both of its failure modes come from.
| Technical name | image_radio |
|---|---|
| Field types | selection |
| Views | form |
| Module | website, so any database with Website installed |
| Used in core | 1 occurrence, the course layout choice in website_slides |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | No. Studio cannot pass the images option, and the images must be served from a module or attachment |
| Alternatives | radio, selection, selection_badge, hr_homeworking_radio_image |
What the image radio field does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
images | array of strings | URLs of the images to show, in the same order as the field's selection values after empty entries are dropped. Declared as a required prop: omitting it raises a props error. Fewer images than values leaves the remaining tiles with an empty source. |
The option is a required prop. It is declared as an array of strings with no optional marker, so leaving it out is a props error, not a silent fallback to labels. Fewer images than values is legal and produces an empty image source for the remainder, which renders as a broken or blank tile rather than as text.
Working examples
One hardcoded group name, two colliding fields
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Identical behavior on the development branch. |
| Odoo 19.0 | Verified | Verified against the shipped source. Same as Odoo 18. |
| Odoo 18.0 | Verified | Identical behavior and the same declared option. |
| Odoo 17.0 | Verified | This is where the descriptor and the declared images option were introduced. |
| Odoo 16.0 | Partial / changed | Works the same, but the component was registered directly, so the images option was undeclared and read from the raw attributes. |
Upgrade note. The XML stays identical across all supported versions. Odoo 16 registered the component class directly rather than a descriptor, so the images option was read from the raw attributes and never declared, meaning it did not appear in developer tooling on that version. Odoo 17 introduced the descriptor with the declared option, and Odoo 17 through 19 behave identically.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| A props error mentioning images | The option is missing. It is declared as a required array of strings. Always pass options="{'images': [...]}" when using this widget. |
| The wrong picture sits above the wrong choice | The array is matched to the selection by position, and either the selection order changed or an empty entry was dropped first. Re-order the array to match the selection, ignoring entries whose key and label are both empty. |
| Some tiles are blank | The images array is shorter than the selection, so the remaining values get an empty source. Provide exactly as many URLs as there are rendered values. |
| Two image pickers on one form interfere | The radio inputs share a hardcoded group name and their ids are the selection values. Use only one on a screen, or patch the template to give each instance its own group name. |
| The images stay clickable on a read-only record | The template does not check the read-only prop. Hide the field with an invisible expression when the record must not be edited. |
| Missing widget error | The website module is not installed in that database. Install Website, or use a plain radio or selection widget instead. |
Image radio field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
image_radio | Choosing between two or three options that are best understood visually | Renders selection values as images matched by position, with the inputs visually hidden |
| radio | Plain labelled choices | Text labels, a working horizontal option and no artwork to maintain |
| selection | More than a handful of values | Dropdown rendering, which scales where a gallery does not |
| selection_badge | Compact clickable choices | Badge styling rather than images |
hr_homeworking_radio_image | Icon-based choices in the HR app | Font icons hardcoded per value instead of configurable image URLs |
Frequently asked questions
How does image_radio know which image belongs to which value?+
Is the images option required?+
Can I use two image pickers on the same form?+
Does it respect readonly?+
Where do the images have to live?+
Onboarding choices your customers get wrong?
The first screen of a configuration flow decides how much support the rest of it needs. We design and build those choices in Odoo, visual where it helps and plain where it does not, on versions 16 through 19.
Book a free consultation