Tabletop Simulator

Tabletop Simulator

View Stats:
Fran Feb 25, 2022 @ 8:55am
Bored Maude: Mod Audit and Backup Tool
Bored Maude is a command line tool for backing up, restoring and auditing Tabletop Simulator mods.

You can use it to create a local backup of a game in case its online assets become broken, or to audit your games to see if any have issues and should be replaced with a different mod.

Workshop mods and saves are both supported, and backups created by TTS Mod Backup can be restored.

It runs on all operating systems Tabletop Simulator supports: Linux, macOS and Windows.

Documentation and downloads: https://gitlab.com/fran1523/bored-maude
Current version: 1.6.0 (2024-11-11)[gitlab.com]
Last edited by Fran; Nov 11, 2024 @ 2:03pm
< >
Showing 1-15 of 42 comments
Fazeball Jul 14, 2022 @ 10:30pm 
looks nice so far, but I ran into some issues with 0.4.0 when running info:
ERROR PrintMessageExceptionHandler - Unhandled exception hr.fran.bored.maude.tts.TtsException: Cannot find asset type for Description

mod in question: https://steamcommunity.com/sharedfiles/filedetails/?id=2109019338
this one was a bit harder to figure out since the log doesn't show the json, I had to load the backup tool and go by that list to see which was the one that loaded fine, then pick the one after it. it might be helpful either to have a more detailed exception, or maybe parse mods by id/filename instead of SaveName.

---

ERROR PrintMessageExceptionHandler - Unhandled exception hr.fran.bored.maude.tts.TtsException: Cannot read mod JSON

mod: https://steamcommunity.com/sharedfiles/filedetails/?id=1116063908
to be sure I deleted the json, let TTS redownload it, and it loads fine in there without throwing an error.
(there was at least one other unreadable json but the mod is not available anymore, so can't link it. gonna try again to see if fixing the one above works for both)

lemme know if you need more from the error messages if you can't reproduce it on your end.
Last edited by Fazeball; Jul 14, 2022 @ 10:36pm
Habanero Jul 22, 2022 @ 11:25am 
How do I backup mods that have missing assets? Every time I run backup, it refuses to archive it because some assets are 404'd.

Also, I got this error while trying to download assets. If you could adjust the program so that it skips to the next mod rather than completely terminating, that'd be cool. I think what caused this is that I have a mod that isn't on the Workshop.

19:15:27.423 ERROR PrintMessageExceptionHandler - Unhandled exception hr.fran.bored.maude.tts.TtsException: Cannot find asset type for Description
at hr.fran.bored.maude.tts.mod.ModManager.getAssetType(ModManager.java:179)
at hr.fran.bored.maude.tts.mod.ModManager.createAsset(ModManager.java:155)
at hr.fran.bored.maude.tts.mod.ModManager.lambda$getAssets$1(ModManager.java:77)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
Cannot find asset type for Description

Last edited by Habanero; Jul 22, 2022 @ 4:23pm
Fran Jul 23, 2022 @ 6:30am 
"Cannot find asset type for Description" error is fixed in v1.0.1[gitlab.com].

To backup mods with missing assets, use -i flag:
-i, --backup-incomplete Create backup even if some non-audio assets are not downloaded. Missing audio assets are always ignored
Last edited by Fran; Jul 23, 2022 @ 6:35am
Fazeball Jul 23, 2022 @ 7:00am 
Originally posted by Fran:
"Cannot find asset type for Description" error is fixed in v1.0.1[gitlab.com].

To backup mods with missing assets, use -i flag:
-i, --backup-incomplete Create backup even if some non-audio assets are not downloaded. Missing audio assets are always ignored
out of curiosity, does it download anything in that case? I remember one of the files with that error had a pastebin link in the description, which looked like a model. dunno why it would be in the description in the first place, not sure how TTS handles it.
Fran Jul 23, 2022 @ 7:26am 
It doesn't download the file, I blacklisted 'Description' field. That's because Description is a text field but authors will sometimes put a link to the original model there.

TTS displays it as text.
Fazeball Jul 24, 2022 @ 7:24am 
Originally posted by Fran:
It doesn't download the file, I blacklisted 'Description' field. That's because Description is a text field but authors will sometimes put a link to the original model there.

TTS displays it as text.
nice to know, thanks for the info! :steamthumbsup:

however, tested 1.0.1 with the coc lcg mod from above, still throws the same error:

ERROR PrintMessageExceptionHandler - Unhandled exception hr.fran.bored.maude.tts.TtsException: Cannot read mod JSON 'C:\Users\123\Documents\My Games\Tabletop Simulator\Mods\Workshop\1116063908.json'
at hr.fran.bored.maude.tts.mod.ModInfoManager.getModInfo(ModInfoManager.java:65)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
Cannot read mod JSON 'C:\Users\123\Documents\My Games\Tabletop Simulator\Mods\Workshop\1116063908.json'
Last edited by Fazeball; Jul 24, 2022 @ 7:25am
Fran Jul 24, 2022 @ 11:59am 
This looks like a different error: it seems that `1116063908.json` is corrupted. I'll make a change in the next version to skip broken files
Fazeball Jul 25, 2022 @ 3:01am 
Originally posted by Fran:
This looks like a different error: it seems that `1116063908.json` is corrupted. I'll make a change in the next version to skip broken files
it loads fine in TTS tho, and a quick check with the first validator I could find says it's valid. seems to be something on the program's end.
Fran Jul 29, 2022 @ 1:43pm 
These issues are fixed in v1.1.0[gitlab.com]:
- When listing mods, ignore mods that cannot be parsed ("Cannot read mod JSON")
- Ignore unknown fields containing a URL ("Cannot find asset type for Description")
- Read mod update time as String instead of trying to parse as Date (this fixes mod above that failed to parse)
Last edited by Fran; Jul 29, 2022 @ 2:08pm
Wreck-Tangle Sep 21, 2022 @ 8:27am 
It doesn't think I have mods installed.
My mods are under the game install directory which is in my F drive.
jpruitt2297 Oct 3, 2022 @ 6:04pm 
I'm trying to use your tool, but when I run it it just stops immediately after opening cmd. Maybe I'm just not understanding how to use it, but any help with this?
Fran Oct 6, 2022 @ 10:47pm 
Originally posted by Wreck-Tangle:
It doesn't think I have mods installed.
My mods are under the game install directory which is in my F drive.
If Tabletop Simulator files are not in the standard location, you need to specify the path to the 'Tabletop Simulator' dir where the mods are located, try:
bored-maude.bat list --path "F:\...\Tabletop Simulator"
Fran Oct 6, 2022 @ 10:48pm 
Originally posted by jpruitt2297:
I'm trying to use your tool, but when I run it it just stops immediately after opening cmd. Maybe I'm just not understanding how to use it, but any help with this?
Bored Maude is a command line program, you need to first open the command prompt, then go to the dir where the program is located, and run
bored-maude.bat --help
for more info on the available commands.
Last edited by Fran; Oct 6, 2022 @ 10:49pm
Fazeball Nov 17, 2022 @ 11:57pm 
ran into 2 other issues:
-----------------------------------------------------------------------------------------
.\bored-maude.bat list 02:46:56.030 ERROR PrintMessageExceptionHandler - Unhandled exception java.util.UnknownFormatConversionException: Conversion = '-' at java.base/java.util.Formatter.parse(Unknown Source) at java.base/java.util.Formatter.format(Unknown Source) at java.base/java.io.PrintWriter.format(Unknown Source) at java.base/java.io.PrintWriter.printf(Unknown Source) at hr.fran.bored.maude.cli.command.ListCommand.printTableHeader(ListCommand.java:118) at hr.fran.bored.maude.cli.command.ListCommand.printModTable(ListCommand.java:87) at hr.fran.bored.maude.cli.command.ListCommand.printModList(ListCommand.java:79) at hr.fran.bored.maude.cli.command.ListCommand.run(ListCommand.java:64) at picocli.CommandLine.executeUserObject(CommandLine.java:1939) at picocli.CommandLine.access$1300(CommandLine.java:145) at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) at picocli.CommandLine.execute(CommandLine.java:2078) at hr.fran.bored.maude.cli.BoredMaude.execute(BoredMaude.java:64) at hr.fran.bored.maude.cli.BoredMaude.main(BoredMaude.java:54) Conversion = '-'
--------------------------------------------------------------------------------------
the second is that audio, even when online, throws an error, probably the server returning a different content type:
'[scripted] Pandemic: Reign of Cthulhu' [2175754135] ==================================================== Downloading http://cloud-3.steamusercontent.com/ugc/776236853350073273/4F0E3E3A951F20822AD31575BE8C8CA544020ED3/ ... ERROR: text/html is not a valid content type for AUDIO Download finished, 0 new assets downloaded, 1 errors
Fazeball Nov 18, 2022 @ 12:10am 
extra post for feature requests:
1. a way to log the output would be great, not just the errors. ofc there's the inbuilt functions depending on the shell, but on windows that comes with it's own issues (redirecting output in a dosbox doesn't show the output while it's running, start-transcript in powershell only works half the time for some reason). preferably a new log file every time it runs and actually does something, similar to how powershell does it.

2. a way to save orphaned files instead of deleting them. there's dry-run, but that would mean digging for every single file in a folder with several thousand.

3. a way to deal with duplicate files (unless cleanup already handles that). maybe extend it to mods too (just noticed I had the same mod twice due to a different filename), but I doubt that happens often for most people if they only ever use the workshop.

4. a way to only update recently changed mods etc. (I know this is a little bit more extensive). right now to download stuff from mods that have been updated you need to either run it for each and every mod by hand, or all of them. would also make it possible to just schedule a download every week or so just in case.

that's it for now :squirtyay:
Last edited by Fazeball; Nov 18, 2022 @ 12:16am
< >
Showing 1-15 of 42 comments
Per page: 1530 50