A local Python web app that turns a book or document (EPUB, PDF, Word, TXT, Markdown, HTML) into a narrated audiobook: one audio file per chapter, then optionally combined into a single audiobook plus an MP4 (static image + audio) with YouTube-ready chapter timestamps. Everything runs on your own machine and opens in Chrome.
- Highlights
- Screenshots
- What it does
- Voice engines
- Requirements & disk space
- Install and run
- Setup from scratch (Python only)
- Running and stopping
- Updating to a new version
- Run it overnight (narrate + bind in one pass)
- GPU setup and performance
- Memory use on 16 GB machines
- How YouTube chapters work
- Playing from Google Drive (with chapters)
- Project layout
- Building a Windows distribution
- Troubleshooting
- Notes
- Tech stack
- License
- Any common book/document format in: EPUB, PDF, Word (.docx), TXT, Markdown, HTML — chapters auto-detected from the book's real structure, with reading order preserved.
- Three voice engines: OpenAI and ElevenLabs (cloud, paid) and Chatterbox (free, local, GPU-accelerated), with eight bundled audiobook voices plus custom voice cloning from a ~10-second sample.
- One file per chapter, then optionally combined into a single audiobook and an MP4 (cover image + audio) for YouTube.
- YouTube chapter markers generated for you — a ready-to-paste timestamp list so YouTube auto-creates chapter jumps in your video.
- Clickable chapters for Google Drive too — for books too long for YouTube, Parroty builds a small page that turns each chapter into a link that opens the Drive video at that point (chapter marks are also embedded in the MP4 for VLC).
- Edit chapters before narrating — rename, delete, or add chapters, and drop chapters to fit YouTube's 12-hour limit.
- Built for long books on modest hardware: a true low-memory mode that recycles the narration process every N chapters to keep RAM flat, a live free-RAM readout, and a rock-solid Resume that picks up exactly where it left off — finishing 100+ chapter books on a 16 GB machine without crashes.
- Runs entirely on your own machine — your files and (for the local engine) your audio never leave your computer.
- Windows desktop-app behavior: opens maximized with the Parroty bird icon in the window and taskbar; closing X stops Flask and active narration workers.
Chapters are auto-detected from the book's structure, and you can rename or delete any of them before narrating:
Pick a voice engine — including Chatterbox, which runs locally for free and can clone a voice from a short sample:
Set it once and leave it: narrate, combine, and build the YouTube MP4 in a single run, with low-memory mode keeping RAM flat on long books:
Stopped partway? Resume continues from exactly where it left off — with an adjustable memory-flush interval for machines with a small page file:
Prefer one tall image of the whole page? See
docs/screenshots/00-overview-full.png.
- Upload a book or document — EPUB, PDF, Word (.docx), .txt, Markdown, or HTML. Chapters are auto-detected (from the book's structure, document headings, or heading-like lines in plain text). You can edit them after.
- Edit chapters — rename, delete, or add any chapter by hand.
- Pick a voice engine and a voice (or upload a sample to clone).
- Narrate — produces one audio file per chapter.
- Bind — combine all chapters into one audiobook, optionally with a cover
image as an MP4, plus a
youtube_chapters.txtyou can paste into a video description so YouTube auto-creates chapter markers, and a subtitles.srtwith timing taken straight from the narration (see below).
Subtitles (.srt): binding also writes a subtitles-…srt file. As each
chapter is narrated, Parroty records the exact start/end of every spoken chunk
from the generated audio, so the subtitle timing matches the MP3 precisely (not
estimated) and the text is the book's own words. Download it from the bind
results. It drops straight into SeeStory, which can burn it into the video or
add it as a toggleable track. Subtitles are produced for the local Chatterbox
voice; cloud engines that synthesize a whole chapter at once don't expose
per-chunk timing, so those chapters are skipped.
| Engine | Cost | Cloning | Notes |
|---|---|---|---|
| OpenAI | paid (cloud) | no | 6 built-in voices, easiest, very good quality |
| ElevenLabs | paid (cloud) | yes | best naturalness, clones from a sample |
| Chatterbox | free (local) | yes | 8 bundled audiobook voices, custom cloning from ~10s sample, GPU recommended |
Cloud engines need an API key, entered in the UI — it's sent only to that provider, never stored. You pay the provider directly on your own account.
WARNING: Only clone voices you own or have explicit permission to use.
Chatterbox includes eight reviewed offline reference voices:
- Warm female
- Mature female
- Neutral female
- British female
- Warm male
- Mature/deep male
- Neutral male
- British male
These replace the older generic Female/Male references. They are anonymous VCTK
corpus clips licensed under CC BY 4.0; attribution is kept in
app/assets/voices/ATTRIBUTION.md. Uploading a custom reference sample still
overrides the selected built-in voice for that project.
FYI — read before installing. The local voice engine pulls down PyTorch and a TTS model, so it needs some room and (ideally) a CUDA GPU. The cloud voices (OpenAI / ElevenLabs) need almost no disk and no GPU.
Tested on: Windows 11, NVIDIA RTX 5060 Laptop GPU (8 GB VRAM), PyTorch + CUDA 12.8, Python 3.12. It's a solo‑developer project built and run on that exact setup — other configurations should work but haven't been exercised.
| Need | Detail |
|---|---|
| OS | Windows 10/11 tested; macOS/Linux can run from the command line |
| GPU | Only for the local Chatterbox engine: NVIDIA with CUDA (the CUDA 12.8 build for RTX 50‑series). 8 GB VRAM is plenty for TTS. CPU‑only works but is much slower; Apple Silicon (Metal) also accelerates Chatterbox. Cloud voices need no GPU. |
| ffmpeg | Required — combines the per‑chapter audio and builds the MP4 |
| Python | 3.10+ (3.12 recommended) |
| Accounts (optional) | An OpenAI or ElevenLabs API key only if you use those cloud voices |
Disk space — budget ~10–15 GB free (only if you use the local engine):
| Item | Approx. size | When |
|---|---|---|
| Python venv (PyTorch CUDA + dependencies) | ~5–8 GB | at setup |
| Chatterbox voice model | a few GB | first time you narrate locally |
| Your generated audio (per‑chapter MP3s + combined audiobook + MP4) | varies — a long book can be 1–3 GB | as you narrate |
The Chatterbox model is downloaded once and cached in your Hugging Face cache
(%USERPROFILE%\.cache\huggingface). If you only use the cloud voices, you can
skip the local engine entirely and the footprint is tiny.
Make sure Python 3.12 and ffmpeg are installed first (see steps 1–2 below if you haven't — these are one-time, machine-wide installs).
Open PowerShell inside the Parroty folder and paste this whole block in one go. It creates the environment, installs everything (core packages + PyTorch
- Chatterbox), and starts the app:
py -3.12 -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
pip install chatterbox-tts
pip install --force-reinstall torch torchaudio --index-url https://download.pytorch.org/whl/cu128
python -m app.serverChrome opens automatically at http://127.0.0.1:5000. Press Ctrl+C to stop.
Prefer to double-click instead of typing commands? See
Quick Start Readme.txt. It contains the current Windows BAT templates. Batch files are intentionally excluded from Git and generated locally (or injected into a downloadable Windows ZIP) so machine-specific wrappers never become repository source files. The commands above remain the portable setup path.
First-run PowerShell note. If the
.\venv\Scripts\Activate.ps1line gives "running scripts is disabled on this system", run this once (per machine), answer Y, then retry:Set-ExecutionPolicy -Scope CurrentUser RemoteSignedThis is a standard, safe setting that only affects your user account (no admin needed). Alternatively, skip activation entirely and run the app directly — this never hits the policy block:
venv\Scripts\python.exe -m app.server
The
cu128line installs the GPU (CUDA 12.8) build of PyTorch — needed for NVIDIA GPUs including the new RTX 50-series. Install it last with--force-reinstallso another package's dependency can't replace it with the slow CPU build. It still works on machines without an NVIDIA GPU (just runs on CPU). If that line fails, use the plain CPU build:pip install torch torchaudio.
Next time you just need the last two lines (the installs are already done):
.\venv\Scripts\Activate.ps1
python -m app.serverThe manual step-by-step instructions below explain each line, in case you want the detail or aren't on Windows.
Check whether you already have it:
python3 --versionIf it prints 3.10 or higher you're set. Otherwise download it from https://www.python.org/downloads/ (on Windows, tick "Add Python to PATH" during install).
ffmpeg does the audio combining and MP4 video export.
- Windows (easiest): run
winget install ffmpegin PowerShell, then close and reopen PowerShell and verify withffmpeg -version. (winget handles the download and PATH setup for you.) - macOS (with Homebrew):
brew install ffmpeg - Ubuntu / Debian:
sudo apt install ffmpeg
Note: ffmpeg has no traditional installer — it's just an executable that needs to be on your PATH. On Windows,
winget install ffmpegis the simplest route. If you'd rather do it by hand, download the release-essentials build from https://www.gyan.dev/ffmpeg/builds/, unzip it (e.g. toC:\ffmpeg), and add theC:\ffmpeg\binfolder to your PATH.
Put the Parroty folder wherever you like, then open a terminal inside
it (so you're in the same directory as requirements.txt):
cd path/to/ParrotyThis keeps Parroty's dependencies isolated from the rest of your system.
# macOS / Linux
python3 -m venv venv
source venv/bin/activate
# Windows (PowerShell) — use py -3.12 to force Python 3.12
py -3.12 -m venv venv
.\venv\Scripts\Activate.ps1On Windows, type
py -3.12(instead ofpython) to force Python 3.12, which is the most compatible version for the audio/TTS libraries. If you have multiple Python versions installed, this picks the right one. Once the venv is active and your prompt shows(venv), plainpythonandpipuse 3.12 automatically.
You'll know it worked when your prompt shows (venv) at the start.
pip install -r requirements.txtThis installs the core app (Flask, EPUB parsing, audio handling) plus the cloud TTS clients (OpenAI, ElevenLabs).
Only needed if you want Chatterbox (free, local, voice cloning). Chatterbox needs PyTorch, which has a platform-specific install, so it's two steps in this order:
# 1) PyTorch first — GPU (CUDA 12.8) build, needed for NVIDIA GPUs
# incl. the new RTX 50-series. Works on CPU-only machines too.
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu128
# 2) then Chatterbox
pip install chatterbox-ttsIf you skip the PyTorch step you'll get "No module named 'torch'" when you click Narrate. The
cu128line above installs the GPU build. If you have no NVIDIA GPU and want a smaller download, use the plain CPU build instead:pip install torch torchaudio. For the absolute latest GPU build (or if cu128 fails on a very new card), see https://pytorch.org/get-started/locally/.
A GPU makes this much faster, but it runs on CPU too (slowly). You can skip this step entirely and just use OpenAI or ElevenLabs.
Chatterbox voices. Chatterbox always narrates from a reference clip. In the app you can either:
- pick a built-in voice — bundled American or British, male or female (American is the default). These run fully offline with no API key; or
- upload your own sample (6–30s clean
.wav/.mp3) to clone any voice.
Either way, click Preview voice to hear a short sample with your current voice and settings before narrating the whole book. A collapsible Chatterbox options panel lets you tune exaggeration, CFG/pace, and temperature (defaults are shown on each slider, with a Reset to defaults button).
Speed vs quality (Standard vs Turbo). A "Speed vs quality" selector picks the Chatterbox model:
- Standard (default) — the original model, most expressive controls, best quality, but slower.
- Turbo — a streamlined model distilled to generate in far fewer steps, so
it's dramatically faster and purpose-built for long narration. It ignores
the exaggeration/CFG sliders. If Turbo isn't available, update with
pip install -U chatterbox-tts.
Estimate time. Before committing to a long book, click ⏱ Estimate time. It renders one short calibration clip on your actual hardware (with your chosen model and device), measures the speed, and projects the total. Because it measures your machine, the estimate reflects your real GPU/CPU — not a generic guess. It's an estimate, so actual time varies somewhat by chapter.
About speed. Chatterbox is a neural model. On CPU it's very slow (hours per book). A GPU helps enormously, and Turbo is the biggest single speedup. Even so, a full book on a laptop GPU is realistically tens of minutes to a couple of hours depending on the model and length. If you need a book done in minutes, the cloud engines (OpenAI/ElevenLabs) are far faster (but paid).
Compute device (GPU vs CPU). Under the Chatterbox settings there's a Compute device selector:
- Auto — uses a GPU if one is available, otherwise CPU (recommended).
- NVIDIA GPU (CUDA) — appears only if you have an NVIDIA card with a CUDA-enabled PyTorch build. Strongly preferred — many times faster.
- Apple GPU (Metal) — appears on Apple Silicon Macs.
- CPU only — works everywhere but is extremely slow (often several minutes per few seconds of audio; a full book can take hours).
⚡ A GPU is strongly preferred. To use an NVIDIA GPU you must install the
CUDA build of PyTorch — get the exact command for your system at
https://pytorch.org/get-started/locally/ (instead of the plain pip install torch torchaudio CPU line). Note: integrated Intel/AMD graphics cannot be
used by PyTorch for this and will fall back to CPU — only discrete NVIDIA
(CUDA) or Apple Silicon (Metal) GPUs accelerate Chatterbox.
If you have an NVIDIA GPU but it's still using CPU: the plain pip install torch torchaudio installs a CPU-only build, and older CUDA builds (cu124 and
earlier) don't support the new RTX 50-series. Parroty shows a warning under the
Compute device selector when this happens.
The fix: in your activated venv, force-reinstall the CUDA GPU build:
pip install --force-reinstall --no-cache-dir torch torchaudio --index-url https://download.pytorch.org/whl/cu128(This is also why the setup installs PyTorch last and force-reinstalls it — so the GPU build can't be replaced by a CPU build pulled in as another package's dependency.)
For a very new GPU (e.g. RTX 50-series / Blackwell), CUDA 12.8 (cu128) is
what you need. If it still falls back to CPU, try the nightly build:
pip install --pre --force-reinstall torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128The authoritative, always-current command is at https://pytorch.org/get-started/locally/ (select Pip / Windows / CUDA 12.8). After reinstalling, restart Parroty; the Compute device selector should then list your GPU and the warning turns into a green "GPU is available" note.
Quick check: run
python -c "import torch; print(torch.cuda.is_available())"in your venv to see whether PyTorch can use your GPU.
From the command line (with your venv active), from inside the Parroty
folder:
python -m app.serverIt starts a local server and automatically opens Chrome to
http://127.0.0.1:5000 (falling back to your default browser if Chrome isn't
installed). Press Ctrl+C to stop.
Optional Windows launchers: create the local .bat files from
Quick Start Readme.txt, or use a packaged Windows ZIP that already includes
them. run.bat starts the backend windowlessly through pythonw.exe, opens
Parroty in a dedicated maximized Chrome/Edge app window, applies the Parroty bird
icon to the native window and taskbar button, and silently creates or refreshes
the desktop shortcut. Closing that app window with X terminates the complete
Parroty process tree—including an active app.narrate_worker—rather than only
closing the port-5000 Flask parent. Output goes to parroty.log; stop.bat uses
the same full-tree behavior and can also find orphaned Parroty workers if the
listener is already gone. These .bat files are deliberately ignored by Git.
Starting again later needs no reinstall — setup is one-time. Open a terminal,
cd into the Parroty folder, activate the venv, and run the server:
# Windows (PowerShell)
.\venv\Scripts\Activate.ps1
python -m app.server
# macOS / Linux
source venv/bin/activate
python -m app.serverTip: to skip the auto-open browser, set
PARROTY_NO_BROWSER=1before running.
Your installed packages live inside the venv folder, which sits inside the
Parroty folder. So:
- If you delete the whole folder and re-download, you also delete the venv — run the install steps once more.
- If you only want the new code and want to keep your installed packages,
copy the new
appfolder andrequirements.txtover your existing folder, leavingvenvuntouched. No reinstall needed.
You only ever need to reinstall packages when requirements.txt changes (a new
dependency was added). Re-running the install is always safe — pip reuses the
existing venv and only installs what's missing.
In the Narrate & bind step you set everything before starting, then click once and walk away:
- Combine all chapters into one audiobook (checked by default).
- Also build an MP4 (static cover image + audio) for YouTube — tick this and upload a cover image.
When you click Narrate & bind, Parroty narrates every chapter, then combines them, then builds the video — all in a single run, with one progress bar covering the whole job. Leave it overnight; it's done by morning. The ⏱ Estimate time button accounts for the bind/video steps too.
Binding itself is fast relative to narration: combining is quick, and the MP4 encode is typically a few minutes even for a long book. The slow part is always the narration.
Each run is saved in its own folder under output/, named after the book and
the date (e.g. the-great-gatsby_2026-06-18_2109_xxxx). If a run finished but
binding failed or was skipped — even in a previous session — open "Already
narrated? Bind existing chapter files" in the Narrate step, pick the run from
the list (shown by book title and date), and bind it without re-narrating.
Cover images can be any common format — JPG, PNG, WebP, even AVIF — Parroty converts them automatically so ffmpeg can read them.
For local Chatterbox narration, select CUDA / NVIDIA GPU in Parroty and confirm that the bottom-left system monitor shows the NVIDIA GPU and rising VRAM while speech is being generated. GPU utilization naturally rises and falls: the model generates speech on the GPU, then Parroty performs CPU and disk work such as chunk assembly, MP3 writing, progress updates, resume-ledger writes, and memory cleanup. Average utilization can therefore be lower during a full book than during a short back-to-back voice audition.
For best laptop performance:
- Plug in AC power.
- Use Windows Settings → System → Power → Best performance.
- In NVIDIA Control Panel, set
python.exeandpythonw.exeto Prefer maximum performance when available. - Keep enough free RAM and page-file headroom for the Standard model.
The hidden launcher and narration workers already request high execution priority and opt out of Windows process power throttling. No visible PowerShell window is required during narration.
If you see "The paging file is too small for this operation" (os error 1455): this means Windows' page file (virtual memory) is capped too low. Let Windows manage it automatically:
- Press Win + R, type
sysdm.cpl, Enter. - Advanced tab → Performance Settings → Advanced tab → Virtual memory Change.
- Tick "Automatically manage paging file size for all drives".
- OK, then restart the PC.
This is the most common cause of a crash partway through a long book on a 16 GB machine, and the one-time setting above fixes it for good.
Chatterbox is a large model and keeps itself loaded in RAM while running, so a long book can press against a 16 GB machine. Parroty has several safeguards:
- Low-memory mode (checkbox in the Narrate step and on the Resume screen, on by default) narrates in batches and, after every N chapters, fully shuts down and restarts the narration process. When a process exits, Windows hands back all of its RAM and page-file memory unconditionally — so memory sawtooths back to baseline on every restart and stays flat for the whole book, no matter how long it is. Parroty then resumes automatically from the exact chapter it left on. This is the most reliable way to finish a long book on a RAM-limited machine without "out of memory" or "bad allocation" errors.
- Custom flush interval: the number next to the checkbox ("Flush RAM & page file every N chapters") is yours to set — 1 to 500. Lower it (5, or even 1) if you have a small page file or hit memory errors; raise it for fewer restarts if you have RAM to spare. The time estimate accounts for the restart overhead.
- Live memory readout: the progress bar shows free RAM in real time (e.g.
45% · ch 27/107 · RAM 3.6 GB free), and Parroty does a lighter cache reclaim on the spot if RAM dips low mid-chapter, so you can always see what memory is doing. - Reliable resume: each chapter is written to disk as it finishes and tagged by a stable identity derived from its text — not by its position in the list. So if a run stops, crashes, or you close it, just reopen and click Resume: Parroty recognizes exactly which chapters are already done (even if you've since reordered, renamed, or deleted others) and continues with only what's left — never redoing finished work and never producing duplicates.
- Stops safely, never half-breaks: if a chapter ever fails (e.g. a genuine out-of-memory), Parroty saves everything finished so far and halts with a clear "free some RAM, then Resume" message, rather than corrupting the run.
- Tips: close other memory-heavy apps (especially Chrome) before a long run, and prefer the Turbo model, which is lighter as well as faster.
YouTube builds chapter markers from timestamps in the video description, not from the file. After binding, copy the generated timestamps (the app gives you a button) into your description. They look like:
00:00 Chapter One: Departure
04:12 Chapter Two: The Storm
09:48 Chapter Three: Landfall
YouTube requires the first stamp to be 00:00 and at least 3 chapters. The MP4
also has chapter markers embedded directly (visible in players like VLC).
When a book is too long for YouTube (over 12 hours), you can play the MP4
straight from Google Drive instead. Drive's player has no chapter menu, but its
video links accept a start time, so after binding Parroty also gives you a
clickable chapter index: a drive-chapters-…html file alongside the
audiobook.
To use it:
- Upload the MP4 to Google Drive and let it finish processing.
- Right-click it → Share → Copy link.
- Double-click the
drive-chapters-…htmlfile (it opens in your browser) and paste that link into the box.
Every chapter becomes a link that opens the Drive video at that point. The page is self-contained — keep it next to your audiobook and reuse it anytime; it needs no internet to build the links.
For an actual in-player chapter menu instead of links, the MP4 has the chapter marks embedded directly, so downloading it and opening in VLC (or another desktop player) gives a real chapter list to jump around.
Parroty/
app/
server.py Flask app + all routes, auto-opens Chrome
epub_parser.py EPUB -> chapters, manual re-splitting
tts.py engine registry + catalog
assembler.py combine audio, timestamps, build MP4
converters/
openai_engine.py
elevenlabs_engine.py
chatterbox_engine.py
templates/index.html
static/style.css, app.js
requirements.txt
uploads/ output/ (created automatically at runtime)
Repository source and downloadable Windows packages are intentionally different:
- Git tracks the application, Python/VBS/PowerShell launcher helpers, icon, voice assets, documentation, and tests.
- Git does not track
.batfiles..gitignoreblocks*.bateverywhere. - A Windows ZIP may include locally generated
.batconvenience launchers at the archive root. The current templates live inQuick Start Readme.txt. - Package the project files at the ZIP root; do not add an extra nested
Parrotydirectory.
See BUILD.md for the complete packaging checklist and validation
commands.
pythonnot found — trypython3instead (andpip3).- "ffmpeg not found" in the app — ffmpeg isn't on your PATH. On Windows run
winget install ffmpeg, then restart PowerShell (redo step 2). Audio narration still works without it, but combining and MP4 export won't. - PowerShell won't activate the venv —
- If you see "The module 'venv' could not be loaded", you left off the
.\prefix. Run it as.\venv\Scripts\Activate.ps1(the.\tells PowerShell it's a file path, not a command). - If you see "running scripts is disabled on this system", run
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedonce, then retry.
- If you see "The module 'venv' could not be loaded", you left off the
- "No module named 'torch'" or "No module named 'chatterbox'" when you click
Narrate or Preview — these packages aren't installed in the venv that's running
Parroty. Install the CUDA build first with
venv\Scripts\python.exe -m pip install --upgrade --force-reinstall torch==2.11.0 torchaudio==2.11.0 --index-url https://download.pytorch.org/whl/cu128, then runvenv\Scripts\python.exe tools\install_chatterbox_compat.py. Confirm withvenv\Scripts\python.exe -c "import chatterbox, torch"before retrying. - Built-in voices need no key — all eight bundled audiobook voices run fully offline. Pick any voice and click Preview; a custom uploaded sample still overrides the selected built-in voice for that project.
- Port 5000 already in use — change the port at the bottom of
app/server.py(port=5000) to e.g.5001.
.mobiis not supported — convert to.epubfirst with Calibre if needed.- Projects live in memory; restarting the server clears them.
- Preview and Narrate show a live progress bar with a running ETA, so you can see it's working and roughly how long is left.
- Speed on CPU: Chatterbox is a neural model. On a GPU it's near real-time; on CPU only it's much slower — often several minutes for a few seconds of audio, and a full book can take hours. This is normal and not a bug. Tips: use Preview to dial in the voice on a short sample before committing, then run Narrate when you can leave it going. If you need speed, the cloud engines (OpenAI/ElevenLabs) are near-instant but paid.
- Language: Python 3.12 + vanilla JavaScript/HTML/CSS
- Backend: Flask (+ Werkzeug dev server), Server-Sent Events for progress
- Frontend: No framework — plain JS,
fetch(), SSE - TTS engines: Chatterbox (local, ResembleAI), OpenAI, ElevenLabs
- ML/GPU: PyTorch with CUDA 12.8 (cu128) on NVIDIA
- Document parsing: ebooklib (EPUB), pdfplumber (PDF), python-docx (Word), custom parsers (txt/Markdown/HTML/RTF)
- Audio: pydub, ffmpeg, Pillow (+pillow-avif-plugin), stdlib
wave - System: psutil (memory monitoring), ctypes (Windows API), local Windows launcher helpers
- Architecture: Local single-user web app on
127.0.0.1:5000, state on disk underoutput/
Released under the MIT License — free to use, modify, and distribute,
including commercially. See LICENSE. (Replace [YOUR NAME] in that
file with your name.) The third-party voice engines and libraries Parroty builds
on keep their own licenses.
Only clone or synthesize voices you own or have explicit permission to use.




