This addon defines a new field FSImage to use in your models. It is a subclass of the FSFile field and comes with the same features. It extends the FSFile field with specific properties dedicated to images. On the field definition, the following additional properties are available:
- max_width (int): maximum width of the image in pixels (default: 0, no limit)
- max_height (int): maximum height of the image in pixels (default: 0, no limit)
- verify_resolution (bool):whether the image resolution should be verified to ensure it doesn't go over the maximum image resolution (default: True). See odoo.tools.image.ImageProcess for maximum image resolution (default: 50e6).
On the field's value side, the value is an instance of a subclass of odoo.addons.fs_file.fields.FSFileValue. It extends the class to allows you to manage an alt_text for the image. The alt_text is a text that will be displayed when the image cannot be displayed.
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Adds a new type of image field that stores images on a filesystem storage instead of the database, with automatic resizing and an editable alternative text for accessibility.
This module gives developers a new image field type that keeps image files on a filesystem storage rather than inside the Odoo database. Images can be uploaded, replaced, downloaded and cleared directly from the form view with the usual image widget buttons.
- Images are automatically resized to a maximum width and height when saved, keeping the aspect ratio, and an optional resolution check prevents very large images from being processed.
- A related smaller version of the image can be generated automatically (for example a 128x128 thumbnail).
- Each image can carry an alternative text, editable through a small dialog opened from the image widget; this text is stored on the attachment and is meant for images shown on a website.
- Trying to set an alternative text on an empty image raises an error.
The module adds an alt_text field on ir.attachment and provides an abstract fs.image.mixin model with image and image_medium fields that other models can reuse. It depends on the filesystem file field module and the web client.
Depends on
Required by other modules
Models and fields (2)
- ir.attachment · extends an existing modelalt_text (Alternative Text)
- fs.image.mixin · new model
Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 3 confirmed, 6 with no information of 9 versions.
Sources · Odoo 18.0
Confirmed on 2026-11-03 in branch 18.0 of OCA/storage.
terminal Installation and usage
OCA documentation · Odoo 18.0Usage
Source · Odoo 18.0This new field type can be used in the same way as the odoo 'Image' field type.
from odoo import models
from odoo.addons.fs_image.fields import FSImage
class MyModel(models.Model):
_name = 'my.model'
image = FSImage('Image', max_width=1920, max_height=1920)<record id="my_model_form" model="ir.ui.view">
<field name="name">my.model.form</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="image" class="oe_avatar"/>
</group>
</sheet>
</form>
</field>
</record>In the example above, the image will be resized to 1920x1920px if it is larger than that. The widget used in the form view will also allow the user set an 'alt' text for the image.
A mode advanced and useful example is the following:
from odoo import models
from odoo.addons.fs_image.fields import FSImage
class MyModel(models.Model):
_name = 'my.model'
image_1920 = FSImage('Image', max_width=1920, max_height=1920)
image_128 = FSImage('Image', max_width=128, max_height=128, related='image_1920', store=True)<record id="my_model_form" model="ir.ui.view">
<field name="name">my.model.form</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field
name="image_1920"
class="oe_avatar"
options="{'preview_image': 'image_128', 'zoom': true}"
/>
</group>
</sheet>
</form>
</field>
</record>In the example above we have two fields, one for the original image and one for a thumbnail. As the thumbnail is defined as a related stored field it's automatically generated from the original image, resized at the given size and stored in the database. The thumbnail is then used as a preview image for the original image in the form view. The main advantage of this approach is that the original image is not loaded in the form view and the thumbnail is used instead, which is much smaller in size and faster to load. The 'zoom' option allows the user to see the original image in a popup when clicking on the thumbnail.
For convenience, the 'fs_image' module also provides a 'FSImageMixin' mixin class that can be used to add the 'image' and 'image_medium' fields to a model. It only define the medium thumbnail as a 128x128px image since it's the most common use case. When using an image field in a model, it's recommended to use this mixin class in order ensure that the 'image_medium' field is always defined. A good practice is to use the image_medium field as a preview image for the image field in the form view to avoid to overload the form view with a large image and consume too much bandwidth.
from odoo import models
class MyModel(models.Model):
_name = 'my.model'
_inherit = ['fs_image.mixin']<record id="my_model_form" model="ir.ui.view">
<field name="name">my.model.form</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field
name="image"
class="oe_avatar"
options="{'preview_image': 'image_medium', 'zoom': true}"
/>
</group>
</sheet>
</form>
</field>
</record>No verified information in OCA: Installation, Configuration.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.