@storyteller-platform/align 0.1.57 → 0.1.58

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 (118) hide show
  1. package/dist/align/align.cjs +38 -19
  2. package/dist/align/align.d.cts +12 -1
  3. package/dist/align/align.d.ts +12 -1
  4. package/dist/align/align.js +38 -19
  5. package/dist/align/ctc/Aligner.cjs +800 -0
  6. package/dist/align/ctc/Aligner.d.cts +56 -0
  7. package/dist/align/ctc/Aligner.d.ts +56 -0
  8. package/dist/align/ctc/Aligner.js +789 -0
  9. package/dist/align/ctc/align.cjs +189 -0
  10. package/dist/align/ctc/align.d.cts +14 -0
  11. package/dist/align/ctc/align.d.ts +14 -0
  12. package/dist/align/ctc/align.js +132 -0
  13. package/dist/{process/mime.cjs → align/ctc/emissions.cjs} +7 -20
  14. package/dist/align/ctc/emissions.d.cts +6 -0
  15. package/dist/align/ctc/emissions.d.ts +6 -0
  16. package/dist/align/ctc/emissions.js +7 -0
  17. package/dist/align/ctc/forcedAlign.cjs +273 -0
  18. package/dist/align/ctc/forcedAlign.d.cts +21 -0
  19. package/dist/align/ctc/forcedAlign.d.ts +21 -0
  20. package/dist/align/ctc/forcedAlign.js +248 -0
  21. package/dist/align/ctc/greedyDecode.cjs +61 -0
  22. package/dist/align/ctc/greedyDecode.d.cts +15 -0
  23. package/dist/align/ctc/greedyDecode.d.ts +15 -0
  24. package/dist/align/ctc/greedyDecode.js +37 -0
  25. package/dist/align/ctc/mediaOverlay.cjs +248 -0
  26. package/dist/align/ctc/mediaOverlay.d.cts +16 -0
  27. package/dist/align/ctc/mediaOverlay.d.ts +16 -0
  28. package/dist/align/ctc/mediaOverlay.js +224 -0
  29. package/dist/align/ctc/report.cjs +66 -0
  30. package/dist/align/ctc/report.d.cts +79 -0
  31. package/dist/align/ctc/report.d.ts +79 -0
  32. package/dist/align/ctc/report.js +42 -0
  33. package/dist/align/ctc/search.cjs +437 -0
  34. package/dist/align/ctc/search.d.cts +46 -0
  35. package/dist/align/ctc/search.d.ts +46 -0
  36. package/dist/align/ctc/search.js +412 -0
  37. package/dist/align/getSentenceRanges.cjs +9 -3
  38. package/dist/align/getSentenceRanges.d.cts +1 -0
  39. package/dist/align/getSentenceRanges.d.ts +1 -0
  40. package/dist/align/getSentenceRanges.js +9 -3
  41. package/dist/align/parse.cjs +17 -4
  42. package/dist/align/parse.d.cts +8 -4
  43. package/dist/align/parse.d.ts +8 -4
  44. package/dist/align/parse.js +19 -4
  45. package/dist/align/search.cjs +76 -23
  46. package/dist/align/search.d.cts +8 -4
  47. package/dist/align/search.d.ts +8 -4
  48. package/dist/align/search.js +76 -24
  49. package/dist/align/slugify.cjs +3 -2
  50. package/dist/align/slugify.d.cts +1 -1
  51. package/dist/align/slugify.d.ts +1 -1
  52. package/dist/align/slugify.js +3 -2
  53. package/dist/cli/bin.cjs +204 -114
  54. package/dist/cli/bin.js +194 -103
  55. package/dist/common/ffmpeg.cjs +10 -5
  56. package/dist/common/ffmpeg.js +10 -5
  57. package/dist/common/logging.cjs +33 -1
  58. package/dist/common/logging.js +33 -1
  59. package/dist/emit/emit.cjs +105 -0
  60. package/dist/emit/emit.d.cts +15 -0
  61. package/dist/emit/emit.d.ts +15 -0
  62. package/dist/emit/emit.js +86 -0
  63. package/dist/emit/fs.cjs +227 -0
  64. package/dist/emit/fs.d.cts +22 -0
  65. package/dist/emit/fs.d.ts +22 -0
  66. package/dist/emit/fs.js +162 -0
  67. package/dist/emit/parse.cjs +68 -0
  68. package/dist/emit/parse.d.cts +26 -0
  69. package/dist/emit/parse.d.ts +26 -0
  70. package/dist/emit/parse.js +58 -0
  71. package/dist/index.d.cts +1 -1
  72. package/dist/index.d.ts +1 -1
  73. package/dist/markup/model.cjs +0 -16
  74. package/dist/markup/model.d.cts +1 -1
  75. package/dist/markup/model.d.ts +1 -1
  76. package/dist/markup/model.js +0 -12
  77. package/dist/markup/parseDom.cjs +13 -14
  78. package/dist/markup/parseDom.d.cts +2 -2
  79. package/dist/markup/parseDom.d.ts +2 -2
  80. package/dist/markup/parseDom.js +13 -18
  81. package/dist/markup/resolvedPos.d.cts +1 -1
  82. package/dist/markup/resolvedPos.d.ts +1 -1
  83. package/dist/markup/segmentation.cjs +3 -1
  84. package/dist/markup/segmentation.js +3 -1
  85. package/dist/markup/serializeDom.cjs +1 -1
  86. package/dist/markup/serializeDom.d.cts +1 -1
  87. package/dist/markup/serializeDom.d.ts +1 -1
  88. package/dist/markup/serializeDom.js +1 -1
  89. package/dist/markup/transform.cjs +5 -2
  90. package/dist/markup/transform.d.cts +1 -1
  91. package/dist/markup/transform.d.ts +1 -1
  92. package/dist/markup/transform.js +5 -4
  93. package/dist/{model-CZ2mMHJO.d.cts → model-CeOMDDgt.d.cts} +3 -11
  94. package/dist/{model-CZ2mMHJO.d.ts → model-CeOMDDgt.d.ts} +3 -11
  95. package/dist/process/processAudiobook.cjs +12 -23
  96. package/dist/process/processAudiobook.js +14 -30
  97. package/dist/process/ranges.cjs +2 -2
  98. package/dist/process/ranges.js +2 -2
  99. package/dist/readium/guidedNavigation.cjs +8 -8
  100. package/dist/readium/guidedNavigation.js +8 -8
  101. package/dist/readium/manifest.cjs +5 -4
  102. package/dist/readium/manifest.js +5 -4
  103. package/dist/snapshot/ctc/snapshot.cjs +261 -0
  104. package/dist/snapshot/ctc/snapshot.d.cts +6 -0
  105. package/dist/snapshot/ctc/snapshot.d.ts +6 -0
  106. package/dist/snapshot/ctc/snapshot.js +200 -0
  107. package/dist/snapshot/parse.cjs +29 -16
  108. package/dist/snapshot/parse.d.cts +14 -10
  109. package/dist/snapshot/parse.d.ts +14 -10
  110. package/dist/snapshot/parse.js +32 -17
  111. package/dist/transcribe/parse.d.cts +6 -6
  112. package/dist/transcribe/parse.d.ts +6 -6
  113. package/dist/transcribe/transcribe.cjs +4 -2
  114. package/dist/transcribe/transcribe.js +4 -2
  115. package/package.json +6 -4
  116. package/dist/process/mime.d.cts +0 -3
  117. package/dist/process/mime.d.ts +0 -3
  118. package/dist/process/mime.js +0 -24
package/dist/cli/bin.cjs CHANGED
@@ -69,27 +69,31 @@ var __callDispose = (stack, error, hasError) => {
69
69
  };
70
70
  var import_node_crypto = require("node:crypto");
71
71
  var import_node_fs = require("node:fs");
72
- var os = __toESM(require("node:os"), 1);
73
72
  var import_node_path = require("node:path");
74
73
  var import_core = require("@optique/core");
75
74
  var import_run = require("@optique/run");
76
75
  var import_valueparser = require("@optique/run/valueparser");
77
76
  var import_cli_progress = require("cli-progress");
78
77
  var import_epub = require("@storyteller-platform/epub");
78
+ var import_fs = require("@storyteller-platform/fs");
79
79
  var import_package = __toESM(require("../../package.json"), 1);
80
80
  var import_align = require("../align/align.cjs");
81
+ var import_align2 = require("../align/ctc/align.cjs");
81
82
  var import_parse = require("../align/parse.cjs");
82
83
  var import_logging = require("../common/logging.cjs");
83
84
  var import_parse2 = require("../common/parse.cjs");
85
+ var import_emit = require("../emit/emit.cjs");
86
+ var import_parse3 = require("../emit/parse.cjs");
84
87
  var import_markup = require("../markup/markup.cjs");
85
- var import_parse3 = require("../markup/parse.cjs");
86
- var import_parse4 = require("../process/parse.cjs");
88
+ var import_parse4 = require("../markup/parse.cjs");
89
+ var import_parse5 = require("../process/parse.cjs");
87
90
  var import_processAudiobook = require("../process/processAudiobook.cjs");
88
- var import_parse5 = require("../snapshot/parse.cjs");
89
- var import_snapshot = require("../snapshot/snapshot.cjs");
90
- var import_parse6 = require("../transcribe/parse.cjs");
91
+ var import_snapshot = require("../snapshot/ctc/snapshot.cjs");
92
+ var import_parse6 = require("../snapshot/parse.cjs");
93
+ var import_snapshot2 = require("../snapshot/snapshot.cjs");
94
+ var import_parse7 = require("../transcribe/parse.cjs");
91
95
  var import_transcribe = require("../transcribe/transcribe.cjs");
92
- var import_parse7 = require("../upgradeEpub/parse.cjs");
96
+ var import_parse8 = require("../upgradeEpub/parse.cjs");
93
97
  var import_upgradeEpub = require("../upgradeEpub/upgradeEpub.cjs");
94
98
  const pipelineCommand = (0, import_core.merge)(
95
99
  (0, import_core.object)({
@@ -97,9 +101,6 @@ const pipelineCommand = (0, import_core.merge)(
97
101
  processedAudio: (0, import_core.optional)(
98
102
  (0, import_core.option)("--processed-audio", (0, import_valueparser.path)({ type: "directory" }))
99
103
  ),
100
- transcriptions: (0, import_core.optional)(
101
- (0, import_core.option)("--transcriptions", (0, import_valueparser.path)({ type: "directory" }))
102
- ),
103
104
  markedup: (0, import_core.optional)(
104
105
  (0, import_core.option)("--markedup", (0, import_valueparser.path)({ type: "file", extensions: [".epub"] }))
105
106
  ),
@@ -113,8 +114,26 @@ const pipelineCommand = (0, import_core.merge)(
113
114
  ),
114
115
  output: (0, import_core.option)("--output", (0, import_valueparser.path)({ type: "file", extensions: [".epub"] }))
115
116
  }),
116
- import_parse4.processParser,
117
- (0, import_core.group)("Transcription", import_parse6.transcribeParser),
117
+ import_parse5.processParser,
118
+ (0, import_core.or)(
119
+ (0, import_core.merge)(
120
+ (0, import_core.object)({
121
+ ctc: (0, import_core.flag)("--ctc", {
122
+ description: import_core.message`Use CTC emissions instead of transcriptions for alignment`
123
+ }),
124
+ emissions: (0, import_core.optional)((0, import_core.option)("--emissions", (0, import_valueparser.path)({ type: "directory" })))
125
+ }),
126
+ import_parse3.emitParser
127
+ ),
128
+ (0, import_core.merge)(
129
+ (0, import_core.group)("Transcription", import_parse7.transcribeParser),
130
+ (0, import_core.object)({
131
+ transcriptions: (0, import_core.optional)(
132
+ (0, import_core.option)("--transcriptions", (0, import_valueparser.path)({ type: "directory" }))
133
+ )
134
+ })
135
+ )
136
+ ),
118
137
  import_parse2.autoUpgradeParser,
119
138
  import_parse2.removeNcxParser,
120
139
  import_parse2.granularityParser,
@@ -123,17 +142,25 @@ const pipelineCommand = (0, import_core.merge)(
123
142
  import_parse2.loggingParser
124
143
  );
125
144
  const parser = (0, import_core.or)(
126
- import_parse4.processCommand,
127
- import_parse6.transcribeCommand,
128
- import_parse7.upgradeEpubCommand,
129
- import_parse3.markupCommand,
145
+ import_parse5.processCommand,
146
+ import_parse7.transcribeCommand,
147
+ import_parse3.emitCommand,
148
+ import_parse8.upgradeEpubCommand,
149
+ import_parse4.markupCommand,
130
150
  import_parse.alignCommand,
131
151
  pipelineCommand,
132
- import_parse5.snapshotCommand
152
+ import_parse6.snapshotCommand
133
153
  );
134
154
  async function main() {
135
155
  var _stack2 = [];
136
156
  try {
157
+ process.on("SIGINT", () => {
158
+ try {
159
+ progressBar.stop();
160
+ } finally {
161
+ process.exit(130);
162
+ }
163
+ });
137
164
  const parsed = (0, import_run.run)(parser, {
138
165
  showChoices: true,
139
166
  showDefault: true,
@@ -157,6 +184,17 @@ async function main() {
157
184
  progressBar.start(100, 0);
158
185
  }
159
186
  }
187
+ function updateProgressBar(progress) {
188
+ if (parsed.action === "upgrade-epub") return;
189
+ if (parsed.noProgress || parsed.logLevel !== "silent") {
190
+ return;
191
+ }
192
+ const floored = Math.floor(progress * 100);
193
+ if (floored === Math.floor(progressBar.getProgress() * 100)) {
194
+ return;
195
+ }
196
+ progressBar.update(floored);
197
+ }
160
198
  resetProgressBar();
161
199
  process.on("SIGINT", () => {
162
200
  controller.abort();
@@ -178,11 +216,7 @@ async function main() {
178
216
  parallelism: parsed.parallelism,
179
217
  signal: controller.signal,
180
218
  logger,
181
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
182
- onProgress: (progress) => {
183
- progressBar.update(Math.floor(progress * 100));
184
- }
185
- }
219
+ onProgress: updateProgressBar
186
220
  });
187
221
  if (parsed.time) {
188
222
  timing.print("Process audiobook");
@@ -198,11 +232,7 @@ async function main() {
198
232
  ...parsed,
199
233
  signal: controller.signal,
200
234
  logger,
201
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
202
- onProgress: (progress) => {
203
- progressBar.update(Math.floor(progress * 100));
204
- }
205
- }
235
+ onProgress: updateProgressBar
206
236
  }
207
237
  );
208
238
  if (parsed.time) {
@@ -210,6 +240,13 @@ async function main() {
210
240
  }
211
241
  break;
212
242
  }
243
+ case "emit": {
244
+ await (0, import_emit.emit)(parsed.input, parsed.output, {
245
+ ...parsed,
246
+ onProgress: updateProgressBar
247
+ });
248
+ break;
249
+ }
213
250
  case "upgrade-epub": {
214
251
  await (0, import_upgradeEpub.upgradeEpub)(parsed.input, parsed.output, {
215
252
  removeNcx: parsed.removeNcx
@@ -220,8 +257,7 @@ async function main() {
220
257
  let input = parsed.input;
221
258
  if (parsed.autoupgrade) {
222
259
  logger.info("Upgrading EPUB 2 to EPUB 3");
223
- input = (0, import_node_path.join)(
224
- os.tmpdir(),
260
+ input = (0, import_fs.scratchPath)(
225
261
  `stalign-autoupgrade-${(0, import_node_crypto.randomUUID)()}`,
226
262
  (0, import_node_path.basename)(parsed.input)
227
263
  );
@@ -231,11 +267,7 @@ async function main() {
231
267
  primaryLocale: parsed.language ?? new Intl.Locale("en-US"),
232
268
  granularity: parsed.granularity,
233
269
  logger,
234
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
235
- onProgress: (progress) => {
236
- progressBar.update(Math.floor(progress * 100));
237
- }
238
- }
270
+ onProgress: updateProgressBar
239
271
  });
240
272
  if (parsed.time) {
241
273
  timing.print("Mark up EPUB");
@@ -246,34 +278,50 @@ async function main() {
246
278
  let input = parsed.epub;
247
279
  if (parsed.autoupgrade) {
248
280
  logger.info("Upgrading EPUB 2 to EPUB 3");
249
- input = (0, import_node_path.join)(
250
- os.tmpdir(),
281
+ input = (0, import_fs.scratchPath)(
251
282
  `stalign-autoupgrade-${(0, import_node_crypto.randomUUID)()}`,
252
283
  (0, import_node_path.basename)(parsed.epub)
253
284
  );
254
285
  await (0, import_upgradeEpub.upgradeEpub)(parsed.epub, input, { removeNcx: parsed.removeNcx });
255
286
  }
256
- const timing = await (0, import_align.align)(
257
- input,
258
- parsed.output,
259
- parsed.transcriptions,
260
- parsed.audiobook,
261
- {
262
- granularity: parsed.granularity,
263
- textRef: parsed.textRef,
264
- outFormat: parsed.outFormat,
265
- primaryLocale: parsed.language,
266
- reportsPath: parsed.reports,
267
- logger,
268
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
269
- onProgress: (progress) => {
270
- progressBar.update(Math.floor(progress * 100));
271
- }
287
+ if ("ctc" in parsed) {
288
+ const timing = await (0, import_align2.ctcAlign)(
289
+ input,
290
+ parsed.output,
291
+ parsed.emissions,
292
+ parsed.audiobook,
293
+ {
294
+ granularity: parsed.granularity,
295
+ textRef: parsed.textRef,
296
+ outFormat: parsed.outFormat,
297
+ primaryLocale: parsed.language,
298
+ reportsPath: parsed.reports,
299
+ logger,
300
+ onProgress: updateProgressBar
272
301
  }
302
+ );
303
+ if (parsed.time) {
304
+ timing.print("Align EPUB and audiobook");
305
+ }
306
+ } else {
307
+ const timing = await (0, import_align.align)(
308
+ input,
309
+ parsed.output,
310
+ parsed.transcriptions,
311
+ parsed.audiobook,
312
+ {
313
+ granularity: parsed.granularity,
314
+ textRef: parsed.textRef,
315
+ outFormat: parsed.outFormat,
316
+ primaryLocale: parsed.language,
317
+ reportsPath: parsed.reports,
318
+ logger,
319
+ onProgress: updateProgressBar
320
+ }
321
+ );
322
+ if (parsed.time) {
323
+ timing.print("Align EPUB and audiobook");
273
324
  }
274
- );
275
- if (parsed.time) {
276
- timing.print("Align EPUB and audiobook");
277
325
  }
278
326
  break;
279
327
  }
@@ -283,8 +331,7 @@ async function main() {
283
331
  let input = parsed.epub;
284
332
  if (parsed.autoupgrade) {
285
333
  logger.info("Upgrading EPUB 2 to EPUB 3");
286
- input = (0, import_node_path.join)(
287
- os.tmpdir(),
334
+ input = (0, import_fs.scratchPath)(
288
335
  `stalign-autoupgrade-${(0, import_node_crypto.randomUUID)()}`,
289
336
  (0, import_node_path.basename)(parsed.epub)
290
337
  );
@@ -293,7 +340,7 @@ async function main() {
293
340
  const epub = __using(_stack, await import_epub.Epub.from(input));
294
341
  const primaryLocale = parsed.language ?? await epub.getLanguage() ?? new Intl.Locale("en-US");
295
342
  epub.discardAndClose();
296
- const processedAudio = parsed.processedAudio ?? (0, import_node_path.join)(os.tmpdir(), `stalign-processed-${(0, import_node_crypto.randomUUID)()}`);
343
+ const processedAudio = parsed.processedAudio ?? (0, import_fs.scratchPath)(`stalign-processed-${(0, import_node_crypto.randomUUID)()}`);
297
344
  if (!parsed.processedAudio) {
298
345
  stack.defer(() => {
299
346
  (0, import_node_fs.rmSync)(processedAudio, { recursive: true, force: true });
@@ -310,11 +357,7 @@ async function main() {
310
357
  maxLength: parsed.maxLength / 60,
311
358
  parallelism: parsed.parallelTranscodes,
312
359
  signal: controller.signal,
313
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
314
- onProgress: (progress) => {
315
- progressBar.update(Math.floor(progress * 100));
316
- }
317
- }
360
+ onProgress: updateProgressBar
318
361
  }
319
362
  );
320
363
  resetProgressBar();
@@ -326,36 +369,56 @@ async function main() {
326
369
  }
327
370
  logger.info("Transcribing...");
328
371
  startProgressBar();
329
- const transcriptions = parsed.transcriptions ?? (0, import_node_path.join)(os.tmpdir(), `stalign-transcriptions-${(0, import_node_crypto.randomUUID)()}`);
330
- if (!parsed.transcriptions) {
331
- stack.defer(() => {
332
- (0, import_node_fs.rmSync)(transcriptions, { recursive: true, force: true });
333
- });
334
- }
335
- const transcribeTiming = await (0, import_transcribe.transcribe)(
336
- processedAudio,
337
- transcriptions,
338
- primaryLocale,
339
- {
372
+ let emissions;
373
+ let transcriptions;
374
+ if ("ctc" in parsed) {
375
+ emissions = parsed.emissions ?? (0, import_fs.scratchPath)(`stalign-emissions-${(0, import_node_crypto.randomUUID)()}`);
376
+ if (!parsed.emissions) {
377
+ stack.defer(() => {
378
+ (0, import_node_fs.rmSync)(emissions, { recursive: true, force: true });
379
+ });
380
+ }
381
+ const transcribeTiming = await (0, import_emit.emit)(processedAudio, emissions, {
340
382
  ...parsed,
341
- parallelism: parsed.parallelTranscribes,
342
383
  signal: controller.signal,
343
384
  logger,
344
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
345
- onProgress: (progress) => {
346
- progressBar.update(Math.floor(progress * 100));
347
- }
385
+ onProgress: updateProgressBar
386
+ });
387
+ resetProgressBar();
388
+ logger.info(
389
+ `Generating emissions for audiobook complete, emissions saved to ${emissions}.`
390
+ );
391
+ if (parsed.time) {
392
+ transcribeTiming.print();
393
+ }
394
+ } else {
395
+ transcriptions = parsed.transcriptions ?? (0, import_fs.scratchPath)(`stalign-transcriptions-${(0, import_node_crypto.randomUUID)()}`);
396
+ if (!parsed.transcriptions) {
397
+ stack.defer(() => {
398
+ (0, import_node_fs.rmSync)(transcriptions, { recursive: true, force: true });
399
+ });
400
+ }
401
+ const transcribeTiming = await (0, import_transcribe.transcribe)(
402
+ processedAudio,
403
+ transcriptions,
404
+ primaryLocale,
405
+ {
406
+ ...parsed,
407
+ parallelism: parsed.parallelTranscribes,
408
+ signal: controller.signal,
409
+ logger,
410
+ onProgress: updateProgressBar
348
411
  }
412
+ );
413
+ resetProgressBar();
414
+ logger.info(
415
+ `Transcribing audiobook complete, transcriptions saved to ${transcriptions}.`
416
+ );
417
+ if (parsed.time) {
418
+ transcribeTiming.print();
349
419
  }
350
- );
351
- resetProgressBar();
352
- logger.info(
353
- `Transcribing audiobook complete, transcriptions saved to ${transcriptions}.`
354
- );
355
- if (parsed.time) {
356
- transcribeTiming.print();
357
420
  }
358
- const markedup = parsed.textRef === "id-fragment" ? parsed.markedup ?? (0, import_node_path.join)(os.tmpdir(), `stalign-markedup-${(0, import_node_crypto.randomUUID)()}.epub`) : parsed.epub;
421
+ const markedup = parsed.textRef === "id-fragment" ? parsed.markedup ?? (0, import_fs.scratchPath)(`stalign-markedup-${(0, import_node_crypto.randomUUID)()}.epub`) : parsed.epub;
359
422
  if (parsed.textRef === "id-fragment") {
360
423
  logger.info("Marking up EPUB...");
361
424
  startProgressBar();
@@ -368,11 +431,7 @@ async function main() {
368
431
  granularity: parsed.granularity,
369
432
  primaryLocale,
370
433
  logger,
371
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
372
- onProgress: (progress) => {
373
- progressBar.update(Math.floor(progress * 100));
374
- }
375
- }
434
+ onProgress: updateProgressBar
376
435
  });
377
436
  resetProgressBar();
378
437
  logger.info(`Markup complete, marked up EPUB saved to ${markedup}.`);
@@ -384,29 +443,52 @@ async function main() {
384
443
  }
385
444
  logger.info("Aligning EPUB with audiobook...");
386
445
  startProgressBar();
387
- const alignTiming = await (0, import_align.align)(
388
- markedup,
389
- parsed.output,
390
- transcriptions,
391
- processedAudio,
392
- {
393
- granularity: parsed.granularity,
394
- textRef: parsed.textRef,
395
- outFormat: parsed.outFormat,
396
- primaryLocale,
397
- reportsPath: parsed.reports,
398
- logger,
399
- ...!parsed.noProgress && parsed.logLevel === "silent" && {
400
- onProgress: (progress) => {
401
- progressBar.update(Math.floor(progress * 100));
402
- }
446
+ if ("ctc" in parsed) {
447
+ const timing = await (0, import_align2.ctcAlign)(
448
+ markedup,
449
+ parsed.output,
450
+ emissions,
451
+ processedAudio,
452
+ {
453
+ granularity: parsed.granularity,
454
+ textRef: parsed.textRef,
455
+ outFormat: parsed.outFormat,
456
+ primaryLocale: parsed.language,
457
+ reportsPath: parsed.reports,
458
+ logger,
459
+ onProgress: updateProgressBar
403
460
  }
461
+ );
462
+ resetProgressBar();
463
+ logger.info(
464
+ `Alignment complete, aligned EPUB saved to ${parsed.output}`
465
+ );
466
+ if (parsed.time) {
467
+ timing.print("Align EPUB and audiobook");
468
+ }
469
+ } else {
470
+ const alignTiming = await (0, import_align.align)(
471
+ markedup,
472
+ parsed.output,
473
+ transcriptions,
474
+ processedAudio,
475
+ {
476
+ granularity: parsed.granularity,
477
+ textRef: parsed.textRef,
478
+ outFormat: parsed.outFormat,
479
+ primaryLocale,
480
+ reportsPath: parsed.reports,
481
+ logger,
482
+ onProgress: updateProgressBar
483
+ }
484
+ );
485
+ resetProgressBar();
486
+ logger.info(
487
+ `Alignment complete, aligned EPUB saved to ${parsed.output}`
488
+ );
489
+ if (parsed.time) {
490
+ alignTiming.print();
404
491
  }
405
- );
406
- resetProgressBar();
407
- logger.info(`Alignment complete, aligned EPUB saved to ${parsed.output}`);
408
- if (parsed.time) {
409
- alignTiming.print();
410
492
  }
411
493
  break;
412
494
  } catch (_) {
@@ -416,7 +498,15 @@ async function main() {
416
498
  }
417
499
  }
418
500
  case "snapshot": {
419
- await (0, import_snapshot.snapshotAlignment)(parsed.epub, parsed.transcriptions, parsed.output);
501
+ if ("ctc" in parsed) {
502
+ await (0, import_snapshot.snapshotCtcAlignment)(parsed.epub, parsed.emissions, parsed.output);
503
+ } else {
504
+ await (0, import_snapshot2.snapshotAlignment)(
505
+ parsed.epub,
506
+ parsed.transcriptions,
507
+ parsed.output
508
+ );
509
+ }
420
510
  }
421
511
  }
422
512
  } catch (_2) {