karaoke-gen 0.92.0__tar.gz → 0.95.1__tar.gz

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 (436) hide show
  1. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/PKG-INFO +1 -1
  2. karaoke_gen-0.95.1/backend/.coveragerc +20 -0
  3. karaoke_gen-0.95.1/backend/.gitignore +37 -0
  4. karaoke_gen-0.95.1/backend/Dockerfile +43 -0
  5. karaoke_gen-0.95.1/backend/Dockerfile.base +74 -0
  6. karaoke_gen-0.95.1/backend/README.md +242 -0
  7. karaoke_gen-0.95.1/backend/api/dependencies.py +457 -0
  8. karaoke_gen-0.95.1/backend/api/routes/admin.py +737 -0
  9. karaoke_gen-0.95.1/backend/api/routes/audio_search.py +895 -0
  10. karaoke_gen-0.95.1/backend/api/routes/auth.py +348 -0
  11. karaoke_gen-0.95.1/backend/api/routes/file_upload.py +2076 -0
  12. karaoke_gen-0.95.1/backend/api/routes/health.py +344 -0
  13. karaoke_gen-0.95.1/backend/api/routes/internal.py +435 -0
  14. karaoke_gen-0.95.1/backend/api/routes/jobs.py +1620 -0
  15. karaoke_gen-0.95.1/backend/api/routes/review.py +652 -0
  16. karaoke_gen-0.95.1/backend/api/routes/themes.py +162 -0
  17. karaoke_gen-0.95.1/backend/api/routes/users.py +1014 -0
  18. karaoke_gen-0.95.1/backend/config.py +172 -0
  19. karaoke_gen-0.95.1/backend/main.py +133 -0
  20. karaoke_gen-0.95.1/backend/middleware/__init__.py +5 -0
  21. karaoke_gen-0.95.1/backend/middleware/audit_logging.py +124 -0
  22. karaoke_gen-0.95.1/backend/models/job.py +501 -0
  23. karaoke_gen-0.95.1/backend/models/requests.py +123 -0
  24. karaoke_gen-0.95.1/backend/models/theme.py +153 -0
  25. karaoke_gen-0.95.1/backend/models/user.py +254 -0
  26. karaoke_gen-0.95.1/backend/models/worker_log.py +164 -0
  27. karaoke_gen-0.95.1/backend/pyproject.toml +29 -0
  28. karaoke_gen-0.95.1/backend/quick-check.sh +93 -0
  29. karaoke_gen-0.95.1/backend/requirements.txt +29 -0
  30. karaoke_gen-0.95.1/backend/run_tests.sh +60 -0
  31. karaoke_gen-0.95.1/backend/services/audio_analysis_service.py +243 -0
  32. karaoke_gen-0.95.1/backend/services/audio_editing_service.py +278 -0
  33. karaoke_gen-0.95.1/backend/services/audio_search_service.py +702 -0
  34. karaoke_gen-0.95.1/backend/services/auth_service.py +630 -0
  35. karaoke_gen-0.95.1/backend/services/credential_manager.py +792 -0
  36. karaoke_gen-0.95.1/backend/services/discord_service.py +172 -0
  37. karaoke_gen-0.95.1/backend/services/dropbox_service.py +301 -0
  38. karaoke_gen-0.95.1/backend/services/email_service.py +1040 -0
  39. karaoke_gen-0.95.1/backend/services/encoding_interface.py +454 -0
  40. karaoke_gen-0.95.1/backend/services/encoding_service.py +405 -0
  41. karaoke_gen-0.95.1/backend/services/firestore_service.py +512 -0
  42. karaoke_gen-0.95.1/backend/services/flacfetch_client.py +573 -0
  43. karaoke_gen-0.95.1/backend/services/gce_encoding/README.md +72 -0
  44. karaoke_gen-0.95.1/backend/services/gce_encoding/__init__.py +22 -0
  45. karaoke_gen-0.95.1/backend/services/gce_encoding/main.py +589 -0
  46. karaoke_gen-0.95.1/backend/services/gce_encoding/requirements.txt +16 -0
  47. karaoke_gen-0.95.1/backend/services/gdrive_service.py +352 -0
  48. karaoke_gen-0.95.1/backend/services/job_logging.py +258 -0
  49. karaoke_gen-0.95.1/backend/services/job_manager.py +842 -0
  50. karaoke_gen-0.95.1/backend/services/job_notification_service.py +271 -0
  51. karaoke_gen-0.95.1/backend/services/local_encoding_service.py +590 -0
  52. karaoke_gen-0.95.1/backend/services/local_preview_encoding_service.py +407 -0
  53. karaoke_gen-0.95.1/backend/services/lyrics_cache_service.py +216 -0
  54. karaoke_gen-0.95.1/backend/services/metrics.py +413 -0
  55. karaoke_gen-0.95.1/backend/services/packaging_service.py +287 -0
  56. karaoke_gen-0.95.1/backend/services/rclone_service.py +106 -0
  57. karaoke_gen-0.95.1/backend/services/storage_service.py +209 -0
  58. karaoke_gen-0.95.1/backend/services/stripe_service.py +275 -0
  59. karaoke_gen-0.95.1/backend/services/structured_logging.py +254 -0
  60. karaoke_gen-0.95.1/backend/services/template_service.py +330 -0
  61. karaoke_gen-0.95.1/backend/services/theme_service.py +469 -0
  62. karaoke_gen-0.95.1/backend/services/tracing.py +543 -0
  63. karaoke_gen-0.95.1/backend/services/user_service.py +721 -0
  64. karaoke_gen-0.95.1/backend/services/worker_service.py +558 -0
  65. karaoke_gen-0.95.1/backend/services/youtube_service.py +112 -0
  66. karaoke_gen-0.95.1/backend/services/youtube_upload_service.py +445 -0
  67. karaoke_gen-0.95.1/backend/tests/__init__.py +4 -0
  68. karaoke_gen-0.95.1/backend/tests/conftest.py +224 -0
  69. karaoke_gen-0.95.1/backend/tests/emulator/__init__.py +7 -0
  70. karaoke_gen-0.95.1/backend/tests/emulator/conftest.py +88 -0
  71. karaoke_gen-0.95.1/backend/tests/emulator/test_e2e_cli_backend.py +1053 -0
  72. karaoke_gen-0.95.1/backend/tests/emulator/test_emulator_integration.py +356 -0
  73. karaoke_gen-0.95.1/backend/tests/emulator/test_style_loading_direct.py +436 -0
  74. karaoke_gen-0.95.1/backend/tests/emulator/test_worker_logs_direct.py +229 -0
  75. karaoke_gen-0.95.1/backend/tests/emulator/test_worker_logs_subcollection.py +443 -0
  76. karaoke_gen-0.95.1/backend/tests/requirements-test.txt +10 -0
  77. karaoke_gen-0.95.1/backend/tests/requirements.txt +6 -0
  78. karaoke_gen-0.95.1/backend/tests/test_admin_email_endpoints.py +411 -0
  79. karaoke_gen-0.95.1/backend/tests/test_api_integration.py +460 -0
  80. karaoke_gen-0.95.1/backend/tests/test_api_routes.py +93 -0
  81. karaoke_gen-0.95.1/backend/tests/test_audio_analysis_service.py +294 -0
  82. karaoke_gen-0.95.1/backend/tests/test_audio_editing_service.py +386 -0
  83. karaoke_gen-0.95.1/backend/tests/test_audio_search.py +1398 -0
  84. karaoke_gen-0.95.1/backend/tests/test_audio_services.py +378 -0
  85. karaoke_gen-0.95.1/backend/tests/test_auth_firestore.py +231 -0
  86. karaoke_gen-0.95.1/backend/tests/test_config_extended.py +68 -0
  87. karaoke_gen-0.95.1/backend/tests/test_credential_manager.py +377 -0
  88. karaoke_gen-0.95.1/backend/tests/test_dependencies.py +54 -0
  89. karaoke_gen-0.95.1/backend/tests/test_discord_service.py +244 -0
  90. karaoke_gen-0.95.1/backend/tests/test_distribution_services.py +820 -0
  91. karaoke_gen-0.95.1/backend/tests/test_dropbox_service.py +472 -0
  92. karaoke_gen-0.95.1/backend/tests/test_email_service.py +492 -0
  93. karaoke_gen-0.95.1/backend/tests/test_emulator_integration.py +322 -0
  94. karaoke_gen-0.95.1/backend/tests/test_encoding_interface.py +412 -0
  95. karaoke_gen-0.95.1/backend/tests/test_file_upload.py +1739 -0
  96. karaoke_gen-0.95.1/backend/tests/test_flacfetch_client.py +632 -0
  97. karaoke_gen-0.95.1/backend/tests/test_gdrive_service.py +524 -0
  98. karaoke_gen-0.95.1/backend/tests/test_instrumental_api.py +431 -0
  99. karaoke_gen-0.95.1/backend/tests/test_internal_api.py +343 -0
  100. karaoke_gen-0.95.1/backend/tests/test_job_creation_regression.py +583 -0
  101. karaoke_gen-0.95.1/backend/tests/test_job_manager.py +339 -0
  102. karaoke_gen-0.95.1/backend/tests/test_job_manager_notifications.py +329 -0
  103. karaoke_gen-0.95.1/backend/tests/test_job_notification_service.py +443 -0
  104. karaoke_gen-0.95.1/backend/tests/test_jobs_api.py +273 -0
  105. karaoke_gen-0.95.1/backend/tests/test_local_encoding_service.py +423 -0
  106. karaoke_gen-0.95.1/backend/tests/test_local_preview_encoding_service.py +567 -0
  107. karaoke_gen-0.95.1/backend/tests/test_main.py +87 -0
  108. karaoke_gen-0.95.1/backend/tests/test_models.py +918 -0
  109. karaoke_gen-0.95.1/backend/tests/test_packaging_service.py +382 -0
  110. karaoke_gen-0.95.1/backend/tests/test_requests.py +201 -0
  111. karaoke_gen-0.95.1/backend/tests/test_routes_jobs.py +282 -0
  112. karaoke_gen-0.95.1/backend/tests/test_routes_review.py +337 -0
  113. karaoke_gen-0.95.1/backend/tests/test_services.py +556 -0
  114. karaoke_gen-0.95.1/backend/tests/test_services_extended.py +112 -0
  115. karaoke_gen-0.95.1/backend/tests/test_storage_service.py +448 -0
  116. karaoke_gen-0.95.1/backend/tests/test_style_upload.py +261 -0
  117. karaoke_gen-0.95.1/backend/tests/test_template_service.py +295 -0
  118. karaoke_gen-0.95.1/backend/tests/test_theme_service.py +516 -0
  119. karaoke_gen-0.95.1/backend/tests/test_upload_api.py +256 -0
  120. karaoke_gen-0.95.1/backend/tests/test_validate.py +156 -0
  121. karaoke_gen-0.95.1/backend/tests/test_video_worker_orchestrator.py +847 -0
  122. karaoke_gen-0.95.1/backend/tests/test_worker_log_subcollection.py +509 -0
  123. karaoke_gen-0.95.1/backend/tests/test_worker_logging.py +365 -0
  124. karaoke_gen-0.95.1/backend/tests/test_workers.py +1116 -0
  125. karaoke_gen-0.95.1/backend/tests/test_workers_extended.py +178 -0
  126. karaoke_gen-0.95.1/backend/tests/test_youtube_service.py +247 -0
  127. karaoke_gen-0.95.1/backend/tests/test_youtube_upload_service.py +568 -0
  128. karaoke_gen-0.95.1/backend/validate.py +173 -0
  129. karaoke_gen-0.95.1/backend/version.py +27 -0
  130. karaoke_gen-0.95.1/backend/workers/README.md +597 -0
  131. karaoke_gen-0.95.1/backend/workers/__init__.py +11 -0
  132. karaoke_gen-0.95.1/backend/workers/audio_worker.py +613 -0
  133. karaoke_gen-0.95.1/backend/workers/lyrics_worker.py +683 -0
  134. karaoke_gen-0.95.1/backend/workers/render_video_worker.py +479 -0
  135. karaoke_gen-0.95.1/backend/workers/screens_worker.py +518 -0
  136. karaoke_gen-0.95.1/backend/workers/style_helper.py +198 -0
  137. karaoke_gen-0.95.1/backend/workers/video_worker.py +1265 -0
  138. karaoke_gen-0.95.1/backend/workers/video_worker_orchestrator.py +694 -0
  139. karaoke_gen-0.95.1/backend/workers/worker_logging.py +278 -0
  140. karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/__init__.py +0 -0
  141. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/video.py +30 -90
  142. karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/review/__init__.py +0 -0
  143. karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/storage/__init__.py +0 -0
  144. karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/transcribers/__init__.py +0 -0
  145. karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/utils/__init__.py +0 -0
  146. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/pyproject.toml +3 -2
  147. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/LICENSE +0 -0
  148. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/README.md +0 -0
  149. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/cli → karaoke_gen-0.95.1/backend}/__init__.py +0 -0
  150. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/core → karaoke_gen-0.95.1/backend/api}/__init__.py +0 -0
  151. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/correction → karaoke_gen-0.95.1/backend/api/routes}/__init__.py +0 -0
  152. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers → karaoke_gen-0.95.1/backend/models}/__init__.py +0 -0
  153. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/lyrics → karaoke_gen-0.95.1/backend/services}/__init__.py +0 -0
  154. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/__init__.py +0 -0
  155. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/audio_fetcher.py +0 -0
  156. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/audio_processor.py +0 -0
  157. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/config.py +0 -0
  158. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/file_handler.py +0 -0
  159. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/__init__.py +0 -0
  160. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/analyzer.py +0 -0
  161. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/editor.py +0 -0
  162. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/models.py +0 -0
  163. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/server.py +0 -0
  164. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/static/index.html +0 -0
  165. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/instrumental_review/waveform.py +0 -0
  166. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/karaoke_finalise/__init__.py +0 -0
  167. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/karaoke_finalise/karaoke_finalise.py +0 -0
  168. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/karaoke_gen.py +0 -0
  169. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/lyrics_processor.py +0 -0
  170. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/metadata.py +0 -0
  171. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/__init__.py +0 -0
  172. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/base.py +0 -0
  173. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/context.py +0 -0
  174. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/executors/__init__.py +0 -0
  175. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/executors/local.py +0 -0
  176. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/executors/remote.py +0 -0
  177. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/stages/__init__.py +0 -0
  178. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/stages/finalize.py +0 -0
  179. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/stages/render.py +0 -0
  180. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/stages/screens.py +0 -0
  181. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/stages/separation.py +0 -0
  182. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/pipeline/stages/transcription.py +0 -0
  183. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/resources/AvenirNext-Bold.ttf +0 -0
  184. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/resources/Montserrat-Bold.ttf +0 -0
  185. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/resources/Oswald-Bold.ttf +0 -0
  186. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/resources/Oswald-SemiBold.ttf +0 -0
  187. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/resources/Zurich_Cn_BT_Bold.ttf +0 -0
  188. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/style_loader.py +0 -0
  189. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/utils/__init__.py +0 -0
  190. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/utils/bulk_cli.py +0 -0
  191. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/utils/cli_args.py +0 -0
  192. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/utils/gen_cli.py +0 -0
  193. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/utils/remote_cli.py +0 -0
  194. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/video_background_processor.py +0 -0
  195. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/karaoke_gen/video_generator.py +0 -0
  196. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/__init__.py +0 -0
  197. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/output → karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/cli}/__init__.py +0 -0
  198. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/cli/cli_main.py +0 -0
  199. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker → karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/core}/__init__.py +0 -0
  200. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/core/config.py +0 -0
  201. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/core/controller.py +0 -0
  202. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/review → karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/correction}/__init__.py +0 -0
  203. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/__init__.py +0 -0
  204. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/adapter.py +0 -0
  205. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/agent.py +0 -0
  206. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/feedback/aggregator.py +0 -0
  207. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/feedback/collector.py +0 -0
  208. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/feedback/retention.py +0 -0
  209. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/feedback/store.py +0 -0
  210. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/__init__.py +0 -0
  211. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/ambiguous.py +0 -0
  212. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/background_vocals.py +0 -0
  213. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/base.py +0 -0
  214. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/complex_multi_error.py +0 -0
  215. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/extra_words.py +0 -0
  216. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/no_error.py +0 -0
  217. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/punctuation.py +0 -0
  218. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/registry.py +0 -0
  219. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/repeated_section.py +0 -0
  220. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/handlers/sound_alike.py +0 -0
  221. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/__init__.py +0 -0
  222. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/ai_correction.py +0 -0
  223. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/correction_session.py +0 -0
  224. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/enums.py +0 -0
  225. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/human_feedback.py +0 -0
  226. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/learning_data.py +0 -0
  227. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/observability_metrics.py +0 -0
  228. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/schemas.py +0 -0
  229. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/models/utils.py +0 -0
  230. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/observability/__init__.py +0 -0
  231. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/observability/langfuse_integration.py +0 -0
  232. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/observability/metrics.py +0 -0
  233. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/observability/performance.py +0 -0
  234. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/prompts/__init__.py +0 -0
  235. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/prompts/classifier.py +0 -0
  236. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/prompts/langfuse_prompts.py +0 -0
  237. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/__init__.py +0 -0
  238. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/base.py +0 -0
  239. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/circuit_breaker.py +0 -0
  240. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/config.py +0 -0
  241. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/constants.py +0 -0
  242. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/health.py +0 -0
  243. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/langchain_bridge.py +0 -0
  244. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/model_factory.py +0 -0
  245. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/response_cache.py +0 -0
  246. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/response_parser.py +0 -0
  247. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/providers/retry_executor.py +0 -0
  248. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/router.py +0 -0
  249. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/workflows/__init__.py +0 -0
  250. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/workflows/consensus_workflow.py +0 -0
  251. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/workflows/correction_graph.py +0 -0
  252. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/agentic/workflows/feedback_workflow.py +0 -0
  253. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/anchor_sequence.py +0 -0
  254. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/corrector.py +0 -0
  255. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/feedback/__init__.py +0 -0
  256. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/feedback/schemas.py +0 -0
  257. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/feedback/store.py +0 -0
  258. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/storage → karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers}/__init__.py +0 -0
  259. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/base.py +0 -0
  260. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/extend_anchor.py +0 -0
  261. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/levenshtein.py +0 -0
  262. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/no_space_punct_match.py +0 -0
  263. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/relaxed_word_count_match.py +0 -0
  264. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/repeat.py +0 -0
  265. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/sound_alike.py +0 -0
  266. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/syllables_match.py +0 -0
  267. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/word_count_match.py +0 -0
  268. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/handlers/word_operations.py +0 -0
  269. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/operations.py +0 -0
  270. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/phrase_analyzer.py +0 -0
  271. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/correction/text_utils.py +0 -0
  272. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/.gitignore +0 -0
  273. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/.yarn/releases/yarn-4.7.0.cjs +0 -0
  274. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/.yarnrc.yml +0 -0
  275. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/README.md +0 -0
  276. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/REPLACE_ALL_FUNCTIONALITY.md +0 -0
  277. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/__init__.py +0 -0
  278. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/e2e/agentic-corrections.spec.ts +0 -0
  279. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/e2e/fixtures/agentic-correction-data.json +0 -0
  280. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/eslint.config.js +0 -0
  281. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/index.html +0 -0
  282. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/package-lock.json +0 -0
  283. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/package.json +0 -0
  284. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/playwright.config.ts +0 -0
  285. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/android-chrome-192x192.png +0 -0
  286. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/android-chrome-512x512.png +0 -0
  287. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/apple-touch-icon.png +0 -0
  288. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/favicon-16x16.png +0 -0
  289. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/favicon-32x32.png +0 -0
  290. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/favicon.ico +0 -0
  291. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/nomad-karaoke-logo.png +0 -0
  292. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/public/nomad-karaoke-logo.svg +0 -0
  293. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/App.tsx +0 -0
  294. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/api.ts +0 -0
  295. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/AIFeedbackModal.tsx +0 -0
  296. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/AddLyricsModal.tsx +0 -0
  297. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/AgenticCorrectionMetrics.tsx +0 -0
  298. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/AppHeader.tsx +0 -0
  299. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/AudioPlayer.tsx +0 -0
  300. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/CorrectedWordWithActions.tsx +0 -0
  301. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/CorrectionAnnotationModal.tsx +0 -0
  302. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/CorrectionDetailCard.tsx +0 -0
  303. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/CorrectionMetrics.tsx +0 -0
  304. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/DurationTimelineView.tsx +0 -0
  305. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/EditActionBar.tsx +0 -0
  306. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/EditModal.tsx +0 -0
  307. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx +0 -0
  308. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/EditWordList.tsx +0 -0
  309. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/FileUpload.tsx +0 -0
  310. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/FindReplaceModal.tsx +0 -0
  311. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/Header.tsx +0 -0
  312. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx +0 -0
  313. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/LyricsSynchronizer/SyncControls.tsx +0 -0
  314. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/LyricsSynchronizer/TimelineCanvas.tsx +0 -0
  315. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/LyricsSynchronizer/UpcomingWordsBar.tsx +0 -0
  316. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/LyricsSynchronizer/index.tsx +0 -0
  317. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/MetricsDashboard.tsx +0 -0
  318. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/ModeSelectionModal.tsx +0 -0
  319. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/ModeSelector.tsx +0 -0
  320. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/ModelSelector.tsx +0 -0
  321. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/PreviewVideoSection.tsx +0 -0
  322. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/ReferenceView.tsx +0 -0
  323. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/ReplaceAllLyricsModal.tsx +0 -0
  324. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/ReviewChangesModal.tsx +0 -0
  325. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/SegmentDetailsModal.tsx +0 -0
  326. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/TimelineEditor.tsx +0 -0
  327. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/TimingOffsetModal.tsx +0 -0
  328. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/TranscriptionView.tsx +0 -0
  329. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/WordDivider.tsx +0 -0
  330. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx +0 -0
  331. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx +0 -0
  332. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/components/Word.tsx +0 -0
  333. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/constants.ts +0 -0
  334. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/hooks/useWordClick.ts +0 -0
  335. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/styles.ts +0 -0
  336. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/types.js +0 -0
  337. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/types.ts +0 -0
  338. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts +0 -0
  339. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/utils/localStorage.ts +0 -0
  340. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/utils/referenceLineCalculator.ts +0 -0
  341. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/utils/segmentOperations.ts +0 -0
  342. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/utils/timingUtils.ts +0 -0
  343. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/components/shared/utils/wordUtils.ts +0 -0
  344. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/hooks/useManualSync.ts +0 -0
  345. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/main.tsx +0 -0
  346. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/theme.ts +0 -0
  347. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/types/global.d.ts +0 -0
  348. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/types.js +0 -0
  349. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/types.ts +0 -0
  350. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/validation.ts +0 -0
  351. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/src/vite-env.d.ts +0 -0
  352. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/tsconfig.app.json +0 -0
  353. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/tsconfig.json +0 -0
  354. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/tsconfig.node.json +0 -0
  355. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/tsconfig.tsbuildinfo +0 -0
  356. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/update_version.js +0 -0
  357. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/vite.config.d.ts +0 -0
  358. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/vite.config.js +0 -0
  359. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/vite.config.ts +0 -0
  360. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/android-chrome-192x192.png +0 -0
  361. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/android-chrome-512x512.png +0 -0
  362. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/apple-touch-icon.png +0 -0
  363. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/assets/index-V91xgc4E.js +0 -0
  364. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/assets/index-V91xgc4E.js.map +0 -0
  365. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/favicon-16x16.png +0 -0
  366. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/favicon-32x32.png +0 -0
  367. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/favicon.ico +0 -0
  368. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/index.html +0 -0
  369. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.png +0 -0
  370. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.svg +0 -0
  371. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/frontend/yarn.lock +0 -0
  372. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/transcribers → karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/lyrics}/__init__.py +0 -0
  373. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/base_lyrics_provider.py +0 -0
  374. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/file_provider.py +0 -0
  375. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/genius.py +0 -0
  376. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/lrclib.py +0 -0
  377. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/musixmatch.py +0 -0
  378. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/spotify.py +0 -0
  379. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/lyrics/user_input_provider.py +0 -0
  380. {karaoke_gen-0.92.0/lyrics_transcriber_temp/lyrics_transcriber/utils → karaoke_gen-0.95.1/lyrics_transcriber_temp/lyrics_transcriber/output}/__init__.py +0 -0
  381. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/__init__.py +0 -0
  382. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/ass.py +0 -0
  383. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/ass_specs.txt +0 -0
  384. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/config.py +0 -0
  385. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/constants.py +0 -0
  386. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/event.py +0 -0
  387. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/formatters.py +0 -0
  388. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/lyrics_line.py +0 -0
  389. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/lyrics_screen.py +0 -0
  390. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/section_detector.py +0 -0
  391. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/section_screen.py +0 -0
  392. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/ass/style.py +0 -0
  393. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdg.py +0 -0
  394. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/cdg.py +0 -0
  395. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/composer.py +0 -0
  396. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/config.py +0 -0
  397. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/images/instrumental.png +0 -0
  398. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/images/intro.png +0 -0
  399. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/pack.py +0 -0
  400. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/render.py +0 -0
  401. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/centertexttoplogobottomtext.png +0 -0
  402. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/circlein.png +0 -0
  403. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/circleout.png +0 -0
  404. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/fizzle.png +0 -0
  405. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/largecentertexttoplogo.png +0 -0
  406. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/rectangle.png +0 -0
  407. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/spiral.png +0 -0
  408. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/topleftmusicalnotes.png +0 -0
  409. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/wipein.png +0 -0
  410. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/wipeleft.png +0 -0
  411. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/wipeout.png +0 -0
  412. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/transitions/wiperight.png +0 -0
  413. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/cdgmaker/utils.py +0 -0
  414. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/countdown_processor.py +0 -0
  415. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/AvenirNext-Bold.ttf +0 -0
  416. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/DMSans-VariableFont_opsz,wght.ttf +0 -0
  417. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/DMSerifDisplay-Regular.ttf +0 -0
  418. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/Oswald-SemiBold.ttf +0 -0
  419. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/Zurich_Cn_BT_Bold.ttf +0 -0
  420. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/arial.ttf +0 -0
  421. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/georgia.ttf +0 -0
  422. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/fonts/verdana.ttf +0 -0
  423. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/generator.py +0 -0
  424. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/lrc_to_cdg.py +0 -0
  425. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/lyrics_file.py +0 -0
  426. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/plain_text.py +0 -0
  427. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/segment_resizer.py +0 -0
  428. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/output/subtitles.py +0 -0
  429. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/review/server.py +0 -0
  430. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/storage/dropbox.py +0 -0
  431. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/transcribers/audioshake.py +0 -0
  432. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/transcribers/base_transcriber.py +0 -0
  433. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/transcribers/local_whisper.py +0 -0
  434. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/transcribers/whisper.py +0 -0
  435. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/types.py +0 -0
  436. {karaoke_gen-0.92.0 → karaoke_gen-0.95.1}/lyrics_transcriber_temp/lyrics_transcriber/utils/word_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: karaoke-gen
3
- Version: 0.92.0
3
+ Version: 0.95.1
4
4
  Summary: Generate karaoke videos with synchronized lyrics. Handles the entire process from downloading audio and lyrics to creating the final video with title screens.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -0,0 +1,20 @@
1
+ [run]
2
+ source = backend
3
+ omit =
4
+ backend/tests/*
5
+ backend/validate.py
6
+ backend/tests/emulator/*
7
+ # Workers that require external APIs are tested via integration tests
8
+ backend/workers/screens_worker.py
9
+ backend/workers/video_worker.py
10
+
11
+ [report]
12
+ exclude_lines =
13
+ pragma: no cover
14
+ def __repr__
15
+ raise NotImplementedError
16
+ if __name__ == .__main__.:
17
+ pass
18
+
19
+ show_missing = True
20
+
@@ -0,0 +1,37 @@
1
+ # Ignore Python cache and virtual environments
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ env/
8
+ venv/
9
+ ENV/
10
+ env.bak/
11
+ venv.bak/
12
+
13
+ # Environment files
14
+ .env
15
+ .env.local
16
+
17
+ # IDE
18
+ .vscode/
19
+ .idea/
20
+ *.swp
21
+ *.swo
22
+ *~
23
+
24
+ # Temporary files
25
+ *.log
26
+ temp/
27
+ tmp/
28
+
29
+ # Google Cloud
30
+ .gcloud/
31
+ *.json
32
+
33
+ # Testing
34
+ .pytest_cache/
35
+ .coverage
36
+ htmlcov/
37
+
@@ -0,0 +1,43 @@
1
+ # Fast application image - uses pre-built base with all dependencies
2
+ #
3
+ # The base image (karaoke-backend-base) contains:
4
+ # - Python 3.11, ffmpeg, sox, system deps
5
+ # - All pip dependencies from requirements-frozen.txt (NO code)
6
+ #
7
+ # This Dockerfile adds the actual application code on top.
8
+ # Build time: ~1-2 minutes (deps already cached in base)
9
+ #
10
+ # If the base image doesn't exist yet, build it first:
11
+ # gcloud builds submit --config=cloudbuild-base.yaml --project=nomadkaraoke
12
+
13
+ # Use pre-built base image with all dependencies
14
+ # Override with --build-arg BASE_IMAGE=karaoke-backend-base:local for local testing
15
+ ARG BASE_IMAGE=us-central1-docker.pkg.dev/nomadkaraoke/karaoke-repo/karaoke-backend-base:latest
16
+ FROM ${BASE_IMAGE}
17
+
18
+ # Set working directory (should already exist from base)
19
+ WORKDIR /app
20
+
21
+ # Copy backend code (this is the only thing that changes frequently)
22
+ COPY backend /app/backend
23
+
24
+ # Copy and reinstall karaoke_gen from local source
25
+ # This ensures new modules (like style_loader.py) are included without rebuilding base image
26
+ # Note: lyrics_transcriber is vendored in lyrics_transcriber_temp/ and bundled via pyproject.toml
27
+ COPY karaoke_gen /app/karaoke_gen
28
+ COPY lyrics_transcriber_temp /app/lyrics_transcriber_temp
29
+ COPY pyproject.toml README.md LICENSE /app/
30
+ RUN pip install --no-cache-dir -e .
31
+
32
+ # Set environment variables
33
+ ENV PYTHONUNBUFFERED=1
34
+ ENV PORT=8080
35
+
36
+ # Expose port
37
+ EXPOSE 8080
38
+
39
+ # Run uvicorn directly
40
+ # Note: Transmission daemon removed - torrent downloads now handled by
41
+ # dedicated flacfetch VM service (see docs/00-current-plan/TORRENT-SERVICE-PLAN.md)
42
+ # Using --loop asyncio (instead of uvloop) to support nest_asyncio for remote flacfetch calls
43
+ CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8080", "--loop", "asyncio"]
@@ -0,0 +1,74 @@
1
+ # Base image with all Python dependencies pre-installed
2
+ # This image is rebuilt only when poetry.lock changes
3
+ #
4
+ # Build with: gcloud builds submit --config=cloudbuild-base.yaml
5
+ # Or manually: docker build -f backend/Dockerfile.base -t karaoke-backend-base .
6
+
7
+ FROM python:3.11-slim
8
+
9
+ # Install system dependencies required by karaoke-gen
10
+ # Note: Transmission daemon removed - torrent downloads now handled by
11
+ # dedicated flacfetch VM service (see docs/00-current-plan/TORRENT-SERVICE-PLAN.md)
12
+ RUN apt-get update && apt-get install -y \
13
+ libsndfile1 \
14
+ libsox-dev \
15
+ sox \
16
+ build-essential \
17
+ curl \
18
+ xz-utils \
19
+ && rm -rf /var/lib/apt/lists/*
20
+
21
+ # Install comprehensive font support for international lyrics and symbols
22
+ # Noto fonts provide full Unicode coverage including:
23
+ # - Latin, Greek, Cyrillic (core)
24
+ # - CJK: Chinese, Japanese, Korean (~150MB)
25
+ # - Arabic, Hebrew, Thai, Hindi, and other scripts (extra)
26
+ # - Color emoji (limited support in libass, but available)
27
+ # - Musical symbols (♪ ♫ etc.)
28
+ # Note: This adds ~200-300MB to the image but ensures all languages render correctly
29
+ RUN apt-get update && apt-get install -y \
30
+ fonts-noto-core \
31
+ fonts-noto-cjk \
32
+ fonts-noto-extra \
33
+ fonts-noto-color-emoji \
34
+ fontconfig \
35
+ && fc-cache -f \
36
+ && rm -rf /var/lib/apt/lists/*
37
+
38
+ # Install optimized static FFmpeg build (7.0.2) instead of Debian package (5.1.8)
39
+ # John Van Sickle's builds are compiled with better optimizations for x86_64
40
+ # This provides ~20-40% performance improvement for encoding tasks
41
+ # Source: https://johnvansickle.com/ffmpeg/
42
+ RUN curl -L https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o /tmp/ffmpeg.tar.xz && \
43
+ tar -xf /tmp/ffmpeg.tar.xz -C /tmp && \
44
+ cp /tmp/ffmpeg-*-amd64-static/ffmpeg /usr/local/bin/ && \
45
+ cp /tmp/ffmpeg-*-amd64-static/ffprobe /usr/local/bin/ && \
46
+ chmod +x /usr/local/bin/ffmpeg /usr/local/bin/ffprobe && \
47
+ rm -rf /tmp/ffmpeg* && \
48
+ ffmpeg -version
49
+
50
+ # Set working directory
51
+ WORKDIR /app
52
+
53
+ # Copy dependency files and source code needed for pip install
54
+ COPY pyproject.toml README.md LICENSE /app/
55
+ COPY karaoke_gen /app/karaoke_gen
56
+ COPY lyrics_transcriber_temp /app/lyrics_transcriber_temp
57
+
58
+ # Install all Python dependencies (the slow part - cached in base image)
59
+ RUN pip install --no-cache-dir --upgrade pip && \
60
+ pip install --no-cache-dir -e .
61
+
62
+ # Download spaCy language model for lyrics transcription
63
+ # This must be done at build time, not runtime (Cloud Run network restrictions)
64
+ RUN python -m spacy download en_core_web_sm
65
+
66
+ # Label with build info
67
+ ARG BUILD_DATE
68
+ ARG BUILD_ID
69
+ ARG BASE_CONTENT_HASH
70
+ LABEL org.opencontainers.image.created="${BUILD_DATE}"
71
+ LABEL org.opencontainers.image.revision="${BUILD_ID}"
72
+ LABEL org.opencontainers.image.title="karaoke-backend-base"
73
+ LABEL org.opencontainers.image.description="Base image with Python dependencies and system tools for karaoke-backend"
74
+ LABEL base.content.hash="${BASE_CONTENT_HASH}"
@@ -0,0 +1,242 @@
1
+ # Backend Development Setup
2
+
3
+ ## One-Time Setup
4
+
5
+ ### 1. Create Virtual Environment
6
+
7
+ ```bash
8
+ cd /Users/andrew/Projects/karaoke-gen
9
+ python3 -m venv backend/venv
10
+ ```
11
+
12
+ ### 2. Activate Virtual Environment
13
+
14
+ ```bash
15
+ source backend/venv/bin/activate
16
+ ```
17
+
18
+ ### 3. Install Dependencies
19
+
20
+ **IMPORTANT:** Use Python 3.12 (not 3.13/3.14 - pydantic has compatibility issues)
21
+
22
+ ```bash
23
+ # Backend dependencies
24
+ pip install -r backend/requirements.txt
25
+
26
+ # Install karaoke_gen in development mode
27
+ pip install -e .
28
+
29
+ # Install lyrics_transcriber submodule
30
+ pip install -e lyrics_transcriber_local/
31
+
32
+ # Install Google API client (for YouTube upload)
33
+ pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
34
+ ```
35
+
36
+ ### 4. Add Shell Alias (Optional)
37
+
38
+ Add to `~/.zshrc`:
39
+
40
+ ```bash
41
+ alias backend='cd /Users/andrew/Projects/karaoke-gen && source backend/venv/bin/activate'
42
+ ```
43
+
44
+ Then you can just run:
45
+ ```bash
46
+ backend
47
+ # Now you're in the project directory with venv activated!
48
+ ```
49
+
50
+ ---
51
+
52
+ ## Daily Workflow
53
+
54
+ ### Before Making Changes
55
+
56
+ ```bash
57
+ # Activate venv
58
+ source backend/venv/bin/activate
59
+
60
+ # Or if you set up the alias:
61
+ backend
62
+ ```
63
+
64
+ ### After Making Changes
65
+
66
+ ```bash
67
+ # 1. Run full validation (catches import errors!)
68
+ python3 backend/validate.py
69
+
70
+ # 2. If validation passes, deploy
71
+ ./scripts/deploy.sh
72
+ ```
73
+
74
+ ---
75
+
76
+ ## Validation Options
77
+
78
+ ### Full Validation (Recommended - Requires venv)
79
+
80
+ ```bash
81
+ source backend/venv/bin/activate
82
+ python3 backend/validate.py
83
+ ```
84
+
85
+ **Catches:**
86
+ - ✅ Syntax errors
87
+ - ✅ **Import errors** (like the processing_service issue!)
88
+ - ✅ Configuration issues
89
+ - ✅ FastAPI app creation problems
90
+ - ✅ Missing dependencies
91
+
92
+ **This would have caught the ModuleNotFoundError!**
93
+
94
+ ### Quick Check (No venv needed)
95
+
96
+ ```bash
97
+ ./backend/quick-check.sh
98
+ ```
99
+
100
+ **Catches:**
101
+ - ✅ Syntax errors
102
+ - ✅ Missing files
103
+ - ✅ Some obvious import issues
104
+
105
+ **Good for quick checks, but won't catch all import errors**
106
+
107
+ ---
108
+
109
+ ## Example: Complete Development Session
110
+
111
+ ```bash
112
+ # 1. Activate environment
113
+ backend # or: source backend/venv/bin/activate
114
+
115
+ # 2. Make your changes
116
+ vim backend/api/routes/jobs.py
117
+
118
+ # 3. Validate (catches import errors!)
119
+ python3 backend/validate.py
120
+ # ✅ All validations passed!
121
+
122
+ # 4. Deploy
123
+ ./scripts/deploy.sh
124
+
125
+ # 5. Test
126
+ export BACKEND_URL="https://karaoke-backend-ipzqd2k4yq-uc.a.run.app"
127
+ export AUTH_TOKEN=$(gcloud auth print-identity-token)
128
+ curl -H "Authorization: Bearer $AUTH_TOKEN" $BACKEND_URL/api/health
129
+ ```
130
+
131
+ ---
132
+
133
+ ## What About karaoke_gen Imports?
134
+
135
+ The backend imports from `karaoke_gen` (the CLI package):
136
+
137
+ ```python
138
+ from karaoke_gen.karaoke_gen import KaraokePrep
139
+ from karaoke_gen.audio_processor import AudioProcessor
140
+ ```
141
+
142
+ **Options:**
143
+
144
+ ### Option 1: Install in development mode (Recommended)
145
+
146
+ ```bash
147
+ source backend/venv/bin/activate
148
+ pip install -e .
149
+ ```
150
+
151
+ This makes `karaoke_gen` available in the venv without copying files.
152
+
153
+ ### Option 2: Use system Python
154
+
155
+ Your system Python already has `karaoke_gen` installed, so validation will work even if the venv doesn't have it (Python will fall back to system packages).
156
+
157
+ ---
158
+
159
+ ## Running the Backend Locally
160
+
161
+ ```bash
162
+ # Activate venv
163
+ source backend/venv/bin/activate
164
+
165
+ # Set required environment variables
166
+ export GOOGLE_CLOUD_PROJECT="nomadkaraoke"
167
+ export GCS_BUCKET_NAME="karaoke-gen-storage-nomadkaraoke"
168
+
169
+ # Optional: Point to local credentials
170
+ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
171
+
172
+ # Run the server
173
+ cd backend
174
+ uvicorn main:app --reload --port 8080
175
+ ```
176
+
177
+ Visit: http://localhost:8080/api/health
178
+
179
+ ---
180
+
181
+ ## Troubleshooting
182
+
183
+ ### "No module named 'fastapi'"
184
+
185
+ **Fix:**
186
+ ```bash
187
+ source backend/venv/bin/activate
188
+ pip install -r backend/requirements.txt
189
+ ```
190
+
191
+ ### "No module named 'karaoke_gen'"
192
+
193
+ **Fix:**
194
+ ```bash
195
+ source backend/venv/bin/activate
196
+ cd /Users/andrew/Projects/karaoke-gen
197
+ pip install -e .
198
+ ```
199
+
200
+ ### Validation passes locally but fails in Cloud Run
201
+
202
+ **Check:**
203
+ 1. Is `requirements.txt` up to date?
204
+ 2. Did you add a new dependency without adding it to `requirements.txt`?
205
+ 3. Run: `pip freeze | grep <package-name>`
206
+
207
+ ---
208
+
209
+ ## Updating Dependencies
210
+
211
+ When you add new packages:
212
+
213
+ ```bash
214
+ # 1. Install in venv
215
+ source backend/venv/bin/activate
216
+ pip install new-package
217
+
218
+ # 2. Update requirements.txt
219
+ pip freeze > backend/requirements.txt
220
+
221
+ # 3. Or manually add just the new package:
222
+ echo "new-package==1.2.3" >> backend/requirements.txt
223
+
224
+ # 4. Validate
225
+ python3 backend/validate.py
226
+
227
+ # 5. Deploy
228
+ ./scripts/deploy.sh
229
+ ```
230
+
231
+ ---
232
+
233
+ ## Summary
234
+
235
+ **Best practice workflow:**
236
+
237
+ 1. **One-time setup:** Create venv and install dependencies
238
+ 2. **Daily:** Activate venv when working on backend
239
+ 3. **Before deploy:** Run `python3 backend/validate.py` (catches import errors!)
240
+ 4. **Deploy:** Use `./scripts/deploy.sh`
241
+
242
+ **The import error would have been caught if you ran validation in a venv!** ✅