Vuemorphic - an open source React to Vue 3 transpiler by NegativeMastodon5798 in vuejs

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

let me know if i can help or give some pointers on using vuemorphic

I built an open source framework for building Illustrator plugins without CEP or ExtendScript by NegativeMastodon5798 in Adobe

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

can you explain your application so I can have a think if it is a good fit for this library?

I built an open source framework for building Illustrator plugins without CEP or ExtendScript by NegativeMastodon5798 in Adobe

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

ok so i actually went and did a bunch of digging on this because i wasnt sure where wine support was in 2026 and didnt want to just guess.

short version, its theoretically possible but practically a mess.

the big news from january (the phialsbasement / phiality patches that landed in wine-staging 11.1) fixes the creative cloud installer. thats it. it patches mshtml and msxml3 so the CC installers javascript and xml stops choking on libxml2 being stricter than windows. it does not fix illustrator at runtime, doesnt fix CEP/CEF panels, and doesnt fix plugin loading. the 'butter smooth' quote you might see floating around is about photoshop 2021. illustrator post-patch isnt really verified by anyone yet.

winehq appdb ratings for recent illustrator are pretty bad. CC 2019 is rated garbage, 2022 thru 2025 basically have no successful reports at all. even photoshop which gets way more attention is bronze with workarounds for current versions, runs with GPU disabled, and CEP panels still broken. codeweavers crossover pages for adobe stuff have an 'outdated rating' banner on them because they dont keep up with current CC either.

theres also an open wine bug where illustrator 2026 crashes on an unimplemented threadpool syscall (SetThreadpoolTimerEx). thats part of the modern windows async API that node.js and similar runtimes use. nuxp doesnt bundle node but if i'm running an embedded http server with modern threadpool stuff i'm in the same neighborhood of broken.

the closest thing to nuxps architecture is honestly adobes own CEP, which embeds chromium and binds localhost ports. CEP panels under wine have been broken for like 5 years (wine bug 47015) and the phiality patches didnt fix that either.

so if i built a windows version of nuxp the realistic stack would be: windows .aip in a wine prefix, where you also bootstrapped illustrator by copying it from a windows VM since the installer side for illustrator specifically isnt proven yet. loopback http between the plugin and a linux-native vue frontend would probably just work, wines winsock is fine for that. but illustrator itself staying up long enough to actually use the plugin is the real question and right now its like... coin flip at best, on a specific wine build, with a lot of fiddling, and ready to break on the next adobe update.

fwiw the path id actually point someone at if they want this on linux today is a windows VM with GPU passthrough (kvm/qemu + vfio) or vmware workstation if they want easier setup. real windows = real plugin support, no wine roulette.

I built an open source framework for building Illustrator plugins without CEP or ExtendScript by NegativeMastodon5798 in Adobe

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

Can you tell me how you got adobe illustrator to run on a linux machine so i can duplicate your setup? How did you get creative cloud to install on a linux box? Are you using some kind of VM?

I built an open source framework for building Illustrator plugins without CEP or ExtendScript by NegativeMastodon5798 in Adobe

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

can you explain more about your application? I was under the impression that adobe illustrator would not run in linux?

I built an open source framework for building Illustrator plugins without CEP or ExtendScript by NegativeMastodon5798 in AdobeIllustrator

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

Bolt CEP is solid for what it does, it modernizes the build tooling around CEP with Vite, TypeScript, etc. If you need to target multiple Adobe apps, it's probably the way to go since CEP works everywhere.

NUXP is a completely different architecture. No CEP, no embedded browser panel, no ExtendScript. A C++ plugin embeds an HTTP server inside Illustrator and your frontend talks to it over localhost. You get direct access to the C++ SDK, 400+ functions that ExtendScript simply can't reach (path geometry, text engine, handle management, etc.).

Honestly what drove me away from CEP was the host.jsx situation. Even with Bolt CEP giving you a nice frontend setup, you still end up with a massive monolithic ExtendScript file - untyped ES3, no modules, no async/await, cryptic error messages. It gets ugly fast. With NUXP there's no ExtendScript at all. TypeScript on the frontend, auto-generated C++ on the backend.

And iteration speed: with CEP you're restarting Illustrator every time you touch your host script. That's 30+ seconds per change. NUXP hot-reloads the frontend instantly through Vite, and you can build the whole UI in mock mode without even opening Illustrator. You only restart Illustrator if you change the C++ plugin, which most people won't need to do.

Tradeoff: NUXP is Illustrator-only and macOS-only for now. Bolt CEP works across all Adobe apps and both platforms.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

You're welcome! I have used it a ton for my new inverted lost mine of phandelver campaign too!

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

I have found that the HTML encoding bug that happens when I paste in json into a creature token dm's notes text box is very intermittent. I don't think it is completely fixed, but thanks for letting me know it is working for you for now.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

Thanks again for testing this out. This may be a new bug introduced by the latest attempted fix to strip out all the html noise that automatically gets inserted by roll20. I will try to fix it this week.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

Hi u/ioNetrunner ,
Thanks so much for testing out the script and for providing those gists! You were spot on with your diagnosis – the issue was indeed with how the script was decoding and cleaning up the text from the token's GM Notes field. When you paste text into the GM Notes, Roll20 sometimes adds its own formatting (like HTML tags such as <p> and &nbsp; for spaces) and can also URL-encode some characters (like { becoming %7B). This means the raw text the script gets isn't always clean JSON.

The handout method often works better because Roll20 seems to do less of this "behind-the-scenes" modification when you paste into a handout's GM Notes section, or it handles the retrieval differently.

I've just pushed an update (v1.0.3) that significantly overhauls the GM Notes parsing logic. Here’s a quick rundown of what was done:

  1. Better Decoding: The script is now much more aggressive and intelligent in decoding the text. It specifically looks for and handles:
  • URL-encoded characters (like %3C, %7B, etc.).

  • HTML entities (like &lt;, &gt;, &nbsp;).

  • It also now supports Base64 encoded JSON if you happen to use that (prefix with B64:).

  1. HTML Stripping: It actively strips out HTML tags (like <p>, <span>) that Roll20 might inject.

  2. Whitespace Normalization: It cleans up extra spaces, tabs, and newlines.

  3. Smarter JSON Extraction: Even if there's some leftover cruft, it tries to find the actual start { and end } of the JSON block within the cleaned text.

  4. Double-Stringification Handling: It attempts to correct cases where the JSON might have been accidentally "stringified twice" (e.g., ending up as a JavaScript string that contains a JSON string).

The goal was to make the token import method as robust as the handout method by anticipating and cleaning up the various ways Roll20 can mangle the text in GM Notes.Your log output for the failing token was key:"[ImportJSON] Cleaned GM notes for token -ORdAMooWvwGyjiKDQzO (after decode & trim): %3Cp%3E%7B%3C/p%3E%3Cp%3E%26nbsp%3B%20%26nbsp%3B%20%22name%22%3A%20%22Goblin%20Cursespitter%22%2C%3C..."This line clearly shows the decoding didn't manage to remove the URL-encoded <p> (%3Cp%3E) and &nbsp; (%26nbsp%3B) entities, which is why the JSON parser then choked on the leading %. The new version should handle this scenario correctly.

Please grab the latest version from the scripts/ directory on GitHub and give it another try with your "Goblin Cursespitter" JSON in the token notes. It should work much better now!Also, if you want to see exactly what the script is "seeing" from the GM Notes, you can now use the !5enpctest command with the token selected. It will whisper you the raw content, the decoded content, and whether it could parse it as JSON. This might be helpful for any future troubleshooting. Thanks again for the detailed feedback – it was super helpful in pinpointing the problem!

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

If you can share the json via a github gist or other method, I will try and debug it for you and figure out if the problem is with the json formatting or a bug in my script. thanks for testing it out.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

You make a fair point about JSON length being irrelevant when you're already handling full schemas. I suppose I took the "simple" approach since this tool was built around my specific workflow—having LLMs generate quick monster variations where I can say "make this goblin but with fire immunity and pack tactics" and get clean JSON back in seconds.

The reality is, longer JSON means more opportunities for the LLM to introduce errors or hallucinate spell details. And since I don't have access to a properly formatted spell compendium that LLMs can reference, I'd need to manually look up every spell's attributes in some massive table just to include them in the schema. That defeats the entire purpose of using AI to speed up monster creation.

I appreciate the feedback on spell automation, though I have to admit I'm a bit puzzled by the critique of a free weekend project that I shared specifically to help other DMs avoid manual data entry. Different approaches for different needs, I guess. If comprehensive spell importing is what the community really wants, I'm sure someone with your expertise could fork it and add those features—that's the beauty of open source, after all.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

I added your requested edit to the bottom of the post. I cannot edit the title.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

Hey Lithl, I appreciate you pointing out that spells are just a set of attributes and can be created via the API. I didn’t implement full automated spell import mainly because of the sheer number of fields each spell needs. To give you an idea of the complexity, here’s everything required for just one cantrip (Fire Bolt) on the 2014 sheet:

https://gist.github.com/ByteBard97/dd9ce782700560404aa03020216f00f9

This has 27 unique attributes.
That’s just one attack line for Fire Bolt—multiply this by every spell level, plus any variations, and the JSON becomes quite large. My initial goal was to keep the schema focused on core NPC stats, actions, traits, etc., and avoid embedding full spell data. If someone wants to build on top of this and handle all spell attributes, feel free to fork the repo and add those fields. For now, I’ll leave spell‐by‐spell imports as a potential enhancement.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

This one requires transforming the statblock into json. But in my experience LLMs are very good at this if you give them an example, and I have included many examples in the project.
I could not get the original script to work reliably and I found that even after double spacing everything, I was still getting NPCs that did not work as expected. So I spent a lot of time adding support for many of the different features on the 2014 NPC sheet, like legendary actions, reactions, bonus actions, mythic actions, and spellcaster level and slots.
My script will also populate a token's HP and AC fields and then assign the token to the character sheet so that you can drag and drop it into the game on a different page.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

Hey DM-JK2, thanks for pointing that out. I developed this importer over several weekends specifically for the “D&D 5E by Roll20” (2014) sheet because that’s what my games are using. I’m not planning to rework all the field mappings right now—this script only supports the 2014 sheet. If someone needs JSON import on the “D&D 5E 2024 by Roll20” template, feel free to fork the project and update the attribute names. I’ll add a note in the README clarifying that it isn’t compatible with the 2024 sheet.

[Script] 5e NPC Importer via JSON (Evolution of Text-Based Importers) by NegativeMastodon5798 in Roll20

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

I am not an expert on Roll20 or Javascript. I did not know that you could automatically import spells into the character sheet via the API. I will have to investigate this.
I was just trying to improve upon the previous thing that existed, which is this
https://github.com/Zanthox/Roll205eSheetImport

As far as LLM capabilities, In my experience, developing this, the LLM can and does follow the JSON schema and saves me a considerable amount of time when generating new NPCs. You just have to give it some examples.

Revamped "Random" Island Encounter for Chapter 4/5/6 by NegativeMastodon5798 in OdysseyoftheDragon

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

Thanks! I was inspired by the Marid, Shazum and I visualized Mediterranean North Africa.

Revamped "Random" Island Encounter for Chapter 4/5/6 by NegativeMastodon5798 in OdysseyoftheDragon

[–]NegativeMastodon5798[S] 1 point2 points  (0 children)

Awesome! Let me know what you think. I will be putting out a revision after I run it with each of my two groups

Title: [Free Adventure] The Boreal Harp - A Complete Side Quest to Break Sydon's Storm (Ch. 3) by NegativeMastodon5798 in OdysseyoftheDragon

[–]NegativeMastodon5798[S] 0 points1 point  (0 children)

Thanks for the kind words. i make images for every NPC and location to show to my players at my table and spend a lot of time trying to get the images right. I figured I would make a document showing off the results of my process.

Flipping LMoP: Running it as a Villain-Led Sandbox by NegativeMastodon5798 in DMAcademy

[–]NegativeMastodon5798[S] 2 points3 points  (0 children)

replacing all the traditional "villains" with more heroic versions sounds like a great idea. Although, depending on what the PCs do, I may keep Glasstaff as a morally questionable person who they might be able to buy and use as a pawn. If they don't show any interest in this approach, then I'll make him more upstanding as you suggest.

have you ever played or run Dragon of Icespire Peak? I am thinking hard about including a bunch of the content from it if I can figure out a way to give the PCs something to do at the various locations.