Ember Item Sync
A Foundry VTT module that keeps your token's held weapons and shields in sync with what the actor actually has equipped — no more manually swapping token art every time someone draws a sword.
Requires the Ember module and its Dynamic Token engine. Works with dnd5e and crucible.
Demo
Video on github here:
https://github.com/user-attachments/assets/8211d23b-dff3-4853-9496-72f4e5ea6471
What it does
Auto-syncs equipped gear to your token art. When an actor equips a weapon, shield, or light source, the token updates automatically:
- In combat — equipped items show in the hand slots.
- Out of combat — items move to the back slots if a sheathed sprite exists, otherwise they just disappear.
- Light sources (torches, lanterns) stay visibly held while lit, even out of combat.
Per-item sprite overrides. Not happy with the auto-matched sprite? Every item sheet gets a "Token Sprite" button in the header, letting a GM manually assign a hand/back sprite with a live preview — no more digging through flag names in the console.
Custom asset support. Have your own weapon/equipment art? Drop it in assets/custom/ with a manifest file and it gets folded into Ember's Token Creator alongside the built-in options, races included -- only if you know what you're doing, I dont :)
Requirements
| Foundry VTT | v14 |
| Ember | 0.6.0+ |
| System | dnd5e 5.3.3+ or crucible 0.10.1+ |
Usage
Nothing to configure out of the box — equip/unequip gear as normal and the token updates on its own.
To override a specific item's sprite, open the item sheet and click Token Sprite in the header. Pick a hand sprite, optionally a back sprite, and mark it two-handed if needed.
To set an override via macro or console instead:
await item.setFlag("world", "emberWeaponPart", {
hand: "equipment/handItem/GlaiveMoonsteelOrnate",
back: "",
twoHanded: true
});
How it works (for the curious)
Ember Item Sync never edits Ember's own dynamic-token-engine.js. It only writes to flags.ember.dynamicToken.layers.*.partId on placed tokens, which Ember's engine already watches and redraws on its own.
Weapon/item matching is handled per-system: SYSTEM_ADAPTERS in scripts/combat-weapon-sync.js defines what "equipped" and "two-handed" mean for dnd5e vs. crucible, since the two systems track that state differently.