ugly-app 0.1.647 → 0.1.649

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.
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.647";
1
+ export declare const CLI_VERSION = "0.1.649";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.647";
2
+ export const CLI_VERSION = "0.1.649";
3
3
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,63 @@
1
+ export interface TTSModelInfo {
2
+ /** InWorld model id passed as `modelId` in the synth request. */
3
+ id: string;
4
+ /** Human label for pickers / cost UIs. */
5
+ label: string;
6
+ /** Contracted price in USD per 1,000,000 characters. */
7
+ usdPerMillionChars: number;
8
+ /** Whether the model supports `[direction]` steering markup (TTS-2 only). */
9
+ steering: boolean;
10
+ }
11
+ export declare const TTS_MODELS: {
12
+ readonly 'inworld-tts-1.5-mini': {
13
+ readonly id: "inworld-tts-1.5-mini";
14
+ readonly label: "TTS 1.5 Mini";
15
+ readonly usdPerMillionChars: 5;
16
+ readonly steering: false;
17
+ };
18
+ readonly 'inworld-tts-1.5-max': {
19
+ readonly id: "inworld-tts-1.5-max";
20
+ readonly label: "TTS 1.5 Max";
21
+ readonly usdPerMillionChars: 10;
22
+ readonly steering: false;
23
+ };
24
+ readonly 'inworld-tts-2': {
25
+ readonly id: "inworld-tts-2";
26
+ readonly label: "TTS-2";
27
+ readonly usdPerMillionChars: 20;
28
+ readonly steering: true;
29
+ };
30
+ };
31
+ export type TTSModelId = keyof typeof TTS_MODELS;
32
+ export declare const DEFAULT_TTS_MODEL: TTSModelId;
33
+ /**
34
+ * Resolve InWorld model info from an id, tolerating aliases/variants
35
+ * ('…-max', 'tts-2', etc.) and falling back to the default model.
36
+ */
37
+ export declare function ttsModelInfo(modelId?: string): TTSModelInfo;
38
+ /** Price in USD per single character for a model (default model if unknown). */
39
+ export declare function ttsUsdPerChar(modelId?: string): number;
40
+ /** USD to synthesize `charCount` characters with a model. */
41
+ export declare function ttsCostUsd(charCount: number, modelId?: string): number;
42
+ /** Whisper STT ≈ $0.24 / 1k audio-seconds. */
43
+ export declare const STT_USD_PER_SECOND = 0.000004;
44
+ export declare function sttCostUsd(audioSeconds: number): number;
45
+ export declare const SEARCH_USD: {
46
+ readonly search: 0.005;
47
+ readonly summarize: 0.015;
48
+ readonly enrich: 0.015;
49
+ };
50
+ export type SearchCostKind = keyof typeof SEARCH_USD;
51
+ export declare function searchCostUsd(kind: SearchCostKind): number;
52
+ /** OpenAI gpt-image-1 (SPA avatar gen) ≈ $0.04 / image. */
53
+ export declare const IMAGE_USD_PER_IMAGE = 0.04;
54
+ export declare function imageCostUsd(): number;
55
+ export declare const EMBED_USD_PER_CALL = 0.00005;
56
+ export declare function embedCostUsd(): number;
57
+ export declare const PLACES_USD: {
58
+ readonly foursquare: 0.001;
59
+ readonly ticketmaster: 0.0005;
60
+ };
61
+ export type PlacesCostKind = keyof typeof PLACES_USD;
62
+ export declare function placesCostUsd(kind: PlacesCostKind): number;
63
+ //# sourceMappingURL=Pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pricing.d.ts","sourceRoot":"","sources":["../../src/shared/Pricing.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;CAmB0B,CAAC;AAElD,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,UAAU,CAAC;AAEjD,eAAO,MAAM,iBAAiB,EAAE,UAAmC,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAO3D;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAID,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEvD;AAID,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,UAAU,CAAC;AAErD,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE1D;AAID,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAID,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAID,eAAO,MAAM,UAAU;;;CAGb,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,UAAU,CAAC;AAErD,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,90 @@
1
+ // src/shared/Pricing.ts
2
+ //
3
+ // Single source of truth for every metered provider rate on the platform.
4
+ // ugly.bot's billing layer (server/proxy/billing-gate.ts) meters calls against
5
+ // these, and apps use the same numbers to show cost estimates before acting.
6
+ // Keep these in sync with the contracted provider rates — change them HERE only.
7
+ //
8
+ // Text/image generation costs are NOT here: those providers return a computed
9
+ // per-call `usage.cost` from the AI layer. These cover the surfaces that bill a
10
+ // flat or per-unit rate (TTS, STT, web search, avatar image gen, embeddings,
11
+ // place/event search).
12
+ export const TTS_MODELS = {
13
+ 'inworld-tts-1.5-mini': {
14
+ id: 'inworld-tts-1.5-mini',
15
+ label: 'TTS 1.5 Mini',
16
+ usdPerMillionChars: 5,
17
+ steering: false,
18
+ },
19
+ 'inworld-tts-1.5-max': {
20
+ id: 'inworld-tts-1.5-max',
21
+ label: 'TTS 1.5 Max',
22
+ usdPerMillionChars: 10,
23
+ steering: false,
24
+ },
25
+ 'inworld-tts-2': {
26
+ id: 'inworld-tts-2',
27
+ label: 'TTS-2',
28
+ usdPerMillionChars: 20,
29
+ steering: true,
30
+ },
31
+ };
32
+ export const DEFAULT_TTS_MODEL = 'inworld-tts-1.5-mini';
33
+ /**
34
+ * Resolve InWorld model info from an id, tolerating aliases/variants
35
+ * ('…-max', 'tts-2', etc.) and falling back to the default model.
36
+ */
37
+ export function ttsModelInfo(modelId) {
38
+ const exact = modelId && TTS_MODELS[modelId];
39
+ if (exact)
40
+ return exact;
41
+ const m = (modelId || '').toLowerCase();
42
+ if (m.includes('tts-2') || m.includes('tts-1-max-v2'))
43
+ return TTS_MODELS['inworld-tts-2'];
44
+ if (m.includes('1.5-max') || m.includes('tts-1-max'))
45
+ return TTS_MODELS['inworld-tts-1.5-max'];
46
+ return TTS_MODELS[DEFAULT_TTS_MODEL];
47
+ }
48
+ /** Price in USD per single character for a model (default model if unknown). */
49
+ export function ttsUsdPerChar(modelId) {
50
+ return ttsModelInfo(modelId).usdPerMillionChars / 1_000_000;
51
+ }
52
+ /** USD to synthesize `charCount` characters with a model. */
53
+ export function ttsCostUsd(charCount, modelId) {
54
+ return Math.max(0, charCount) * ttsUsdPerChar(modelId);
55
+ }
56
+ // ─── Whisper STT (per audio-second) ──────────────────────────────────────────
57
+ /** Whisper STT ≈ $0.24 / 1k audio-seconds. */
58
+ export const STT_USD_PER_SECOND = 0.000004;
59
+ export function sttCostUsd(audioSeconds) {
60
+ return Math.max(0, audioSeconds) * STT_USD_PER_SECOND;
61
+ }
62
+ // ─── Kagi web search (per call, by kind) ─────────────────────────────────────
63
+ export const SEARCH_USD = {
64
+ search: 0.005,
65
+ summarize: 0.015,
66
+ enrich: 0.015,
67
+ };
68
+ export function searchCostUsd(kind) {
69
+ return SEARCH_USD[kind];
70
+ }
71
+ // ─── Avatar image gen (flat per image) ───────────────────────────────────────
72
+ /** OpenAI gpt-image-1 (SPA avatar gen) ≈ $0.04 / image. */
73
+ export const IMAGE_USD_PER_IMAGE = 0.04;
74
+ export function imageCostUsd() {
75
+ return IMAGE_USD_PER_IMAGE;
76
+ }
77
+ // ─── Embeddings (internal CLIP/Sharp compute, flat) ──────────────────────────
78
+ export const EMBED_USD_PER_CALL = 0.00005;
79
+ export function embedCostUsd() {
80
+ return EMBED_USD_PER_CALL;
81
+ }
82
+ // ─── Place / event search (per call, by provider) ────────────────────────────
83
+ export const PLACES_USD = {
84
+ foursquare: 0.001,
85
+ ticketmaster: 0.0005,
86
+ };
87
+ export function placesCostUsd(kind) {
88
+ return PLACES_USD[kind];
89
+ }
90
+ //# sourceMappingURL=Pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pricing.js","sourceRoot":"","sources":["../../src/shared/Pricing.ts"],"names":[],"mappings":"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"}
@@ -105,6 +105,7 @@ export declare const ttsRenderInputSchema: z.ZodObject<{
105
105
  model: z.ZodOptional<z.ZodString>;
106
106
  temperature: z.ZodOptional<z.ZodNumber>;
107
107
  requestVisemes: z.ZodOptional<z.ZodBoolean>;
108
+ format: z.ZodOptional<z.ZodString>;
108
109
  }, z.core.$strip>;
109
110
  export declare const ttsRenderOutputSchema: z.ZodObject<{
110
111
  audio: z.ZodString;
@@ -125,6 +126,61 @@ export declare const ttsRenderOutputSchema: z.ZodObject<{
125
126
  }, z.core.$strip>>;
126
127
  durationMs: z.ZodNumber;
127
128
  }, z.core.$strip>;
129
+ export declare const voiceListInputSchema: z.ZodObject<{
130
+ search: z.ZodOptional<z.ZodString>;
131
+ gender: z.ZodOptional<z.ZodEnum<{
132
+ neutral: "neutral";
133
+ male: "male";
134
+ female: "female";
135
+ }>>;
136
+ accent: z.ZodOptional<z.ZodString>;
137
+ age: z.ZodOptional<z.ZodString>;
138
+ provider: z.ZodOptional<z.ZodString>;
139
+ includeCloned: z.ZodOptional<z.ZodBoolean>;
140
+ limit: z.ZodOptional<z.ZodNumber>;
141
+ }, z.core.$strip>;
142
+ export declare const voiceInfoSchema: z.ZodObject<{
143
+ id: z.ZodString;
144
+ name: z.ZodString;
145
+ description: z.ZodString;
146
+ provider: z.ZodString;
147
+ providerVoiceId: z.ZodString;
148
+ isCloned: z.ZodBoolean;
149
+ language: z.ZodString;
150
+ gender: z.ZodOptional<z.ZodEnum<{
151
+ neutral: "neutral";
152
+ male: "male";
153
+ female: "female";
154
+ }>>;
155
+ age: z.ZodOptional<z.ZodString>;
156
+ accent: z.ZodOptional<z.ZodString>;
157
+ style: z.ZodOptional<z.ZodString>;
158
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
159
+ previewUrl: z.ZodOptional<z.ZodString>;
160
+ supportsVisemes: z.ZodBoolean;
161
+ }, z.core.$strip>;
162
+ export declare const voiceListOutputSchema: z.ZodObject<{
163
+ voices: z.ZodArray<z.ZodObject<{
164
+ id: z.ZodString;
165
+ name: z.ZodString;
166
+ description: z.ZodString;
167
+ provider: z.ZodString;
168
+ providerVoiceId: z.ZodString;
169
+ isCloned: z.ZodBoolean;
170
+ language: z.ZodString;
171
+ gender: z.ZodOptional<z.ZodEnum<{
172
+ neutral: "neutral";
173
+ male: "male";
174
+ female: "female";
175
+ }>>;
176
+ age: z.ZodOptional<z.ZodString>;
177
+ accent: z.ZodOptional<z.ZodString>;
178
+ style: z.ZodOptional<z.ZodString>;
179
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
180
+ previewUrl: z.ZodOptional<z.ZodString>;
181
+ supportsVisemes: z.ZodBoolean;
182
+ }, z.core.$strip>>;
183
+ }, z.core.$strip>;
128
184
  export declare const musicGenerateInputSchema: z.ZodObject<{
129
185
  chargeUserIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
130
186
  lyricsPrompt: z.ZodString;
@@ -650,6 +706,7 @@ export declare const proxyOps: {
650
706
  model: z.ZodOptional<z.ZodString>;
651
707
  temperature: z.ZodOptional<z.ZodNumber>;
652
708
  requestVisemes: z.ZodOptional<z.ZodBoolean>;
709
+ format: z.ZodOptional<z.ZodString>;
653
710
  }, z.core.$strip>;
654
711
  readonly output: z.ZodObject<{
655
712
  audio: z.ZodString;
@@ -671,6 +728,43 @@ export declare const proxyOps: {
671
728
  durationMs: z.ZodNumber;
672
729
  }, z.core.$strip>;
673
730
  };
731
+ readonly voiceList: {
732
+ readonly input: z.ZodObject<{
733
+ search: z.ZodOptional<z.ZodString>;
734
+ gender: z.ZodOptional<z.ZodEnum<{
735
+ neutral: "neutral";
736
+ male: "male";
737
+ female: "female";
738
+ }>>;
739
+ accent: z.ZodOptional<z.ZodString>;
740
+ age: z.ZodOptional<z.ZodString>;
741
+ provider: z.ZodOptional<z.ZodString>;
742
+ includeCloned: z.ZodOptional<z.ZodBoolean>;
743
+ limit: z.ZodOptional<z.ZodNumber>;
744
+ }, z.core.$strip>;
745
+ readonly output: z.ZodObject<{
746
+ voices: z.ZodArray<z.ZodObject<{
747
+ id: z.ZodString;
748
+ name: z.ZodString;
749
+ description: z.ZodString;
750
+ provider: z.ZodString;
751
+ providerVoiceId: z.ZodString;
752
+ isCloned: z.ZodBoolean;
753
+ language: z.ZodString;
754
+ gender: z.ZodOptional<z.ZodEnum<{
755
+ neutral: "neutral";
756
+ male: "male";
757
+ female: "female";
758
+ }>>;
759
+ age: z.ZodOptional<z.ZodString>;
760
+ accent: z.ZodOptional<z.ZodString>;
761
+ style: z.ZodOptional<z.ZodString>;
762
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
763
+ previewUrl: z.ZodOptional<z.ZodString>;
764
+ supportsVisemes: z.ZodBoolean;
765
+ }, z.core.$strip>>;
766
+ }, z.core.$strip>;
767
+ };
674
768
  readonly musicGenerate: {
675
769
  readonly input: z.ZodObject<{
676
770
  chargeUserIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyOps.d.ts","sourceRoot":"","sources":["../../src/shared/ProxyOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProxyOps.d.ts","sourceRoot":"","sources":["../../src/shared/ProxyOps.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,10 @@ export const ttsRenderInputSchema = z.object({
126
126
  model: z.string().optional(),
127
127
  temperature: z.number().optional(),
128
128
  requestVisemes: z.boolean().optional(),
129
+ // Output audio encoding passed to InWorld's audioConfig.audioEncoding
130
+ // (e.g. 'OGG_OPUS' | 'MP3' | 'LINEAR16'). Defaults to LINEAR16 server-side.
131
+ // Lets one-shot renders store compressed audio directly (no transcode).
132
+ format: z.string().optional(),
129
133
  ...chargeOverride,
130
134
  });
131
135
  const ttsVisemeSchema = z.object({
@@ -149,6 +153,38 @@ export const ttsRenderOutputSchema = z.object({
149
153
  words: z.array(ttsWordSchema),
150
154
  durationMs: z.number(),
151
155
  });
156
+ // ── Voice catalog listing (TTS casting) ──────────────────────────────────────
157
+ // FREE catalog read (not billed). Lists the global InWorld voices (+ the
158
+ // caller's cloned voices) with enriched metadata so apps can present a picker
159
+ // and auto-match a speaker description to a voice.
160
+ export const voiceListInputSchema = z.object({
161
+ search: z.string().max(200).optional(),
162
+ gender: z.enum(['male', 'female', 'neutral']).optional(),
163
+ accent: z.string().max(40).optional(),
164
+ age: z.string().max(40).optional(),
165
+ provider: z.string().max(40).optional(),
166
+ includeCloned: z.boolean().optional(),
167
+ limit: z.number().int().positive().max(2000).optional(),
168
+ });
169
+ export const voiceInfoSchema = z.object({
170
+ id: z.string(),
171
+ name: z.string(),
172
+ description: z.string(),
173
+ provider: z.string(),
174
+ providerVoiceId: z.string(),
175
+ isCloned: z.boolean(),
176
+ language: z.string(),
177
+ gender: z.enum(['male', 'female', 'neutral']).optional(),
178
+ age: z.string().optional(),
179
+ accent: z.string().optional(),
180
+ style: z.string().optional(),
181
+ tags: z.array(z.string()).default([]),
182
+ previewUrl: z.string().optional(),
183
+ supportsVisemes: z.boolean(),
184
+ });
185
+ export const voiceListOutputSchema = z.object({
186
+ voices: z.array(voiceInfoSchema),
187
+ });
152
188
  // ── Music generation (fal.ai minimax-music) ──────────────────────────────────
153
189
  export const musicGenerateInputSchema = z.object({
154
190
  lyricsPrompt: z.string().min(1),
@@ -271,6 +307,7 @@ export const proxyOps = {
271
307
  ticketmasterSearch: { input: ticketmasterSearchInputSchema, output: ticketmasterSearchOutputSchema },
272
308
  search: { input: searchInputSchema, output: searchOutputSchema },
273
309
  ttsRender: { input: ttsRenderInputSchema, output: ttsRenderOutputSchema },
310
+ voiceList: { input: voiceListInputSchema, output: voiceListOutputSchema },
274
311
  musicGenerate: { input: musicGenerateInputSchema, output: musicGenerateOutputSchema },
275
312
  transcribe: { input: transcribeInputSchema, output: transcribeOutputSchema },
276
313
  sendPush: { input: sendPushInputSchema, output: pushOutputSchema },
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyOps.js","sourceRoot":"","sources":["../../src/shared/ProxyOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProxyOps.js","sourceRoot":"","sources":["../../src/shared/ProxyOps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** One spoken word: char range into the document text + timing in segment ms. */
2
+ export interface TimingWord {
3
+ charStart: number;
4
+ charLen: number;
5
+ startMs: number;
6
+ durMs: number;
7
+ }
8
+ /** One viseme (mouth shape) for lip-sync. `name` is the InWorld 11-viseme set. */
9
+ export interface TimingViseme {
10
+ name: string;
11
+ startMs: number;
12
+ durMs: number;
13
+ intensity: number;
14
+ }
15
+ export interface TimingTrack {
16
+ words: TimingWord[];
17
+ visemes: TimingViseme[];
18
+ }
19
+ export declare function encodeTimingTrack(track: TimingTrack): Uint8Array;
20
+ export declare function decodeTimingTrack(bytes: Uint8Array): TimingTrack;
21
+ //# sourceMappingURL=TimingTrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimingTrack.d.ts","sourceRoot":"","sources":["../../src/shared/TimingTrack.ts"],"names":[],"mappings":"AAgBA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AA0DD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CA2BhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAuChE"}
@@ -0,0 +1,119 @@
1
+ // src/shared/TimingTrack.ts
2
+ //
3
+ // Compact binary codec for pre-rendered TTS timing ("`.tim`" sidecars).
4
+ //
5
+ // A full audiobook's word + phoneme-viseme timings are ~30 MB as JSON, which is
6
+ // too large for a DB row and too slow to ship to the player. This codec stores
7
+ // the same data ~10× smaller (~2-3 MB/novel, spread across per-segment files)
8
+ // using delta + varint encoding, so the player streams one segment's timing at
9
+ // a time and reconstructs the karaoke highlight + avatar lip-sync without ever
10
+ // re-calling the TTS provider.
11
+ //
12
+ // Word strings are NOT stored — they're recovered by slicing the document text
13
+ // with each word's [charStart, charStart+charLen). Times are per-segment ms
14
+ // (relative to that segment's audio start); char offsets are absolute into the
15
+ // document's speech text.
16
+ // InWorld-standard viseme set; index in this array is the 1-byte wire code.
17
+ const VISEME_NAMES = [
18
+ 'aei', 'o', 'bmp', 'fv', 'l', 'r', 'th', 'qw', 'ee', 'cdgknstxyz', 'sil',
19
+ ];
20
+ const VISEME_INDEX = Object.fromEntries(VISEME_NAMES.map((n, i) => [n, i]));
21
+ const SIL_INDEX = VISEME_NAMES.indexOf('sil');
22
+ const MAGIC = [0x54, 0x49, 0x4d, 0x31]; // 'TIM1'
23
+ const VERSION = 1;
24
+ // ── varint helpers (arithmetic, so values > 2^31 stay correct) ───────────────
25
+ function writeUvarint(out, value) {
26
+ let n = Math.max(0, Math.floor(value));
27
+ while (n >= 128) {
28
+ out.push((n % 128) + 128);
29
+ n = Math.floor(n / 128);
30
+ }
31
+ out.push(n);
32
+ }
33
+ // zigzag: map signed → unsigned so small magnitudes stay small.
34
+ function writeSvarint(out, value) {
35
+ const v = Math.round(value);
36
+ writeUvarint(out, v >= 0 ? v * 2 : -v * 2 - 1);
37
+ }
38
+ function readUvarint(bytes, cur) {
39
+ let result = 0;
40
+ let scale = 1;
41
+ let b;
42
+ do {
43
+ b = bytes[cur.i++] ?? 0;
44
+ result += (b & 0x7f) * scale;
45
+ scale *= 128;
46
+ } while (b & 0x80);
47
+ return result;
48
+ }
49
+ function readSvarint(bytes, cur) {
50
+ const z = readUvarint(bytes, cur);
51
+ return z % 2 === 0 ? z / 2 : -(z + 1) / 2;
52
+ }
53
+ function clampByte(n) {
54
+ return Math.max(0, Math.min(255, Math.round(n)));
55
+ }
56
+ // ── encode / decode ──────────────────────────────────────────────────────────
57
+ export function encodeTimingTrack(track) {
58
+ const out = [];
59
+ out.push(...MAGIC, VERSION);
60
+ writeUvarint(out, track.words.length);
61
+ writeUvarint(out, track.visemes.length);
62
+ let prevChar = 0;
63
+ let prevWordMs = 0;
64
+ for (const w of track.words) {
65
+ writeSvarint(out, w.charStart - prevChar);
66
+ prevChar = w.charStart;
67
+ writeUvarint(out, Math.max(0, w.charLen));
68
+ writeSvarint(out, Math.round(w.startMs) - prevWordMs);
69
+ prevWordMs = Math.round(w.startMs);
70
+ writeUvarint(out, Math.max(0, w.durMs));
71
+ }
72
+ let prevVisMs = 0;
73
+ for (const v of track.visemes) {
74
+ out.push(VISEME_INDEX[v.name] ?? SIL_INDEX);
75
+ writeSvarint(out, Math.round(v.startMs) - prevVisMs);
76
+ prevVisMs = Math.round(v.startMs);
77
+ writeUvarint(out, Math.max(0, v.durMs));
78
+ out.push(clampByte(v.intensity * 255));
79
+ }
80
+ return Uint8Array.from(out);
81
+ }
82
+ export function decodeTimingTrack(bytes) {
83
+ const cur = { i: 0 };
84
+ for (const m of MAGIC) {
85
+ if ((bytes[cur.i++] ?? -1) !== m) {
86
+ throw new Error('decodeTimingTrack: bad magic (not a .tim track)');
87
+ }
88
+ }
89
+ const version = bytes[cur.i++];
90
+ if (version !== VERSION) {
91
+ throw new Error(`decodeTimingTrack: unsupported version ${version}`);
92
+ }
93
+ const wordCount = readUvarint(bytes, cur);
94
+ const visemeCount = readUvarint(bytes, cur);
95
+ const words = [];
96
+ let prevChar = 0;
97
+ let prevWordMs = 0;
98
+ for (let k = 0; k < wordCount; k++) {
99
+ const charStart = prevChar + readSvarint(bytes, cur);
100
+ prevChar = charStart;
101
+ const charLen = readUvarint(bytes, cur);
102
+ const startMs = prevWordMs + readSvarint(bytes, cur);
103
+ prevWordMs = startMs;
104
+ const durMs = readUvarint(bytes, cur);
105
+ words.push({ charStart, charLen, startMs, durMs });
106
+ }
107
+ const visemes = [];
108
+ let prevVisMs = 0;
109
+ for (let k = 0; k < visemeCount; k++) {
110
+ const name = VISEME_NAMES[bytes[cur.i++] ?? SIL_INDEX] ?? 'sil';
111
+ const startMs = prevVisMs + readSvarint(bytes, cur);
112
+ prevVisMs = startMs;
113
+ const durMs = readUvarint(bytes, cur);
114
+ const intensity = (bytes[cur.i++] ?? 0) / 255;
115
+ visemes.push({ name, startMs, durMs, intensity });
116
+ }
117
+ return { words, visemes };
118
+ }
119
+ //# sourceMappingURL=TimingTrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimingTrack.js","sourceRoot":"","sources":["../../src/shared/TimingTrack.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,8 @@ export * from './Avatar.js';
18
18
  export * from './DB.js';
19
19
  export * from './Errors.js';
20
20
  export * from './ImageGen.js';
21
+ export * from './Pricing.js';
22
+ export * from './TimingTrack.js';
21
23
  export * from './Router.js';
22
24
  export type { SocketLoggedIn, SocketLoggedOut, TypedAppSocket, } from './Socket.js';
23
25
  export * from './TextGen.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,SAAS,EACT,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjE,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,YAAY,EACV,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAG7B,eAAO,MAAM,SAAS,OAAQ,CAAC;AAC/B,eAAO,MAAM,SAAS,QAAiB,CAAC;AACxC,eAAO,MAAM,OAAO,QAAiB,CAAC;AACtC,eAAO,MAAM,MAAM,QAAe,CAAC;AACnC,eAAO,MAAM,OAAO,QAAa,CAAC;AAGlC,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,CAEpE;AAED,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAE7D;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAC1E,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAMlC;AAGD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAaR;AAED,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAClE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ export * from './Avatar.js';
10
10
  export * from './DB.js';
11
11
  export * from './Errors.js';
12
12
  export * from './ImageGen.js';
13
+ export * from './Pricing.js';
14
+ export * from './TimingTrack.js';
13
15
  export * from './Router.js';
14
16
  export * from './TextGen.js';
15
17
  export * from './ProxyOps.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.647",
3
+ "version": "0.1.649",
4
4
  "type": "module",
5
5
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
6
6
  "files": [
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.647";
2
+ export const CLI_VERSION = "0.1.649";
@@ -0,0 +1,37 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import {
3
+ TTS_MODELS,
4
+ ttsCostUsd,
5
+ ttsUsdPerChar,
6
+ ttsModelInfo,
7
+ DEFAULT_TTS_MODEL,
8
+ } from './Pricing.js';
9
+
10
+ describe('TTS pricing', () => {
11
+ it('uses contracted per-1M rates', () => {
12
+ expect(TTS_MODELS['inworld-tts-1.5-mini'].usdPerMillionChars).toBe(5);
13
+ expect(TTS_MODELS['inworld-tts-1.5-max'].usdPerMillionChars).toBe(10);
14
+ expect(TTS_MODELS['inworld-tts-2'].usdPerMillionChars).toBe(20);
15
+ });
16
+
17
+ it('only TTS-2 supports steering', () => {
18
+ expect(TTS_MODELS['inworld-tts-2'].steering).toBe(true);
19
+ expect(TTS_MODELS['inworld-tts-1.5-mini'].steering).toBe(false);
20
+ expect(TTS_MODELS['inworld-tts-1.5-max'].steering).toBe(false);
21
+ });
22
+
23
+ it('costs 1M chars at the model rate', () => {
24
+ expect(ttsCostUsd(1_000_000, 'inworld-tts-2')).toBeCloseTo(20, 9);
25
+ expect(ttsCostUsd(1_000_000, 'inworld-tts-1.5-mini')).toBeCloseTo(5, 9);
26
+ });
27
+
28
+ it('defaults unknown models to Mini', () => {
29
+ expect(ttsModelInfo('nonsense').id).toBe(DEFAULT_TTS_MODEL);
30
+ expect(ttsUsdPerChar(undefined)).toBe(5 / 1_000_000);
31
+ });
32
+
33
+ it('resolves aliases (max / tts-2 substrings)', () => {
34
+ expect(ttsModelInfo('inworld-tts-1.5-max').usdPerMillionChars).toBe(10);
35
+ expect(ttsModelInfo('some-tts-2-variant').usdPerMillionChars).toBe(20);
36
+ });
37
+ });
@@ -0,0 +1,123 @@
1
+ // src/shared/Pricing.ts
2
+ //
3
+ // Single source of truth for every metered provider rate on the platform.
4
+ // ugly.bot's billing layer (server/proxy/billing-gate.ts) meters calls against
5
+ // these, and apps use the same numbers to show cost estimates before acting.
6
+ // Keep these in sync with the contracted provider rates — change them HERE only.
7
+ //
8
+ // Text/image generation costs are NOT here: those providers return a computed
9
+ // per-call `usage.cost` from the AI layer. These cover the surfaces that bill a
10
+ // flat or per-unit rate (TTS, STT, web search, avatar image gen, embeddings,
11
+ // place/event search).
12
+
13
+ // ─── InWorld TTS models + per-character price ────────────────────────────────
14
+
15
+ export interface TTSModelInfo {
16
+ /** InWorld model id passed as `modelId` in the synth request. */
17
+ id: string;
18
+ /** Human label for pickers / cost UIs. */
19
+ label: string;
20
+ /** Contracted price in USD per 1,000,000 characters. */
21
+ usdPerMillionChars: number;
22
+ /** Whether the model supports `[direction]` steering markup (TTS-2 only). */
23
+ steering: boolean;
24
+ }
25
+
26
+ export const TTS_MODELS = {
27
+ 'inworld-tts-1.5-mini': {
28
+ id: 'inworld-tts-1.5-mini',
29
+ label: 'TTS 1.5 Mini',
30
+ usdPerMillionChars: 5,
31
+ steering: false,
32
+ },
33
+ 'inworld-tts-1.5-max': {
34
+ id: 'inworld-tts-1.5-max',
35
+ label: 'TTS 1.5 Max',
36
+ usdPerMillionChars: 10,
37
+ steering: false,
38
+ },
39
+ 'inworld-tts-2': {
40
+ id: 'inworld-tts-2',
41
+ label: 'TTS-2',
42
+ usdPerMillionChars: 20,
43
+ steering: true,
44
+ },
45
+ } as const satisfies Record<string, TTSModelInfo>;
46
+
47
+ export type TTSModelId = keyof typeof TTS_MODELS;
48
+
49
+ export const DEFAULT_TTS_MODEL: TTSModelId = 'inworld-tts-1.5-mini';
50
+
51
+ /**
52
+ * Resolve InWorld model info from an id, tolerating aliases/variants
53
+ * ('…-max', 'tts-2', etc.) and falling back to the default model.
54
+ */
55
+ export function ttsModelInfo(modelId?: string): TTSModelInfo {
56
+ const exact = modelId && (TTS_MODELS as Record<string, TTSModelInfo>)[modelId];
57
+ if (exact) return exact;
58
+ const m = (modelId || '').toLowerCase();
59
+ if (m.includes('tts-2') || m.includes('tts-1-max-v2')) return TTS_MODELS['inworld-tts-2'];
60
+ if (m.includes('1.5-max') || m.includes('tts-1-max')) return TTS_MODELS['inworld-tts-1.5-max'];
61
+ return TTS_MODELS[DEFAULT_TTS_MODEL];
62
+ }
63
+
64
+ /** Price in USD per single character for a model (default model if unknown). */
65
+ export function ttsUsdPerChar(modelId?: string): number {
66
+ return ttsModelInfo(modelId).usdPerMillionChars / 1_000_000;
67
+ }
68
+
69
+ /** USD to synthesize `charCount` characters with a model. */
70
+ export function ttsCostUsd(charCount: number, modelId?: string): number {
71
+ return Math.max(0, charCount) * ttsUsdPerChar(modelId);
72
+ }
73
+
74
+ // ─── Whisper STT (per audio-second) ──────────────────────────────────────────
75
+
76
+ /** Whisper STT ≈ $0.24 / 1k audio-seconds. */
77
+ export const STT_USD_PER_SECOND = 0.000004;
78
+
79
+ export function sttCostUsd(audioSeconds: number): number {
80
+ return Math.max(0, audioSeconds) * STT_USD_PER_SECOND;
81
+ }
82
+
83
+ // ─── Kagi web search (per call, by kind) ─────────────────────────────────────
84
+
85
+ export const SEARCH_USD = {
86
+ search: 0.005,
87
+ summarize: 0.015,
88
+ enrich: 0.015,
89
+ } as const;
90
+ export type SearchCostKind = keyof typeof SEARCH_USD;
91
+
92
+ export function searchCostUsd(kind: SearchCostKind): number {
93
+ return SEARCH_USD[kind];
94
+ }
95
+
96
+ // ─── Avatar image gen (flat per image) ───────────────────────────────────────
97
+
98
+ /** OpenAI gpt-image-1 (SPA avatar gen) ≈ $0.04 / image. */
99
+ export const IMAGE_USD_PER_IMAGE = 0.04;
100
+
101
+ export function imageCostUsd(): number {
102
+ return IMAGE_USD_PER_IMAGE;
103
+ }
104
+
105
+ // ─── Embeddings (internal CLIP/Sharp compute, flat) ──────────────────────────
106
+
107
+ export const EMBED_USD_PER_CALL = 0.00005;
108
+
109
+ export function embedCostUsd(): number {
110
+ return EMBED_USD_PER_CALL;
111
+ }
112
+
113
+ // ─── Place / event search (per call, by provider) ────────────────────────────
114
+
115
+ export const PLACES_USD = {
116
+ foursquare: 0.001,
117
+ ticketmaster: 0.0005,
118
+ } as const;
119
+ export type PlacesCostKind = keyof typeof PLACES_USD;
120
+
121
+ export function placesCostUsd(kind: PlacesCostKind): number {
122
+ return PLACES_USD[kind];
123
+ }
@@ -139,6 +139,10 @@ export const ttsRenderInputSchema = z.object({
139
139
  model: z.string().optional(),
140
140
  temperature: z.number().optional(),
141
141
  requestVisemes: z.boolean().optional(),
142
+ // Output audio encoding passed to InWorld's audioConfig.audioEncoding
143
+ // (e.g. 'OGG_OPUS' | 'MP3' | 'LINEAR16'). Defaults to LINEAR16 server-side.
144
+ // Lets one-shot renders store compressed audio directly (no transcode).
145
+ format: z.string().optional(),
142
146
  ...chargeOverride,
143
147
  });
144
148
  const ttsVisemeSchema = z.object({
@@ -163,6 +167,39 @@ export const ttsRenderOutputSchema = z.object({
163
167
  durationMs: z.number(),
164
168
  });
165
169
 
170
+ // ── Voice catalog listing (TTS casting) ──────────────────────────────────────
171
+ // FREE catalog read (not billed). Lists the global InWorld voices (+ the
172
+ // caller's cloned voices) with enriched metadata so apps can present a picker
173
+ // and auto-match a speaker description to a voice.
174
+ export const voiceListInputSchema = z.object({
175
+ search: z.string().max(200).optional(),
176
+ gender: z.enum(['male', 'female', 'neutral']).optional(),
177
+ accent: z.string().max(40).optional(),
178
+ age: z.string().max(40).optional(),
179
+ provider: z.string().max(40).optional(),
180
+ includeCloned: z.boolean().optional(),
181
+ limit: z.number().int().positive().max(2000).optional(),
182
+ });
183
+ export const voiceInfoSchema = z.object({
184
+ id: z.string(),
185
+ name: z.string(),
186
+ description: z.string(),
187
+ provider: z.string(),
188
+ providerVoiceId: z.string(),
189
+ isCloned: z.boolean(),
190
+ language: z.string(),
191
+ gender: z.enum(['male', 'female', 'neutral']).optional(),
192
+ age: z.string().optional(),
193
+ accent: z.string().optional(),
194
+ style: z.string().optional(),
195
+ tags: z.array(z.string()).default([]),
196
+ previewUrl: z.string().optional(),
197
+ supportsVisemes: z.boolean(),
198
+ });
199
+ export const voiceListOutputSchema = z.object({
200
+ voices: z.array(voiceInfoSchema),
201
+ });
202
+
166
203
  // ── Music generation (fal.ai minimax-music) ──────────────────────────────────
167
204
  export const musicGenerateInputSchema = z.object({
168
205
  lyricsPrompt: z.string().min(1),
@@ -291,6 +328,7 @@ export const proxyOps = {
291
328
  ticketmasterSearch: { input: ticketmasterSearchInputSchema, output: ticketmasterSearchOutputSchema },
292
329
  search: { input: searchInputSchema, output: searchOutputSchema },
293
330
  ttsRender: { input: ttsRenderInputSchema, output: ttsRenderOutputSchema },
331
+ voiceList: { input: voiceListInputSchema, output: voiceListOutputSchema },
294
332
  musicGenerate: { input: musicGenerateInputSchema, output: musicGenerateOutputSchema },
295
333
  transcribe: { input: transcribeInputSchema, output: transcribeOutputSchema },
296
334
  sendPush: { input: sendPushInputSchema, output: pushOutputSchema },
@@ -0,0 +1,76 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import {
3
+ encodeTimingTrack,
4
+ decodeTimingTrack,
5
+ type TimingTrack,
6
+ } from './TimingTrack.js';
7
+
8
+ describe('TimingTrack codec', () => {
9
+ it('round-trips words and visemes exactly (ms rounded to int)', () => {
10
+ const track: TimingTrack = {
11
+ words: [
12
+ { charStart: 0, charLen: 5, startMs: 0, durMs: 320 },
13
+ { charStart: 6, charLen: 5, startMs: 320, durMs: 280 },
14
+ { charStart: 12, charLen: 3, startMs: 600, durMs: 150 },
15
+ ],
16
+ visemes: [
17
+ { name: 'aei', startMs: 0, durMs: 80, intensity: 1 },
18
+ { name: 'bmp', startMs: 80, durMs: 60, intensity: 1 },
19
+ { name: 'sil', startMs: 140, durMs: 40, intensity: 0 },
20
+ ],
21
+ };
22
+ const decoded = decodeTimingTrack(encodeTimingTrack(track));
23
+ expect(decoded.words).toEqual(track.words);
24
+ // intensity is quantized to a byte; 0 and 1 are exact.
25
+ expect(decoded.visemes).toEqual(track.visemes);
26
+ });
27
+
28
+ it('handles an empty track', () => {
29
+ const decoded = decodeTimingTrack(encodeTimingTrack({ words: [], visemes: [] }));
30
+ expect(decoded).toEqual({ words: [], visemes: [] });
31
+ });
32
+
33
+ it('preserves large absolute char offsets (novel-scale)', () => {
34
+ const track: TimingTrack = {
35
+ words: [
36
+ { charStart: 2_500_000, charLen: 4, startMs: 10, durMs: 200 },
37
+ { charStart: 2_500_005, charLen: 6, startMs: 220, durMs: 250 },
38
+ ],
39
+ visemes: [],
40
+ };
41
+ const decoded = decodeTimingTrack(encodeTimingTrack(track));
42
+ expect(decoded.words).toEqual(track.words);
43
+ });
44
+
45
+ it('unknown viseme names fall back to sil on decode', () => {
46
+ const enc = encodeTimingTrack({
47
+ words: [],
48
+ visemes: [{ name: 'not-a-viseme', startMs: 0, durMs: 50, intensity: 0.5 }],
49
+ });
50
+ const decoded = decodeTimingTrack(enc);
51
+ expect(decoded.visemes[0]!.name).toBe('sil');
52
+ });
53
+
54
+ it('is far smaller than JSON for a realistic segment', () => {
55
+ const words = Array.from({ length: 200 }, (_, i) => ({
56
+ charStart: i * 6,
57
+ charLen: 5,
58
+ startMs: i * 300,
59
+ durMs: 280,
60
+ }));
61
+ const visemes = Array.from({ length: 1000 }, (_, i) => ({
62
+ name: 'aei',
63
+ startMs: i * 60,
64
+ durMs: 55,
65
+ intensity: 1,
66
+ }));
67
+ const bytes = encodeTimingTrack({ words, visemes });
68
+ const json = JSON.stringify({ words, visemes }).length;
69
+ // Expect at least a 5× reduction vs JSON.
70
+ expect(bytes.length * 5).toBeLessThan(json);
71
+ });
72
+
73
+ it('rejects non-.tim data', () => {
74
+ expect(() => decodeTimingTrack(new Uint8Array([1, 2, 3, 4, 5]))).toThrow();
75
+ });
76
+ });
@@ -0,0 +1,162 @@
1
+ // src/shared/TimingTrack.ts
2
+ //
3
+ // Compact binary codec for pre-rendered TTS timing ("`.tim`" sidecars).
4
+ //
5
+ // A full audiobook's word + phoneme-viseme timings are ~30 MB as JSON, which is
6
+ // too large for a DB row and too slow to ship to the player. This codec stores
7
+ // the same data ~10× smaller (~2-3 MB/novel, spread across per-segment files)
8
+ // using delta + varint encoding, so the player streams one segment's timing at
9
+ // a time and reconstructs the karaoke highlight + avatar lip-sync without ever
10
+ // re-calling the TTS provider.
11
+ //
12
+ // Word strings are NOT stored — they're recovered by slicing the document text
13
+ // with each word's [charStart, charStart+charLen). Times are per-segment ms
14
+ // (relative to that segment's audio start); char offsets are absolute into the
15
+ // document's speech text.
16
+
17
+ /** One spoken word: char range into the document text + timing in segment ms. */
18
+ export interface TimingWord {
19
+ charStart: number;
20
+ charLen: number;
21
+ startMs: number;
22
+ durMs: number;
23
+ }
24
+
25
+ /** One viseme (mouth shape) for lip-sync. `name` is the InWorld 11-viseme set. */
26
+ export interface TimingViseme {
27
+ name: string;
28
+ startMs: number;
29
+ durMs: number;
30
+ intensity: number; // 0..1
31
+ }
32
+
33
+ export interface TimingTrack {
34
+ words: TimingWord[];
35
+ visemes: TimingViseme[];
36
+ }
37
+
38
+ // InWorld-standard viseme set; index in this array is the 1-byte wire code.
39
+ const VISEME_NAMES = [
40
+ 'aei', 'o', 'bmp', 'fv', 'l', 'r', 'th', 'qw', 'ee', 'cdgknstxyz', 'sil',
41
+ ] as const;
42
+ const VISEME_INDEX: Record<string, number> = Object.fromEntries(
43
+ VISEME_NAMES.map((n, i) => [n, i]),
44
+ );
45
+ const SIL_INDEX = VISEME_NAMES.indexOf('sil');
46
+
47
+ const MAGIC = [0x54, 0x49, 0x4d, 0x31]; // 'TIM1'
48
+ const VERSION = 1;
49
+
50
+ // ── varint helpers (arithmetic, so values > 2^31 stay correct) ───────────────
51
+
52
+ function writeUvarint(out: number[], value: number): void {
53
+ let n = Math.max(0, Math.floor(value));
54
+ while (n >= 128) {
55
+ out.push((n % 128) + 128);
56
+ n = Math.floor(n / 128);
57
+ }
58
+ out.push(n);
59
+ }
60
+
61
+ // zigzag: map signed → unsigned so small magnitudes stay small.
62
+ function writeSvarint(out: number[], value: number): void {
63
+ const v = Math.round(value);
64
+ writeUvarint(out, v >= 0 ? v * 2 : -v * 2 - 1);
65
+ }
66
+
67
+ interface Cursor {
68
+ i: number;
69
+ }
70
+
71
+ function readUvarint(bytes: Uint8Array, cur: Cursor): number {
72
+ let result = 0;
73
+ let scale = 1;
74
+ let b: number;
75
+ do {
76
+ b = bytes[cur.i++] ?? 0;
77
+ result += (b & 0x7f) * scale;
78
+ scale *= 128;
79
+ } while (b & 0x80);
80
+ return result;
81
+ }
82
+
83
+ function readSvarint(bytes: Uint8Array, cur: Cursor): number {
84
+ const z = readUvarint(bytes, cur);
85
+ return z % 2 === 0 ? z / 2 : -(z + 1) / 2;
86
+ }
87
+
88
+ function clampByte(n: number): number {
89
+ return Math.max(0, Math.min(255, Math.round(n)));
90
+ }
91
+
92
+ // ── encode / decode ──────────────────────────────────────────────────────────
93
+
94
+ export function encodeTimingTrack(track: TimingTrack): Uint8Array {
95
+ const out: number[] = [];
96
+ out.push(...MAGIC, VERSION);
97
+ writeUvarint(out, track.words.length);
98
+ writeUvarint(out, track.visemes.length);
99
+
100
+ let prevChar = 0;
101
+ let prevWordMs = 0;
102
+ for (const w of track.words) {
103
+ writeSvarint(out, w.charStart - prevChar);
104
+ prevChar = w.charStart;
105
+ writeUvarint(out, Math.max(0, w.charLen));
106
+ writeSvarint(out, Math.round(w.startMs) - prevWordMs);
107
+ prevWordMs = Math.round(w.startMs);
108
+ writeUvarint(out, Math.max(0, w.durMs));
109
+ }
110
+
111
+ let prevVisMs = 0;
112
+ for (const v of track.visemes) {
113
+ out.push(VISEME_INDEX[v.name] ?? SIL_INDEX);
114
+ writeSvarint(out, Math.round(v.startMs) - prevVisMs);
115
+ prevVisMs = Math.round(v.startMs);
116
+ writeUvarint(out, Math.max(0, v.durMs));
117
+ out.push(clampByte(v.intensity * 255));
118
+ }
119
+
120
+ return Uint8Array.from(out);
121
+ }
122
+
123
+ export function decodeTimingTrack(bytes: Uint8Array): TimingTrack {
124
+ const cur: Cursor = { i: 0 };
125
+ for (const m of MAGIC) {
126
+ if ((bytes[cur.i++] ?? -1) !== m) {
127
+ throw new Error('decodeTimingTrack: bad magic (not a .tim track)');
128
+ }
129
+ }
130
+ const version = bytes[cur.i++];
131
+ if (version !== VERSION) {
132
+ throw new Error(`decodeTimingTrack: unsupported version ${version}`);
133
+ }
134
+ const wordCount = readUvarint(bytes, cur);
135
+ const visemeCount = readUvarint(bytes, cur);
136
+
137
+ const words: TimingWord[] = [];
138
+ let prevChar = 0;
139
+ let prevWordMs = 0;
140
+ for (let k = 0; k < wordCount; k++) {
141
+ const charStart = prevChar + readSvarint(bytes, cur);
142
+ prevChar = charStart;
143
+ const charLen = readUvarint(bytes, cur);
144
+ const startMs = prevWordMs + readSvarint(bytes, cur);
145
+ prevWordMs = startMs;
146
+ const durMs = readUvarint(bytes, cur);
147
+ words.push({ charStart, charLen, startMs, durMs });
148
+ }
149
+
150
+ const visemes: TimingViseme[] = [];
151
+ let prevVisMs = 0;
152
+ for (let k = 0; k < visemeCount; k++) {
153
+ const name = VISEME_NAMES[bytes[cur.i++] ?? SIL_INDEX] ?? 'sil';
154
+ const startMs = prevVisMs + readSvarint(bytes, cur);
155
+ prevVisMs = startMs;
156
+ const durMs = readUvarint(bytes, cur);
157
+ const intensity = (bytes[cur.i++] ?? 0) / 255;
158
+ visemes.push({ name, startMs, durMs, intensity });
159
+ }
160
+
161
+ return { words, visemes };
162
+ }
@@ -73,6 +73,8 @@ export * from './Avatar.js';
73
73
  export * from './DB.js';
74
74
  export * from './Errors.js';
75
75
  export * from './ImageGen.js';
76
+ export * from './Pricing.js';
77
+ export * from './TimingTrack.js';
76
78
  export * from './Router.js';
77
79
  export type {
78
80
  SocketLoggedIn,