Update README and replace demo video
Browse files- .gitattributes +1 -0
- README.md +66 -2
- Video.mp4 +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -8,10 +8,74 @@ sdk_version: 6.18.0
|
|
| 8 |
python_version: '3.12'
|
| 9 |
app_file: app.py
|
| 10 |
pinned: false
|
| 11 |
-
short_description: Convert your
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
---
|
| 13 |
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
## Modal backend configuration
|
| 17 |
|
|
|
|
| 8 |
python_version: '3.12'
|
| 9 |
app_file: app.py
|
| 10 |
pinned: false
|
| 11 |
+
short_description: Convert your books to the spoken word
|
| 12 |
+
tags:
|
| 13 |
+
- track:backyard-ai
|
| 14 |
+
- sponsor:openai
|
| 15 |
+
- sponsor:nvidia
|
| 16 |
+
- sponsor:modal
|
| 17 |
+
- badge:off-brand
|
| 18 |
---
|
| 19 |
|
| 20 |
+
# Scriptorium
|
| 21 |
+
|
| 22 |
+
Scriptorium is a Gradio-based app for turning EPUB books into audiobooks. It provides a custom front-end for uploading and configuring a book, previewing voices, running long-form synthesis, and exporting the finished audiobook once generation completes.
|
| 23 |
+
|
| 24 |
+
## Demo video
|
| 25 |
+
|
| 26 |
+
<video controls width="100%" src="https://huggingface.co/spaces/build-small-hackathon/Scriptorium/resolve/main/Video.mp4">
|
| 27 |
+
Your browser does not support the video tag.
|
| 28 |
+
</video>
|
| 29 |
+
|
| 30 |
+
[Open video directly](https://huggingface.co/spaces/build-small-hackathon/Scriptorium/resolve/main/Video.mp4)
|
| 31 |
+
|
| 32 |
+
## Social media post
|
| 33 |
+
https://bsky.app/profile/unlimiteddreamco.xyz/post/3moe744qpos2m
|
| 34 |
+
|
| 35 |
+
## What it does
|
| 36 |
+
|
| 37 |
+
- Parses EPUB uploads into chapter text and metadata.
|
| 38 |
+
- Lets users select which chapters to include.
|
| 39 |
+
- Supports preview generation before committing to a full render.
|
| 40 |
+
- Runs full-book synthesis with progress updates and an export flow after completion.
|
| 41 |
+
- Exports finished renders from session-scoped storage.
|
| 42 |
+
|
| 43 |
+
## Project structure
|
| 44 |
+
|
| 45 |
+
- `app.py`
|
| 46 |
+
- Main Gradio server entrypoint and API registration.
|
| 47 |
+
- `frontend/`
|
| 48 |
+
- Custom HTML/CSS/JS interface for the three-step app flow.
|
| 49 |
+
- `backend/epub.py`
|
| 50 |
+
- EPUB validation, parsing, metadata extraction, and chapter shaping.
|
| 51 |
+
- `backend/synthesis_service.py`
|
| 52 |
+
- Main orchestration layer that routes preview/render work to local or Modal-backed synthesis.
|
| 53 |
+
- `backend/modal_client.py`
|
| 54 |
+
- Client for the optional remote Modal synthesis service.
|
| 55 |
+
- `modal_app.py`
|
| 56 |
+
- Modal FastAPI worker app for remote preview and render jobs.
|
| 57 |
+
- `backend/export.py`
|
| 58 |
+
- Audiobook packaging and export helpers.
|
| 59 |
+
- `tests/`
|
| 60 |
+
- Backend and integration-oriented test coverage for parsing, synthesis routing, Modal client behavior, and API wiring.
|
| 61 |
+
|
| 62 |
+
## Models and synthesis backends
|
| 63 |
+
|
| 64 |
+
Scriptorium currently supports these speech models:
|
| 65 |
+
|
| 66 |
+
- `OmniVoice`
|
| 67 |
+
- Main model for presets, design-prompt voices, and voice cloning.
|
| 68 |
+
- `Magpie TTS`
|
| 69 |
+
- Multilingual synthesis with speaker presets and optional text normalization.
|
| 70 |
+
|
| 71 |
+
It can run them through two execution backends:
|
| 72 |
+
|
| 73 |
+
- `HF/local`
|
| 74 |
+
- Runs synthesis inside the Hugging Face Space runtime.
|
| 75 |
+
- `Modal`
|
| 76 |
+
- Offloads synthesis to a separately deployed Modal worker.
|
| 77 |
+
|
| 78 |
+
The in-app voice presets such as `The Archivist`, `The Novice`, `The Warden`, and `The Illuminator` are themed preset layers on top of the underlying synthesis configuration.
|
| 79 |
|
| 80 |
## Modal backend configuration
|
| 81 |
|
Video.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c79c6c487a54fd57c7d48a9eed73d22445321b8c582ffb25f1f09d0a16437493
|
| 3 |
+
size 7131007
|