Richard Roberson
e3799e40aa
feat(tts): add smart sentence continuation
...
introduce configurable smart sentence splitting with persisted state,
UI toggle, and EPUB/PDF contexts that send continuation metadata.
enhance TTS pipeline to merge cross-page sentences, manage carryover,
and trigger visual page changes during playback for smoother narration.
update README with kokoro quick-start guidance, remove the legacy
issues mapping doc, and add deterministic TTS mocks plus sample audio
for Playwright tests.
2025-11-14 12:00:03 -07:00
Richard Roberson
70723f4c1d
perf(api): add LRU cache for TTS audio responses
...
Introduce an in-memory LRU cache for TTS audio with configurable
size and TTL via TTS_CACHE_MAX_SIZE_BYTES and TTS_CACHE_TTL_MS.
Return X-Cache headers (HIT/MISS) and set route runtime to nodejs.
Cache key includes provider, model, voice, speed, format, text,
and optional instructions.
Normalize non-Kokoro multi-voice input to the first token while
preserving full voice string in the cache key. Default Deepinfra
model to hexgrad/Kokoro-82M when none is provided.
Fix Deepinfra Kokoro behavior by enforcing single-voice selection:
- ui: only enable multi-select when provider supports >1 voices
- voice utils: Deepinfra max voices set to 1
- tests: gate provider selection and multi-voice tests by CI and
increase timeout for stability
2025-11-12 23:28:05 -07:00
Richard Roberson
1dcffc82d8
feat(tts,ui,api): add Kokoro multi-voice selection and SDK support
...
- Introduce voice utils (model detection, voice parsing/weights, limits)
- Enable Kokoro multi-voice strings across OpenAI/Deepinfra/custom providers
- Normalize non-Kokoro voices to single token for SDK calls
- Expose full Kokoro voice list for custom-openai Kokoro models
- Update TTS API to return audio as ArrayBuffer and improve logging
- Add multi-select UI for Kokoro voices with provider-based clamping
- Preserve Kokoro voice strings in TTSContext and coalesce restarts
- Merge multi-sentence quoted dialogue in NLP sentence splitter
- Update tests for single and multi-voice selection flows
2025-11-12 20:46:45 -07:00
Richard Roberson
21870ed576
fix(api): stabilize DOCX to PDF conversion and cleanup
...
- Isolate concurrent LibreOffice runs with per-job profile directories
(soffice -env:UserInstallation) and per-job temp folders
- Poll for generated PDF and verify stable file size before reading
- Consolidate temp artifacts under docstore/tmp and clean up via rm -r
- Add headless/nologo flags and improve error handling
ui(accessibility):
- ConfirmDialog exposes proper dialog roles
- DocumentFolder toggle adds type, aria-expanded, aria-controls, and title;
associate content panel with an id
- HTMLViewer wraps content in .html-container for HTML/TXT views
test: add comprehensive Playwright specs and helpers
- Accessibility, API health, deletion flows, folders, navigation, playback,
and upload scenarios
- Add sample.md and unsupported.xyz; update sample.pdf; extend helpers
ci: run Playwright workflow on version1.0.0 branch
2025-11-12 16:21:11 -07:00
Richard Roberson
42665884d7
feat(audiobook): add chapter-based export with UI and API
...
Introduce end-to-end chapterized audiobook generation with persistent
storage, resumable workflows, and MP3/M4B support.
API:
- add /api/audio/convert/chapter (GET/DELETE) for per-chapter ops
- add /api/audio/convert/chapters (GET/DELETE) for listing/reset
- enhance /api/audio/convert:
- accept mp3|m4b, stream combined file, cache complete output
- robust chapter indexing, docstore persistence, list concat
- AbortSignal-aware ffmpeg/ffprobe, 499 on cancel
UI/UX:
- add AudiobookExportModal with progress, resume, regenerate, download
- add ProgressCard, enhance ProgressPopup (click-to-focus, richer info)
- add Header, ZoomControl; move TTSPlayer to sticky bottom bar
- redesign EPUB/HTML/PDF pages for full-height layout and controls
- add HomeContent; compact uploader variant; document list polish
TTS/Contexts:
- EPUB/PDF contexts now generate per-chapter to disk, return bookId
- support chapter regeneration; progress/cancel propagation
- pass provider/model/instructions; standardize MP3 TTS output
- HTML context updates for model/instructions
Styling:
- globals: overlay-dim, scrollbar styles, prism gradient utilities
- theme vars: secondary-accent, prism-gradient; tailwind color addition
Misc:
- fix PDF scale calc to use container height
- EPUB theme reader area fills height
- time estimation update cadence stab
- audio util passes format to combine endpoint
2025-11-11 13:32:30 -07:00
Richard Roberson
77c955bfae
fix(settings): restrict model selection for Deepinfra in production without API key
2025-11-09 17:19:37 -07:00
Richard Roberson
4d3c2cf3cf
fix(settings): adjust Deepinfra options and placeholder text based on prod or not
2025-11-09 17:16:12 -07:00
Richard Roberson
4050170160
fix(footer): update Deepinfra link in footer component
2025-11-09 17:09:50 -07:00
Richard Roberson
b21bdb3a21
feat(tts): add multi-provider TTS support with Deepinfra and custom OpenAI-compatible endpoints
...
Add comprehensive multi-provider TTS support enabling users to choose between OpenAI, Deepinfra, and custom OpenAI-compatible endpoints. Implement provider-specific voice management with automatic voice restoration per provider-model combination, and migrate package manager to pnpm for improved dependency handling.
Key changes:
- Add TTS provider selection (OpenAI, Deepinfra, custom-openai) in settings UI
- Implement provider-specific model and voice lists with dynamic fetching
- Add voice persistence per provider-model combination in savedVoices
- Support Deepinfra models: Kokoro-82M, Orpheus-3B, Sesame-1B with their voice libraries
- Migrate to pnpm with frozen lockfile for reproducible builds
- Update Docker configuration to use pnpm and Deepinfra API defaults
- Add migration logic for existing users to infer provider from stored baseUrl
- Update test helpers and Playwright configuration for Deepinfra API
- Add example docker-compose.yml with Kokoro-FastAPI integration
BREAKING CHANGE: Voice selection is now provider-model specific. Previously saved voices will be migrated to the new savedVoices structure, but users may need to reselect voices if switching providers.
2025-11-09 15:47:17 -07:00
Richard Roberson
d2477dc9d8
Merge pull request #58 from RobbyV2/feat/SaveLoadProgress
Build and Publish Docker Image / build (push) Has been cancelled
2025-07-20 12:13:07 -06:00
RobbyV2
7b703f015f
Add cancelText parameter
2025-07-19 21:19:12 -07:00
RobbyV2
32f5cdc494
Saving and Loading Progress Bar
2025-07-19 20:22:50 -07:00
Richard Roberson
f5776e5494
Merge pull request #56 from RobbyV2/DocSelectLoad
2025-07-19 21:16:41 -06:00
RobbyV2
772aa83f6a
Upload multiple files
2025-07-19 19:22:21 -07:00
RobbyV2
0bcae0dee7
Add document selection loading icon
2025-07-19 18:58:08 -07:00
Richard Roberson
593dd7d1a1
Merge pull request #55 from RobbyV2/AutoSelect
...
Auto select page number when navigating
2025-07-19 13:53:45 -06:00
RobbyV2
12e30f4ecf
Allow clicking of internal links
2025-07-19 12:46:05 -07:00
RobbyV2
41ea2cdc52
Auto select navigation
2025-07-19 12:40:01 -07:00
RobbyV2
0aac3f4816
Move button closure higher in SettingsModal
2025-07-17 16:49:52 -07:00
Richard Roberson
b56584cbed
Change go to page + add Vercel Analytics integration
2025-06-30 12:10:56 -06:00
Victor Sonck
89833d596b
Allow for player speed changes as well as native voice speed changes. Kokoro for example swallows parts of words when asked to go faster than maybe 1.3x. This fixes that, by simply speeding up the player instead. Since we're already using the html5 version of howler, by default it will pitch-correct the audio and it sounds quite good!
2025-06-23 14:09:51 +02:00
Richard Roberson
8d17c69374
Change width and text color
2025-06-22 13:17:26 -06:00
Victor Sonck
740c5e17d3
Add editable page number in PDF navigator view, to make it much easier to jump to specific pages
2025-06-20 08:32:53 +02:00
Richard Roberson
a1465f1680
Increase size of .md viewer
2025-04-15 11:47:35 -06:00
Richard Roberson
5892383a61
Fix mardown viewer text color
Build and Publish Docker Image / build (push) Has been cancelled
2025-04-15 11:41:26 -06:00
Richard Roberson
82bb91a850
Add TXT and MD support with and HTML viewer with react markdown + many refactors to support it
2025-04-15 02:28:51 -06:00
Richard Roberson
fc780746aa
Bug fixes and readme update
2025-03-30 21:17:16 -06:00
Richard Roberson
4ed6b17e98
Support gpt-4o-mini-tts with instructions
Build and Publish Docker Image / build (push) Has been cancelled
2025-03-21 11:32:42 -06:00
Richard Roberson
f464b059e4
Update API settings
2025-03-13 21:00:34 -06:00
Richard Roberson
520236b95c
add DOCX support (requires libreoffice) + upload test
2025-03-04 22:47:37 -07:00
Richard Roberson
521aafe8e0
Add tests for playing and pausing
2025-03-02 15:56:53 -07:00
Richard Roberson
136fdb9652
Fix Apple WebKit PDF Upload
2025-03-01 23:36:25 -07:00
Richard Roberson
28a3804843
Setup playwright e2e initial test
2025-03-01 22:44:30 -07:00
Richard Roberson
b89d1700e9
Fix for longer audiobooks
2025-03-01 18:21:51 -07:00
Richard Roberson
b67aea6b27
Refactor audio conversion API to improve memory management and add streaming response
2025-02-25 23:38:29 -07:00
Richard Roberson
79d2e7f613
Working m4b
2025-02-25 19:47:30 -07:00
Richard Roberson
9357dddf3a
Implement PDF audiobook generation with configurable margins for text extraction
2025-02-25 16:11:08 -07:00
Richard Roberson
92220de5ea
Refactor PDF text extraction to support configurable margins for header, footer, left, and right
2025-02-25 15:53:45 -07:00
Richard Roberson
f948601e70
Add configurable text extraction margin for PDF processing
2025-02-25 03:26:37 -07:00
Richard Roberson
b87b83310b
Rely on TTS API for splitting
2025-02-25 00:58:32 -07:00
Richard Roberson
1db906f8bc
[ePub only] First working export audiobook
2025-02-24 22:41:38 -07:00
Richard Roberson
61953a761a
Change speed menu to slider
2025-02-23 19:03:52 -07:00
Richard Roberson
96376e2324
Environment changes, set in Docker run
2025-02-23 13:20:42 -07:00
Richard Roberson
99868f29b2
EPUB resize debounce working perfectly
2025-02-21 12:01:52 -07:00
Richard Roberson
9d6632d2d0
Use server instead of client for open ai request + large refactors and bug fixes
2025-02-21 11:24:07 -07:00
Richard Roberson
d447132859
Refactors to fix blank sections
2025-02-19 15:10:11 -07:00
Richard Roberson
0ce14f3aec
Refactors + epub location fixes
2025-02-18 02:31:30 -07:00
Richard Roberson
9ae6dd9e82
Fix epub use theme and saved location
2025-02-17 23:03:28 -07:00
Richard Roberson
737cf5c9f5
Fix + debounce epub text extraction on window resize
2025-02-17 11:14:00 -07:00
Richard Roberson
36fdbc276d
Debounce PDF scale and extraction
2025-02-17 10:57:39 -07:00
Richard Roberson
ebff52d4e6
Better Folder UI
2025-02-14 13:39:02 -07:00
Richard Roberson
d773f8254c
EPUB saved location fix
2025-02-14 03:50:53 -07:00
Richard Roberson
1dcf1b09e3
Setting for themed epubs
2025-02-14 01:51:33 -07:00
Richard Roberson
14932ef45f
Use done button in settings
2025-02-13 15:49:21 -07:00
Richard Roberson
df8772de37
Fix drag and drop on collapsed folders
2025-02-13 15:49:15 -07:00
Richard Roberson
a1f069c0ae
Fix sort menu dropdown
2025-02-13 04:29:58 -07:00
Richard Roberson
80bc0b0006
Refactor new doc list
2025-02-13 04:12:16 -07:00
Richard Roberson
bc790df89e
Cleanup imports and ssr cabable components
2025-02-13 00:09:49 -07:00
Richard Roberson
c8d9d1d952
Add folders hint + edit settings modal
2025-02-12 22:44:25 -07:00
Richard Roberson
61049d6855
Fix doculist state loss on back navigation
2025-02-12 22:07:57 -07:00
Richard Roberson
c21302815c
Change folder creation popover
2025-02-12 21:12:49 -07:00
Richard Roberson
cc654f5f1d
Save document list state to confid db + add unified document types
2025-02-12 20:49:37 -07:00
Richard Roberson
ca895109f3
Fix lint errors
2025-02-12 02:42:13 -07:00
Richard Roberson
f441b030cf
DocumentList: Drag to create folders + sorting
2025-02-12 00:14:57 -07:00
Richard Roberson
99dbcd004c
Fix check mark in SettingsModal
2025-02-11 21:31:11 -07:00
Richard Roberson
d839d3cfa4
App settings upgrade + new themes
2025-02-11 14:16:47 -07:00
Richard Roberson
4bd443aea4
Add server side document store
2025-02-11 01:29:02 -07:00
Richard Roberson
297396579b
Better nlp + refactors
2025-02-11 00:12:31 -07:00
Richard Roberson
039ac1fe61
Fix epub last location first page
2025-02-10 19:57:33 -07:00
Richard Roberson
e8008b68ab
Save last EPUB location
2025-02-10 11:49:49 -07:00
Richard Roberson
b110cafbff
Update error handling for TTS API
2025-02-09 18:00:19 -07:00
Richard Roberson
707dd9261a
EPUB Working Well
2025-02-09 11:52:42 -07:00
Richard Roberson
25f3375b2f
Chapter by chapter auto-play
2025-02-09 02:55:49 -07:00
Richard Roberson
fd6a370bce
WIP
2025-02-08 21:43:39 -07:00
Richard Roberson
a3137ed88f
Manual page turn - kind of working
2025-02-08 20:35:38 -07:00
Richard Roberson
2fa91a2448
Working epub viewer
2025-02-08 15:55:31 -07:00
Richard Roberson
7d667b2114
Prepare epub work
2025-02-08 13:07:36 -07:00
Richard Roberson
e3167a18ea
Use react-hot-toast for important notifications
2025-02-05 15:07:24 -07:00
Richard Roberson
8531d4a68a
Update 'use client' in places
2025-02-04 22:28:38 -07:00
Richard Roberson
96e499cc58
Setting to automatically skip blank pages, on by default
2025-02-04 18:53:52 -07:00
Richard Roberson
d025227518
More refactors
2025-01-29 22:04:11 -07:00
Richard Roberson
f800c12fb7
PDF document hook refactor
2025-01-29 21:20:11 -07:00
Richard Roberson
7ae0dfd80a
Fix z-indexes
2025-01-29 15:07:34 -07:00
Richard Roberson
ca1e3a83a9
Better mobile styling
2025-01-28 18:14:33 -07:00
Richard Roberson
8ed930e65a
Improve SEO
2025-01-26 23:11:36 -07:00
Richard Roberson
2ae5d05849
Footer tweak
2025-01-26 20:55:17 -07:00
Richard Roberson
f9ab9190c2
Add button animations
2025-01-26 20:43:42 -07:00
Richard Roberson
edb0b962d3
Fix footer on mobile
2025-01-26 20:06:14 -07:00
Richard Roberson
e8922d6acf
Add footer
2025-01-26 19:31:05 -07:00
Richard Roberson
e830957598
Add voice + speed to indexedDB and config context
2025-01-26 18:39:11 -07:00
Richard Roberson
55919310a5
Add different view modes
2025-01-26 18:34:31 -07:00
Richard Roberson
b5e6a341ba
Fix error handling
2025-01-26 14:48:45 -07:00
Richard Roberson
816690360e
Fix horizontal PDF scale
2025-01-26 14:38:16 -07:00
Richard Roberson
de1ad2c4da
Implement page forward and back
2025-01-25 22:57:29 -07:00
Richard Roberson
429ec3f264
Single page viewer + Major refactor
2025-01-25 22:23:29 -07:00
Richard Roberson
d78be686c1
Add better zoom + controls
2025-01-22 13:34:48 -07:00
Richard Roberson
5edae0e8ae
cleanup
2025-01-22 11:51:08 -07:00
Richard Roberson
23d7fae8c2
Add api settings to settings modal + fix README.md
2025-01-22 09:50:47 -07:00
Richard Roberson
b978e8c58a
Better text extraction
2025-01-21 18:15:18 -07:00
Richard Roberson
30f981d616
Voice + Speed control
2025-01-20 19:06:41 -07:00
Richard Roberson
0979f55aec
Fix ' bug
2025-01-20 18:24:59 -07:00
Richard Roberson
28fe51c80d
Prevent text click jump while processing + refeactor text comparison
2025-01-20 15:12:23 -07:00
Richard Roberson
46c497f062
Readme.md + Refactor
2025-01-19 15:39:44 -07:00
Richard Roberson
728eb185b7
Rename /context --> /contexts
2025-01-19 14:45:32 -07:00
Richard Roberson
3e82def76c
Add theme switching + fixes
2025-01-19 03:44:04 -07:00
Richard Roberson
51352943c6
First reasonably okay version
2025-01-19 00:14:32 -07:00
Richard Roberson
355e4ebe29
Use indexed db
2025-01-18 21:59:02 -07:00
Richard Roberson
109d43f585
Buggy but working
2025-01-18 19:30:50 -07:00
Richard Roberson
1ce63a8fba
Add compromise, TTSPlayer template
2025-01-18 15:47:37 -07:00
Richard Roberson
ae8eb084c2
Update
2025-01-18 13:04:38 -07:00
Richard Roberson
8263a84e40
Working
2025-01-18 05:38:13 -07:00
Richard Roberson
5ecd54a0be
First push
2025-01-18 04:58:57 -07:00