Synapse for Windows V4.0.86.2610200951 / Windows 11 / Razer Tartarus V2
Lots of us have reported macros showing numbers like "49", "50" or "71"
instead of key names. I think I found the cause. It is the import path,
and it is reproducible in about two minutes on any device.
MINIMAL REPRO
1. Create a new macro in Synapse 4 (any keys). The editor shows key names.
2. Export it to XML.
3. Delete that macro.
4. Import the file you just exported.
5. The editor now shows raw numbers instead of key names.
Same macro, same file, one round trip.
WHAT IMPORT CHANGES
Export the macro again after step 4 and diff it against the file from
step 2. One key event, before and after:
BEFORE (created in Synapse 4) AFTER (re-exported post-import)
<MacroEvent> <MacroEvent>
<Type>1</Type> <Type>1</Type>
<Id>1792666983228</Id> <Id>1</Id>
<KeyEvent> <KeyEvent>
<Makecode>16</Makecode> <Makecode>16</Makecode>
<State>0</State> <State>0</State>
</KeyEvent> </KeyEvent>
<flag>0</flag>
<selected>false</selected> <selected>false</selected>
<isPairing>false</isPairing> <isPairing>false</isPairing>
<ScanCode>42</ScanCode>
</MacroEvent> </MacroEvent>
Import drops <ScanCode> and <flag> entirely, and renumbers <Id>.
WHY THAT BREAKS THE DISPLAY
<Makecode> is not a scan code, it is a Windows virtual-key code.
Verified against the pairs in my own macros:
Makecode 112 + ScanCode 59 = F1
Makecode 49 + ScanCode 2 = 1
Makecode 50 + ScanCode 3 = 2
Makecode 114 + ScanCode 61 = F3
Makecode 32 + ScanCode 57 = Space
Makecode 16 + ScanCode 42 = Left Shift
Makecode 17 + ScanCode 29 = Left Ctrl
The editor resolves the key name from <ScanCode>. With <ScanCode> gone it
falls back to printing the raw <Makecode> value. That is exactly the
number people see. rolandihasz reported "instead of key G I have 71" —
71 is the virtual-key code for G, not ASCII.
For right Shift the value is 310, which is 256 + 54 (54 being the right
Shift scan code), so it is the same mechanism in an extended form.
WHY OLD MACROS ARE ALL BROKEN AND NEW ONES ARE NOT
Migrating from Synapse 3 goes through the same import path. Every macro
that came across lost its <ScanCode>. Macros created fresh in Synapse 4
keep their key names indefinitely, including across app restarts and
account logout/login. That matches what everyone is describing.
SECOND, SEPARATE BUG IN THE SAME IMPORT
When a macro has a nested hold (hold Space, press 1, release Space), the
release event of the enclosing key comes back with an empty <Id/> while
its press event has a normal id. Three occurrences in my test files, no
exceptions — Space, Left Shift and Left Ctrl, each time the outer key's
release:
<Id>1</Id> Makecode 16 State 0 (Shift down)
<Id/> Makecode 16 State 1 (Shift up) <- pairing lost
IMPACT: DISPLAY ONLY, AS FAR AS I CAN TELL
I logged the actual key events of an imported macro in a browser key
tester. Playback is correct: every press pairs with its release, nesting
works, left/right modifiers survive (ShiftLeft and ControlLeft, not the
generic or wrong side), and the 0.01 s delays are honoured.
DOWN 1 Digit1 VK 49
UP 1 Digit1 VK 49 11ms
DOWN Shift ShiftLeft VK 16
DOWN % Digit5 VK 53
UP % Digit5 VK 53 12ms
UP Shift ShiftLeft VK 16 30ms
So the macros still run. What is lost is the ability to read or edit
them: a long macro is an unreadable list of numbers. For anyone who
migrated from Synapse 3, that is every macro they own.
The 8 September release notes list "Sequence macros reverted key
assignments to raw scan codes on app relaunch" as fixed, and
"Synapse 3 profile imports could result in corrupted profile states or
missing macro bindings" as fixed. Neither covers this: already-imported
macros are never repaired, and the import path still strips <ScanCode>
today on V4.0.86.2610200951.
Two things would help:
1. Stop import from discarding <ScanCode> and <flag>.
2. Give the editor a fallback that maps <Makecode> back to a key name
when <ScanCode> is absent, so existing broken macros become readable
again without anyone having to rebuild them by hand.
Happy to supply the full before/after XML files and the event logs.
