rollingpebble 0.6.2__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 (82) hide show
  1. rollingpebble-0.6.2/CHANGELOG.md +217 -0
  2. rollingpebble-0.6.2/MANIFEST.in +3 -0
  3. rollingpebble-0.6.2/PKG-INFO +158 -0
  4. rollingpebble-0.6.2/README.md +139 -0
  5. rollingpebble-0.6.2/backend/rollingpebble/__init__.py +5 -0
  6. rollingpebble-0.6.2/backend/rollingpebble/adapters/__init__.py +0 -0
  7. rollingpebble-0.6.2/backend/rollingpebble/adapters/pylrclib_adapter.py +255 -0
  8. rollingpebble-0.6.2/backend/rollingpebble/adapters/pyroller_adapter.py +368 -0
  9. rollingpebble-0.6.2/backend/rollingpebble/cli.py +298 -0
  10. rollingpebble-0.6.2/backend/rollingpebble/config.py +54 -0
  11. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/index-ByboMpdf.css +1 -0
  12. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/index-yyBbsxuf.js +157 -0
  13. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/index-yyBbsxuf.js.map +1 -0
  14. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/ja-D7_rhcbo.js +2 -0
  15. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/ja-D7_rhcbo.js.map +1 -0
  16. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/ko-KR-DD0vrR3m.js +2 -0
  17. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/ko-KR-DD0vrR3m.js.map +1 -0
  18. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/ncmc-worker-BpoEUDiM.ts +210 -0
  19. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/pl-PL-CSfhlz8C.js +2 -0
  20. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/pl-PL-CSfhlz8C.js.map +1 -0
  21. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/pt-BR-BYOQPXu3.js +2 -0
  22. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/pt-BR-BYOQPXu3.js.map +1 -0
  23. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/sk-SK-ATjCPXMQ.js +2 -0
  24. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/sk-SK-ATjCPXMQ.js.map +1 -0
  25. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/smooth-scroll-Cyy-OSkS.js +2 -0
  26. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/smooth-scroll-Cyy-OSkS.js.map +1 -0
  27. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/zh-CN-y2rje7l9.js +2 -0
  28. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/zh-CN-y2rje7l9.js.map +1 -0
  29. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/zh-HK-BvMz0uGi.js +2 -0
  30. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/zh-HK-BvMz0uGi.js.map +1 -0
  31. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/zh-TW-o2O3CXEw.js +2 -0
  32. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/assets/zh-TW-o2O3CXEw.js.map +1 -0
  33. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/android-chrome-192x192.png +0 -0
  34. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/android-chrome-512x512.png +0 -0
  35. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/apple-touch-icon.png +0 -0
  36. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/browserconfig.xml +10 -0
  37. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/favicon-16x16.png +0 -0
  38. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/favicon-32x32.png +0 -0
  39. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/favicon.ico +0 -0
  40. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/mstile-150x150.png +0 -0
  41. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/mstile-310x310.png +0 -0
  42. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/favicons/safari-pinned-tab.svg +1 -0
  43. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/img/rollingpebble-avatar.png +0 -0
  44. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/img/rollingpebble-avatar.webp +0 -0
  45. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/img/rollingpebble-workspace-bg.webp +0 -0
  46. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/index.html +37 -0
  47. rollingpebble-0.6.2/backend/rollingpebble/frontend_dist/site.webmanifest +31 -0
  48. rollingpebble-0.6.2/backend/rollingpebble/jobs.py +573 -0
  49. rollingpebble-0.6.2/backend/rollingpebble/lyrics_utils.py +101 -0
  50. rollingpebble-0.6.2/backend/rollingpebble/main.py +555 -0
  51. rollingpebble-0.6.2/backend/rollingpebble/messages.py +147 -0
  52. rollingpebble-0.6.2/backend/rollingpebble/models.py +673 -0
  53. rollingpebble-0.6.2/backend/rollingpebble/paths.py +81 -0
  54. rollingpebble-0.6.2/backend/rollingpebble/runtime_constants.py +7 -0
  55. rollingpebble-0.6.2/backend/rollingpebble/runtime_dependencies.py +49 -0
  56. rollingpebble-0.6.2/backend/rollingpebble/runtime_environment.py +43 -0
  57. rollingpebble-0.6.2/backend/rollingpebble/runtime_installer.py +265 -0
  58. rollingpebble-0.6.2/backend/rollingpebble/runtime_python.py +80 -0
  59. rollingpebble-0.6.2/backend/rollingpebble/runtime_recipe.py +61 -0
  60. rollingpebble-0.6.2/backend/rollingpebble/services/__init__.py +0 -0
  61. rollingpebble-0.6.2/backend/rollingpebble/services/local_dialog.py +85 -0
  62. rollingpebble-0.6.2/backend/rollingpebble/services/lrclib_service.py +29 -0
  63. rollingpebble-0.6.2/backend/rollingpebble/services/netease_service.py +369 -0
  64. rollingpebble-0.6.2/backend/rollingpebble/services/project_service.py +193 -0
  65. rollingpebble-0.6.2/backend/rollingpebble/services/roller_service.py +421 -0
  66. rollingpebble-0.6.2/backend/rollingpebble/services/runtime_manager.py +250 -0
  67. rollingpebble-0.6.2/backend/rollingpebble/services/runtime_service.py +335 -0
  68. rollingpebble-0.6.2/backend/rollingpebble/services/storage_service.py +1309 -0
  69. rollingpebble-0.6.2/backend/rollingpebble/services/upload_service.py +44 -0
  70. rollingpebble-0.6.2/backend/rollingpebble/storage/__init__.py +0 -0
  71. rollingpebble-0.6.2/backend/rollingpebble/storage/app_settings.py +41 -0
  72. rollingpebble-0.6.2/backend/rollingpebble/storage/files.py +149 -0
  73. rollingpebble-0.6.2/backend/rollingpebble/version.py +27 -0
  74. rollingpebble-0.6.2/backend/rollingpebble.egg-info/PKG-INFO +158 -0
  75. rollingpebble-0.6.2/backend/rollingpebble.egg-info/SOURCES.txt +80 -0
  76. rollingpebble-0.6.2/backend/rollingpebble.egg-info/dependency_links.txt +1 -0
  77. rollingpebble-0.6.2/backend/rollingpebble.egg-info/entry_points.txt +2 -0
  78. rollingpebble-0.6.2/backend/rollingpebble.egg-info/requires.txt +13 -0
  79. rollingpebble-0.6.2/backend/rollingpebble.egg-info/top_level.txt +1 -0
  80. rollingpebble-0.6.2/pyproject.toml +41 -0
  81. rollingpebble-0.6.2/setup.cfg +4 -0
  82. rollingpebble-0.6.2/tests/test_pyroller_adapter.py +118 -0
@@ -0,0 +1,217 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project uses Semantic Versioning.
6
+
7
+ ## [0.6.2] - 2026-05-20
8
+
9
+ ### Changed
10
+
11
+ - Added Harmonese author information to the About dialog credits section.
12
+ - Added official website, GitHub, and Bandcamp links for Harmonese.
13
+ - Split author links and project repository links into separate rows in the About dialog.
14
+
15
+ ## [0.6.1] - 2026-05-20
16
+
17
+ ### Added
18
+
19
+ - Added a GitHub Actions workflow that publishes Python distributions to PyPI when a GitHub Release is published.
20
+ - Added frontend build and package-data preparation steps to the release workflow so wheels include the built WebUI.
21
+ - New `README.md` for users.
22
+
23
+ ### Changed
24
+
25
+ - Converted this changelog to a Keep a Changelog style structure.
26
+ - Updated the release process documentation for GitHub Releases plus PyPI trusted publishing.
27
+
28
+ ## [0.6.0] - 2026-05-20
29
+
30
+ ### Added
31
+
32
+ - Initial release to GitHub Releases.
33
+ - Added a unified backend-to-frontend message i18n path and expanded UI translations across settings, runtime, storage, project, upload, and utility flows.
34
+ - Added isolated runtime dependency management and model cache controls for Auto Timing.
35
+ - Added reusable frontend primitives for modal shells, segmented tabs, panel messages, settings rows, Auto Timing fields, and settings refresh handling.
36
+ - Added storage service support for local migration, cleanup previews, app data classification, and runtime/model/project cleanup metadata.
37
+
38
+ ### Changed
39
+
40
+ - Raised the isolated Auto Timing runtime requirement to `py-roller>=0.6.2,<0.8`.
41
+ - Reworked Settings with a dedicated Storage & Cleanup area, storage usage summaries, local storage location migration controls, project auto-delete settings, and safer cleanup actions.
42
+ - Improved project deletion stability, undo/restore behavior, and recent-project ordering interactions.
43
+ - Polished Synchronizer & Editor, Storage & Cleanup, Auto Timing, LRC Utilities, About, and Settings UI consistency.
44
+ - Improved toast/message lifetimes so operation-scoped messages clear when the related task completes instead of relying on fixed timeouts.
45
+ - Improved dialog and panel animations, including About, Settings, LRC Utilities, project cards, panel messages, and main UI transitions.
46
+ - Improved browser-tab/background audio handling and audio decode error reporting.
47
+
48
+ ### Fixed
49
+
50
+ - Fixed the Theme Color picker focus/revert behavior.
51
+
52
+ ## [0.5.5]
53
+
54
+ ### Changed
55
+
56
+ - Reworked the Synchronizer/Editor workspace artwork as a non-interactive background layer instead of a large image card.
57
+ - Removed the rounded green-bordered workspace avatar image from the empty Synchronizer state.
58
+ - Added a borderless workspace background asset and responsive positioning for shorter or narrower screens.
59
+
60
+ ## [0.5.4]
61
+
62
+ ### Changed
63
+
64
+ - Polished Auto Timing settings terminology and kept matching controls aligned between Settings and the main Auto Timing panel.
65
+ - Reduced processing presets to the currently supported Quick and Full flows.
66
+ - Moved model download options into their own Advanced Parameters section and removed one-click network preset buttons from the UI.
67
+ - Changed the default Auto Timing BY tag to `LRC Roller`.
68
+ - Refined the startup avatar presentation to remove the framed rounded-rectangle treatment and scale more safely on shorter displays.
69
+
70
+ ## [0.5.3]
71
+
72
+ ### Changed
73
+
74
+ - Refined isolated py-roller runtime upgrade and diagnostics behavior.
75
+ - Changed runtime creation/repair to upgrade `py-roller>=0.5.6,<0.6` when using the PyPI runtime source.
76
+ - Centralized the py-roller runtime version requirement to avoid drift between status and installer code.
77
+ - Updated `rollingpebble doctor --run-pyroller-doctor` to run doctor inside the isolated runtime instead of PATH.
78
+ - Persisted failed runtime install/check results so Settings can show the latest failure after refresh.
79
+ - Kept pip raw output in logs while preventing `install_subprocess_output` events from crowding out structured install steps.
80
+ - Added a simple guard to avoid repairing the runtime while Auto Timing is running, and to avoid starting Auto Timing during runtime repair.
81
+ - Removed redundant runtime action notices; the runtime terminal now provides the task state.
82
+
83
+ ## [0.5.2]
84
+
85
+ ### Added
86
+
87
+ - Added structured runtime step rendering in Settings.
88
+ - Added doctor/install JSON reports in runtime diagnostics.
89
+
90
+ ### Changed
91
+
92
+ - Integrated py-roller 0.5.6 runtime install JSONL progress and JSON doctor reports.
93
+ - Changed isolated runtime creation to call `py-roller install --progress-format jsonl --output-format json`.
94
+ - Changed Runtime Check to call `py-roller doctor --output-format json`.
95
+ - Moved runtime notices next to the runtime terminal.
96
+ - Folded raw runtime logs behind a details panel.
97
+ - Raised the isolated runtime package requirement to `py-roller>=0.5.6,<0.6`.
98
+
99
+ ## [0.5.1]
100
+
101
+ ### Fixed
102
+
103
+ - Fixed isolated runtime installation failing before the installer starts when the runtime directory does not exist yet.
104
+ - Improved subprocess job error logging when a command cannot be started.
105
+
106
+ ## [0.5.0] - 2026-05-13
107
+
108
+ ### Added
109
+
110
+ - Added runtime liveness metadata to jobs, including PID, elapsed time, last output time, and return code.
111
+ - Added runtime task cancellation using process groups on POSIX systems.
112
+
113
+ ### Changed
114
+
115
+ - Moved Auto Timing to an isolated py-roller runtime virtual environment under the rollingpebble data directory.
116
+ - Changed Runtime install/repair to create or repair that isolated runtime instead of modifying the rollingpebble backend `.venv`.
117
+ - Changed Auto Timing command generation to call the runtime Python with `-m pyroller.cli.main`, avoiding PATH-based py-roller resolution.
118
+
119
+ ## [0.4.3] - 2026-05-12
120
+
121
+ ### Changed
122
+
123
+ - Reworked the Synchronizer & Editor metadata option so it controls whether metadata tags are written into the LRC text, while keeping the metadata editor visible.
124
+ - Preserved metadata values when editing lyric text with metadata tags hidden from the text area.
125
+
126
+ ### Fixed
127
+
128
+ - Fixed a React hook-order crash when changing the editor metadata setting.
129
+
130
+ ## [0.4.2] - 2026-05-12
131
+
132
+ ### Added
133
+
134
+ - Introduced an editor metadata setting, later corrected in 0.4.3 to control metadata tag writing.
135
+
136
+ ### Changed
137
+
138
+ - Simplified Lyrics Import settings by removing automatic imported-LRC cleanup from the UI; imported lyrics now remain unchanged by default.
139
+ - Cleaned up Auto Timing settings copy and runtime controls; runtime logs now appear directly under the runtime action buttons.
140
+
141
+ ### Fixed
142
+
143
+ - Fixed the Recent projects limit setting so it persists and updates the project list as expected.
144
+
145
+ ## [0.4.1] - 2026-05-12
146
+
147
+ ### Added
148
+
149
+ - Added an About dialog with project purpose, current version, credits, core hotkeys, and rights note.
150
+ - Added a dedicated About button in the header.
151
+
152
+ ### Changed
153
+
154
+ - Reorganized Settings into General, Project, Lyrics Import, Synchronizer & Editor, Auto Timing, and Upload sections.
155
+ - Moved About out of Settings.
156
+ - Removed the Settings subtitle line and kept only implemented settings in each section.
157
+
158
+ ## [0.4.0] - 2026-05-12
159
+
160
+ ### Added
161
+
162
+ - Added avatar-based startup branding, browser title, manifest metadata, themed LRC circle favicon assets, and splash animation to match LRC Roller.
163
+
164
+ ### Changed
165
+
166
+ - Polished the local UI ahead of the v0.4.0 milestone.
167
+ - Refined Recent Projects controls with a slimmer remove button and removed the explanatory limit line.
168
+ - Simplified Local Files import wording in Lyrics Import.
169
+ - Moved the manual LRC cleanup action into Settings and kept the Editor focused on lyrics editing.
170
+ - Unified Settings form controls, checkbox styling, fonts, focus states, and button hover states.
171
+ - Removed the temporary splash preview page after review.
172
+ - Changed Auto Timing task settings in Settings to save automatically instead of requiring a manual save button.
173
+ - Tightened Recent Projects row layout and improved model folder browse button styling.
174
+ - Replaced active legacy Akari image assets with LRC Roller avatar-based placeholders while keeping parser/local-storage compatibility where needed.
175
+
176
+ ## [0.3.15] - 2026-05-12
177
+
178
+ ### Changed
179
+
180
+ - Updated Auto Timing progress parsing for py-roller 0.5.4 structured events.
181
+ - Prefer canonical `progress` values while keeping compatibility with earlier `percent` events.
182
+ - Normalize progress stages such as `preflight` and `model_download` so the stage checklist remains stable across py-roller progress protocol updates.
183
+
184
+ ## [0.3.12] - 2026-05-12
185
+
186
+ ### Added
187
+
188
+ - Added restricted-network Hugging Face download presets that keep SOCKS proxies and prefer `socks5h://` for remote DNS.
189
+
190
+ ### Changed
191
+
192
+ - Updated model download proxy placeholders and preview warnings to catch `socks5://` misconfiguration.
193
+ - Clarified that CLI-like download defaults are for direct/public network access only.
194
+
195
+ ## [0.3.11] - 2026-05-12
196
+
197
+ ### Changed
198
+
199
+ - Kept Auto Timing task controls and Settings defaults in parity, including Apple Silicon/MPS visibility for Torch-based transcriber backends.
200
+ - Changed default HF model download mode to XET off for new settings.
201
+ - Reworked model download presets to match a known-good py-roller CLI style: XET off, no proxy, and py-roller default timeouts/workers.
202
+ - Added command-preview warnings for proxy, XET auto, and single-worker HF downloads.
203
+
204
+ ## [0.3.10] - 2026-05-12
205
+
206
+ ### Added
207
+
208
+ - Added Direct, Split, Realign, and Rewrite processing presets in the Auto Timing UI.
209
+
210
+ ### Changed
211
+
212
+ - Required `py-roller>=0.5.2` for the Hugging Face timeout environment fix.
213
+ - Normalized Hugging Face timeout and worker options as positive integers before building `py-roller` commands.
214
+ - Built `py-roller` commands from the selected stage range, only passing inputs and options that are valid for those stages.
215
+ - Persisted reusable py-roller artifacts in each project under `artifacts/` so realign and rewrite-only flows can reuse prior work.
216
+ - Removed MPS from faster-whisper device choices because ctranslate2 does not accept PyTorch MPS device names.
217
+ - Rendered Command Preview as a scrollable terminal-style block that does not stretch the side panel.
@@ -0,0 +1,3 @@
1
+ include CHANGELOG.md
2
+ include README.md
3
+ recursive-include backend/lrc_roller/frontend_dist *
@@ -0,0 +1,158 @@
1
+ Metadata-Version: 2.4
2
+ Name: rollingpebble
3
+ Version: 0.6.2
4
+ Summary: Local WebUI frontend for py-roller and pylrclib.
5
+ Author: Harmonese
6
+ License-Expression: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: fastapi>=0.110
10
+ Requires-Dist: uvicorn[standard]>=0.27
11
+ Requires-Dist: python-multipart>=0.0.9
12
+ Requires-Dist: pylrclib-cli>=0.4.6
13
+ Provides-Extra: roller
14
+ Provides-Extra: full
15
+ Provides-Extra: dev
16
+ Requires-Dist: ruff>=0.6; extra == "dev"
17
+ Requires-Dist: pytest>=8; extra == "dev"
18
+ Requires-Dist: build>=1.2; extra == "dev"
19
+
20
+ # Rolling Pebble
21
+
22
+ [![PyPI](https://img.shields.io/pypi/v/rollingpebble.svg)](https://pypi.org/project/rollingpebble/)
23
+ [![Python](https://img.shields.io/pypi/pyversions/rollingpebble.svg)](https://pypi.org/project/rollingpebble/)
24
+
25
+ Rolling Pebble is a local lyrics workstation for searching, editing, timing, organizing, and publishing LRC lyrics.
26
+
27
+ It gives you a browser-based interface backed by a local Python server. Your projects, audio, lyrics, runtime environments, and model caches stay on your machine. Auto Timing is powered by `py-roller` in an isolated runtime so large audio dependencies do not pollute the main app environment.
28
+
29
+ ## What It Does
30
+
31
+ - **Import** audio and lyrics from local files, LRCLIB, and supported online sources.
32
+ - **Edit** metadata and lyric text in a focused LRC editor.
33
+ - **Synchronize** timestamps manually when you want frame-level control.
34
+ - **Auto-time** lyrics with `py-roller` using isolated CPU/CUDA runtime profiles.
35
+ - **Review and clean up** projects, model caches, runtime environments, and app data.
36
+ - **Publish** prepared lyrics through LRCLIB workflows.
37
+ - **Use multiple languages** through the built-in i18n layer.
38
+
39
+ ## Typical Workflow
40
+
41
+ 1. Create or import a project with an audio file.
42
+ 2. Import lyrics from LRCLIB, a local file, or the editor.
43
+ 3. Clean up the lyric text and metadata.
44
+ 4. Use the Synchronizer for manual timing, or Auto Timing for py-roller based alignment.
45
+ 5. Review the generated LRC, export it, or publish it through LRCLIB.
46
+
47
+ ## Install
48
+
49
+ Rolling Pebble requires Python 3.10 or newer. Auto Timing additionally needs a Python 3.12 executable available on your system because the isolated `py-roller` runtime is built on Python 3.12.
50
+
51
+ Recommended install:
52
+
53
+ ```bash
54
+ python -m venv rollingpebble-env
55
+ . rollingpebble-env/bin/activate
56
+ python -m pip install -U pip
57
+ python -m pip install rollingpebble
58
+ rollingpebble
59
+ ```
60
+
61
+ On Windows PowerShell:
62
+
63
+ ```powershell
64
+ py -m venv rollingpebble-env
65
+ .\rollingpebble-env\Scripts\Activate.ps1
66
+ python -m pip install -U pip
67
+ python -m pip install rollingpebble
68
+ rollingpebble
69
+ ```
70
+
71
+ Then open:
72
+
73
+ ```text
74
+ http://127.0.0.1:6789
75
+ ```
76
+
77
+ ## First Run
78
+
79
+ Start Rolling Pebble:
80
+
81
+ ```bash
82
+ rollingpebble
83
+ ```
84
+
85
+ Then open:
86
+
87
+ ```text
88
+ http://127.0.0.1:6789
89
+ ```
90
+
91
+ The default server binds to `127.0.0.1`, so it is intended for local use.
92
+
93
+ ## Auto Timing
94
+
95
+ Auto Timing uses `py-roller` for lyric alignment. Rolling Pebble does not install Torch, Demucs, faster-whisper, or other heavy audio dependencies into the main app environment. Instead, it creates a separate runtime under the app data directory.
96
+
97
+ To set it up:
98
+
99
+ 1. Open **Settings -> Auto Timing -> Runtime**.
100
+ 2. Choose a runtime profile.
101
+ 3. Click **Create Runtime**.
102
+ 4. Run **Runtime Check** after creation completes.
103
+
104
+ If Python 3.12 is not detected automatically, set:
105
+
106
+ ```bash
107
+ export LRC_ROLLER_RUNTIME_PYTHON=/path/to/python3.12
108
+ ```
109
+
110
+ The current supported py-roller range is:
111
+
112
+ ```text
113
+ py-roller>=0.6.2,<0.8
114
+ ```
115
+
116
+ ## Storage and Privacy
117
+
118
+ Rolling Pebble is local-first. It stores data under the user data directory, for example:
119
+
120
+ ```text
121
+ ~/.local/share/rollingpebble
122
+ ```
123
+
124
+ Inside the app, **Settings -> Storage & Cleanup** shows project data, model caches, runtime environments, and other app data. Model caches are stored separately from runtime environments so they can be reused across runtime repairs.
125
+
126
+ Rolling Pebble only contacts external services when you use features that need them, such as LRCLIB lookup/publishing, supported online source import, or model downloads for Auto Timing.
127
+
128
+ ## Developer Notes
129
+
130
+ For source development:
131
+
132
+ ```bash
133
+ python -m venv .venv
134
+ . .venv/bin/activate
135
+ python -m pip install -U pip setuptools wheel
136
+ python -m pip install -e .
137
+ pnpm install
138
+ ```
139
+
140
+ Run the backend and frontend together:
141
+
142
+ ```bash
143
+ . .venv/bin/activate
144
+ rollingpebble dev
145
+ ```
146
+
147
+ Or use two terminals:
148
+
149
+ ```bash
150
+ # terminal 1
151
+ . .venv/bin/activate
152
+ rollingpebble serve --reload
153
+
154
+ # terminal 2
155
+ pnpm dev
156
+ ```
157
+
158
+ Release packaging details live in [RELEASE.md](./RELEASE.md).
@@ -0,0 +1,139 @@
1
+ # Rolling Pebble
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/rollingpebble.svg)](https://pypi.org/project/rollingpebble/)
4
+ [![Python](https://img.shields.io/pypi/pyversions/rollingpebble.svg)](https://pypi.org/project/rollingpebble/)
5
+
6
+ Rolling Pebble is a local lyrics workstation for searching, editing, timing, organizing, and publishing LRC lyrics.
7
+
8
+ It gives you a browser-based interface backed by a local Python server. Your projects, audio, lyrics, runtime environments, and model caches stay on your machine. Auto Timing is powered by `py-roller` in an isolated runtime so large audio dependencies do not pollute the main app environment.
9
+
10
+ ## What It Does
11
+
12
+ - **Import** audio and lyrics from local files, LRCLIB, and supported online sources.
13
+ - **Edit** metadata and lyric text in a focused LRC editor.
14
+ - **Synchronize** timestamps manually when you want frame-level control.
15
+ - **Auto-time** lyrics with `py-roller` using isolated CPU/CUDA runtime profiles.
16
+ - **Review and clean up** projects, model caches, runtime environments, and app data.
17
+ - **Publish** prepared lyrics through LRCLIB workflows.
18
+ - **Use multiple languages** through the built-in i18n layer.
19
+
20
+ ## Typical Workflow
21
+
22
+ 1. Create or import a project with an audio file.
23
+ 2. Import lyrics from LRCLIB, a local file, or the editor.
24
+ 3. Clean up the lyric text and metadata.
25
+ 4. Use the Synchronizer for manual timing, or Auto Timing for py-roller based alignment.
26
+ 5. Review the generated LRC, export it, or publish it through LRCLIB.
27
+
28
+ ## Install
29
+
30
+ Rolling Pebble requires Python 3.10 or newer. Auto Timing additionally needs a Python 3.12 executable available on your system because the isolated `py-roller` runtime is built on Python 3.12.
31
+
32
+ Recommended install:
33
+
34
+ ```bash
35
+ python -m venv rollingpebble-env
36
+ . rollingpebble-env/bin/activate
37
+ python -m pip install -U pip
38
+ python -m pip install rollingpebble
39
+ rollingpebble
40
+ ```
41
+
42
+ On Windows PowerShell:
43
+
44
+ ```powershell
45
+ py -m venv rollingpebble-env
46
+ .\rollingpebble-env\Scripts\Activate.ps1
47
+ python -m pip install -U pip
48
+ python -m pip install rollingpebble
49
+ rollingpebble
50
+ ```
51
+
52
+ Then open:
53
+
54
+ ```text
55
+ http://127.0.0.1:6789
56
+ ```
57
+
58
+ ## First Run
59
+
60
+ Start Rolling Pebble:
61
+
62
+ ```bash
63
+ rollingpebble
64
+ ```
65
+
66
+ Then open:
67
+
68
+ ```text
69
+ http://127.0.0.1:6789
70
+ ```
71
+
72
+ The default server binds to `127.0.0.1`, so it is intended for local use.
73
+
74
+ ## Auto Timing
75
+
76
+ Auto Timing uses `py-roller` for lyric alignment. Rolling Pebble does not install Torch, Demucs, faster-whisper, or other heavy audio dependencies into the main app environment. Instead, it creates a separate runtime under the app data directory.
77
+
78
+ To set it up:
79
+
80
+ 1. Open **Settings -> Auto Timing -> Runtime**.
81
+ 2. Choose a runtime profile.
82
+ 3. Click **Create Runtime**.
83
+ 4. Run **Runtime Check** after creation completes.
84
+
85
+ If Python 3.12 is not detected automatically, set:
86
+
87
+ ```bash
88
+ export LRC_ROLLER_RUNTIME_PYTHON=/path/to/python3.12
89
+ ```
90
+
91
+ The current supported py-roller range is:
92
+
93
+ ```text
94
+ py-roller>=0.6.2,<0.8
95
+ ```
96
+
97
+ ## Storage and Privacy
98
+
99
+ Rolling Pebble is local-first. It stores data under the user data directory, for example:
100
+
101
+ ```text
102
+ ~/.local/share/rollingpebble
103
+ ```
104
+
105
+ Inside the app, **Settings -> Storage & Cleanup** shows project data, model caches, runtime environments, and other app data. Model caches are stored separately from runtime environments so they can be reused across runtime repairs.
106
+
107
+ Rolling Pebble only contacts external services when you use features that need them, such as LRCLIB lookup/publishing, supported online source import, or model downloads for Auto Timing.
108
+
109
+ ## Developer Notes
110
+
111
+ For source development:
112
+
113
+ ```bash
114
+ python -m venv .venv
115
+ . .venv/bin/activate
116
+ python -m pip install -U pip setuptools wheel
117
+ python -m pip install -e .
118
+ pnpm install
119
+ ```
120
+
121
+ Run the backend and frontend together:
122
+
123
+ ```bash
124
+ . .venv/bin/activate
125
+ rollingpebble dev
126
+ ```
127
+
128
+ Or use two terminals:
129
+
130
+ ```bash
131
+ # terminal 1
132
+ . .venv/bin/activate
133
+ rollingpebble serve --reload
134
+
135
+ # terminal 2
136
+ pnpm dev
137
+ ```
138
+
139
+ Release packaging details live in [RELEASE.md](./RELEASE.md).
@@ -0,0 +1,5 @@
1
+ from __future__ import annotations
2
+
3
+ from rollingpebble.version import __version__, app_version
4
+
5
+ __all__ = ["__version__", "app_version"]