ugly-app 0.1.287 → 0.1.289

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.287";
1
+ export declare const CLI_VERSION = "0.1.289";
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.287";
2
+ export const CLI_VERSION = "0.1.289";
3
3
  //# sourceMappingURL=version.js.map
@@ -11,6 +11,7 @@ export interface BlobVisualizerProps {
11
11
  style?: BlobStyleType;
12
12
  options?: Partial<BlobOptions>;
13
13
  visible?: boolean;
14
+ analyzer?: AnalyserNode | null;
14
15
  }
15
16
  export declare function BlobVisualizer(props: BlobVisualizerProps): import("react/jsx-runtime").JSX.Element;
16
17
  //# sourceMappingURL=BlobVisualizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlobVisualizer.d.ts","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAa,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAoC5E,qDAAqD;AACrD,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAqJxD"}
1
+ {"version":3,"file":"BlobVisualizer.d.ts","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAa,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAoC5E,qDAAqD;AACrD,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA2JxD"}
@@ -48,6 +48,11 @@ export function BlobVisualizer(props) {
48
48
  coreRef.current = null;
49
49
  };
50
50
  }, []);
51
+ useEffect(() => {
52
+ if (props.analyzer !== undefined) {
53
+ coreRef.current?.setAnalyzer(props.analyzer);
54
+ }
55
+ }, [props.analyzer]);
51
56
  useEffect(() => {
52
57
  const initStyle = async () => {
53
58
  if (!coreRef.current) {
@@ -1 +1 @@
1
- {"version":3,"file":"BlobVisualizer.js","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlobVisualizer.js","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"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.287",
3
+ "version": "0.1.289",
4
4
  "type": "module",
5
5
  "main": "./dist/server/index.js",
6
6
  "exports": {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.287";
2
+ export const CLI_VERSION = "0.1.289";
@@ -57,6 +57,7 @@ export interface BlobVisualizerProps {
57
57
  style?: BlobStyleType;
58
58
  options?: Partial<BlobOptions>;
59
59
  visible?: boolean;
60
+ analyzer?: AnalyserNode | null;
60
61
  }
61
62
 
62
63
  export function BlobVisualizer(props: BlobVisualizerProps) {
@@ -74,6 +75,12 @@ export function BlobVisualizer(props: BlobVisualizerProps) {
74
75
  };
75
76
  }, []);
76
77
 
78
+ useEffect(() => {
79
+ if (props.analyzer !== undefined) {
80
+ coreRef.current?.setAnalyzer(props.analyzer);
81
+ }
82
+ }, [props.analyzer]);
83
+
77
84
  useEffect(() => {
78
85
  const initStyle = async () => {
79
86
  if (!coreRef.current) {
@@ -15,7 +15,6 @@ import {
15
15
  import type {
16
16
  AudioVisualizer,
17
17
  BlobStyleType,
18
- BlobVisualizerFunctions,
19
18
  UglyBotSocket,
20
19
  } from 'ugly-app/client';
21
20
 
@@ -97,6 +96,11 @@ function CanvasVizView({
97
96
  useEffect(() => {
98
97
  const canvas = canvasRef.current;
99
98
  if (!canvas) return;
99
+ // Match canvas resolution to display size
100
+ const rect = canvas.getBoundingClientRect();
101
+ const dpr = window.devicePixelRatio || 1;
102
+ canvas.width = rect.width * dpr;
103
+ canvas.height = rect.height * dpr;
100
104
  const viz = createCanvasViz(type);
101
105
  vizRef.current = viz;
102
106
  if (analyzer) viz.setAnalyzer(analyzer);
@@ -105,18 +109,11 @@ function CanvasVizView({
105
109
  viz.detach();
106
110
  vizRef.current = null;
107
111
  };
108
- // eslint-disable-next-line react-hooks/exhaustive-deps
109
- }, [type]);
110
-
111
- useEffect(() => {
112
- vizRef.current?.setAnalyzer(analyzer);
113
- }, [analyzer]);
112
+ }, [type, analyzer]);
114
113
 
115
114
  return (
116
115
  <canvas
117
116
  ref={canvasRef}
118
- width={600}
119
- height={200}
120
117
  style={{ width: '100%', height: 200, borderRadius: 8, background: '#111' }}
121
118
  />
122
119
  );
@@ -131,12 +128,6 @@ function VisualizerView({
131
128
  vizType: VizType;
132
129
  analyzer: AnalyserNode | null;
133
130
  }) {
134
- const blobRef = useRef<BlobVisualizerFunctions>(null);
135
-
136
- useEffect(() => {
137
- blobRef.current?.setAnalyzer(analyzer);
138
- }, [analyzer]);
139
-
140
131
  if (canvasVizTypes.has(vizType)) {
141
132
  return <CanvasVizView type={vizType as CanvasVizType} analyzer={analyzer} />;
142
133
  }
@@ -151,8 +142,8 @@ function VisualizerView({
151
142
  return (
152
143
  <div style={{ height: 300, position: 'relative' }}>
153
144
  <BlobVisualizer
154
- blobRef={blobRef}
155
145
  style={vizType as BlobStyleType}
146
+ analyzer={analyzer}
156
147
  />
157
148
  </div>
158
149
  );
@@ -209,6 +200,7 @@ function useTTSAnalyzer() {
209
200
  const init = useCallback(() => {
210
201
  if (ctxRef.current) return;
211
202
  const ctx = new AudioContext({ sampleRate: 24000 });
203
+ void ctx.resume();
212
204
  const node = ctx.createAnalyser();
213
205
  node.fftSize = 2048;
214
206
  const gain = ctx.createGain();
@@ -225,6 +217,7 @@ function useTTSAnalyzer() {
225
217
  const ctx = ctxRef.current;
226
218
  const gain = gainRef.current;
227
219
  if (!ctx || !gain) return;
220
+ if (ctx.state === 'suspended') void ctx.resume();
228
221
  const binary = atob(base64Audio);
229
222
  const bytes = new Uint8Array(binary.length);
230
223
  for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
@@ -295,7 +288,8 @@ function STTSection({ socket }: { socket: UglyBotSocket }) {
295
288
  }),
296
289
  socket.on('stt:error', (data) => {
297
290
  if (data.streamId && data.streamId !== streamId) return;
298
- addLog(`STT error: ${data.message ?? 'unknown'}`, 'err');
291
+ const errMsg = typeof data.message === 'string' ? data.message : JSON.stringify(data.message ?? data);
292
+ addLog(`STT error: ${errMsg}`, 'err');
299
293
  stopListening();
300
294
  }),
301
295
  socket.on('stt:stopped', (data) => {
@@ -505,7 +499,8 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
505
499
 
506
500
  const ttsAudio = useTTSAnalyzer();
507
501
  const streamIdRef = useRef<string | null>(null);
508
- const activeWordIdxRef = useRef(-1);
502
+ const playStartRef = useRef(0);
503
+ const wordTimersRef = useRef<ReturnType<typeof setTimeout>[]>([]);
509
504
  const unsubsRef = useRef<Array<() => void>>([]);
510
505
 
511
506
  function addLog(msg: string, kind: LogEntry['kind'] = 'info') {
@@ -528,29 +523,45 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
528
523
  addLog(`Got tts:chunk streamId=${data.streamId} (expected=${streamId}) audioLen=${data.audio?.length ?? 0}`);
529
524
  if (data.streamId !== streamId) return;
530
525
  if (data.audio) {
526
+ if (!playStartRef.current) playStartRef.current = Date.now();
531
527
  ttsAudio.playChunk(data.audio);
532
528
  addLog(`Queued audio chunk (${data.audio.length} b64 chars)`, 'ok');
533
529
  }
534
530
  }),
535
531
  socket.on('tts:word', (data) => {
536
532
  if (data.streamId !== streamId) return;
537
- addLog(`Word: "${data.word}"`);
538
- if (data.word) {
539
- setCurrentWord(data.word);
540
- activeWordIdxRef.current++;
541
- const idx = activeWordIdxRef.current;
542
- setWordHistory((prev) => {
543
- const next = prev.map((w) => ({ ...w, active: false }));
544
- if (idx < next.length) {
545
- next[idx] = { ...next[idx]!, active: true };
533
+ const word = data.word ?? (data as Record<string, unknown>).text as string | undefined;
534
+ const idx = (data as Record<string, unknown>).wordIndex as number | undefined;
535
+ addLog(`Word: "${word}" idx=${idx} startMs=${data.startMs}`);
536
+ if (word != null) {
537
+ // Schedule highlight at the word's startMs relative to playback start
538
+ const delay = typeof data.startMs === 'number' ? data.startMs - (Date.now() - playStartRef.current) : 0;
539
+ const apply = () => {
540
+ setCurrentWord(word);
541
+ if (typeof idx === 'number') {
542
+ setWordHistory((prev) => {
543
+ const next = prev.map((w) => ({ ...w, active: false }));
544
+ if (idx < next.length) {
545
+ next[idx] = { ...next[idx]!, active: true };
546
+ }
547
+ return next;
548
+ });
546
549
  }
547
- return next;
548
- });
550
+ };
551
+ if (delay > 10) {
552
+ const timer = setTimeout(apply, delay);
553
+ wordTimersRef.current.push(timer);
554
+ } else {
555
+ apply();
556
+ }
549
557
  }
550
558
  }),
551
559
  socket.on('tts:done', (data) => {
552
560
  addLog(`Got tts:done streamId=${data.streamId}`);
553
561
  if (data.streamId !== streamId) return;
562
+ for (const t of wordTimersRef.current) clearTimeout(t);
563
+ wordTimersRef.current = [];
564
+ playStartRef.current = 0;
554
565
  setPlaying(false);
555
566
  setCurrentWord('');
556
567
  addLog('Playback complete', 'ok');
@@ -560,6 +571,9 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
560
571
  socket.on('tts:error', (data) => {
561
572
  addLog(`Got tts:error streamId=${data.streamId} msg=${data.message}`, 'err');
562
573
  if (data.streamId !== streamId) return;
574
+ for (const t of wordTimersRef.current) clearTimeout(t);
575
+ wordTimersRef.current = [];
576
+ playStartRef.current = 0;
563
577
  setPlaying(false);
564
578
  addLog(`TTS error: ${data.message ?? 'unknown'}`, 'err');
565
579
  unsubAll();
@@ -572,7 +586,9 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
572
586
  if (!text.trim()) return;
573
587
  const streamId = `tts-${++ttsCounter}`;
574
588
  streamIdRef.current = streamId;
575
- activeWordIdxRef.current = -1;
589
+ playStartRef.current = 0;
590
+ for (const t of wordTimersRef.current) clearTimeout(t);
591
+ wordTimersRef.current = [];
576
592
 
577
593
  setPlaying(true);
578
594
  setCurrentWord('');
@@ -613,6 +629,9 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
613
629
  if (streamIdRef.current) {
614
630
  socket.send('tts:cancel', { streamId: streamIdRef.current });
615
631
  }
632
+ for (const t of wordTimersRef.current) clearTimeout(t);
633
+ wordTimersRef.current = [];
634
+ playStartRef.current = 0;
616
635
  unsubAll();
617
636
  socket.release();
618
637
  setPlaying(false);