VAR packages
Bundle characters, scenarios, and memory books inside your scene .var so first-time users auto-install everything.
When you distribute a VAM scene as a .var, the scene references Voxta resources (characters, scenarios, memory books) by ID. Those IDs won't exist on a first-time user's Voxta server, so you have to bundle them inside the .var. At runtime the Voxta VAM plugin detects the missing resource and auto-installs it on the user's server.
Always review the Publishing Guidelines before releasing a scene.
How it works at runtime
- The user opens your scene.
- The Voxta plugin tries to start a chat with the character / scenario your scene references.
- The user's Voxta server reports the resource as missing.
- The plugin looks inside the
.varfor a matching PNG (by resource ID), reads the bytes, and deploys them to the server. - The server imports the resource automatically and the chat starts.
You'll see this line in the VAM log on success:
Voxta: Some resources are missing and will be installed: {resource-id}If you see Could not find a scene dependency of type {Kind} with id {id}… instead, the PNG isn't bundled correctly — see Troubleshooting.
The fast way: VamPackageUpdater
VamPackageUpdater is a small Windows utility that does the manual bundling step for you. If you've already built a .var of your scene with VAM's Package Builder, the tool opens it, scans for Voxta resources the scene references, and lets you attach the matching PNGs without re-opening Package Builder.
Typical workflow
- In VAM, build your scene
.varas usual with Package Builder — don't worry about the Voxta PNGs yet, just package the scene and any non-Voxta dependencies. - In Voxta Studio, export each character / scenario / memory book your scene uses as a
.png(or export them all together as a single Package PNG — see Option B below). - Download the latest
VamPackageUpdater.exefrom Releases and launch it. - Browse → pick the
.varyou just built. - Open the Voxta resources tab. Every Voxta resource your scene references shows up with its status — Bundled, Missing, or Attached. For each Missing row, click the … button and point it at the PNG you exported in step 2.
- Update Package → a new
.varlands inupdated_packages/next to the source, with the Voxta PNGs embedded at the exact paths the plugin expects.
Bonus features
- Plugin references tab — bulk-rewrite outdated plugin versions (e.g. swap
AcidBubbles.Voxta.42forAcidBubbles.Voxta.86across the whole.var). - Download deps tab — pulls any missing Hub dependencies your scene needs straight into your
AddonPackagesfolder.
The tool is free and open source. The manual options below remain the canonical reference if you'd rather do everything in Package Builder.
Two ways to bundle resources manually
Best when your scene needs only one or two resources.
-
In Voxta Studio, open the resource (character / scenario / memory book) and export as
.png. Voxta names exports likeElara Meadowlight.character.1.0.0.png. -
Rename the file so it starts with the resource's UUID (see Where to find the UUID below). Both of these filename forms work:
{id}.{kind}.png— e.g.916a705b-7366-9d23-ddb4-66399c773194.character.png{id}.{kind}.{version}.png— e.g.916a705b-7366-9d23-ddb4-66399c773194.character.1.0.0.png
-
Place the file in the matching folder for its kind:
Kind Folder Character Saves\PluginData\Voxta\Characters\Scenario Saves\PluginData\Voxta\Scenarios\MemoryBook Saves\PluginData\Voxta\MemoryBooks\ -
Open Package Builder in VAM and click Add File… to include each PNG manually. Package Builder cannot auto-detect Voxta references inside plugin data — you must add them yourself. It will mark the scene reference as FIXABLE: References local file not included in package until the PNGs are added.
-
Add your scene JSON, then Prep Package and Finalize Package.
Best when your scene uses several resources (e.g. a scenario plus multiple characters plus a memory book).
- In Voxta Studio, create a Package and add all the resources your scene needs.
- Export the package as
.png— produces a single file containing every resource inside. - In the Voxta VAM plugin UI, set the Package fields (ID, name, version). The plugin UI shows the expected file path on the bottom right — use that to name the file.
- Place the file at
Saves\PluginData\Voxta\Packages\{PackageName}.package[.{version}].png. - In Package Builder, Add File… → select the package PNG plus your scene. Then Prep Package and Finalize Package.
The package route installs every contained resource in one shot the first time a user opens the scene.
Where to find the UUID
For a character, open it in Voxta Studio, go to Edit Character → Assets tab. The panel shows the character's data directory, for example:
...\Data\Users\{your-user-id}\Characters\916a705b-7366-9d23-ddb4-66399c773194\AssetsThe last folder segment before \Assets is the UUID — in this example, 916a705b-7366-9d23-ddb4-66399c773194. That's the value you put in the filename.
Scenarios and memory books expose their UUIDs the same way via their own Assets tab.
As a fallback you can read the UUID straight from your scene JSON — inside the Voxta plugin block, look for "Character ID", "Scenario ID", etc.
Testing before you publish
The only reliable test is a clean-slate round-trip:
- In Voxta Studio, delete the character / scenario / package you bundled (so your server no longer has it).
- Also delete the PNG from
Saves\PluginData\Voxta\...(so only the copy inside your.varexists). - Load your scene from
AddonPackages(not from looseSaves). - Start a chat with the character.
- Confirm the VAM log shows
Voxta: Some resources are missing and will be installed: {id}and that the resource reappears in Voxta Studio after.
Troubleshooting
Could not find a scene dependency of type Character with id {uuid}…
The plugin couldn't find a bundled PNG matching the UUID. Check:
- Filename starts with the exact UUID from the error message (not the friendly name).
- File is in the matching
Kind-folder (for exampleCharacters\, notPackages\). - File was actually Added to the package in Package Builder, not just placed on disk.
Package Builder doesn't warn about the missing character.
Expected — Package Builder only understands VAM's dependency graph. Voxta resource references are opaque plugin data. You must manually Add File… each PNG.
Nothing happens; chat just doesn't start, no missing-resource message.
Check the VAM log for Voxta output. If the server already has the resource (because you previously imported it), there's no missing-resource event — the auto-deploy path is never triggered. Do the clean-slate test above.