Parser to work with SubStation Alpha Subtitles (SSA/ASS) in TypeScript and JavaScript.
Try the interactive playground
bunx jsr add @fs-frost/asu
For NPM, Yarn, etc., check out https://jsr.io/@fs-frost/asu.
Nightly bundles for Bun, Node and browser are available on Bundles.
Check out the tests or the playground for more examples.
import * as asu from "@fs-frost/asu";
// Update font size from 32 to 16
const text = "Dialogue: 0,1:23:45.67,2:34:56.78,Chitanda,actor,12,23,34,fx,{\\pos(182,421)}LINE 1";
const line = asu.parseLine(text);
if (line == null) {
console.error("invalid line");
return;
}
line.style = "Oreki";
line.content = "Some {\\i1}other{\\i0} text";
console.log(asu.lineToString(line));
// Dialogue: 0,1:23:45.67,2:34:56.78,Oreki,actor,12,23,34,fx,Some {\i1}other{\i0} text
import * as asu from "@fs-frost/asu";
// Update font size from 32 to 16
const text = "{\\be2\\fs32}Kirino-san";
const items = asu.parseContent(text);
asu.setFs(items, 16);
console.log(asu.contentsToString(items));
// {\be2\fs16}Kirino-san
import * as asu from "@fs-frost/asu";
// find blur
const text = "{\\blur2\\fs32}Kirino-san";
const items = asu.parseContent(text);
const tagBlur = asu.findBlur(items);
if (tagBlur == null) {
console.error("blur not found");
return;
}
tagBlur.value = 4;
console.log(asu.contentsToString(items));
// {\blur4\fs32}Kirino-san
import * as asu from "@fs-frost/asu";
// Create pos
const text = "{\\be2\\fs32}Kirino-san";
const items = asu.parseContent(text);
asu.setPos(items, -20, 67.9);
console.log(asu.contentsToString(items));
// {\be2\fs32\pos(-20,67.9)}Kirino-san
bun install
bun test --coverage