Here is my favourite scenario of the year so far.
Imagine, we received tons of source images - maps, graphs, documents, reports for an upcoming project - the scans named across multitude of folders quite consistently, that is, 1.jpg, 2.jpg, 3.jpg,... 100.jpg - yes, with duplicates across several folders. Seven of 1.jpg, five of 23.jpg. And some of them are not even JPEGs, but rather PNGs with the wrong extensions, but how would you know until you try to open?
It would be nice to name the maps in a way that the filename would tell us enough information right away. For this project, the customer came up with the following naming convention {projectID}_{old_name}_{map_type}_{scale}_{nomenclature_or_map_name}.{extension}.
It does not feel too exciting to open every file, find the necessary info and type it, so it is a perfect case for FME and AI to automate this mundane task.
In the video below, I show how it works. Here are some details.
After reading a JSON config and the list of JPEGs, we ask a local model, Gemma4:31b to look at our resampled images and tell us whether we deal with a map or some other document, and from here, we take maps for a more sophisticated process while the other documents are renamed with a simple rule-based process.
The maps go into the native FME loop, our new to 2026.2 functionality, which works beautifully in this case. In my JSON config, I have an array of possible locations of the necessary metadata in normalized pixel coordinates:
{
"search_regions": [
{
"name": "top",
"description": "Full-width top strip — covers centred and left-aligned titles",
"x": 0.00,
"y": 0.00,
"w": 1.00,
"h": 0.20
},
{
"name": "bottom_right",
"description": "Bottom-right stamp block — used when there is no top title",
"x": 0.60,
"y": 0.78,
"w": 0.40,
"h": 0.22
}
]
}
We don't want to send the full-size images to AI - it will resample them and as a result, lose the resolution, at which texts stay legible. Instead, we will clip the rasters to that only the necessary part goes to AI for analysis.
In the first iteration, we use the coordinates to clip the top part of the image, which we send to AI in the original resolution to find the type (e.g. Geology), scale, and nomenclature or name (such as M-20-12). If we found all we need, we can exit the loop. If any of these components are missing, we use the iteration number to go to the next location, the bottom-right corner. This allows us flexibly add more locations just by adding the search regions without making any changes to the workspace.
The rest is simple - we assemble the name from the found components, use the File Copy writer to make copies of the the files with the new names (for example, 11.jpg becomes 22145_11_mineral-forecast_50_М-20-12-В.png), and create an Excel report with conditional coloring so that we see how successful our renaming went.
BTW, this is the workspace where I use my Cryocamera (check my LinkedIn post here - https://www.linkedin.com/feed/update/urn:li:activity:7480001838893649920/). On a hot day, local models, working hard, can overheat the machine. I use short breaks once in a while to let the processor cool down, which allows the translation to run faster because the machine does not pause for emergency cooling periods.
Let's summarize. In this workflow we combine the AIs ability to see and intelligently interpret the images with FMEs power to prepare the data for the AI, apply the extracted information, and control the overall data flow. The result is an organized, fully restructured project file hierarchy with self-explanatory file names. And the fact that a local AI works so well in this scenario allows the process to be fully contained within organization without the security concerns of sharing the data to the external Cloud AI providers.
I am attaching the template (change the extension to fmwt), but I cannot share the data. Use the workspace as an inspiration for your own renaming workflows.

