karaoke-gen 0.71.42__py3-none-any.whl → 0.75.53__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 (38) hide show
  1. karaoke_gen/__init__.py +32 -1
  2. karaoke_gen/audio_fetcher.py +1220 -67
  3. karaoke_gen/audio_processor.py +15 -3
  4. karaoke_gen/instrumental_review/server.py +154 -860
  5. karaoke_gen/instrumental_review/static/index.html +1529 -0
  6. karaoke_gen/karaoke_finalise/karaoke_finalise.py +87 -2
  7. karaoke_gen/karaoke_gen.py +131 -14
  8. karaoke_gen/lyrics_processor.py +172 -4
  9. karaoke_gen/utils/bulk_cli.py +3 -0
  10. karaoke_gen/utils/cli_args.py +7 -4
  11. karaoke_gen/utils/gen_cli.py +221 -5
  12. karaoke_gen/utils/remote_cli.py +786 -43
  13. {karaoke_gen-0.71.42.dist-info → karaoke_gen-0.75.53.dist-info}/METADATA +109 -4
  14. {karaoke_gen-0.71.42.dist-info → karaoke_gen-0.75.53.dist-info}/RECORD +37 -31
  15. lyrics_transcriber/core/controller.py +76 -2
  16. lyrics_transcriber/frontend/package.json +1 -1
  17. lyrics_transcriber/frontend/src/App.tsx +6 -4
  18. lyrics_transcriber/frontend/src/api.ts +25 -10
  19. lyrics_transcriber/frontend/src/components/Header.tsx +38 -12
  20. lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx +17 -3
  21. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/SyncControls.tsx +185 -0
  22. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/TimelineCanvas.tsx +704 -0
  23. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/UpcomingWordsBar.tsx +80 -0
  24. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/index.tsx +905 -0
  25. lyrics_transcriber/frontend/src/components/ModeSelectionModal.tsx +127 -0
  26. lyrics_transcriber/frontend/src/components/ReplaceAllLyricsModal.tsx +190 -542
  27. lyrics_transcriber/frontend/tsconfig.tsbuildinfo +1 -1
  28. lyrics_transcriber/frontend/web_assets/assets/{index-DdJTDWH3.js → index-BECn1o8Q.js} +1802 -553
  29. lyrics_transcriber/frontend/web_assets/assets/index-BECn1o8Q.js.map +1 -0
  30. lyrics_transcriber/frontend/web_assets/index.html +1 -1
  31. lyrics_transcriber/output/countdown_processor.py +39 -0
  32. lyrics_transcriber/review/server.py +5 -5
  33. lyrics_transcriber/transcribers/audioshake.py +96 -7
  34. lyrics_transcriber/types.py +14 -12
  35. lyrics_transcriber/frontend/web_assets/assets/index-DdJTDWH3.js.map +0 -1
  36. {karaoke_gen-0.71.42.dist-info → karaoke_gen-0.75.53.dist-info}/WHEEL +0 -0
  37. {karaoke_gen-0.71.42.dist-info → karaoke_gen-0.75.53.dist-info}/entry_points.txt +0 -0
  38. {karaoke_gen-0.71.42.dist-info → karaoke_gen-0.75.53.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,127 @@
1
+ import {
2
+ Dialog,
3
+ DialogTitle,
4
+ DialogContent,
5
+ DialogActions,
6
+ IconButton,
7
+ Box,
8
+ Button,
9
+ Typography,
10
+ Paper
11
+ } from '@mui/material'
12
+ import CloseIcon from '@mui/icons-material/Close'
13
+ import ContentPasteIcon from '@mui/icons-material/ContentPaste'
14
+ import SyncIcon from '@mui/icons-material/Sync'
15
+
16
+ interface ModeSelectionModalProps {
17
+ open: boolean
18
+ onClose: () => void
19
+ onSelectReplace: () => void // Goes to paste phase for replacing all lyrics
20
+ onSelectResync: () => void // Goes directly to sync view with existing lyrics
21
+ hasExistingLyrics: boolean // Whether there are existing lyrics to re-sync
22
+ }
23
+
24
+ export default function ModeSelectionModal({
25
+ open,
26
+ onClose,
27
+ onSelectReplace,
28
+ onSelectResync,
29
+ hasExistingLyrics
30
+ }: ModeSelectionModalProps) {
31
+ return (
32
+ <Dialog
33
+ open={open}
34
+ onClose={onClose}
35
+ maxWidth="sm"
36
+ fullWidth
37
+ >
38
+ <DialogTitle sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
39
+ <Box sx={{ flex: 1 }}>
40
+ Edit All Lyrics
41
+ </Box>
42
+ <IconButton onClick={onClose} sx={{ ml: 'auto' }}>
43
+ <CloseIcon />
44
+ </IconButton>
45
+ </DialogTitle>
46
+
47
+ <DialogContent dividers>
48
+ <Typography variant="body1" sx={{ mb: 3 }}>
49
+ Choose how you want to edit the lyrics:
50
+ </Typography>
51
+
52
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
53
+ {/* Re-sync Existing option - only show if there are existing lyrics */}
54
+ {hasExistingLyrics && (
55
+ <Paper
56
+ sx={{
57
+ p: 2,
58
+ cursor: 'pointer',
59
+ border: 2,
60
+ borderColor: 'primary.main',
61
+ '&:hover': {
62
+ bgcolor: 'action.hover',
63
+ borderColor: 'primary.dark'
64
+ }
65
+ }}
66
+ onClick={onSelectResync}
67
+ >
68
+ <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 2 }}>
69
+ <SyncIcon color="primary" sx={{ fontSize: 40, mt: 0.5 }} />
70
+ <Box>
71
+ <Typography variant="h6" color="primary">
72
+ Re-sync Existing Lyrics
73
+ </Typography>
74
+ <Typography variant="body2" color="text.secondary">
75
+ Keep the current lyrics text and fix timing issues.
76
+ Use this when lyrics are correct but timing has drifted,
77
+ especially in the second half of the song.
78
+ </Typography>
79
+ <Typography variant="caption" color="success.main" sx={{ mt: 1, display: 'block' }}>
80
+ Recommended for fixing timing drift
81
+ </Typography>
82
+ </Box>
83
+ </Box>
84
+ </Paper>
85
+ )}
86
+
87
+ {/* Replace All option */}
88
+ <Paper
89
+ sx={{
90
+ p: 2,
91
+ cursor: 'pointer',
92
+ border: 1,
93
+ borderColor: 'divider',
94
+ '&:hover': {
95
+ bgcolor: 'action.hover',
96
+ borderColor: 'text.secondary'
97
+ }
98
+ }}
99
+ onClick={onSelectReplace}
100
+ >
101
+ <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 2 }}>
102
+ <ContentPasteIcon sx={{ fontSize: 40, mt: 0.5, color: 'text.secondary' }} />
103
+ <Box>
104
+ <Typography variant="h6">
105
+ Replace All Lyrics
106
+ </Typography>
107
+ <Typography variant="body2" color="text.secondary">
108
+ Paste completely new lyrics from clipboard and manually
109
+ sync timing for all words from scratch.
110
+ </Typography>
111
+ <Typography variant="caption" color="warning.main" sx={{ mt: 1, display: 'block' }}>
112
+ All existing timing data will be lost
113
+ </Typography>
114
+ </Box>
115
+ </Box>
116
+ </Paper>
117
+ </Box>
118
+ </DialogContent>
119
+
120
+ <DialogActions>
121
+ <Button onClick={onClose} color="inherit">
122
+ Cancel
123
+ </Button>
124
+ </DialogActions>
125
+ </Dialog>
126
+ )
127
+ }