Reference
FAQ
No AI, no game engine, the licence and the trademark, browser support, and server rendering.
Does toonstrip generate the comic for me?
No, and it never will. toonstrip renders a document you give it. Writing the dialogue, choosing emotions and cameras, deciding what is funny: that is the author’s job, or a script’s, or a language model’s if you choose to call one. Whatever produces the JSON, it lives outside this library. The playground on this site is an editor, not a generator.
Is there text-to-emotion inference?
No. Comic Chat guessed a mood from the words you typed; toonstrip does not read your text.
You set emotion per body. If you want inference, build it in front of toonstrip and
write the result into the document.
Is this a game engine or a chat client?
No. There is no session, no turn, no event stream. A panel is authored data. toonstrip was extracted from a project that did have a game behind it, and the game stayed there.
What is the licence, and can I use the characters commercially?
The code is MIT. The default pack’s art is Microsoft Comic Chat art redistributed under
MIT with Microsoft’s copyright notice preserved; see the repository’s NOTICE. MIT permits
commercial use. COMIC CHAT is a Microsoft trademark and this project is not affiliated
with Microsoft, so do not name your product after it. Your own packs carry whatever
licence you put in their pack.json.
Which browsers?
Anything with Canvas 2D, custom elements, ResizeObserver, and IntersectionObserver:
every current browser. No polyfills are shipped.
Does it render on the server?
Not in the Astro component: the server emits an inert tag and the browser draws. For a
static PNG (Open Graph images, RSS, <noscript> fallbacks) use the CLI, which runs the
same renderer in Node:
npx toonstrip render strip.json --out strip.png --width 1200
Can I use it outside Astro?
Yes. The custom element has no framework dependency; see plain HTML. Astro is the first-class wrapper because it is what the author uses. Other wrappers would be a few lines each.
How big is it?
The element plus core plus the precompiled validator is a few tens of kilobytes gzipped. Sprite sheets are fetched per character actually used in a document, so a three-character strip loads three sheets and one backdrop, not the whole pack.
Why does Korean (or other non-Latin) text look wrong?
Balloon text is drawn on a canvas in Comic Sans, which has no Hangul, so those glyphs
fall through the font stack: Noto Sans KR first, then the platform’s Korean sans face
(Apple SD Gothic Neo, Malgun Gothic). Before @toonstrip/core 0.1.7 the stack named no Korean face at all
and Windows landed on Gungseo, a brush script. To get Noto Sans KR everywhere, declare it
on the page (this site uses Astro’s fonts API with the korean subset); the element
waits for document.fonts before painting and repaints if a face arrives late. For
toonstrip render, pass --font NotoSansKR-Regular.ttf.
Why is the art black and white?
Because the original Comic Chat art is. A pack can be in colour; nothing in the renderer assumes monochrome.
Where do I report a bug or contribute a character?
GitHub issues. For a character, read
asset packs and open a pull request against pack-example or your
own pack repository.