I have been working on a small conversion tool that translates iMacros scripts into UI.Vision JSON.
It is still not perfect, but I thought it might be useful to share the idea and show some sample results.
Why I created this tool
I am currently working on web automation projects. Since iMacros is no longer usable in my environment, I first considered using Edge WebDriver. However, it was too flexible and difficult to explain/standardize for my development team.
When I found UI.Vision, I decided to migrate our existing iMacros scripts step by step — and that is why I started building this converter.
How it works (two steps)
Step 1: Convert .iim (iMacros script) → into a simple text format:
Command | Target | Value
This intermediate format is easier to review and edit.
Step 2: Convert the text format → into UI.Vision JSON script.
The generated JSON includes comments with the original iMacros command, so you can see exactly what was converted.
Current status
Written in Python (comments are currently in Japanese).
Currently supports basic commands: click, select, type.
TAG command conversion is the hardest part. At this stage, TAGs with position=R are not yet supported.
This is a beta version. Some commands may not be converted correctly.
Sample (short excerpt)
iMacros original (.iim):
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:form ATTR=ID:loginID CONTENT=webedi_adm@xxxx.jp
TAG POS=1 TYPE=INPUT:PASSWORD FORM=ID:form ATTR=ID:password CONTENT={{PassW}}
TAG POS=1 TYPE=BUTTON:SUBMIT FORM=ID:form ATTR=ID:loginbtn&&VALUE:login
Intermediate text (.txt):
type | //form[@id='form']//input[@type='text' and @id='loginID'] | webedi_adm@xxxx.jp
type | //form[@id='form']//input[@type='password' and @id='password'] | ${PassW}
click | //form[@id='form']//button[@type='submit' and @id='loginbtn&&VALUE:login'] |
UI.Vision JSON (.json):
{
"Command": "type",
"Target": "//form[@id='form']//input[@type='text' and @id='loginID']",
"Value": "webedi_adm@xxxx.jp",
"Description": "",
"comment": "Original Script: TAG POS=1 TYPE=INPUT:TEXT ..."
},
{
"Command": "type",
"Target": "//form[@id='form']//input[@type='password' and @id='password']",
"Value": "${PassW}",
"Description": "",
"comment": "Original Script: TAG POS=1 TYPE=INPUT:PASSWORD ..."
},
{
"Command": "click",
"Target": "//form[@id='form']//button[@type='submit' and @id='loginbtn&&VALUE:login']",
"Value": "",
"Description": "",
"comment": "Original Script: TAG POS=1 TYPE=BUTTON:SUBMIT ..."
}
Why I share it
Maybe it can help someone who is migrating from iMacros to UI.Vision.
I would love to hear feedback and especially suggestions for improving TAG command conversion.
This is not for commercial use — I am just sharing my experiment.
That’s a great idea. This will be extremely helpful to all those coming from Imacro. I myself was on imacro but switched over to UI.Vision even before we had a hint that imacro was going down. I rewrote script by script.
I think the main issue was, that I could not find out how to write re-usable procedures. So I had to create a lot of redundant code in iMacro.
Then a couple of years later I found out that iMacro was going down and I was so happy being here because managing my very much depended of having functional automations.
I wish this tool would have been available earlier. I’m sure this will he very helpful for all those still switching from iMacro to this platform.
I originally uploaded a conversion tool here on the forum, which was implemented in Python. However, I realized that setting up Python can be troublesome for some of my members, so I am currently rebuilding the tool as a web-based converter. Once the web mechanism is complete, users will be able to upload their files and convert them directly online.
In my own case, I still make heavy use of iMacros and do not plan to fully migrate to UI.Vision just yet. That said, more and more websites are no longer working properly with iMacros—especially with the recent progress around Edge compatibility—so I have slowly started converting some of my macros.
With UI.Vision, there are also considerations beyond simple script conversion, such as calling macros, handling return values, and setting parameters during execution. I am spending time verifying these aspects, which has delayed progress. Once things settle down, I expect to share my ideas on how parameter passing and related mechanisms might be handled.
Although this is admittedly a very niche area, I would be grateful if this effort helps raise awareness that automation is being actively pursued in this way.
The TAG command has been one of the trickier parts to handle, and I had quite a hard time extracting the correct XPath. To avoid errors, I decided to include everything in the XPath by default. In practice, however, I often review the XPath and shorten it if I feel it is unnecessarily verbose.
At the moment, what troubles me more is the handling of POS=Rn. Currently, I have not implemented an automatic conversion for it and instead deal with it manually as a workaround.