gitframes 1.2.35 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/audio/index.mjs +4 -4
  2. package/dist/{audio-C4kiPbrV.mjs → audio-DvL7gQQ8.mjs} +3 -3
  3. package/dist/{audio-C4kiPbrV.mjs.map → audio-DvL7gQQ8.mjs.map} +1 -1
  4. package/dist/{audio-CiXUMGyk.mjs → audio-sZdRh_qg.mjs} +3 -3
  5. package/dist/{audio-CiXUMGyk.mjs.map → audio-sZdRh_qg.mjs.map} +1 -1
  6. package/dist/{dist-C37594c6.mjs → dist-8vbhZYqX.mjs} +471 -152
  7. package/dist/dist-8vbhZYqX.mjs.map +1 -0
  8. package/dist/{dist-CMF9eNLB.mjs → dist-B0vCkDzJ.mjs} +37 -3
  9. package/dist/dist-B0vCkDzJ.mjs.map +1 -0
  10. package/dist/effects/index.d.mts +2 -2
  11. package/dist/effects/index.mjs +3 -3
  12. package/dist/{effects-4t4qk-BR.mjs → effects-C3nV-k4T.mjs} +949 -1559
  13. package/dist/effects-C3nV-k4T.mjs.map +1 -0
  14. package/dist/fonts/index.mjs +1 -1
  15. package/dist/{fonts-Dn18r_ST.mjs → fonts-dn-pl4Pe.mjs} +3 -3
  16. package/dist/{fonts-Dn18r_ST.mjs.map → fonts-dn-pl4Pe.mjs.map} +1 -1
  17. package/dist/{index-YZsTjqut.d.mts → index-D-O2kwLx.d.mts} +3 -3
  18. package/dist/{index-YZsTjqut.d.mts.map → index-D-O2kwLx.d.mts.map} +1 -1
  19. package/dist/{index-B1557AUi.d.mts → index-t9GyO4Ei.d.mts} +35 -50
  20. package/dist/index-t9GyO4Ei.d.mts.map +1 -0
  21. package/dist/index.d.mts +89 -79
  22. package/dist/index.d.mts.map +1 -1
  23. package/dist/index.mjs +142 -126
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/react/index.mjs +2 -2
  26. package/dist/renderer/index.d.mts +2 -2
  27. package/dist/renderer/index.mjs +3 -3
  28. package/dist/{renderer-DVi31fSv.mjs → renderer-CMDIVxhv.mjs} +317 -14
  29. package/dist/renderer-CMDIVxhv.mjs.map +1 -0
  30. package/dist/{renderers-CLJQRPVU-CMZnHNK0.mjs → renderers-CLJQRPVU-DuQ7-PaC.mjs} +3 -3
  31. package/dist/{renderers-CLJQRPVU-CMZnHNK0.mjs.map → renderers-CLJQRPVU-DuQ7-PaC.mjs.map} +1 -1
  32. package/dist/signals/index.mjs +5 -5
  33. package/dist/{signals-BB_kdndF.mjs → signals-CLaCq092.mjs} +2 -2
  34. package/dist/{signals-BB_kdndF.mjs.map → signals-CLaCq092.mjs.map} +1 -1
  35. package/package.json +55 -55
  36. package/dist/dist-C37594c6.mjs.map +0 -1
  37. package/dist/dist-CMF9eNLB.mjs.map +0 -1
  38. package/dist/effects-4t4qk-BR.mjs.map +0 -1
  39. package/dist/index-B1557AUi.d.mts.map +0 -1
  40. package/dist/renderer-DVi31fSv.mjs.map +0 -1
@@ -1,3 +1,3 @@
1
- import { t as FontManager } from "../fonts-Dn18r_ST.mjs";
1
+ import { t as FontManager } from "../fonts-dn-pl4Pe.mjs";
2
2
 
3
3
  export { FontManager };
@@ -1,4 +1,4 @@
1
- import { S as SlugFontCache, et as registerHeadlessFont } from "./dist-C37594c6.mjs";
1
+ import { S as SlugFontCache, tt as registerHeadlessFont } from "./dist-8vbhZYqX.mjs";
2
2
  import * as fontkit from "fontkit";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs/promises";
@@ -160,7 +160,7 @@ var FontManager = class FontManager {
160
160
  };
161
161
  this.fonts.set(resolvedFamily, registered);
162
162
  if (filePath) await registerHeadlessFont(resolvedFamily, filePath);
163
- SlugFontCache.parsedFontCache.set(resolvedFamily, parsedFontkit);
163
+ SlugFontCache.setParsed(resolvedFamily, parsedFontkit);
164
164
  return registered;
165
165
  }
166
166
  get(family) {
@@ -185,4 +185,4 @@ var FontManager = class FontManager {
185
185
 
186
186
  //#endregion
187
187
  export { FontManager as t };
188
- //# sourceMappingURL=fonts-Dn18r_ST.mjs.map
188
+ //# sourceMappingURL=fonts-dn-pl4Pe.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"fonts-Dn18r_ST.mjs","names":[],"sources":["../src/fonts/manager.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\tregisterHeadlessFont,\n\tSlugFontCache,\n} from \"@gitframes/webgpu-renderers\";\nimport * as fontkit from \"fontkit\";\n\nexport interface RegisterFontOptions {\n\tfamily?: string;\n\tsource: string | Uint8Array;\n\tweight?: number | string;\n\tstyle?: \"normal\" | \"italic\" | \"oblique\";\n}\n\nexport interface RegisteredFont {\n\tfamily: string;\n\tsource: string | Uint8Array;\n\tfilePath?: string;\n\tformat: \"truetype\" | \"opentype\";\n\tpostscriptName?: string;\n\tunitsPerEm?: number;\n\tweight?: number | string;\n\tstyle?: string;\n}\n\ninterface ResolvedSource {\n\tbuffer: Uint8Array;\n\tfilePath?: string;\n}\n\nconst SFNT_TRUETYPE_1 = 0x00010000;\nconst SFNT_TRUETYPE_TRUE = 0x74727565; // 'true'\nconst SFNT_TRUETYPE_TYP1 = 0x74797031; // 'typ1'\nconst SFNT_OPENTYPE_CFF = 0x4f54544f; // 'OTTO'\nconst SFNT_COLLECTION = 0x74746366; // 'ttcf'\n\nfunction validateFontBinaryHeader(\n\tbytes: Uint8Array,\n\tsourceLabel: string,\n): \"truetype\" | \"opentype\" {\n\tif (bytes.length < 12) {\n\t\tthrow new Error(\n\t\t\t`Invalid font binary for \"${sourceLabel}\": File size (${bytes.length} bytes) is too small to be a valid TrueType or OpenType font.`,\n\t\t);\n\t}\n\n\tconst tag =\n\t\t((bytes[0] ?? 0) << 24) |\n\t\t((bytes[1] ?? 0) << 16) |\n\t\t((bytes[2] ?? 0) << 8) |\n\t\t(bytes[3] ?? 0);\n\n\tif (\n\t\ttag === SFNT_TRUETYPE_1 ||\n\t\ttag === SFNT_TRUETYPE_TRUE ||\n\t\ttag === SFNT_TRUETYPE_TYP1 ||\n\t\ttag === SFNT_COLLECTION\n\t) {\n\t\treturn \"truetype\";\n\t}\n\n\tif (tag === SFNT_OPENTYPE_CFF) {\n\t\treturn \"opentype\";\n\t}\n\n\tconst hexTag = (tag >>> 0).toString(16).padStart(8, \"0\");\n\tthrow new Error(\n\t\t`Invalid font format for \"${sourceLabel}\": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${hexTag}.`,\n\t);\n}\n\nasync function resolveSourceBuffer(\n\tsource: string | Uint8Array,\n): Promise<ResolvedSource> {\n\tif (source instanceof Uint8Array) {\n\t\treturn { buffer: source };\n\t}\n\n\tif (typeof source !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Font source must be a file path string or Uint8Array, received: ${typeof source}`,\n\t\t);\n\t}\n\n\tlet cleanPath = source;\n\tif (cleanPath.startsWith(\"http://\") || cleanPath.startsWith(\"https://\")) {\n\t\tconst res = await fetch(cleanPath);\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to download font from \"${cleanPath}\": HTTP ${res.status} ${res.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await res.arrayBuffer();\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(arrayBuffer),\n\t\t\tfilePath: cleanPath,\n\t\t};\n\t}\n\n\tif (cleanPath.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tcleanPath = new URL(cleanPath).pathname;\n\t\t} catch {\n\t\t\tcleanPath = cleanPath.replace(/^file:\\/\\//, \"\");\n\t\t}\n\t}\n\n\tconst candidates: string[] = [\n\t\tcleanPath,\n\t\tpath.resolve(process.cwd(), cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", path.basename(cleanPath)),\n\t];\n\n\t// Upward traversal to locate fonts in parent monorepo roots\n\tlet currentDir = process.cwd();\n\tfor (let i = 0; i < 5; i++) {\n\t\tcandidates.push(path.resolve(currentDir, cleanPath));\n\t\tcandidates.push(\n\t\t\tpath.resolve(currentDir, \"assets/fonts\", path.basename(cleanPath)),\n\t\t);\n\t\tconst parent = path.dirname(currentDir);\n\t\tif (parent === currentDir) break;\n\t\tcurrentDir = parent;\n\t}\n\n\tlet resolvedPath: string | null = null;\n\tlet fileBuffer: Buffer | null = null;\n\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst stat = await fs.stat(candidate);\n\t\t\tif (stat.isFile()) {\n\t\t\t\tresolvedPath = candidate;\n\t\t\t\tfileBuffer = await fs.readFile(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue searching next candidate\n\t\t}\n\t}\n\n\tif (!resolvedPath || !fileBuffer) {\n\t\tthrow new Error(\n\t\t\t`Font file not found: \"${source}\". Checked candidate locations:\\n - ${candidates.join(\"\\n - \")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tbuffer: new Uint8Array(\n\t\t\tfileBuffer.buffer,\n\t\t\tfileBuffer.byteOffset,\n\t\t\tfileBuffer.byteLength,\n\t\t),\n\t\tfilePath: resolvedPath,\n\t};\n}\n\n/**\n * Central singleton manager for font registration, TTF validation, and compositor typography binding.\n */\nexport class FontManager {\n\tprivate static instance: FontManager | null = null;\n\tprivate readonly fonts = new Map<string, RegisteredFont>();\n\n\tprivate constructor() {}\n\n\t/**\n\t * Returns the singleton FontManager instance.\n\t */\n\tpublic static getInstance(): FontManager {\n\t\tif (!FontManager.instance) {\n\t\t\tFontManager.instance = new FontManager();\n\t\t}\n\t\treturn FontManager.instance;\n\t}\n\n\t/**\n\t * Registers a TrueType/OpenType font into the Gitframes engine with validation.\n\t */\n\tpublic static async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\treturn FontManager.getInstance().register(optionsOrFamilyOrSource, source);\n\t}\n\n\t/**\n\t * Retrieves registered font metadata by family name.\n\t */\n\tpublic static get(family: string): RegisteredFont | undefined {\n\t\treturn FontManager.getInstance().get(family);\n\t}\n\n\t/**\n\t * Checks if a font family has been registered.\n\t */\n\tpublic static has(family: string): boolean {\n\t\treturn FontManager.getInstance().has(family);\n\t}\n\n\t/**\n\t * Returns all currently registered fonts.\n\t */\n\tpublic static getAll(): RegisteredFont[] {\n\t\treturn FontManager.getInstance().getAll();\n\t}\n\n\t/**\n\t * Returns relative or absolute file paths of all registered fonts for composition spec serialization.\n\t */\n\tpublic static getRegisteredFontPaths(): string[] {\n\t\treturn FontManager.getInstance().getRegisteredFontPaths();\n\t}\n\n\t/**\n\t * Clears all registered fonts from the manager.\n\t */\n\tpublic static clear(): void {\n\t\tFontManager.getInstance().clear();\n\t}\n\n\t/**\n\t * Instance registration method with format validation and Slug WebGPU cache population.\n\t */\n\tpublic async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\tlet family: string | undefined;\n\t\tlet rawSource: string | Uint8Array;\n\t\tlet weight: number | string | undefined;\n\t\tlet style: \"normal\" | \"italic\" | \"oblique\" | undefined;\n\n\t\tif (\n\t\t\ttypeof optionsOrFamilyOrSource === \"object\" &&\n\t\t\toptionsOrFamilyOrSource !== null\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource.family;\n\t\t\trawSource = optionsOrFamilyOrSource.source;\n\t\t\tweight = optionsOrFamilyOrSource.weight;\n\t\t\tstyle = optionsOrFamilyOrSource.style;\n\t\t} else if (\n\t\t\ttypeof optionsOrFamilyOrSource === \"string\" &&\n\t\t\tsource !== undefined\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource;\n\t\t\trawSource = source;\n\t\t} else if (typeof optionsOrFamilyOrSource === \"string\") {\n\t\t\tfamily = undefined;\n\t\t\trawSource = optionsOrFamilyOrSource;\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid arguments passed to FontManager.register\");\n\t\t}\n\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(rawSource);\n\t\tconst sourceLabel =\n\t\t\tfilePath ?? (typeof rawSource === \"string\" ? rawSource : \"Uint8Array\");\n\t\tconst format = validateFontBinaryHeader(buffer, sourceLabel);\n\n\t\tlet parsedFontkit: fontkit.Font;\n\t\ttry {\n\t\t\tconst parsed = fontkit.create(buffer as unknown as Buffer);\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\t\"fonts\" in parsed &&\n\t\t\t\tArray.isArray(parsed.fonts) &&\n\t\t\t\tparsed.fonts.length > 0\n\t\t\t) {\n\t\t\t\tparsedFontkit = parsed.fonts[0] as fontkit.Font;\n\t\t\t} else {\n\t\t\t\tparsedFontkit = parsed as fontkit.Font;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse TrueType/OpenType font binary for \"${sourceLabel}\": ${msg}`,\n\t\t\t);\n\t\t}\n\n\t\tconst detectedFamily =\n\t\t\tparsedFontkit.familyName ||\n\t\t\tparsedFontkit.postscriptName ||\n\t\t\tpath.parse(sourceLabel).name;\n\t\tconst resolvedFamily = family?.trim() || detectedFamily;\n\n\t\tconst registered: RegisteredFont = {\n\t\t\tfamily: resolvedFamily,\n\t\t\tsource: rawSource,\n\t\t\tfilePath,\n\t\t\tformat,\n\t\t\tpostscriptName: parsedFontkit.postscriptName,\n\t\t\tunitsPerEm: parsedFontkit.unitsPerEm,\n\t\t\tweight,\n\t\t\tstyle,\n\t\t};\n\n\t\tthis.fonts.set(resolvedFamily, registered);\n\n\t\t// Populate headless font registries\n\t\tif (filePath) {\n\t\t\tawait registerHeadlessFont(resolvedFamily, filePath);\n\t\t}\n\t\tSlugFontCache.parsedFontCache.set(resolvedFamily, parsedFontkit);\n\n\t\treturn registered;\n\t}\n\n\tpublic get(family: string): RegisteredFont | undefined {\n\t\treturn this.fonts.get(family);\n\t}\n\n\tpublic has(family: string): boolean {\n\t\treturn this.fonts.has(family);\n\t}\n\n\tpublic getAll(): RegisteredFont[] {\n\t\treturn Array.from(this.fonts.values());\n\t}\n\n\tpublic getRegisteredFontPaths(): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const font of this.fonts.values()) {\n\t\t\tif (font.filePath) {\n\t\t\t\tpaths.push(font.filePath);\n\t\t\t} else if (typeof font.source === \"string\") {\n\t\t\t\tpaths.push(font.source);\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.fonts.clear();\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"fonts-dn-pl4Pe.mjs","names":[],"sources":["../src/fonts/manager.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\tregisterHeadlessFont,\n\tSlugFontCache,\n} from \"@gitframes/webgpu-renderers\";\nimport * as fontkit from \"fontkit\";\n\nexport interface RegisterFontOptions {\n\tfamily?: string;\n\tsource: string | Uint8Array;\n\tweight?: number | string;\n\tstyle?: \"normal\" | \"italic\" | \"oblique\";\n}\n\nexport interface RegisteredFont {\n\tfamily: string;\n\tsource: string | Uint8Array;\n\tfilePath?: string;\n\tformat: \"truetype\" | \"opentype\";\n\tpostscriptName?: string;\n\tunitsPerEm?: number;\n\tweight?: number | string;\n\tstyle?: string;\n}\n\ninterface ResolvedSource {\n\tbuffer: Uint8Array;\n\tfilePath?: string;\n}\n\nconst SFNT_TRUETYPE_1 = 0x00010000;\nconst SFNT_TRUETYPE_TRUE = 0x74727565; // 'true'\nconst SFNT_TRUETYPE_TYP1 = 0x74797031; // 'typ1'\nconst SFNT_OPENTYPE_CFF = 0x4f54544f; // 'OTTO'\nconst SFNT_COLLECTION = 0x74746366; // 'ttcf'\n\nfunction validateFontBinaryHeader(\n\tbytes: Uint8Array,\n\tsourceLabel: string,\n): \"truetype\" | \"opentype\" {\n\tif (bytes.length < 12) {\n\t\tthrow new Error(\n\t\t\t`Invalid font binary for \"${sourceLabel}\": File size (${bytes.length} bytes) is too small to be a valid TrueType or OpenType font.`,\n\t\t);\n\t}\n\n\tconst tag =\n\t\t((bytes[0] ?? 0) << 24) |\n\t\t((bytes[1] ?? 0) << 16) |\n\t\t((bytes[2] ?? 0) << 8) |\n\t\t(bytes[3] ?? 0);\n\n\tif (\n\t\ttag === SFNT_TRUETYPE_1 ||\n\t\ttag === SFNT_TRUETYPE_TRUE ||\n\t\ttag === SFNT_TRUETYPE_TYP1 ||\n\t\ttag === SFNT_COLLECTION\n\t) {\n\t\treturn \"truetype\";\n\t}\n\n\tif (tag === SFNT_OPENTYPE_CFF) {\n\t\treturn \"opentype\";\n\t}\n\n\tconst hexTag = (tag >>> 0).toString(16).padStart(8, \"0\");\n\tthrow new Error(\n\t\t`Invalid font format for \"${sourceLabel}\": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${hexTag}.`,\n\t);\n}\n\nasync function resolveSourceBuffer(\n\tsource: string | Uint8Array,\n): Promise<ResolvedSource> {\n\tif (source instanceof Uint8Array) {\n\t\treturn { buffer: source };\n\t}\n\n\tif (typeof source !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Font source must be a file path string or Uint8Array, received: ${typeof source}`,\n\t\t);\n\t}\n\n\tlet cleanPath = source;\n\tif (cleanPath.startsWith(\"http://\") || cleanPath.startsWith(\"https://\")) {\n\t\tconst res = await fetch(cleanPath);\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to download font from \"${cleanPath}\": HTTP ${res.status} ${res.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await res.arrayBuffer();\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(arrayBuffer),\n\t\t\tfilePath: cleanPath,\n\t\t};\n\t}\n\n\tif (cleanPath.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tcleanPath = new URL(cleanPath).pathname;\n\t\t} catch {\n\t\t\tcleanPath = cleanPath.replace(/^file:\\/\\//, \"\");\n\t\t}\n\t}\n\n\tconst candidates: string[] = [\n\t\tcleanPath,\n\t\tpath.resolve(process.cwd(), cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", path.basename(cleanPath)),\n\t];\n\n\t// Upward traversal to locate fonts in parent monorepo roots\n\tlet currentDir = process.cwd();\n\tfor (let i = 0; i < 5; i++) {\n\t\tcandidates.push(path.resolve(currentDir, cleanPath));\n\t\tcandidates.push(\n\t\t\tpath.resolve(currentDir, \"assets/fonts\", path.basename(cleanPath)),\n\t\t);\n\t\tconst parent = path.dirname(currentDir);\n\t\tif (parent === currentDir) break;\n\t\tcurrentDir = parent;\n\t}\n\n\tlet resolvedPath: string | null = null;\n\tlet fileBuffer: Buffer | null = null;\n\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst stat = await fs.stat(candidate);\n\t\t\tif (stat.isFile()) {\n\t\t\t\tresolvedPath = candidate;\n\t\t\t\tfileBuffer = await fs.readFile(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue searching next candidate\n\t\t}\n\t}\n\n\tif (!resolvedPath || !fileBuffer) {\n\t\tthrow new Error(\n\t\t\t`Font file not found: \"${source}\". Checked candidate locations:\\n - ${candidates.join(\"\\n - \")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tbuffer: new Uint8Array(\n\t\t\tfileBuffer.buffer,\n\t\t\tfileBuffer.byteOffset,\n\t\t\tfileBuffer.byteLength,\n\t\t),\n\t\tfilePath: resolvedPath,\n\t};\n}\n\n/**\n * Central singleton manager for font registration, TTF validation, and compositor typography binding.\n */\nexport class FontManager {\n\tprivate static instance: FontManager | null = null;\n\tprivate readonly fonts = new Map<string, RegisteredFont>();\n\n\tprivate constructor() {}\n\n\t/**\n\t * Returns the singleton FontManager instance.\n\t */\n\tpublic static getInstance(): FontManager {\n\t\tif (!FontManager.instance) {\n\t\t\tFontManager.instance = new FontManager();\n\t\t}\n\t\treturn FontManager.instance;\n\t}\n\n\t/**\n\t * Registers a TrueType/OpenType font into the Gitframes engine with validation.\n\t */\n\tpublic static async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\treturn FontManager.getInstance().register(optionsOrFamilyOrSource, source);\n\t}\n\n\t/**\n\t * Retrieves registered font metadata by family name.\n\t */\n\tpublic static get(family: string): RegisteredFont | undefined {\n\t\treturn FontManager.getInstance().get(family);\n\t}\n\n\t/**\n\t * Checks if a font family has been registered.\n\t */\n\tpublic static has(family: string): boolean {\n\t\treturn FontManager.getInstance().has(family);\n\t}\n\n\t/**\n\t * Returns all currently registered fonts.\n\t */\n\tpublic static getAll(): RegisteredFont[] {\n\t\treturn FontManager.getInstance().getAll();\n\t}\n\n\t/**\n\t * Returns relative or absolute file paths of all registered fonts for composition spec serialization.\n\t */\n\tpublic static getRegisteredFontPaths(): string[] {\n\t\treturn FontManager.getInstance().getRegisteredFontPaths();\n\t}\n\n\t/**\n\t * Clears all registered fonts from the manager.\n\t */\n\tpublic static clear(): void {\n\t\tFontManager.getInstance().clear();\n\t}\n\n\t/**\n\t * Instance registration method with format validation and Slug WebGPU cache population.\n\t */\n\tpublic async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\tlet family: string | undefined;\n\t\tlet rawSource: string | Uint8Array;\n\t\tlet weight: number | string | undefined;\n\t\tlet style: \"normal\" | \"italic\" | \"oblique\" | undefined;\n\n\t\tif (\n\t\t\ttypeof optionsOrFamilyOrSource === \"object\" &&\n\t\t\toptionsOrFamilyOrSource !== null\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource.family;\n\t\t\trawSource = optionsOrFamilyOrSource.source;\n\t\t\tweight = optionsOrFamilyOrSource.weight;\n\t\t\tstyle = optionsOrFamilyOrSource.style;\n\t\t} else if (\n\t\t\ttypeof optionsOrFamilyOrSource === \"string\" &&\n\t\t\tsource !== undefined\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource;\n\t\t\trawSource = source;\n\t\t} else if (typeof optionsOrFamilyOrSource === \"string\") {\n\t\t\tfamily = undefined;\n\t\t\trawSource = optionsOrFamilyOrSource;\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid arguments passed to FontManager.register\");\n\t\t}\n\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(rawSource);\n\t\tconst sourceLabel =\n\t\t\tfilePath ?? (typeof rawSource === \"string\" ? rawSource : \"Uint8Array\");\n\t\tconst format = validateFontBinaryHeader(buffer, sourceLabel);\n\n\t\tlet parsedFontkit: fontkit.Font;\n\t\ttry {\n\t\t\tconst parsed = fontkit.create(buffer as unknown as Buffer);\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\t\"fonts\" in parsed &&\n\t\t\t\tArray.isArray(parsed.fonts) &&\n\t\t\t\tparsed.fonts.length > 0\n\t\t\t) {\n\t\t\t\tparsedFontkit = parsed.fonts[0] as fontkit.Font;\n\t\t\t} else {\n\t\t\t\tparsedFontkit = parsed as fontkit.Font;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse TrueType/OpenType font binary for \"${sourceLabel}\": ${msg}`,\n\t\t\t);\n\t\t}\n\n\t\tconst detectedFamily =\n\t\t\tparsedFontkit.familyName ||\n\t\t\tparsedFontkit.postscriptName ||\n\t\t\tpath.parse(sourceLabel).name;\n\t\tconst resolvedFamily = family?.trim() || detectedFamily;\n\n\t\tconst registered: RegisteredFont = {\n\t\t\tfamily: resolvedFamily,\n\t\t\tsource: rawSource,\n\t\t\tfilePath,\n\t\t\tformat,\n\t\t\tpostscriptName: parsedFontkit.postscriptName,\n\t\t\tunitsPerEm: parsedFontkit.unitsPerEm,\n\t\t\tweight,\n\t\t\tstyle,\n\t\t};\n\n\t\tthis.fonts.set(resolvedFamily, registered);\n\n\t\t// Populate headless font registries\n\t\tif (filePath) {\n\t\t\tawait registerHeadlessFont(resolvedFamily, filePath);\n\t\t}\n\t\tSlugFontCache.setParsed(resolvedFamily, parsedFontkit);\n\n\t\treturn registered;\n\t}\n\n\tpublic get(family: string): RegisteredFont | undefined {\n\t\treturn this.fonts.get(family);\n\t}\n\n\tpublic has(family: string): boolean {\n\t\treturn this.fonts.has(family);\n\t}\n\n\tpublic getAll(): RegisteredFont[] {\n\t\treturn Array.from(this.fonts.values());\n\t}\n\n\tpublic getRegisteredFontPaths(): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const font of this.fonts.values()) {\n\t\t\tif (font.filePath) {\n\t\t\t\tpaths.push(font.filePath);\n\t\t\t} else if (typeof font.source === \"string\") {\n\t\t\t\tpaths.push(font.source);\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.fonts.clear();\n\t}\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { initHeadlessWebGPU } from "@gitframes/webgpu-renderers";
2
2
  import { VirtualMediaData } from "@gitframes/core";
3
- import { HeadlessMediaRenderer, HeadlessWebGPURenderer, renderSemaphore } from "@gitframes/renderer";
3
+ import { AudioQaStats, HeadlessMediaRenderer, HeadlessWebGPURenderer, QaIssue, QaSegment, VideoQaOptions, VideoQaReport, VideoQaStats, formatQaReport, renderSemaphore } from "@gitframes/renderer";
4
4
 
5
5
  //#region src/renderer/framegrid.d.ts
6
6
  interface FrameSamplePoint {
@@ -143,5 +143,5 @@ type FrameGridRenderable = {
143
143
  */
144
144
  declare function renderFrameGrid(target: FrameGridRenderable, options?: FrameGridOptions): Promise<Buffer>;
145
145
  //#endregion
146
- export { FrameGridOptions as a, computeGridLayout as c, renderSemaphore as i, renderFrameGrid as l, HeadlessWebGPURenderer as n, FrameGridRenderable as o, initHeadlessWebGPU as r, FrameSamplePoint as s, HeadlessMediaRenderer as t, resolveSamplePoints as u };
147
- //# sourceMappingURL=index-YZsTjqut.d.mts.map
146
+ export { resolveSamplePoints as _, QaSegment as a, VideoQaStats as c, renderSemaphore as d, FrameGridOptions as f, renderFrameGrid as g, computeGridLayout as h, QaIssue as i, formatQaReport as l, FrameSamplePoint as m, HeadlessMediaRenderer as n, VideoQaOptions as o, FrameGridRenderable as p, HeadlessWebGPURenderer as r, VideoQaReport as s, AudioQaStats as t, initHeadlessWebGPU as u };
147
+ //# sourceMappingURL=index-D-O2kwLx.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-YZsTjqut.d.mts","names":[],"sources":["../src/renderer/framegrid.ts"],"sourcesContent":[],"mappings":";;;;;UAKiB,gBAAA;;;AAAjB;AAKiB,UAAA,gBAAA,CAAgB;EA0HjB;AAsGhB;AAiFA;EACmB,UAAA,CAAA,EAAA,MAAA;EAKN;;;EACD,QAAA,CAAA,EAAA,MAAA;EAWU;;;EAGX,UAAA,CAAA,EAAA,MAAA;EAAR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAlNS;;;;;iBAMI,mBAAA,UACN;WAGI;;;;;;iBAkGE,iBAAA,mDAGN;;;;;;;;;;;KA8EE,mBAAA;oBACO;;;;;eAKN;MACR,QAAQ;;;;;;;;;;iBAWS,eAAA,SACb,+BACC,mBACP,QAAQ"}
1
+ {"version":3,"file":"index-D-O2kwLx.d.mts","names":[],"sources":["../src/renderer/framegrid.ts"],"sourcesContent":[],"mappings":";;;;;UAKiB,gBAAA;;;AAAjB;AAKiB,UAAA,gBAAA,CAAgB;EA0HjB;AAsGhB;AAiFA;EACmB,UAAA,CAAA,EAAA,MAAA;EAKN;;;EACD,QAAA,CAAA,EAAA,MAAA;EAWU;;;EAGX,UAAA,CAAA,EAAA,MAAA;EAAR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAlNS;;;;;iBAMI,mBAAA,UACN;WAGI;;;;;;iBAkGE,iBAAA,mDAGN;;;;;;;;;;;KA8EE,mBAAA;oBACO;;;;;eAKN;MACR,QAAQ;;;;;;;;;;iBAWS,eAAA,SACb,+BACC,mBACP,QAAQ"}
@@ -30,9 +30,9 @@ import shadowsHighlightsRenderer from "@gitframes/node-shadows-highlights/render
30
30
  import tileOffsetRenderer from "@gitframes/node-tile-offset/renderer";
31
31
  import unsharpMaskRenderer from "@gitframes/node-unsharp-mask/renderer";
32
32
  import vignetteRenderer from "@gitframes/node-vignette/renderer";
33
- import yoloRenderer from "@gitframes/node-yolo/renderer";
33
+ import visionRenderer from "@gitframes/node-vision/renderer";
34
34
  import { Effect, EffectConfigValue } from "@gitframes/core";
35
- import { CustomModelConfig, ObjectTrackSignals } from "@gitframes/yolo";
35
+ import { ObjectTrackSignals } from "@gitframes/vision";
36
36
 
37
37
  //#region src/effects/types.d.ts
38
38
  /** A prop that accepts a plain value, a reactive signal, or a frame signal. */
@@ -776,63 +776,55 @@ declare class Crop extends Effect<CropProps> {
776
776
  mode?: "cropped" | "rest";
777
777
  constructor(config?: CropProps);
778
778
  }
779
- /**
780
- * @deprecated The MediaPipe engine was removed (specs/yolov4plan.ts §Phase F).
781
- * Legacy option shape, mapped onto YOLO by the `MediaPipe` alias class below.
782
- */
783
- interface MediaPipeProps {
784
- enablePoseLandmarks?: boolean;
785
- enableFaceLandmarks?: boolean;
786
- enableFaceBlendshapes?: boolean;
787
- enableSegmentation?: boolean;
788
- mode?: "passthrough" | "mask" | "matte" | "skeleton";
789
- delegate?: "CPU" | "GPU";
790
- modelsDir?: string;
791
- visionBundle?: unknown;
792
- }
793
- interface YoloProps {
779
+ interface VisionProps {
780
+ /** Track COCO-80 objects (RTMDet-Ins boxes). Default true. */
794
781
  enableDetection?: boolean;
782
+ /** Per-instance masks (RTMDet-Ins). Shares the detection pass. */
795
783
  enableSegmentation?: boolean;
784
+ /** COCO-17 keypoints per person (RTMO). */
796
785
  enablePose?: boolean;
797
- enableClassification?: boolean;
798
- enableObb?: boolean;
799
- enableWorld?: boolean;
800
- prompts?: readonly string[];
801
- customModel?: CustomModelConfig;
786
+ /** Fast person-vs-background alpha (Selfie Segmenter). */
787
+ enableMatte?: boolean;
788
+ /** COCO class-name filter (all classes when omitted). */
802
789
  classes?: readonly string[];
790
+ /** Minimum detection score, 0..1. Default 0.3. */
803
791
  confidence?: number;
804
- iouThreshold?: number;
805
- variant?: "n" | "s" | "m" | "l" | "x";
806
- imgsz?: number;
807
- mode?: "passthrough" | "mask" | "matte" | "crop" | "skeleton" | "boxes" | "tracking" | "obb";
808
- delegate?: "CPU" | "GPU";
792
+ /** Model size: `t` fastest · `s` default · `m` most accurate. */
793
+ variant?: "t" | "s" | "m";
794
+ mode?: "passthrough" | "mask" | "matte" | "crop" | "skeleton" | "boxes" | "tracking";
795
+ /**
796
+ * Subject alpha for mask/matte/crop: instance masks (default; any COCO class) or the
797
+ * selfie matte (fastest, but only reliable when a person fills much of the frame).
798
+ */
799
+ matteSource?: "instance" | "selfie";
800
+ /** Frames a track may go unseen before it is dropped. Default 15. */
801
+ maxMissedFrames?: number;
809
802
  modelsDir?: string;
810
803
  baseUrl?: string;
811
804
  maskThreshold?: number;
812
805
  featherRadius?: number;
813
- /** Grow the person mask into connected colourful/dark foreground (e.g. a dress). */
806
+ /** Grow the subject into connected pixels that stand out from the backdrop. */
814
807
  keyBackground?: boolean;
815
808
  /** Colour-distance threshold for the background key (lower → more growth). Default 70. */
816
809
  backgroundKeyThreshold?: number;
817
810
  visionBundle?: unknown;
818
811
  }
819
- declare class Yolo extends Effect<YoloProps> {
820
- readonly op = "Yolo";
812
+ /**
813
+ * On-device vision: tracks objects, segments instances, estimates pose and mattes people on
814
+ * the rendered frame, feeding reactive signals. Models download lazily on first use.
815
+ */
816
+ declare class Vision extends Effect<VisionProps> {
817
+ readonly op = "Vision";
821
818
  enableDetection?: boolean;
822
819
  enableSegmentation?: boolean;
823
820
  enablePose?: boolean;
824
- enableClassification?: boolean;
825
- enableObb?: boolean;
826
- enableWorld?: boolean;
827
- prompts?: readonly string[];
828
- customModel?: CustomModelConfig;
821
+ enableMatte?: boolean;
829
822
  classes?: readonly string[];
830
823
  confidence?: number;
831
- iouThreshold?: number;
832
- variant?: "n" | "s" | "m" | "l" | "x";
833
- imgsz?: number;
834
- mode?: YoloProps["mode"];
835
- delegate?: "CPU" | "GPU";
824
+ variant?: VisionProps["variant"];
825
+ mode?: VisionProps["mode"];
826
+ matteSource?: VisionProps["matteSource"];
827
+ maxMissedFrames?: number;
836
828
  modelsDir?: string;
837
829
  baseUrl?: string;
838
830
  maskThreshold?: number;
@@ -840,14 +832,7 @@ declare class Yolo extends Effect<YoloProps> {
840
832
  keyBackground?: boolean;
841
833
  backgroundKeyThreshold?: number;
842
834
  visionBundle?: unknown;
843
- constructor(config?: YoloProps);
844
- }
845
- /**
846
- * @deprecated Use `Yolo`. Kept as a source-compatible alias that maps the legacy MediaPipe
847
- * option shape onto the YOLO engine (`op` is `"Yolo"`).
848
- */
849
- declare class MediaPipe extends Yolo {
850
- constructor(config?: MediaPipeProps);
835
+ constructor(config?: VisionProps);
851
836
  }
852
837
  interface Relight3DProps {
853
838
  lightType?: "Point" | "Spot" | "Directional" | "Rim";
@@ -924,5 +909,5 @@ declare class Modulate extends Effect<ModulateProps> {
924
909
  constructor(config?: ModulateProps);
925
910
  }
926
911
  //#endregion
927
- export { HalftoneScreen as $, unsharpMaskRenderer as A, YoloProps as At, CurvesChannelPoint as B, Vignette as Bt, patchHealRenderer as C, TemporalDeflicker as Ct, selectiveColorRenderer as D, UnsharpMask as Dt, relight3dRenderer as E, TileOffsetProps as Et, AudioSignalExtractor as F, ColorBalance as Ft, DepthOfFieldProps as G, CustomEffect as H, EffectProp as Ht, AudioSignalExtractorProps as I, ColorBalanceProps as It, GradientMap as J, FilmGrain as K, Crop as L, ColorKey as Lt, yoloRenderer as M, effectMeta as Mt, ApplyLUT as N, Blur as Nt, shadowsHighlightsRenderer as O, UnsharpMaskProps as Ot, ApplyLUTProps as P, BlurProps as Pt, HalftoneMode as Q, CropProps as R, ColorKeyProps as Rt, paintRenderer as S, ShadowsHighlightsProps as St, refractionCausticsRenderer as T, TileOffsetEdgeMode as Tt, DeflickerProps as U, CurvesProps as V, VignetteProps as Vt, DepthOfField as W, GradientMapStop as X, GradientMapProps as Y, HalftoneDotShape as Z, levelsRenderer as _, SSAOProps as _t, cornerPinRenderer as a, LevelsProps as at, meshWarpRenderer as b, SelectiveColorProps as bt, deflickerRenderer as c, Modulate as ct, flipRenderer as d, MotionBlurProps as dt, HalftoneScreenProps as et, gradientMapRenderer as f, PBRGlass as ft, layerStyleRenderer as g, SSAO as gt, kenBurnsRenderer as h, Relight3DProps as ht, colorkeyRenderer as i, Levels as it, vignetteRenderer as j, effectFactories as jt, tileOffsetRenderer as k, Yolo as kt, displacementMapRenderer as l, ModulateProps as lt, highPassRenderer as m, Relight3D as mt, blurRenderer as n, HighPassProps as nt, cropRenderer as o, MediaPipe as ot, halftoneScreenRenderer as p, PBRGlassProps as pt, FilmGrainProps as q, colorBalanceRenderer as r, LevelChannel as rt, curvesRenderer as s, MediaPipeProps as st, applyLutRenderer as t, HighPass as tt, filmGrainRenderer as u, MotionBlur as ut, liquifyRenderer as v, SelectiveColor as vt, refineEdgeRenderer as w, TileOffset as wt, modulateRenderer as x, ShadowsHighlights as xt, maskMathRenderer as y, SelectiveColorAdjustment as yt, Curves as z, TonalShift as zt };
928
- //# sourceMappingURL=index-B1557AUi.d.mts.map
912
+ export { HalftoneScreen as $, unsharpMaskRenderer as A, effectMeta as At, CurvesChannelPoint as B, EffectProp as Bt, patchHealRenderer as C, TileOffsetEdgeMode as Ct, selectiveColorRenderer as D, Vision as Dt, relight3dRenderer as E, UnsharpMaskProps as Et, AudioSignalExtractor as F, ColorKey as Ft, DepthOfFieldProps as G, CustomEffect as H, AudioSignalExtractorProps as I, ColorKeyProps as It, GradientMap as J, FilmGrain as K, Crop as L, TonalShift as Lt, visionRenderer as M, BlurProps as Mt, ApplyLUT as N, ColorBalance as Nt, shadowsHighlightsRenderer as O, VisionProps as Ot, ApplyLUTProps as P, ColorBalanceProps as Pt, HalftoneMode as Q, CropProps as R, Vignette as Rt, paintRenderer as S, TileOffset as St, refractionCausticsRenderer as T, UnsharpMask as Tt, DeflickerProps as U, CurvesProps as V, DepthOfField as W, GradientMapStop as X, GradientMapProps as Y, HalftoneDotShape as Z, levelsRenderer as _, SelectiveColorAdjustment as _t, cornerPinRenderer as a, LevelsProps as at, meshWarpRenderer as b, ShadowsHighlightsProps as bt, deflickerRenderer as c, MotionBlur as ct, flipRenderer as d, PBRGlassProps as dt, HalftoneScreenProps as et, gradientMapRenderer as f, Relight3D as ft, layerStyleRenderer as g, SelectiveColor as gt, kenBurnsRenderer as h, SSAOProps as ht, colorkeyRenderer as i, Levels as it, vignetteRenderer as j, Blur as jt, tileOffsetRenderer as k, effectFactories as kt, displacementMapRenderer as l, MotionBlurProps as lt, highPassRenderer as m, SSAO as mt, blurRenderer as n, HighPassProps as nt, cropRenderer as o, Modulate as ot, halftoneScreenRenderer as p, Relight3DProps as pt, FilmGrainProps as q, colorBalanceRenderer as r, LevelChannel as rt, curvesRenderer as s, ModulateProps as st, applyLutRenderer as t, HighPass as tt, filmGrainRenderer as u, PBRGlass as ut, liquifyRenderer as v, SelectiveColorProps as vt, refineEdgeRenderer as w, TileOffsetProps as wt, modulateRenderer as x, TemporalDeflicker as xt, maskMathRenderer as y, ShadowsHighlights as yt, Curves as z, VignetteProps as zt };
913
+ //# sourceMappingURL=index-t9GyO4Ei.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-t9GyO4Ei.d.mts","names":[],"sources":["../src/effects/types.ts","../src/effects/generated/classes.ts","../src/effects/custom/blur.ts","../src/effects/generated/meta.ts","../src/effects/generated/registry.ts","../src/effects/classes.ts"],"sourcesContent":[],"mappings":"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"}