尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證your own audio story
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Biến truyện chữ trên mạng thành truyện audio đọc bằng giọng nữ AI tiếng Việt. 1. Dán link truyện (link chương 1, hoặc link trang giới thiệu truyện). 2. Chọn số chương muốn tạo. 3. StoryCast tự lấy chữ từng chương, đi theo nút “Chương sau”, rồi đọc bằng giọng Hoài My (Microsoft Edge TTS, miễn phí). 4. Nghe ngay trên web (tự nhớ chỗ đang nghe, chỉnh tốc độ 0.75x–2x, tự chuyển chương), tải từng chương .mp3, hoặc tải cả quyển thành một file .m4b có mục lục chương (mở được bằng các app nghe sách nói). Cần Node.js 22.13 trở lên (dùng SQLite có sẵn trong Node) và ffmpeg (chỉ để ghép cả quyển).檢視完整 README ↗
StoryCast AI is an open-source tool that automates turning online novels into audiobooks. It scrapes each chapter, cleans up the text, reads it aloud with an expressive AI voice, plays it in a built-in web player, and can export the whole story as a single .m4b audiobook file.
Completely free — no account sign-up and no third-party API key required!
@mozilla/readability and jsdom.Chương sau, 下一章) and strips noise, ads and anti-copy characters.data/dict/./web?url=…&mode=both opens straight in side-by-side mode.script-src 'none', so nothing from the site runs inside StoryCast. Search forms that use POST (like PO18's) are not supported.vi-VN-HoaiMyNeural) voice.zh-CN-XiaoxiaoNeural) voice.。!?;).0.75x to 2.0x)..mp3..m4b file with chapter markers, compatible with Apple Books, Smart AudioBook Player, Voice, and more.node:sqlite) — no database server to install.| Layer | Technology / Library |
|---|---|
| Framework | Next.js 16 (App Router), React 19 |
| Language | TypeScript 5 |
| UI | Tailwind CSS v4, Radix UI, React Icons |
| State management | Zustand |
| Text-to-Speech | msedge-tts |
| Parser & Scraper | @mozilla/readability, jsdom |
| Database | node:sqlite (native SQLite in Node.js) |
| Audio processing | ffmpeg |
You need two things installed before you start:
>= 22.13.0 (required)Node.js provides the node and npm commands used in every step below, and version 22.13+ is required for node:sqlite.
First, check whether you already have it:
node -v
v22.13.0 or higher, you're good — skip to step 2.command not found, or a version lower than v22.13.0, install Node.js first using one of the options below.Linux / macOS — using nvm (recommended, works on any distro):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# close and reopen your terminal, then:
nvm install 22
Ubuntu / Debian — using apt:
sudo apt install nodejs npm -y
node -v # must be v22.13.0 or higher
⚠️ The Node.js version in apt depends on your Ubuntu/Debian release. Older releases (e.g. Ubuntu 22.04 / 24.04) ship a version that is too old — if
node -vshows lower thanv22.13.0, remove it and use nvm instead.
macOS — using Homebrew:
brew install node
Windows:
winget install OpenJS.NodeJS.LTS
Or download the LTS installer from nodejs.org. Reopen your terminal after installing.
Verify the installation before continuing:
node -v # v22.13.0 or higher
npm -v
Needed to merge chapters into a .m4b file.
sudo apt install ffmpeg -ybrew install ffmpegwinget install Gyan.FFmpeg or via Chocolatey.Make sure
node -vworks (see Requirements) before running these steps. Without Node.js, everynpmcommand fails withnpm: command not foundand nothing will be running atlocalhost:3001.
git clone https://github.com/mochihat/storycast-ai.git
cd storycast-ai
npm install
npm run dev
Wait until the terminal shows ✓ Ready, then open http://localhost:3001 in your browser.
Keep this terminal open — closing it (or pressing Ctrl+C) stops the server.
StoryCast always runs on port 3001 (both
npm run devandnpm start). If that port is already taken — usually by an older StoryCast you forgot to stop — it does not move to another port; it stops and printsCổng 3001 đang bị chiếmwith how to free it. See Troubleshooting.
For smoother performance and lower memory usage:
npm run build
npm start
To have StoryCast start by itself when you log in — no terminal needed, just open http://localhost:3001 — install it as a background service:
./scripts/install-service.sh
| What | Command |
|---|---|
| After pulling new code (rebuild + restart) | ./scripts/install-service.sh |
Restart (e.g. after changing .env.local) | systemctl --user restart storycast |
| Stop / start | systemctl --user stop storycast / systemctl --user start storycast |
| Turn off auto-start | systemctl --user disable --now storycast |
| See its log | journalctl --user -u storycast -f |
The service uses port 3001, so
npm run devwill say the port is taken while it runs. Stop the service first (systemctl --user stop storycast) if you want to develop.
| Symptom | Cause & fix |
|---|---|
node: command not found / npm: command not found | Node.js isn't installed. Follow Requirements → Node.js, then run npm install again. |
Browser says "This site can't be reached" at localhost:3001 | The server isn't running. Check the terminal where you ran npm run dev for an error, and make sure it shows ✓ Ready. |
No such built-in module: node:sqlite | Your Node.js is older than 22.13. Upgrade it (e.g. nvm install 22). |
Cổng 3001 đang bị chiếm | StoryCast always runs on port 3001 (two copies would share one database). Another copy is probably still running: press Ctrl+C in its terminal, or run fuser -k 3001/tcp (Linux) / lsof -ti :3001 | xargs kill (macOS). |
ExperimentalWarning: SQLite is an experimental feature | Just a warning, not an error — the app works normally. |
| The first Chinese story takes ~30 s to start | The convert dictionaries (~60 MB) are being downloaded into data/dict/. Later stories start in a few seconds. They also use ~250 MB of RAM while the server runs. |
Weird errors after npm install failed earlier | Delete the node_modules folder and run npm install again. |
truyenfull)..mp3 chapters, or click Tải cả quyển (.m4b) (download the whole book) to listen offline on your phone.storycast-ai/
├── app/ # Next.js App Router (UI & API endpoints)
│ ├── api/ # API routes for stories, audio and downloads
│ └── page.tsx # Main dashboard page
├── components/ # UI components (Player, Sidebar, Cover...)
├── data/ # Local storage (gitignored)
│ ├── storycast.db # SQLite database
│ └── audio/ # Generated mp3 files, grouped by story ID
├── lib/ # Core logic
│ ├── book.ts # Builds the m4b file and chapter metadata with ffmpeg
│ ├── db.ts # node:sqlite connection and queries
│ ├── scraper.ts # Chapter extraction and anti-copy cleanup
│ ├── convert.ts # VietPhrase "convert" with Hán Việt names
│ ├── drm.ts # Sec-MS-GEC v2 token required by Edge TTS
│ ├── translate.ts # Chooses convert or Google Translate
│ ├── webpage.ts # Converts a whole web page and routes its links back through StoryCast
│ ├── tts.ts # Edge TTS connection and text chunking
│ └── worker.ts # Background processing queue
├── types.ts # TypeScript type definitions
└── public/ # Static assets
All data created while using the app lives in the data/ folder:
data/storycast.db: the story list, chapter info and chapter text.data/audio/<story_id>/: the .mp3 audio files for each chapter.💡 Tips:
- To back up: just copy the
data/folder.- To reset everything: stop the server and delete the
data/folder.
Cookie request header..env.local in the project folder containing PO18_COOKIE=<the value you copied>, then restart the server.https://www.po18.tw/books/<id>) or a chapter link (.../books/<id>/articles/<id>).Readability) and automatically looks for "Next chapter" links, so most novel sites with standard HTML structure work well.TSCharacters.txt from OpenCC (Apache-2.0).Both are pinned to a specific commit in lib/convert.ts and downloaded at runtime; they are not part of this repository.
Distributed under the MIT License.