karaoke-gen 0.57.0__py3-none-any.whl → 0.71.23__py3-none-any.whl

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 (268) hide show
  1. karaoke_gen/audio_fetcher.py +461 -0
  2. karaoke_gen/audio_processor.py +407 -30
  3. karaoke_gen/config.py +62 -113
  4. karaoke_gen/file_handler.py +32 -59
  5. karaoke_gen/karaoke_finalise/karaoke_finalise.py +148 -67
  6. karaoke_gen/karaoke_gen.py +270 -61
  7. karaoke_gen/lyrics_processor.py +13 -1
  8. karaoke_gen/metadata.py +78 -73
  9. karaoke_gen/pipeline/__init__.py +87 -0
  10. karaoke_gen/pipeline/base.py +215 -0
  11. karaoke_gen/pipeline/context.py +230 -0
  12. karaoke_gen/pipeline/executors/__init__.py +21 -0
  13. karaoke_gen/pipeline/executors/local.py +159 -0
  14. karaoke_gen/pipeline/executors/remote.py +257 -0
  15. karaoke_gen/pipeline/stages/__init__.py +27 -0
  16. karaoke_gen/pipeline/stages/finalize.py +202 -0
  17. karaoke_gen/pipeline/stages/render.py +165 -0
  18. karaoke_gen/pipeline/stages/screens.py +139 -0
  19. karaoke_gen/pipeline/stages/separation.py +191 -0
  20. karaoke_gen/pipeline/stages/transcription.py +191 -0
  21. karaoke_gen/style_loader.py +531 -0
  22. karaoke_gen/utils/bulk_cli.py +6 -0
  23. karaoke_gen/utils/cli_args.py +424 -0
  24. karaoke_gen/utils/gen_cli.py +26 -261
  25. karaoke_gen/utils/remote_cli.py +1815 -0
  26. karaoke_gen/video_background_processor.py +351 -0
  27. karaoke_gen-0.71.23.dist-info/METADATA +610 -0
  28. karaoke_gen-0.71.23.dist-info/RECORD +275 -0
  29. {karaoke_gen-0.57.0.dist-info → karaoke_gen-0.71.23.dist-info}/WHEEL +1 -1
  30. {karaoke_gen-0.57.0.dist-info → karaoke_gen-0.71.23.dist-info}/entry_points.txt +1 -0
  31. lyrics_transcriber/__init__.py +10 -0
  32. lyrics_transcriber/cli/__init__.py +0 -0
  33. lyrics_transcriber/cli/cli_main.py +285 -0
  34. lyrics_transcriber/core/__init__.py +0 -0
  35. lyrics_transcriber/core/config.py +50 -0
  36. lyrics_transcriber/core/controller.py +520 -0
  37. lyrics_transcriber/correction/__init__.py +0 -0
  38. lyrics_transcriber/correction/agentic/__init__.py +9 -0
  39. lyrics_transcriber/correction/agentic/adapter.py +71 -0
  40. lyrics_transcriber/correction/agentic/agent.py +313 -0
  41. lyrics_transcriber/correction/agentic/feedback/aggregator.py +12 -0
  42. lyrics_transcriber/correction/agentic/feedback/collector.py +17 -0
  43. lyrics_transcriber/correction/agentic/feedback/retention.py +24 -0
  44. lyrics_transcriber/correction/agentic/feedback/store.py +76 -0
  45. lyrics_transcriber/correction/agentic/handlers/__init__.py +24 -0
  46. lyrics_transcriber/correction/agentic/handlers/ambiguous.py +44 -0
  47. lyrics_transcriber/correction/agentic/handlers/background_vocals.py +68 -0
  48. lyrics_transcriber/correction/agentic/handlers/base.py +51 -0
  49. lyrics_transcriber/correction/agentic/handlers/complex_multi_error.py +46 -0
  50. lyrics_transcriber/correction/agentic/handlers/extra_words.py +74 -0
  51. lyrics_transcriber/correction/agentic/handlers/no_error.py +42 -0
  52. lyrics_transcriber/correction/agentic/handlers/punctuation.py +44 -0
  53. lyrics_transcriber/correction/agentic/handlers/registry.py +60 -0
  54. lyrics_transcriber/correction/agentic/handlers/repeated_section.py +44 -0
  55. lyrics_transcriber/correction/agentic/handlers/sound_alike.py +126 -0
  56. lyrics_transcriber/correction/agentic/models/__init__.py +5 -0
  57. lyrics_transcriber/correction/agentic/models/ai_correction.py +31 -0
  58. lyrics_transcriber/correction/agentic/models/correction_session.py +30 -0
  59. lyrics_transcriber/correction/agentic/models/enums.py +38 -0
  60. lyrics_transcriber/correction/agentic/models/human_feedback.py +30 -0
  61. lyrics_transcriber/correction/agentic/models/learning_data.py +26 -0
  62. lyrics_transcriber/correction/agentic/models/observability_metrics.py +28 -0
  63. lyrics_transcriber/correction/agentic/models/schemas.py +46 -0
  64. lyrics_transcriber/correction/agentic/models/utils.py +19 -0
  65. lyrics_transcriber/correction/agentic/observability/__init__.py +5 -0
  66. lyrics_transcriber/correction/agentic/observability/langfuse_integration.py +35 -0
  67. lyrics_transcriber/correction/agentic/observability/metrics.py +46 -0
  68. lyrics_transcriber/correction/agentic/observability/performance.py +19 -0
  69. lyrics_transcriber/correction/agentic/prompts/__init__.py +2 -0
  70. lyrics_transcriber/correction/agentic/prompts/classifier.py +227 -0
  71. lyrics_transcriber/correction/agentic/providers/__init__.py +6 -0
  72. lyrics_transcriber/correction/agentic/providers/base.py +36 -0
  73. lyrics_transcriber/correction/agentic/providers/circuit_breaker.py +145 -0
  74. lyrics_transcriber/correction/agentic/providers/config.py +73 -0
  75. lyrics_transcriber/correction/agentic/providers/constants.py +24 -0
  76. lyrics_transcriber/correction/agentic/providers/health.py +28 -0
  77. lyrics_transcriber/correction/agentic/providers/langchain_bridge.py +212 -0
  78. lyrics_transcriber/correction/agentic/providers/model_factory.py +209 -0
  79. lyrics_transcriber/correction/agentic/providers/response_cache.py +218 -0
  80. lyrics_transcriber/correction/agentic/providers/response_parser.py +111 -0
  81. lyrics_transcriber/correction/agentic/providers/retry_executor.py +127 -0
  82. lyrics_transcriber/correction/agentic/router.py +35 -0
  83. lyrics_transcriber/correction/agentic/workflows/__init__.py +5 -0
  84. lyrics_transcriber/correction/agentic/workflows/consensus_workflow.py +24 -0
  85. lyrics_transcriber/correction/agentic/workflows/correction_graph.py +59 -0
  86. lyrics_transcriber/correction/agentic/workflows/feedback_workflow.py +24 -0
  87. lyrics_transcriber/correction/anchor_sequence.py +1043 -0
  88. lyrics_transcriber/correction/corrector.py +760 -0
  89. lyrics_transcriber/correction/feedback/__init__.py +2 -0
  90. lyrics_transcriber/correction/feedback/schemas.py +107 -0
  91. lyrics_transcriber/correction/feedback/store.py +236 -0
  92. lyrics_transcriber/correction/handlers/__init__.py +0 -0
  93. lyrics_transcriber/correction/handlers/base.py +52 -0
  94. lyrics_transcriber/correction/handlers/extend_anchor.py +149 -0
  95. lyrics_transcriber/correction/handlers/levenshtein.py +189 -0
  96. lyrics_transcriber/correction/handlers/llm.py +293 -0
  97. lyrics_transcriber/correction/handlers/llm_providers.py +60 -0
  98. lyrics_transcriber/correction/handlers/no_space_punct_match.py +154 -0
  99. lyrics_transcriber/correction/handlers/relaxed_word_count_match.py +85 -0
  100. lyrics_transcriber/correction/handlers/repeat.py +88 -0
  101. lyrics_transcriber/correction/handlers/sound_alike.py +259 -0
  102. lyrics_transcriber/correction/handlers/syllables_match.py +252 -0
  103. lyrics_transcriber/correction/handlers/word_count_match.py +80 -0
  104. lyrics_transcriber/correction/handlers/word_operations.py +187 -0
  105. lyrics_transcriber/correction/operations.py +352 -0
  106. lyrics_transcriber/correction/phrase_analyzer.py +435 -0
  107. lyrics_transcriber/correction/text_utils.py +30 -0
  108. lyrics_transcriber/frontend/.gitignore +23 -0
  109. lyrics_transcriber/frontend/.yarn/releases/yarn-4.7.0.cjs +935 -0
  110. lyrics_transcriber/frontend/.yarnrc.yml +3 -0
  111. lyrics_transcriber/frontend/README.md +50 -0
  112. lyrics_transcriber/frontend/REPLACE_ALL_FUNCTIONALITY.md +210 -0
  113. lyrics_transcriber/frontend/__init__.py +25 -0
  114. lyrics_transcriber/frontend/eslint.config.js +28 -0
  115. lyrics_transcriber/frontend/index.html +18 -0
  116. lyrics_transcriber/frontend/package.json +42 -0
  117. lyrics_transcriber/frontend/public/android-chrome-192x192.png +0 -0
  118. lyrics_transcriber/frontend/public/android-chrome-512x512.png +0 -0
  119. lyrics_transcriber/frontend/public/apple-touch-icon.png +0 -0
  120. lyrics_transcriber/frontend/public/favicon-16x16.png +0 -0
  121. lyrics_transcriber/frontend/public/favicon-32x32.png +0 -0
  122. lyrics_transcriber/frontend/public/favicon.ico +0 -0
  123. lyrics_transcriber/frontend/public/nomad-karaoke-logo.png +0 -0
  124. lyrics_transcriber/frontend/src/App.tsx +212 -0
  125. lyrics_transcriber/frontend/src/api.ts +239 -0
  126. lyrics_transcriber/frontend/src/components/AIFeedbackModal.tsx +77 -0
  127. lyrics_transcriber/frontend/src/components/AddLyricsModal.tsx +114 -0
  128. lyrics_transcriber/frontend/src/components/AgenticCorrectionMetrics.tsx +204 -0
  129. lyrics_transcriber/frontend/src/components/AudioPlayer.tsx +180 -0
  130. lyrics_transcriber/frontend/src/components/CorrectedWordWithActions.tsx +167 -0
  131. lyrics_transcriber/frontend/src/components/CorrectionAnnotationModal.tsx +359 -0
  132. lyrics_transcriber/frontend/src/components/CorrectionDetailCard.tsx +281 -0
  133. lyrics_transcriber/frontend/src/components/CorrectionMetrics.tsx +162 -0
  134. lyrics_transcriber/frontend/src/components/DurationTimelineView.tsx +257 -0
  135. lyrics_transcriber/frontend/src/components/EditActionBar.tsx +68 -0
  136. lyrics_transcriber/frontend/src/components/EditModal.tsx +702 -0
  137. lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx +496 -0
  138. lyrics_transcriber/frontend/src/components/EditWordList.tsx +379 -0
  139. lyrics_transcriber/frontend/src/components/FileUpload.tsx +77 -0
  140. lyrics_transcriber/frontend/src/components/FindReplaceModal.tsx +467 -0
  141. lyrics_transcriber/frontend/src/components/Header.tsx +387 -0
  142. lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx +1373 -0
  143. lyrics_transcriber/frontend/src/components/MetricsDashboard.tsx +51 -0
  144. lyrics_transcriber/frontend/src/components/ModeSelector.tsx +67 -0
  145. lyrics_transcriber/frontend/src/components/ModelSelector.tsx +23 -0
  146. lyrics_transcriber/frontend/src/components/PreviewVideoSection.tsx +144 -0
  147. lyrics_transcriber/frontend/src/components/ReferenceView.tsx +268 -0
  148. lyrics_transcriber/frontend/src/components/ReplaceAllLyricsModal.tsx +688 -0
  149. lyrics_transcriber/frontend/src/components/ReviewChangesModal.tsx +354 -0
  150. lyrics_transcriber/frontend/src/components/SegmentDetailsModal.tsx +64 -0
  151. lyrics_transcriber/frontend/src/components/TimelineEditor.tsx +376 -0
  152. lyrics_transcriber/frontend/src/components/TimingOffsetModal.tsx +131 -0
  153. lyrics_transcriber/frontend/src/components/TranscriptionView.tsx +256 -0
  154. lyrics_transcriber/frontend/src/components/WordDivider.tsx +187 -0
  155. lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx +379 -0
  156. lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx +56 -0
  157. lyrics_transcriber/frontend/src/components/shared/components/Word.tsx +87 -0
  158. lyrics_transcriber/frontend/src/components/shared/constants.ts +20 -0
  159. lyrics_transcriber/frontend/src/components/shared/hooks/useWordClick.ts +180 -0
  160. lyrics_transcriber/frontend/src/components/shared/styles.ts +13 -0
  161. lyrics_transcriber/frontend/src/components/shared/types.js +2 -0
  162. lyrics_transcriber/frontend/src/components/shared/types.ts +129 -0
  163. lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts +177 -0
  164. lyrics_transcriber/frontend/src/components/shared/utils/localStorage.ts +78 -0
  165. lyrics_transcriber/frontend/src/components/shared/utils/referenceLineCalculator.ts +75 -0
  166. lyrics_transcriber/frontend/src/components/shared/utils/segmentOperations.ts +360 -0
  167. lyrics_transcriber/frontend/src/components/shared/utils/timingUtils.ts +110 -0
  168. lyrics_transcriber/frontend/src/components/shared/utils/wordUtils.ts +22 -0
  169. lyrics_transcriber/frontend/src/hooks/useManualSync.ts +435 -0
  170. lyrics_transcriber/frontend/src/main.tsx +17 -0
  171. lyrics_transcriber/frontend/src/theme.ts +177 -0
  172. lyrics_transcriber/frontend/src/types/global.d.ts +9 -0
  173. lyrics_transcriber/frontend/src/types.js +2 -0
  174. lyrics_transcriber/frontend/src/types.ts +199 -0
  175. lyrics_transcriber/frontend/src/validation.ts +132 -0
  176. lyrics_transcriber/frontend/src/vite-env.d.ts +1 -0
  177. lyrics_transcriber/frontend/tsconfig.app.json +26 -0
  178. lyrics_transcriber/frontend/tsconfig.json +25 -0
  179. lyrics_transcriber/frontend/tsconfig.node.json +23 -0
  180. lyrics_transcriber/frontend/tsconfig.tsbuildinfo +1 -0
  181. lyrics_transcriber/frontend/update_version.js +11 -0
  182. lyrics_transcriber/frontend/vite.config.d.ts +2 -0
  183. lyrics_transcriber/frontend/vite.config.js +10 -0
  184. lyrics_transcriber/frontend/vite.config.ts +11 -0
  185. lyrics_transcriber/frontend/web_assets/android-chrome-192x192.png +0 -0
  186. lyrics_transcriber/frontend/web_assets/android-chrome-512x512.png +0 -0
  187. lyrics_transcriber/frontend/web_assets/apple-touch-icon.png +0 -0
  188. lyrics_transcriber/frontend/web_assets/assets/index-DdJTDWH3.js +42039 -0
  189. lyrics_transcriber/frontend/web_assets/assets/index-DdJTDWH3.js.map +1 -0
  190. lyrics_transcriber/frontend/web_assets/favicon-16x16.png +0 -0
  191. lyrics_transcriber/frontend/web_assets/favicon-32x32.png +0 -0
  192. lyrics_transcriber/frontend/web_assets/favicon.ico +0 -0
  193. lyrics_transcriber/frontend/web_assets/index.html +18 -0
  194. lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.png +0 -0
  195. lyrics_transcriber/frontend/yarn.lock +3752 -0
  196. lyrics_transcriber/lyrics/__init__.py +0 -0
  197. lyrics_transcriber/lyrics/base_lyrics_provider.py +211 -0
  198. lyrics_transcriber/lyrics/file_provider.py +95 -0
  199. lyrics_transcriber/lyrics/genius.py +384 -0
  200. lyrics_transcriber/lyrics/lrclib.py +231 -0
  201. lyrics_transcriber/lyrics/musixmatch.py +156 -0
  202. lyrics_transcriber/lyrics/spotify.py +290 -0
  203. lyrics_transcriber/lyrics/user_input_provider.py +44 -0
  204. lyrics_transcriber/output/__init__.py +0 -0
  205. lyrics_transcriber/output/ass/__init__.py +21 -0
  206. lyrics_transcriber/output/ass/ass.py +2088 -0
  207. lyrics_transcriber/output/ass/ass_specs.txt +732 -0
  208. lyrics_transcriber/output/ass/config.py +180 -0
  209. lyrics_transcriber/output/ass/constants.py +23 -0
  210. lyrics_transcriber/output/ass/event.py +94 -0
  211. lyrics_transcriber/output/ass/formatters.py +132 -0
  212. lyrics_transcriber/output/ass/lyrics_line.py +265 -0
  213. lyrics_transcriber/output/ass/lyrics_screen.py +252 -0
  214. lyrics_transcriber/output/ass/section_detector.py +89 -0
  215. lyrics_transcriber/output/ass/section_screen.py +106 -0
  216. lyrics_transcriber/output/ass/style.py +187 -0
  217. lyrics_transcriber/output/cdg.py +619 -0
  218. lyrics_transcriber/output/cdgmaker/__init__.py +0 -0
  219. lyrics_transcriber/output/cdgmaker/cdg.py +262 -0
  220. lyrics_transcriber/output/cdgmaker/composer.py +2260 -0
  221. lyrics_transcriber/output/cdgmaker/config.py +151 -0
  222. lyrics_transcriber/output/cdgmaker/images/instrumental.png +0 -0
  223. lyrics_transcriber/output/cdgmaker/images/intro.png +0 -0
  224. lyrics_transcriber/output/cdgmaker/pack.py +507 -0
  225. lyrics_transcriber/output/cdgmaker/render.py +346 -0
  226. lyrics_transcriber/output/cdgmaker/transitions/centertexttoplogobottomtext.png +0 -0
  227. lyrics_transcriber/output/cdgmaker/transitions/circlein.png +0 -0
  228. lyrics_transcriber/output/cdgmaker/transitions/circleout.png +0 -0
  229. lyrics_transcriber/output/cdgmaker/transitions/fizzle.png +0 -0
  230. lyrics_transcriber/output/cdgmaker/transitions/largecentertexttoplogo.png +0 -0
  231. lyrics_transcriber/output/cdgmaker/transitions/rectangle.png +0 -0
  232. lyrics_transcriber/output/cdgmaker/transitions/spiral.png +0 -0
  233. lyrics_transcriber/output/cdgmaker/transitions/topleftmusicalnotes.png +0 -0
  234. lyrics_transcriber/output/cdgmaker/transitions/wipein.png +0 -0
  235. lyrics_transcriber/output/cdgmaker/transitions/wipeleft.png +0 -0
  236. lyrics_transcriber/output/cdgmaker/transitions/wipeout.png +0 -0
  237. lyrics_transcriber/output/cdgmaker/transitions/wiperight.png +0 -0
  238. lyrics_transcriber/output/cdgmaker/utils.py +132 -0
  239. lyrics_transcriber/output/countdown_processor.py +267 -0
  240. lyrics_transcriber/output/fonts/AvenirNext-Bold.ttf +0 -0
  241. lyrics_transcriber/output/fonts/DMSans-VariableFont_opsz,wght.ttf +0 -0
  242. lyrics_transcriber/output/fonts/DMSerifDisplay-Regular.ttf +0 -0
  243. lyrics_transcriber/output/fonts/Oswald-SemiBold.ttf +0 -0
  244. lyrics_transcriber/output/fonts/Zurich_Cn_BT_Bold.ttf +0 -0
  245. lyrics_transcriber/output/fonts/arial.ttf +0 -0
  246. lyrics_transcriber/output/fonts/georgia.ttf +0 -0
  247. lyrics_transcriber/output/fonts/verdana.ttf +0 -0
  248. lyrics_transcriber/output/generator.py +257 -0
  249. lyrics_transcriber/output/lrc_to_cdg.py +61 -0
  250. lyrics_transcriber/output/lyrics_file.py +102 -0
  251. lyrics_transcriber/output/plain_text.py +96 -0
  252. lyrics_transcriber/output/segment_resizer.py +431 -0
  253. lyrics_transcriber/output/subtitles.py +397 -0
  254. lyrics_transcriber/output/video.py +544 -0
  255. lyrics_transcriber/review/__init__.py +0 -0
  256. lyrics_transcriber/review/server.py +676 -0
  257. lyrics_transcriber/storage/__init__.py +0 -0
  258. lyrics_transcriber/storage/dropbox.py +225 -0
  259. lyrics_transcriber/transcribers/__init__.py +0 -0
  260. lyrics_transcriber/transcribers/audioshake.py +290 -0
  261. lyrics_transcriber/transcribers/base_transcriber.py +157 -0
  262. lyrics_transcriber/transcribers/whisper.py +330 -0
  263. lyrics_transcriber/types.py +648 -0
  264. lyrics_transcriber/utils/__init__.py +0 -0
  265. lyrics_transcriber/utils/word_utils.py +27 -0
  266. karaoke_gen-0.57.0.dist-info/METADATA +0 -167
  267. karaoke_gen-0.57.0.dist-info/RECORD +0 -23
  268. {karaoke_gen-0.57.0.dist-info → karaoke_gen-0.71.23.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,275 @@
1
+ karaoke_gen/__init__.py,sha256=ViryQjs8ALc8A7mqJGHu028zajF5-Za_etFagXlo6kk,269
2
+ karaoke_gen/audio_fetcher.py,sha256=No3LM7QIiT2B3KuzQFayCwqGfBuM5fSI22y2a_Y07EA,15013
3
+ karaoke_gen/audio_processor.py,sha256=vB8jPeTHjE9RpRNMwQjaCpgu1HlD6HNMDLf4riDYsGE,39309
4
+ karaoke_gen/config.py,sha256=LBZKpvwSgta8YoVX2GFFW-4CP22AyRtqsBn-KCeh8eg,2499
5
+ karaoke_gen/file_handler.py,sha256=feKMric_i6iVTShVU0YC4gb5HvNLHa1BbnsSJedJ8sw,8591
6
+ karaoke_gen/karaoke_finalise/__init__.py,sha256=HqZ7TIhgt_tYZ-nb_NNCaejWAcF_aK-7wJY5TaW_keM,46
7
+ karaoke_gen/karaoke_finalise/karaoke_finalise.py,sha256=sOyQCDM42YypZJpAKrHvxEiu3IEyQPBMRSjvm486idg,88828
8
+ karaoke_gen/karaoke_gen.py,sha256=uVATmUyDNrF1UeQqtIpNwHhffIQeiQjgCjNVcTSz17w,50353
9
+ karaoke_gen/lyrics_processor.py,sha256=R8vO0tF7-k5PVDiXrUMGd-4Fqa4M3QNInLy9Y3XhsgA,14912
10
+ karaoke_gen/metadata.py,sha256=SZW6TuUpkGGU98gRdjPfrR8F4vWXjnfCSGry2XD5_A4,6689
11
+ karaoke_gen/pipeline/__init__.py,sha256=-MZnba4qobr1qGDamG9CieLl2pWCZMEB5_Yur62RKeM,2106
12
+ karaoke_gen/pipeline/base.py,sha256=yg4LIm7Mc9ER0zCmZcUv4huEkotSSXK_0OAFio-TSNI,6235
13
+ karaoke_gen/pipeline/context.py,sha256=V_yIWahyMlMlmWolJGw2Ez9fulqfOJd5r4ZLMQMeJ7E,7827
14
+ karaoke_gen/pipeline/executors/__init__.py,sha256=TyGr8qCGZZdrBai1RZOQ69g6WxxUdrHLIB8HD5vlv0o,721
15
+ karaoke_gen/pipeline/executors/local.py,sha256=vs_ZU-ZEpY6pSzpfDozXyZDn1D3EwQJZSFBMUOpqx1c,5449
16
+ karaoke_gen/pipeline/executors/remote.py,sha256=TxgsOkSfltNyNK3RXZO3VZtFD_nYU68GTnEcWZcihnw,8500
17
+ karaoke_gen/pipeline/stages/__init__.py,sha256=jIzXE8nuprAmr8og_2og4uwktDzSmZbb-zr4zCXUc2I,950
18
+ karaoke_gen/pipeline/stages/finalize.py,sha256=9lzrAvmn7bh_RV8kEw5LlT0oP2IZKYqpUNAobGCDoBs,7777
19
+ karaoke_gen/pipeline/stages/render.py,sha256=nEL5UXIzR54Kd5rMqmoYAQevWYZIQ8ZkeJggeIpm14I,5691
20
+ karaoke_gen/pipeline/stages/screens.py,sha256=5CCujc7LsY2qrsg7jtmIC2HhaFMSDo85FfFSqjTEERg,4668
21
+ karaoke_gen/pipeline/stages/separation.py,sha256=x2H5RLGPMWptWzKnqEONLaH4RH9qPpKWYeIfHfFmCsE,7212
22
+ karaoke_gen/pipeline/stages/transcription.py,sha256=iPP8QWbwXVGES-L08oPqHzk8-U1VYLzEf3tVdMsOxI4,7546
23
+ karaoke_gen/resources/AvenirNext-Bold.ttf,sha256=YxgKz2OP46lwLPCpIZhVa8COi_9KRDSXw4n8dIHHQSs,327048
24
+ karaoke_gen/resources/Montserrat-Bold.ttf,sha256=mLFIaBDC7M-qF9RhCoPBJ5TAeY716etBrqA4eUKSoYc,198120
25
+ karaoke_gen/resources/Oswald-Bold.ttf,sha256=S_2mLpNkBsDTe8FQRzrj1Qr-wloGETMJgoAcSKdi1lw,87604
26
+ karaoke_gen/resources/Oswald-SemiBold.ttf,sha256=G-vSJeeyEVft7D4s7FZQtGfXAViWPjzGCImV2a4u9d8,87608
27
+ karaoke_gen/resources/Zurich_Cn_BT_Bold.ttf,sha256=WNG5LOQ-uGUF_WWT5aQHzVbyWvQqGO5sZ4E-nRmvPuI,37780
28
+ karaoke_gen/style_loader.py,sha256=13010BVxwVgamRn8K8Z9fNgLBdPs9LFmWMRMLyBdits,17908
29
+ karaoke_gen/utils/__init__.py,sha256=FpOHyeBRB06f3zMoLBUJHTDZACrabg-DoyBTxNKYyNY,722
30
+ karaoke_gen/utils/bulk_cli.py,sha256=bBRHfhvi-wkoNjAoq5rzVkaOwOraoiUhXNQY5rBsX18,19167
31
+ karaoke_gen/utils/cli_args.py,sha256=jfU6QXfzDlqZiLs58EC5eQs970tkI3-zSN2dKqW3u00,17618
32
+ karaoke_gen/utils/gen_cli.py,sha256=8TQsu8Ubd-aKeQMHBH4-j65seGnR9IBjmi-OQwR0GAA,25775
33
+ karaoke_gen/utils/remote_cli.py,sha256=DUzSTkG3R5FrZMQvi_e01NPGXvdKOGkpnEE1sJMeaEg,76648
34
+ karaoke_gen/video_background_processor.py,sha256=p3sryMxmkori4Uy2MYgmlk5_QQ7Uh9IoVJLAdkdLIUI,15124
35
+ karaoke_gen/video_generator.py,sha256=B7BQBrjkyvk3L3sctnPXnvr1rzkw0NYx5UCAl0ZiVx0,18464
36
+ lyrics_transcriber/__init__.py,sha256=g9ZbJg9U1qo7XzrC25J3bTKcNzzwUJWDVdi_7-hjcM4,412
37
+ lyrics_transcriber/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ lyrics_transcriber/cli/cli_main.py,sha256=F72ENLTj934bXjHAUbRm0toCK73qnuJhwEm9agBVKHQ,11596
39
+ lyrics_transcriber/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ lyrics_transcriber/core/config.py,sha256=AM6RZKll8tzdZtMLgvHRQb1SxiXVPek0q4vmSWVUvEo,1368
41
+ lyrics_transcriber/core/controller.py,sha256=jPoJ-r1jZ94Xp8ARN9lpSjsMAqPXuGHhwnQy_FmkBvI,25216
42
+ lyrics_transcriber/correction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ lyrics_transcriber/correction/agentic/__init__.py,sha256=p7PHiebuvRs8RDlPDs-9gLZKzXG5KfWg3fFCdDhY6pE,222
44
+ lyrics_transcriber/correction/agentic/adapter.py,sha256=Z0JBTAA7xlSdctCHqO9nBMl78C4XmqsLKKtS6BvNZNI,2912
45
+ lyrics_transcriber/correction/agentic/agent.py,sha256=KZjAKaxv6HXkNFNGDc-hXM7He3ew5kp9Q_OR43SrfJo,12310
46
+ lyrics_transcriber/correction/agentic/feedback/aggregator.py,sha256=323t8LDbE26ni83woyN7uVMSuSQhnqTgwJc-d-KuDbs,273
47
+ lyrics_transcriber/correction/agentic/feedback/collector.py,sha256=HT-2cAP_bx7Iv-0-tpZv534do111g0FlTUt2XaKoUtA,415
48
+ lyrics_transcriber/correction/agentic/feedback/retention.py,sha256=dUCUsKPCzHVQxiLLBXcdfAZ5NqiG25go0Z6GFXeK0vY,881
49
+ lyrics_transcriber/correction/agentic/feedback/store.py,sha256=u0F_6vmZlQq-Y8LiER2Xbw1q9rh3SJF4bfBnNs-Mkc4,2653
50
+ lyrics_transcriber/correction/agentic/handlers/__init__.py,sha256=QWs0MM5Efpca2T1fotWCYvCbW3aq-UIWsjB4Vat1o2I,707
51
+ lyrics_transcriber/correction/agentic/handlers/ambiguous.py,sha256=O0XEYvx0eALZ4_zNAOhVhr1DchEhms9TTKdE0xUBplU,1415
52
+ lyrics_transcriber/correction/agentic/handlers/background_vocals.py,sha256=OMfHm0vsb17yndjsrNYdPY_jXbtrLyPo-yo8KIceUJ8,2452
53
+ lyrics_transcriber/correction/agentic/handlers/base.py,sha256=rfKuVfH2bbDgPxRZ9J3NArqrdFrmURXJcY722BiN7z0,1601
54
+ lyrics_transcriber/correction/agentic/handlers/complex_multi_error.py,sha256=n_pxXpIz-n7qILdr3Hhn9OAE9a8CZSVbJIBP_mcQH9M,1534
55
+ lyrics_transcriber/correction/agentic/handlers/extra_words.py,sha256=beKN0iTnykVsJIlxMzr5d_Bgx-draFP6GYVqFIfvXaY,2735
56
+ lyrics_transcriber/correction/agentic/handlers/no_error.py,sha256=HQBQmvRFhvGDii4d2XMXFFUvzViz0gJLo5mCDushe9M,1322
57
+ lyrics_transcriber/correction/agentic/handlers/punctuation.py,sha256=1goWTJwYXFn4p_h5GxYGj2MvMJbUrrd8fltpYSZ3Ouc,1422
58
+ lyrics_transcriber/correction/agentic/handlers/registry.py,sha256=Z5wI2pYL0E_Z6OR3mWReSOaeTg8dExP7e9cP883YhSw,2178
59
+ lyrics_transcriber/correction/agentic/handlers/repeated_section.py,sha256=PwmrO_lahcoIJ3qei20uuqZrs8z1ixcouC73u78iCD8,1486
60
+ lyrics_transcriber/correction/agentic/handlers/sound_alike.py,sha256=BUly5bLZm5J41ooKFJrvceOxpOhMbjqDFJ9GmmKpX0g,4946
61
+ lyrics_transcriber/correction/agentic/models/__init__.py,sha256=d740hnUYUQXrfyorW5AXt91r7KtTtP5BhEEW4fRvPjo,93
62
+ lyrics_transcriber/correction/agentic/models/ai_correction.py,sha256=UrK6tV7RPRtl2lPGkqpD1ETndQxF4T5K356tIIB4dn4,845
63
+ lyrics_transcriber/correction/agentic/models/correction_session.py,sha256=RDuMAB3dxjz21sT6Fn-Nn80LBizXBlrA_6CbFKb7VsU,935
64
+ lyrics_transcriber/correction/agentic/models/enums.py,sha256=ai4FmzhJb9IzP4cImRsBpHHD27WgfeD8QIjlVDHyTq4,895
65
+ lyrics_transcriber/correction/agentic/models/human_feedback.py,sha256=dJHVU_ZAOmqKZqm8aBs63WuD97N1f1Iwx5acSTneE7E,955
66
+ lyrics_transcriber/correction/agentic/models/learning_data.py,sha256=4-C7TGKxhppN9sNwk0702bMP42L8V_MLX_90hmxmcX4,836
67
+ lyrics_transcriber/correction/agentic/models/observability_metrics.py,sha256=xGdOxPdqz74zPzl8bIpQRE2x8lEoSRBVBh8giQ106d8,924
68
+ lyrics_transcriber/correction/agentic/models/schemas.py,sha256=skWXqGkJnv9NvmvjktBqrH_4Ohyzg2x0ZMsVINbXKdg,2141
69
+ lyrics_transcriber/correction/agentic/models/utils.py,sha256=tX7flxCB4aLrgZWkHuEt7Gr8kaLkMsXzTdWSec6Xsts,580
70
+ lyrics_transcriber/correction/agentic/observability/__init__.py,sha256=RuaepVsltWdaF1aF_YmNVJTJ6_bbNDFo3Sp-ruBvyHA,85
71
+ lyrics_transcriber/correction/agentic/observability/langfuse_integration.py,sha256=GvgisZyy5_tDeC7Hd8SDWbd-9aAqYnMTd52uNeQ2p-I,1221
72
+ lyrics_transcriber/correction/agentic/observability/metrics.py,sha256=Js_m6ljdI6Xgd9X9eHtboCsf9gjYsN1zOv3_XSwjgKk,1907
73
+ lyrics_transcriber/correction/agentic/observability/performance.py,sha256=ekjzgL65gfs1SpKR_befu1wdWZU9xDlcafJm8htSvks,328
74
+ lyrics_transcriber/correction/agentic/prompts/__init__.py,sha256=YPgEN82oygmT_pfIj2RpZM-WOLoFv6rBAPKeIRstXuI,48
75
+ lyrics_transcriber/correction/agentic/prompts/classifier.py,sha256=pKbL4Cyj0-c_Ot9IxfKBOL7PnL0ZfUvKPLZwOMr-NDo,9730
76
+ lyrics_transcriber/correction/agentic/providers/__init__.py,sha256=PS7C4sKDfa6S9lSo33GXIRamCLsv0Jn7u0GtXuhiRD4,95
77
+ lyrics_transcriber/correction/agentic/providers/base.py,sha256=bExuntMLLInMmWWNzN81_ScWQJhNYbtlF3wZYhlX-qw,1059
78
+ lyrics_transcriber/correction/agentic/providers/circuit_breaker.py,sha256=D3Jg4YHqvy4gzlxfkALa7PztyYQpJb8NwJAonMS0TSI,4694
79
+ lyrics_transcriber/correction/agentic/providers/config.py,sha256=FsX1xIF1UG_Kbxp4tlEnZc68AsRTL4Q4XenP_VuRi6o,2937
80
+ lyrics_transcriber/correction/agentic/providers/constants.py,sha256=aDIEsDvNQLEGlGk8klAaRxJmdldGBDFqwYLuCmlYoNM,692
81
+ lyrics_transcriber/correction/agentic/providers/health.py,sha256=F8pHY5BQYvylGRDGXUHplcAJooAyiqVLRhBl4kHC1H8,710
82
+ lyrics_transcriber/correction/agentic/providers/langchain_bridge.py,sha256=hderNRLrSZn49LrGBrgdCvBP5E7tPAugjaw7TFbb0JY,7957
83
+ lyrics_transcriber/correction/agentic/providers/model_factory.py,sha256=ITPc7BLIhtHKzobERl0P7YsmunOquqbaJ_M5tinztx4,7667
84
+ lyrics_transcriber/correction/agentic/providers/response_cache.py,sha256=Byr7fQJsgUMFlsvHeVCxTiFjjnbsg3KIlEmEEtAo-Gw,7047
85
+ lyrics_transcriber/correction/agentic/providers/response_parser.py,sha256=a8pdUYKBS5X72gck3u1ndFYB__UN0UijAdxNhbHp8ZQ,3809
86
+ lyrics_transcriber/correction/agentic/providers/retry_executor.py,sha256=hX21Zwy2cSECAw7k13ndEinWRqwjo4xYoSCQ2B2CUf0,3912
87
+ lyrics_transcriber/correction/agentic/router.py,sha256=pk4xeS-BZLGJMdFj7Q7MjNaqYJF_glI590z9Alg15co,1229
88
+ lyrics_transcriber/correction/agentic/workflows/__init__.py,sha256=OsBExAbIIKxJgX6FKXFOgcUjIG9AWJQV_fESZVdO8mo,77
89
+ lyrics_transcriber/correction/agentic/workflows/consensus_workflow.py,sha256=gMuLTUxkgYaciMsI4yrZSC3wi--7V_PgaDNE-Vd6FE8,575
90
+ lyrics_transcriber/correction/agentic/workflows/correction_graph.py,sha256=kgZKnz0h9cG1EfhW7BSSl-kSpQtJrRM_S86kAniXfE4,1815
91
+ lyrics_transcriber/correction/agentic/workflows/feedback_workflow.py,sha256=KsKLD3AP66YYmXfUn-mVZjERYLtU1Zs4a-7CB2zDfas,596
92
+ lyrics_transcriber/correction/anchor_sequence.py,sha256=0xRIYElvo03NDQd5NhsfGECB_SPZ0mn55UOq-PEbV5M,54430
93
+ lyrics_transcriber/correction/corrector.py,sha256=e8N7Yys6MCmz8PbHkkl7KuxH1m3MWlH1vwCa1r3YcqA,40223
94
+ lyrics_transcriber/correction/feedback/__init__.py,sha256=i1gd0Vb4qvlzZQ3lqA3fJjt288YP7f-MBPwOzZ7Rjh4,68
95
+ lyrics_transcriber/correction/feedback/schemas.py,sha256=OiF_WUqcqiEKIoburYM8kWAIundy82PQE7ImsdP8UCk,4416
96
+ lyrics_transcriber/correction/feedback/store.py,sha256=T4IDzf1eRA9n-wdLLrLyAW1ELYgXwK9RikJgX_B3fN8,8788
97
+ lyrics_transcriber/correction/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ lyrics_transcriber/correction/handlers/base.py,sha256=ZXYMFgbCmlD62dpqdFwFPlcePdHKEFrABffnG_Mu5mI,1687
99
+ lyrics_transcriber/correction/handlers/extend_anchor.py,sha256=IADgdPmEMokUQhh6mP-wQWLYf6GfWTvJbBjOk08A-aw,6384
100
+ lyrics_transcriber/correction/handlers/levenshtein.py,sha256=hMERQHVgiUDSHtamYrAjqZ3qMMok4VmQ_MYM2-nrX6w,7864
101
+ lyrics_transcriber/correction/handlers/llm.py,sha256=ufqHtohdU5dUXE3DikzbloAWGVgMu1wnw6P4WHRmpdk,14580
102
+ lyrics_transcriber/correction/handlers/llm_providers.py,sha256=MV-KCRseccg-DEimMS0D2bXJ2xhy59r2n8UZjICUoEY,2067
103
+ lyrics_transcriber/correction/handlers/no_space_punct_match.py,sha256=jY2fa547Qc8B63xIhF9VyWMaq5jds6E6wBqyVq6KANw,7057
104
+ lyrics_transcriber/correction/handlers/relaxed_word_count_match.py,sha256=x4k__6gav4-STk_TycLcg5Sw4x2vUFAj5fWmOv7Yd_w,3911
105
+ lyrics_transcriber/correction/handlers/repeat.py,sha256=1PJADW44egYh7N9D2fN-gDIusWVglFjGHrCZuTQYNpA,4313
106
+ lyrics_transcriber/correction/handlers/sound_alike.py,sha256=75IvDSfoGUG2xVbYp-xsYuQXf7Jo-0ymsTzdBSOrwwQ,11935
107
+ lyrics_transcriber/correction/handlers/syllables_match.py,sha256=c9_hrJb_xkkqd2SuDjrsSmUF7OMYV65LRzBfAhCHxEY,11217
108
+ lyrics_transcriber/correction/handlers/word_count_match.py,sha256=OltTEs6eYnslxdvak97M5gXDiqXJxMHKk__Q9F_akXc,3595
109
+ lyrics_transcriber/correction/handlers/word_operations.py,sha256=410xhyO9tiqezV5yd5JKwKbxSGwXK9LWHJ7-zNIuOWA,7423
110
+ lyrics_transcriber/correction/operations.py,sha256=k5N8w_8BeR7CXiclaJ3zuu_g2KLoWSnnuD4OAmY3kJs,14010
111
+ lyrics_transcriber/correction/phrase_analyzer.py,sha256=dtO_2LjxnPdHJM7De40mYIdHCkozwhizVVQp5XGO7x0,16962
112
+ lyrics_transcriber/correction/text_utils.py,sha256=7QHK6-PY7Rx1G1E31sWiLBw00mHorRDo-M44KMHFaZs,833
113
+ lyrics_transcriber/frontend/.gitignore,sha256=lgGIPiVpFVUNSZl9oNQLelLOWUzpF7sikLW8xmsrrqI,248
114
+ lyrics_transcriber/frontend/.yarn/releases/yarn-4.7.0.cjs,sha256=KTYy2KCV2OpHhussV5jIPDdUSr7RftMRhqPsRUmgfAY,2765465
115
+ lyrics_transcriber/frontend/.yarnrc.yml,sha256=0hZQ1OTcPqTUNBqQeme4VFkIzrsabHNzLtc_M-wSgIM,66
116
+ lyrics_transcriber/frontend/README.md,sha256=-D6CAfKTT7Y0V3EjlZ2fMy7fyctFQ4x2TJ9vx6xtccM,1607
117
+ lyrics_transcriber/frontend/REPLACE_ALL_FUNCTIONALITY.md,sha256=iRZbicW5satHel9gbG-uLyZ7oq3xdp87KQlJEL1ZhK8,8384
118
+ lyrics_transcriber/frontend/__init__.py,sha256=nW8acRSWTjXoRwGqcTU4w-__X7tMAE0iXL0uihBN3CU,836
119
+ lyrics_transcriber/frontend/eslint.config.js,sha256=3ADH23ANA4NNBKFy6nCVk65e8bx1DrVd_FIaYNnhuqA,734
120
+ lyrics_transcriber/frontend/index.html,sha256=u1m7042a1kLWZVIElYQ9y-lzfIAdYJGtQE-i4Zjc3xY,806
121
+ lyrics_transcriber/frontend/package.json,sha256=6Qsc0FSVRyLhnklgaseLu9kqOEeMwjBuxdi7A_PD9zM,1182
122
+ lyrics_transcriber/frontend/public/android-chrome-192x192.png,sha256=lg-6aPF5mGLiuG7LyftZk_0RI41srmpA8wj-NkaaQms,17632
123
+ lyrics_transcriber/frontend/public/android-chrome-512x512.png,sha256=x-zuKT3NYsTqAWzhKRTZeD4-0uYoUjqMPZpKTChqNJ8,123447
124
+ lyrics_transcriber/frontend/public/apple-touch-icon.png,sha256=6y5vGra54w5oc8VP6sn2JjoQtN9hWTKn0YPhmdlmfU0,16188
125
+ lyrics_transcriber/frontend/public/favicon-16x16.png,sha256=2wy_7ZmVS4d7umByJVHQ37DBB_8xrU9xfT1_konSXQI,604
126
+ lyrics_transcriber/frontend/public/favicon-32x32.png,sha256=6TyrRMIw6G8dpG4_QWVTY8DMxo0bIGzc_9aOJrkiJKM,1297
127
+ lyrics_transcriber/frontend/public/favicon.ico,sha256=ZK7QvdBuZp0QxPkluCW4IKxfleFmFLp1KkG_d5xmx7E,15406
128
+ lyrics_transcriber/frontend/public/nomad-karaoke-logo.png,sha256=jTTBFXV6hGJGolZYQ-dIjgQQbMsehk5XGtsllhLrdzg,212641
129
+ lyrics_transcriber/frontend/src/App.tsx,sha256=f1-dp-MU8vap18eAXacwVDO5P4eE2iG9zSvjau-7NJs,6533
130
+ lyrics_transcriber/frontend/src/api.ts,sha256=qYpH_KRkco1pYU4oJ8XgV4Y6xrTOPGngxwxB0NwlKro,8163
131
+ lyrics_transcriber/frontend/src/components/AIFeedbackModal.tsx,sha256=N-M8LNKE3nCjrSkWTf8ObWSdBqD0Cv3Xiz_wVv9OtFo,3133
132
+ lyrics_transcriber/frontend/src/components/AddLyricsModal.tsx,sha256=ubJwQewryjUrXwpBkITQNu4POhoUtDbNA93cqa-yJKY,3416
133
+ lyrics_transcriber/frontend/src/components/AgenticCorrectionMetrics.tsx,sha256=Yg6FG0LtrneRfAYeBu3crt_RdN-_o7FojtYhDMDKi0o,8595
134
+ lyrics_transcriber/frontend/src/components/AudioPlayer.tsx,sha256=XOCz0VtGiAIBs1qnCwrAixwfgHbTSGpjEb1jQg8wqzc,5441
135
+ lyrics_transcriber/frontend/src/components/CorrectedWordWithActions.tsx,sha256=4FK9vqjTMxnwlqxZ2E349H1S-X6SqLAYfj5U5AyuGtI,4764
136
+ lyrics_transcriber/frontend/src/components/CorrectionAnnotationModal.tsx,sha256=XtF5XNLL2ztm714tXql7rKi2BX4k_bsizpZ_ZCvpu8s,13368
137
+ lyrics_transcriber/frontend/src/components/CorrectionDetailCard.tsx,sha256=Hp-i1iSB3pzrpPH2wIREtEHHaReimBaYi8vcSUUArlg,9512
138
+ lyrics_transcriber/frontend/src/components/CorrectionMetrics.tsx,sha256=CoTZS9Z3pf4lfPrzpQ2hZvLqFvt-IarSGBSCxFxD-y4,6274
139
+ lyrics_transcriber/frontend/src/components/DurationTimelineView.tsx,sha256=eylYwAKHTK_5n54njn9bfMkXTGvrqsXlu9tETqAlMtA,9815
140
+ lyrics_transcriber/frontend/src/components/EditActionBar.tsx,sha256=nLRVA3m3bQFqLtqlYasn7WeZNXvPvpG0sXuIv5QXvDc,2174
141
+ lyrics_transcriber/frontend/src/components/EditModal.tsx,sha256=sv-NCKMvso3UF1_fJKbzt_wAcDLAyLqRq_D24uQRrRw,24649
142
+ lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx,sha256=VQy5fpzKBG_9ZLyWHB8b8Ii61YwckCOjnYf1oezY0d4,19586
143
+ lyrics_transcriber/frontend/src/components/EditWordList.tsx,sha256=atl-9Z-24U-KWojwo0apTy1Y9DbQGoVo2dFX4P-1Z9E,13681
144
+ lyrics_transcriber/frontend/src/components/FileUpload.tsx,sha256=fwn2rMWtMLPTZLREMb3ps4prSf9nzxGwnjmeC6KYsJA,2383
145
+ lyrics_transcriber/frontend/src/components/FindReplaceModal.tsx,sha256=U7duKns4IqNXwbWFbQfdyaswnvkSRpfsU0UG__-Serc,20192
146
+ lyrics_transcriber/frontend/src/components/Header.tsx,sha256=NaG4jsKYqZ1G8pmltFbE_NLncyA4ClbfCvpOTC4MQR0,17312
147
+ lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx,sha256=NyM32pI9nNzDbRa6p-r30upJcolqQRcN_YNd5v-nVxA,53644
148
+ lyrics_transcriber/frontend/src/components/MetricsDashboard.tsx,sha256=33XpyHj0siBQivE8vLgliyiwmdsAfnNQh5Py4mnhXi8,1724
149
+ lyrics_transcriber/frontend/src/components/ModeSelector.tsx,sha256=HnBAK_gFgNBJLtMC_ESMVdUapDjmqmoLX8pQeyHfpOw,2651
150
+ lyrics_transcriber/frontend/src/components/ModelSelector.tsx,sha256=lfG_B5VAzSfrU0FqJl8XptN6DVt2kSljU96HMXo8mf4,559
151
+ lyrics_transcriber/frontend/src/components/PreviewVideoSection.tsx,sha256=59ZhG5XsxUZ_dkK8BjTQhYmYP5Wv86uRR-xtuwFRK8c,5582
152
+ lyrics_transcriber/frontend/src/components/ReferenceView.tsx,sha256=2ugpkVtxZLS6Al-lmYbMZj7d3w9e2qNNYKJjkSxZ_X8,10494
153
+ lyrics_transcriber/frontend/src/components/ReplaceAllLyricsModal.tsx,sha256=brGNO-q9Sir0MlsnJIWTlBk_FaYk30f-0CH2z04-K88,26555
154
+ lyrics_transcriber/frontend/src/components/ReviewChangesModal.tsx,sha256=VQg_gBFViAxQu9Z75o6rOsvmH5DZBjKq9FkU8aB_7mI,13790
155
+ lyrics_transcriber/frontend/src/components/SegmentDetailsModal.tsx,sha256=6ME02FkFwCgDAxW49yW260N4vbr80eAJ332Ex811GOo,1643
156
+ lyrics_transcriber/frontend/src/components/TimelineEditor.tsx,sha256=gJRCxdmJo80g0h5hq5AtDHK-HbOoYhMaQYvP2WgOuRI,13201
157
+ lyrics_transcriber/frontend/src/components/TimingOffsetModal.tsx,sha256=aivGi6ehI6cDqwtoKBb6Eif8gpPqi0t3mJT8i5Feu7Q,4803
158
+ lyrics_transcriber/frontend/src/components/TranscriptionView.tsx,sha256=LDGK-Ac4sNMoLNofAdSsZAnCOdlPk4k9Fse6ulhgjYM,11299
159
+ lyrics_transcriber/frontend/src/components/WordDivider.tsx,sha256=tOs_4WZGlJQ1o7sZFGLhwUoyX2jSKMa6vLZqa-1vzKY,6590
160
+ lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx,sha256=ZVZ61rwrKLdlmhlNuSNR7-sgdl7JdBxVTeSeKO6K-3w,16321
161
+ lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx,sha256=FpMn-0i1NFxdIHZN0dxHkWzIIsOEi9CJc_rQMpLyxVw,2031
162
+ lyrics_transcriber/frontend/src/components/shared/components/Word.tsx,sha256=EcLslnFE-BIOm_7FwRxKEOnIDVoWpTrDz6MQGoH_SVg,2596
163
+ lyrics_transcriber/frontend/src/components/shared/constants.ts,sha256=25q1qjCwzV-hR72wSb_rJSe4dVuQ0l-piLMoZSpynGQ,488
164
+ lyrics_transcriber/frontend/src/components/shared/hooks/useWordClick.ts,sha256=eEgBHiKIWOzFK8eBzBgcQRv7StKpaPchqh3k2kFlwgY,6253
165
+ lyrics_transcriber/frontend/src/components/shared/styles.ts,sha256=J1jCSuRqpk1mOFYAqJudhxeozH-q1bi-dsOibLukBJU,411
166
+ lyrics_transcriber/frontend/src/components/shared/types.js,sha256=1DqoH1vIn6o1ng-XyBS6JRVVkf8Hj7ub_UD4x8loMjA,77
167
+ lyrics_transcriber/frontend/src/components/shared/types.ts,sha256=22gpjxcUglmykSimUu6l_6XzgIga1fX8QIM1Mr0CpiI,3973
168
+ lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts,sha256=Yh5c_kOdOjE84FtKVB4BBC8QIgkFk5tO0ZJa9oJqqqU,5870
169
+ lyrics_transcriber/frontend/src/components/shared/utils/localStorage.ts,sha256=jpLT65Rk_toaB-8X2lRGyYZ9EoMQDI45GviUT7N9Bp0,3240
170
+ lyrics_transcriber/frontend/src/components/shared/utils/referenceLineCalculator.ts,sha256=TJ2oHDitFFVxm83eFEhdlwvhx--mIt3054YbET2RiXs,2575
171
+ lyrics_transcriber/frontend/src/components/shared/utils/segmentOperations.ts,sha256=yNE-4Da2nL38ofsizQUsPYWl_8Q9Ic2jbB_G3N4X7ps,12559
172
+ lyrics_transcriber/frontend/src/components/shared/utils/timingUtils.ts,sha256=s3xdwGPg6ltZEcQ4AzgpznAR-fLhCTCYW7pfXaD60JY,4597
173
+ lyrics_transcriber/frontend/src/components/shared/utils/wordUtils.ts,sha256=bZbsvEgY3JoI15l4SdB51tHE33OkUxDH-WSG8doLcCQ,721
174
+ lyrics_transcriber/frontend/src/hooks/useManualSync.ts,sha256=cP19QsK-o5uz-Udq8m5d4NhMaPupHEQQz7uf0aE4Hs8,19403
175
+ lyrics_transcriber/frontend/src/main.tsx,sha256=qNDmjgzD2Dd4d9J42o1z0JcKBElsMWHpFIgEvI8kNi8,543
176
+ lyrics_transcriber/frontend/src/theme.ts,sha256=9F2xyLct_gJmvLEZEhrYdKIahUsBzi5kgnydSWJHphE,3864
177
+ lyrics_transcriber/frontend/src/types/global.d.ts,sha256=NvltPF-n4_1oRLfihD3oHXbdT7txMC8B6fhCgvNY-jk,191
178
+ lyrics_transcriber/frontend/src/types.js,sha256=1DqoH1vIn6o1ng-XyBS6JRVVkf8Hj7ub_UD4x8loMjA,77
179
+ lyrics_transcriber/frontend/src/types.ts,sha256=gQBu13DDbSBUtbI-TwzAlmlIYfOehXar4WuvZ9GkziE,4880
180
+ lyrics_transcriber/frontend/src/validation.ts,sha256=hxMSGfF35JhQprSVBKNyOciqNog9p3twSOqSUdrzT-Q,4297
181
+ lyrics_transcriber/frontend/src/vite-env.d.ts,sha256=ZZlpNvuwQpFfe3SiAPzd5-QQ8ypmmxq5WXz6pLD63bU,38
182
+ lyrics_transcriber/frontend/tsconfig.app.json,sha256=7aUBVcaBqEtmtfQXsbwsgBxSUng06xzQi5t4QCgWQ3E,665
183
+ lyrics_transcriber/frontend/tsconfig.json,sha256=AOS5v1AsNPL3wGc8bt58Ybh8HHpbYrlK91q0KIzaSgs,627
184
+ lyrics_transcriber/frontend/tsconfig.node.json,sha256=oMBhK5xufBrVE7SkbADRxA3pxm8_L9m5YwtCOZSafsc,536
185
+ lyrics_transcriber/frontend/tsconfig.tsbuildinfo,sha256=NadSnxLYpHcjqlB_pXw5XD4J8ml7QlaHSilBz_ksUo8,1987
186
+ lyrics_transcriber/frontend/update_version.js,sha256=PxkqCnsucXnXiIqutsanVcx00Gq4k7pgCYj_uXCa4qw,411
187
+ lyrics_transcriber/frontend/vite.config.d.ts,sha256=S5bdGf0pSdKM6A6RNBKwAm3EIeW_bDHYfHtesRtXU7Q,76
188
+ lyrics_transcriber/frontend/vite.config.js,sha256=P4GuPgRZzwEWPQZpyujUe7eA3mjPoFAe2CgE5sQAXg8,232
189
+ lyrics_transcriber/frontend/vite.config.ts,sha256=8FdW0dN8zDFqfhQSxX5h7sIu72X2piLYlp_TZYRQvBQ,216
190
+ lyrics_transcriber/frontend/web_assets/android-chrome-192x192.png,sha256=lg-6aPF5mGLiuG7LyftZk_0RI41srmpA8wj-NkaaQms,17632
191
+ lyrics_transcriber/frontend/web_assets/android-chrome-512x512.png,sha256=x-zuKT3NYsTqAWzhKRTZeD4-0uYoUjqMPZpKTChqNJ8,123447
192
+ lyrics_transcriber/frontend/web_assets/apple-touch-icon.png,sha256=6y5vGra54w5oc8VP6sn2JjoQtN9hWTKn0YPhmdlmfU0,16188
193
+ lyrics_transcriber/frontend/web_assets/assets/index-DdJTDWH3.js,sha256=bAn-S8FSKU7tZBt0duA4-X5BO3YLwUrhXWnf974XpCs,1370446
194
+ lyrics_transcriber/frontend/web_assets/assets/index-DdJTDWH3.js.map,sha256=MWXeja7_HjwkNk8woEgiSm68lStu10UHcljswi9YMXI,2905511
195
+ lyrics_transcriber/frontend/web_assets/favicon-16x16.png,sha256=2wy_7ZmVS4d7umByJVHQ37DBB_8xrU9xfT1_konSXQI,604
196
+ lyrics_transcriber/frontend/web_assets/favicon-32x32.png,sha256=6TyrRMIw6G8dpG4_QWVTY8DMxo0bIGzc_9aOJrkiJKM,1297
197
+ lyrics_transcriber/frontend/web_assets/favicon.ico,sha256=ZK7QvdBuZp0QxPkluCW4IKxfleFmFLp1KkG_d5xmx7E,15406
198
+ lyrics_transcriber/frontend/web_assets/index.html,sha256=2WGlcSZoJwyjbJVe93ZpikwRLJiaEJV3ZrLI_ZjejH4,830
199
+ lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.png,sha256=jTTBFXV6hGJGolZYQ-dIjgQQbMsehk5XGtsllhLrdzg,212641
200
+ lyrics_transcriber/frontend/yarn.lock,sha256=wtImLsCO1P1Lpkhc1jAN6IiHQ0As4xn39n0cwKoh4LM,131996
201
+ lyrics_transcriber/lyrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
+ lyrics_transcriber/lyrics/base_lyrics_provider.py,sha256=SskR5RIKorLcHhNSpHV35_kCnSA027_OOO9E45Jbv88,9168
203
+ lyrics_transcriber/lyrics/file_provider.py,sha256=WNd6mHMV2FhrnHiWBvxUxPkdVi47mbLE4hXaTYqStTM,4290
204
+ lyrics_transcriber/lyrics/genius.py,sha256=XTKLAjwzopYIOvvn0na_Ym5yM1JZjp8a-f1Ebr4cuN0,17121
205
+ lyrics_transcriber/lyrics/lrclib.py,sha256=wUDHYlwUIxmOm5XrTD0fr26F3ys23sJty_lc9m8h-4A,9275
206
+ lyrics_transcriber/lyrics/musixmatch.py,sha256=mlTuRm7XxeXy1NAHqqLUhilf90IY0JiGdX9nAmiZ2M0,7368
207
+ lyrics_transcriber/lyrics/spotify.py,sha256=O8rzDRjM-wdF2KntLqPe414-1jRTmVGfRCfMwSovHVg,12044
208
+ lyrics_transcriber/lyrics/user_input_provider.py,sha256=oNzwjk2bOQYyUXvVqPcbrF8vJU7LLtwTvJTXxtPaQto,1798
209
+ lyrics_transcriber/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ lyrics_transcriber/output/ass/__init__.py,sha256=EYQ45gI7_-vclVgzISL0ML8VgxCdB0odqEyPyiPCIw0,578
211
+ lyrics_transcriber/output/ass/ass.py,sha256=xHId7Rv5gqmdQ7ZrWQSy46JX7vZcB_BzpZC800DwQk8,74315
212
+ lyrics_transcriber/output/ass/ass_specs.txt,sha256=r80HVXWSjTMGU7o2NOJdHkYNBY6SVwSVf0Dyslc1OXk,39288
213
+ lyrics_transcriber/output/ass/config.py,sha256=ggqZo1WFZ5-YLqR0HC_WTjcp1EOxRKwz6MbvpeGWLTI,7153
214
+ lyrics_transcriber/output/ass/constants.py,sha256=CUxR7K3LnoZeA7WMuMYMAPto0J7VW3IwKlP_Ve7XB0A,536
215
+ lyrics_transcriber/output/ass/event.py,sha256=XVbA7YR6WgFa5ynrgE2R7ngauWZVZyNn86BfyNLF0u8,2657
216
+ lyrics_transcriber/output/ass/formatters.py,sha256=hx_3a1goRIVQwAeNyu9n4UZcnpO9vm87x1aiHK5TBRc,3614
217
+ lyrics_transcriber/output/ass/lyrics_line.py,sha256=Y1nEGkdYhqkJPNLD651sIhi4tmeVeONmIuEo-ijtESQ,12125
218
+ lyrics_transcriber/output/ass/lyrics_screen.py,sha256=gRzUsDMLEtZZPuv77xk7M0FzCpFph5tjlE5hhFaobOw,10676
219
+ lyrics_transcriber/output/ass/section_detector.py,sha256=TsSf4E0fleC-Tzd5KK6q4m-wjGiu6TvGDtHdR6sUqvc,3922
220
+ lyrics_transcriber/output/ass/section_screen.py,sha256=QeUaIeDXs_Es33W5aqyVSaZzMwUx-b60vbAww3aQfls,4185
221
+ lyrics_transcriber/output/ass/style.py,sha256=ty3IGorlOZ_Q-TxeA02hNb5Pb0mA755dOb8bqKr1k7U,6880
222
+ lyrics_transcriber/output/cdg.py,sha256=0wiWhLfqll23Zte-czF50mAhGuaI3Ux8UfWqL66G6Us,25486
223
+ lyrics_transcriber/output/cdgmaker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
224
+ lyrics_transcriber/output/cdgmaker/cdg.py,sha256=nBqkw0JOois-NI27CkwHblLuBaoL-sHyJb2SntX7m8s,6733
225
+ lyrics_transcriber/output/cdgmaker/composer.py,sha256=_67PBhg8-EvrRUATCRzEGhzpntKRbwBP7uwf04_W_MA,93997
226
+ lyrics_transcriber/output/cdgmaker/config.py,sha256=1mOXwLfbuTavoyV-3ykWK9e8YZN3JHh0I3b3buh1EfA,4073
227
+ lyrics_transcriber/output/cdgmaker/images/instrumental.png,sha256=EKUcJJGj95ceNqw7M-O9ltX4HZIaCaSKjJucKVDTSb8,14834
228
+ lyrics_transcriber/output/cdgmaker/images/intro.png,sha256=XeN6i8aKaQObfRwcgHT8ajQAJIDVjXEd7C5tu7DtriU,17603
229
+ lyrics_transcriber/output/cdgmaker/pack.py,sha256=tuD7Udt3fpWiEVRnzO3VarULwmQ21QYE_MYc6XSpudg,15870
230
+ lyrics_transcriber/output/cdgmaker/render.py,sha256=If4XE5x4N3YvOiyyOtlwki6CF1W0irnlN-WHgxnzkCo,11053
231
+ lyrics_transcriber/output/cdgmaker/transitions/centertexttoplogobottomtext.png,sha256=GK8AqHHL3q6QGSvhCc51CzeQ-TvQGjYAfjxAgcGzZVw,37174
232
+ lyrics_transcriber/output/cdgmaker/transitions/circlein.png,sha256=jeRXV1Sf9HrN-H710_Xj6nsDk0QS8RGefdaxdD2l4FI,25030
233
+ lyrics_transcriber/output/cdgmaker/transitions/circleout.png,sha256=sQ4YSMiLy78hIuWUgvoWeuvj_OKmLUxD2XLgx5-_DqI,44026
234
+ lyrics_transcriber/output/cdgmaker/transitions/fizzle.png,sha256=8jSvglEwTuurFr07s82uBdx8SLR2yTB65g_NXE55jjU,2588
235
+ lyrics_transcriber/output/cdgmaker/transitions/largecentertexttoplogo.png,sha256=UYap1UDfNMjqQ9S3XoJzReoiwoYYhVeTfnGSvwnIOd4,35912
236
+ lyrics_transcriber/output/cdgmaker/transitions/rectangle.png,sha256=HXX1CqRxbJEhcqT7kiobtYvh2lCbcVaBL0WC2gLDMPw,27969
237
+ lyrics_transcriber/output/cdgmaker/transitions/spiral.png,sha256=zSXl8k208QetD7tJp6kMQVygtREoHvG_wDRi0tfYcus,54261
238
+ lyrics_transcriber/output/cdgmaker/transitions/topleftmusicalnotes.png,sha256=cCpsT49CQD9walZxToBbnQo2unJE5ke57ASkkLDwZaQ,14612
239
+ lyrics_transcriber/output/cdgmaker/transitions/wipein.png,sha256=hWuWt2a89dbgj_aRdvXYuElaxhbJaKJoykd4geOLcII,9880
240
+ lyrics_transcriber/output/cdgmaker/transitions/wipeleft.png,sha256=7jY6Z-mdY94PEy8stm2N0cPB9MPLgmsc_A7eRiERNWc,8613
241
+ lyrics_transcriber/output/cdgmaker/transitions/wipeout.png,sha256=YSLdv2RCGeSilOGt7PYTLAOlBfL4bofu8Vpj-PcskZo,9995
242
+ lyrics_transcriber/output/cdgmaker/transitions/wiperight.png,sha256=Dw3N6cqJaSwL3owDqyAM4W573EmdNnkjdiXhoxWC4yk,8443
243
+ lyrics_transcriber/output/cdgmaker/utils.py,sha256=TNcOnccegpxT3OogWQCexy8BrDqfihLAShMvqeM81cw,2945
244
+ lyrics_transcriber/output/countdown_processor.py,sha256=i2j0gSxAfgGPxdKnr3d_Vkzt-CXW-BALJDmOQ13dfBY,9457
245
+ lyrics_transcriber/output/fonts/AvenirNext-Bold.ttf,sha256=YxgKz2OP46lwLPCpIZhVa8COi_9KRDSXw4n8dIHHQSs,327048
246
+ "lyrics_transcriber/output/fonts/DMSans-VariableFont_opsz,wght.ttf",sha256=7uav75vmxRukpMx8wqtPeNvaxqOzlBljO400geBzYYI,238984
247
+ lyrics_transcriber/output/fonts/DMSerifDisplay-Regular.ttf,sha256=mMHMLr3CMjEQgJ5cKlYEn8YSsHwSnDtxT-Qjn_n8ffM,72220
248
+ lyrics_transcriber/output/fonts/Oswald-SemiBold.ttf,sha256=G-vSJeeyEVft7D4s7FZQtGfXAViWPjzGCImV2a4u9d8,87608
249
+ lyrics_transcriber/output/fonts/Zurich_Cn_BT_Bold.ttf,sha256=WNG5LOQ-uGUF_WWT5aQHzVbyWvQqGO5sZ4E-nRmvPuI,37780
250
+ lyrics_transcriber/output/fonts/arial.ttf,sha256=NcDzVZ2NtWnjbDEJW4pg1EFkPZX1kTneQOI_ragZuDM,275572
251
+ lyrics_transcriber/output/fonts/georgia.ttf,sha256=fQuyDGMrtZ6BoIhfVzvSFz9x9zIE3pBY_raM4DIicHI,142964
252
+ lyrics_transcriber/output/fonts/verdana.ttf,sha256=lu0UlJyktzks_yNbnEHVXBJTgqu-DA08K53WaJfK4Ms,139640
253
+ lyrics_transcriber/output/generator.py,sha256=jruQv0FQHlVkrLML-rcJqWCR7n5YT1QRE9yDBjqQJy0,11990
254
+ lyrics_transcriber/output/lrc_to_cdg.py,sha256=2pi5tvreD_ADAR4RF5yVwj7OJ4Pf5Zo_EJ7rt4iH3k0,2063
255
+ lyrics_transcriber/output/lyrics_file.py,sha256=_KQyQjCOMIwQdQ0115uEAUIjQWTRmShkSfQuINPKxaw,3741
256
+ lyrics_transcriber/output/plain_text.py,sha256=XARaWcy6MeQeQCUoz0PV_bHoBw5dba-u79bjS7XucnE,3867
257
+ lyrics_transcriber/output/segment_resizer.py,sha256=rrgcQC28eExSAmGnm6ytkF-E-nH4Fe3gjvpaCD0MCmA,17510
258
+ lyrics_transcriber/output/subtitles.py,sha256=TW8IFTedj7-jHDyKKLYk1rFSFmuk8qysrI83Lkc3x-o,19555
259
+ lyrics_transcriber/output/video.py,sha256=n6QtT3ljtx1t8CT9jmVTKSpdezF2gC0FJsYDDtkP5fE,24084
260
+ lyrics_transcriber/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
261
+ lyrics_transcriber/review/server.py,sha256=I4HTMif2F1bGu_7FLEdFQ-656JToOA9TWARKMARMmp0,29430
262
+ lyrics_transcriber/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
263
+ lyrics_transcriber/storage/dropbox.py,sha256=Dyam1ULTkoxD1X5trkZ5dGp5XhBGCn998moC8IS9-68,9804
264
+ lyrics_transcriber/transcribers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
265
+ lyrics_transcriber/transcribers/audioshake.py,sha256=4VQdm-r3Pe0nIlJzqgOyOSp7amnWnU05VhFxBidY_WU,11831
266
+ lyrics_transcriber/transcribers/base_transcriber.py,sha256=T3m4ZCwZ9Bpv6Jvb2hNcnllk-lmeNmADDJlSySBtP1Q,6480
267
+ lyrics_transcriber/transcribers/whisper.py,sha256=YcCB1ic9H6zL1GS0jD0emu8-qlcH0QVEjjjYB4aLlIQ,13260
268
+ lyrics_transcriber/types.py,sha256=Y7WUx8PAOBYWCIZgw4ndeHfPH8Gg--O3OYYQgMpJ2iI,27728
269
+ lyrics_transcriber/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
270
+ lyrics_transcriber/utils/word_utils.py,sha256=-cMGpj9UV4F6IsoDKAV2i1aiqSO8eI91HMAm_igtVMk,958
271
+ karaoke_gen-0.71.23.dist-info/METADATA,sha256=c269LSFEjwPZaZLJUT5GNOr655lF_dZuNtCHBnNlDWA,16948
272
+ karaoke_gen-0.71.23.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
273
+ karaoke_gen-0.71.23.dist-info/entry_points.txt,sha256=xIyLe7K84ZyjO8L0_AmNectz93QjGSs5AkApMtlAd4g,160
274
+ karaoke_gen-0.71.23.dist-info/licenses/LICENSE,sha256=81R_4XwMZDODHD7JcZeUR8IiCU8AD7Ajl6bmwR9tYDk,1074
275
+ karaoke_gen-0.71.23.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,4 +1,5 @@
1
1
  [console_scripts]
2
2
  karaoke-bulk=karaoke_gen.utils.bulk_cli:main
3
3
  karaoke-gen=karaoke_gen.utils.gen_cli:main
4
+ karaoke-gen-remote=karaoke_gen.utils.remote_cli:main
4
5
 
@@ -0,0 +1,10 @@
1
+ from lyrics_transcriber.core.config import TranscriberConfig, LyricsConfig, OutputConfig
2
+ from lyrics_transcriber.core.controller import LyricsTranscriber
3
+ from importlib.metadata import version, PackageNotFoundError
4
+
5
+ try:
6
+ __version__ = version("lyrics-transcriber")
7
+ except PackageNotFoundError:
8
+ __version__ = "unknown"
9
+
10
+ __all__ = ["LyricsTranscriber", "TranscriberConfig", "LyricsConfig", "OutputConfig"]
File without changes
@@ -0,0 +1,285 @@
1
+ #!/usr/bin/env python3
2
+ import warnings
3
+ # Suppress SyntaxWarnings from third-party packages that haven't updated for Python 3.13
4
+ warnings.filterwarnings("ignore", category=SyntaxWarning)
5
+
6
+ import argparse
7
+ import logging
8
+ import os
9
+ from pathlib import Path
10
+ from typing import Dict
11
+ from importlib.metadata import version
12
+ from dotenv import load_dotenv
13
+
14
+ from lyrics_transcriber import LyricsTranscriber
15
+ from lyrics_transcriber.core.controller import TranscriberConfig, LyricsConfig, OutputConfig
16
+
17
+
18
+ def create_arg_parser() -> argparse.ArgumentParser:
19
+ """Create and configure the argument parser."""
20
+ parser = argparse.ArgumentParser(
21
+ prog="lyrics-transcriber",
22
+ description="Create synchronised lyrics files in ASS and MidiCo LRC formats with word-level timestamps",
23
+ formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=52),
24
+ )
25
+
26
+ # Required arguments
27
+ parser.add_argument(
28
+ "audio_filepath",
29
+ nargs="?",
30
+ help="The audio file path to transcribe lyrics for.",
31
+ default=argparse.SUPPRESS,
32
+ )
33
+
34
+ # Version
35
+ package_version = version("lyrics-transcriber")
36
+ parser.add_argument("-v", "--version", action="version", version=f"%(prog)s {package_version}")
37
+
38
+ # Optional arguments
39
+ parser.add_argument(
40
+ "--log_level", default="INFO", choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], help="Logging level. Default: INFO"
41
+ )
42
+
43
+ # Song identification
44
+ song_group = parser.add_argument_group("Song Identification")
45
+ song_group.add_argument("--artist", help="Song artist for lyrics lookup and auto-correction")
46
+ song_group.add_argument("--title", help="Song title for lyrics lookup and auto-correction")
47
+ song_group.add_argument("--lyrics_file", help="Path to file containing lyrics (txt, docx, or rtf format)")
48
+
49
+ # API Credentials
50
+ api_group = parser.add_argument_group("API Credentials")
51
+ api_group.add_argument(
52
+ "--audioshake_api_token", help="AudioShake API token for lyrics transcription. Can also use AUDIOSHAKE_API_TOKEN env var."
53
+ )
54
+ api_group.add_argument("--genius_api_token", help="Genius API token for lyrics fetching. Can also use GENIUS_API_TOKEN env var.")
55
+ api_group.add_argument(
56
+ "--spotify_cookie", help="Spotify sp_dc cookie value for lyrics fetching. Can also use SPOTIFY_COOKIE_SP_DC env var."
57
+ )
58
+ api_group.add_argument("--runpod_api_key", help="RunPod API key for Whisper transcription. Can also use RUNPOD_API_KEY env var.")
59
+ api_group.add_argument(
60
+ "--whisper_runpod_id", help="RunPod endpoint ID for Whisper transcription. Can also use WHISPER_RUNPOD_ID env var."
61
+ )
62
+
63
+ # Output options
64
+ output_group = parser.add_argument_group("Output Options")
65
+ output_group.add_argument("--output_dir", type=Path, help="Directory where output files will be saved. Default: current directory")
66
+ output_group.add_argument(
67
+ "--cache_dir",
68
+ type=Path,
69
+ help="Directory to cache downloaded/generated files. Default: ~/lyrics-transcriber-cache/",
70
+ )
71
+ output_group.add_argument(
72
+ "--output_styles_json",
73
+ type=Path,
74
+ help="JSON file containing output style configurations for CDG and video generation",
75
+ )
76
+ output_group.add_argument(
77
+ "--subtitle_offset",
78
+ type=int,
79
+ default=0,
80
+ help="Offset subtitle timing by N milliseconds (positive or negative). Default: 0",
81
+ )
82
+
83
+ # Feature control group
84
+ feature_group = parser.add_argument_group("Feature Control")
85
+ feature_group.add_argument("--skip_lyrics_fetch", action="store_true", help="Skip fetching lyrics from online sources")
86
+ feature_group.add_argument("--skip_transcription", action="store_true", help="Skip audio transcription process")
87
+ feature_group.add_argument("--skip_correction", action="store_true", help="Skip lyrics correction process")
88
+ feature_group.add_argument("--skip_plain_text", action="store_true", help="Skip generating plain text output files")
89
+ feature_group.add_argument("--skip_lrc", action="store_true", help="Skip generating LRC file")
90
+ feature_group.add_argument("--skip_cdg", action="store_true", help="Skip generating CDG karaoke files")
91
+ feature_group.add_argument("--skip_video", action="store_true", help="Skip rendering karaoke video")
92
+ feature_group.add_argument(
93
+ "--video_resolution", choices=["4k", "1080p", "720p", "360p"], default="360p", help="Resolution of the karaoke video. Default: 360p"
94
+ )
95
+ feature_group.add_argument(
96
+ "--skip_countdown", action="store_true", help="Skip adding countdown intro for songs that start within 3 seconds"
97
+ )
98
+
99
+ # Agentic AI flags
100
+ feature_group.add_argument(
101
+ "--use-agentic-ai",
102
+ action="store_true",
103
+ help="Enable experimental agentic AI correction (sets USE_AGENTIC_AI=1)",
104
+ )
105
+ feature_group.add_argument(
106
+ "--ai-model",
107
+ type=str,
108
+ help="Preferred AI model identifier (e.g., 'anthropic/claude-4-sonnet', 'gpt-5', 'gemini-2.5-pro')",
109
+ )
110
+
111
+ return parser
112
+
113
+
114
+ def parse_args(parser: argparse.ArgumentParser, args_list: list[str] | None = None) -> argparse.Namespace:
115
+ """Parse and process command line arguments."""
116
+ # Use provided args_list for testing, otherwise use sys.argv
117
+ args = parser.parse_args(args_list)
118
+
119
+ # Set default cache_dir if not provided
120
+ if not hasattr(args, "cache_dir") or args.cache_dir is None:
121
+ args.cache_dir = Path(os.getenv("LYRICS_TRANSCRIBER_CACHE_DIR", os.path.join(os.path.expanduser("~"), "lyrics-transcriber-cache")))
122
+
123
+ # Export agentic flags to environment for downstream usage
124
+ if getattr(args, "use_agentic_ai", False):
125
+ os.environ["USE_AGENTIC_AI"] = "1"
126
+ if getattr(args, "ai_model", None):
127
+ os.environ["AGENTIC_AI_MODEL"] = args.ai_model
128
+
129
+ return args
130
+
131
+
132
+ def get_config_from_env() -> Dict[str, str]:
133
+ """Load configuration from environment variables."""
134
+ load_dotenv()
135
+ return {
136
+ "audioshake_api_token": os.getenv("AUDIOSHAKE_API_TOKEN"),
137
+ "genius_api_token": os.getenv("GENIUS_API_TOKEN"),
138
+ "rapidapi_key": os.getenv("RAPIDAPI_KEY"),
139
+ "spotify_cookie": os.getenv("SPOTIFY_COOKIE_SP_DC"),
140
+ "runpod_api_key": os.getenv("RUNPOD_API_KEY"),
141
+ "whisper_runpod_id": os.getenv("WHISPER_RUNPOD_ID"),
142
+ }
143
+
144
+
145
+ def setup_logging(log_level: str) -> logging.Logger:
146
+ """Configure logging with consistent format."""
147
+ logger = logging.getLogger("lyrics_transcriber")
148
+ log_level_enum = getattr(logging, log_level.upper())
149
+ logger.setLevel(log_level_enum)
150
+
151
+ if not logger.handlers:
152
+ handler = logging.StreamHandler()
153
+ formatter = logging.Formatter(fmt="%(asctime)s.%(msecs)03d - %(levelname)s - %(module)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
154
+ handler.setFormatter(formatter)
155
+ logger.addHandler(handler)
156
+
157
+ return logger
158
+
159
+
160
+ def create_configs(args: argparse.Namespace, env_config: Dict[str, str]) -> tuple[TranscriberConfig, LyricsConfig, OutputConfig]:
161
+ """Create configuration objects from arguments and environment variables."""
162
+ transcriber_config = TranscriberConfig(
163
+ audioshake_api_token=args.audioshake_api_token or env_config.get("audioshake_api_token"),
164
+ runpod_api_key=args.runpod_api_key or env_config.get("runpod_api_key"),
165
+ whisper_runpod_id=args.whisper_runpod_id or env_config.get("whisper_runpod_id"),
166
+ )
167
+
168
+ lyrics_config = LyricsConfig(
169
+ genius_api_token=args.genius_api_token or env_config.get("genius_api_token"),
170
+ rapidapi_key=env_config.get("rapidapi_key"),
171
+ spotify_cookie=args.spotify_cookie or env_config.get("spotify_cookie"),
172
+ lyrics_file=args.lyrics_file,
173
+ )
174
+
175
+ output_config = OutputConfig(
176
+ output_styles_json=str(args.output_styles_json),
177
+ output_dir=str(args.output_dir) if args.output_dir else os.getcwd(),
178
+ cache_dir=str(args.cache_dir),
179
+ video_resolution=args.video_resolution,
180
+ subtitle_offset_ms=args.subtitle_offset,
181
+ fetch_lyrics=not args.skip_lyrics_fetch,
182
+ run_transcription=not args.skip_transcription,
183
+ run_correction=not args.skip_correction,
184
+ generate_plain_text=not args.skip_plain_text,
185
+ generate_lrc=not args.skip_lrc,
186
+ generate_cdg=not args.skip_cdg,
187
+ render_video=not args.skip_video,
188
+ add_countdown=not args.skip_countdown,
189
+ )
190
+
191
+ return transcriber_config, lyrics_config, output_config
192
+
193
+
194
+ def validate_args(args: argparse.Namespace, parser: argparse.ArgumentParser, logger: logging.Logger) -> None:
195
+ """Validate command line arguments."""
196
+ if not hasattr(args, "audio_filepath"):
197
+ parser.print_help()
198
+ logger.error("No audio filepath provided")
199
+ exit(1)
200
+
201
+ if not os.path.exists(args.audio_filepath):
202
+ logger.error(f"Audio file not found: {args.audio_filepath}")
203
+ exit(1)
204
+
205
+ if args.artist and not args.title or args.title and not args.artist:
206
+ logger.error("Both artist and title must be provided together")
207
+ exit(1)
208
+
209
+
210
+ def main() -> None:
211
+ """Main entry point for the CLI."""
212
+ parser = create_arg_parser()
213
+
214
+ # Check if --help or -h is in sys.argv to handle direct module execution
215
+ import sys
216
+ if '--help' in sys.argv or '-h' in sys.argv:
217
+ parser.print_help()
218
+ return
219
+
220
+ args = parse_args(parser)
221
+
222
+ # Set up logging first
223
+ logger = setup_logging(args.log_level)
224
+
225
+ # Validate arguments
226
+ validate_args(args, parser, logger)
227
+
228
+ # Load environment variables
229
+ env_config = get_config_from_env()
230
+
231
+ # Create configuration objects
232
+ transcriber_config, lyrics_config, output_config = create_configs(args, env_config)
233
+
234
+ try:
235
+ # Initialize and run transcriber
236
+ transcriber = LyricsTranscriber(
237
+ audio_filepath=args.audio_filepath,
238
+ artist=args.artist,
239
+ title=args.title,
240
+ transcriber_config=transcriber_config,
241
+ lyrics_config=lyrics_config,
242
+ output_config=output_config,
243
+ logger=logger,
244
+ )
245
+
246
+ results = transcriber.process()
247
+
248
+ # Log results
249
+ logger.info("*** Success! ***")
250
+
251
+ # Log all generated output files
252
+ if results.original_txt:
253
+ logger.info(f"Generated original transcription: {results.original_txt}")
254
+ if results.corrections_json:
255
+ logger.info(f"Generated corrections data: {results.corrections_json}")
256
+
257
+ if results.corrected_txt:
258
+ logger.info(f"Generated corrected lyrics: {results.corrected_txt}")
259
+ if results.lrc_filepath:
260
+ logger.info(f"Generated LRC file: {results.lrc_filepath}")
261
+
262
+ if results.cdg_filepath:
263
+ logger.info(f"Generated CDG file: {results.cdg_filepath}")
264
+ if results.mp3_filepath:
265
+ logger.info(f"Generated MP3 file: {results.mp3_filepath}")
266
+ if results.cdg_zip_filepath:
267
+ logger.info(f"Generated CDG ZIP archive: {results.cdg_zip_filepath}")
268
+
269
+ if results.ass_filepath:
270
+ logger.info(f"Generated ASS subtitles: {results.ass_filepath}")
271
+ if results.video_filepath:
272
+ logger.info(f"Generated video: {results.video_filepath}")
273
+
274
+ except Exception as e:
275
+ # Get the full exception traceback
276
+ import traceback
277
+
278
+ error_details = traceback.format_exc()
279
+
280
+ # Log both the error message and the full traceback
281
+ logger.error(f"Processing failed: {str(e)}\n\nFull traceback:\n{error_details}")
282
+ exit(1)
283
+
284
+ if __name__ == "__main__":
285
+ main()
File without changes