Commit graph

375 commits

Author SHA1 Message Date
Richard Roberson
071d967f8f feat(pdf): modernize text highlighting and parsing for fluidity
- Offload computationally intensive text matching for real-time highlighting to a dedicated Web Worker, ensuring the main thread remains responsive during playback.
- Implement a new overlay-based highlighting system that renders independently of the PDF's text layer, providing smoother and more reliable visual feedback without interfering with document rendering.
- Introduce a new setting allowing users to enable or disable real-time text highlighting in PDFs, offering personalized control over the reading interface.
- Upgrade the underlying text comparison algorithm to Dice similarity for more accurate and context-aware matching of spoken words to on-screen text, improving synchronization precision.
- Improve sentence boundary detection, especially for quoted dialogue and complex structures, by enhancing the NLP processing logic, leading to a more natural audio-text flow.
2025-11-15 14:06:44 -07:00
Richard Roberson
2f39e8f014 perf(test): optimize test execution and error handling
- Reduce Playwright worker allocation from 75% to 50% for better resource management
- Disable parallel test execution temporarily to isolate flaky test behavior
- Enhance audio utility to fail fast on user cancellation, preventing unnecessary retries
- Consolidate test-specific utilities within individual test suites for better isolation
- Introduce export functionality test coverage with new export.spec.ts suite
2025-11-14 18:52:49 -07:00
Richard Roberson
5316596a1b refactor(db): migrate to Dexie with reactive queries and simplify data layer
Replaces custom IndexedDB implementation with Dexie ORM, eliminating 850+ lines of
boilerplate code and introducing reactive live queries across all document types.
Transforms document management from imperative refresh patterns to automatic
reactive updates using dexie-react-hooks.

Simplifies TTS backend by removing concurrency semaphore while maintaining
request de-duplication through in-flight tracking. Streamlines document hooks
by removing manual state management and refresh methods.

Updates package dependencies and type definitions to support new database
architecture while maintaining full backward compatibility for existing
documents and settings.

BREAKING CHANGE: Document hooks no longer expose refresh() methods as updates
are now reactive through live queries.
2025-11-14 16:14:00 -07:00
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
d7ef0fa8bb feat(api): implement concurrency control and request de-duplication for TTS audio processing 2025-11-13 00:27:04 -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
452bc2adfe feat: Add issue triage and mapping documentation for OpenReader v1
- Created `issues-to-components.md` to summarize open issues and their mappings to components for v1 development.
- Documented key features, bugs, and proposed solutions for issues #59, #48, #47, #44, and #40.
- Outlined global guardrails and cross-cutting improvements for the v1 architecture.

chore: Establish v1 todo and planning framework

- Created `todo.md` to capture the 1.0 rewrite plan, including scope, architecture overview, phased milestones, and a master checklist.
- Defined action items, dependency ordering, and issue mapping alignment for efficient development.

chore: Update pnpm workspace configuration

- Added `ignoredBuiltDependencies` for `canvas` in `pnpm-workspace.yaml` to prevent build issues.
2025-11-10 13:19:45 -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
a54d83eda5 fix(settings): set default TTS provider to Deepinfra in production 2025-11-09 17:05:23 -07:00
Richard Roberson
1614bf46bc fix(tts): add missing ttsProvider dependency to useCallback hooks
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
2025-11-09 16:43:13 -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
Some checks failed
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
Richard Roberson
08480f07ed
Merge pull request #52 from thepycoder/feature/better-speed-control 2025-06-29 15:09:05 -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
Victor Sonck
ece8bcd35a Added saving and restoring last location in PDFs 2025-06-23 13:57:27 +02:00
Richard Roberson
e6cd1d0264 Bump version + fix build error
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
2025-06-22 13:47:23 -06:00
Richard Roberson
8cf685633d Merge branch 'feature/merge_nlp_implementations' of https://github.com/thepycoder/OpenReader-WebUI into thepycoder-feature/merge_nlp_implementations 2025-06-22 13:23:46 -06:00
Richard Roberson
8d17c69374 Change width and text color 2025-06-22 13:17:26 -06:00
Victor Sonck
4c92b9875c Remove the NLP route, since it is no longer used. 2025-06-22 15:48:33 +02: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
Victor Sonck
f594ca836b Refactored NLP into a single, shared function for splitting to sentences.
now both handleClick and global sentences are the exact same, so the sentenceIndex will always be correct.
2025-06-20 08:25:29 +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
Some checks failed
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
7ba807fd95 Pause on page changes + Fix ePub bug when reloading 2025-03-23 17:18:21 -06:00
Richard Roberson
1bbd77f93b Improve space detection logic in PDF text extraction 2025-03-22 12:10:17 -06:00
Richard Roberson
4ed6b17e98 Support gpt-4o-mini-tts with instructions
Some checks failed
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
4c5866c02b Add core-js for promise-with-resolvers support and update version to 0.2.4-patch.4
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
2025-03-04 18:49:08 -07:00
Richard Roberson
d10d4410e2 Update PDF worker paths and remove setup script 2025-03-04 17:10:57 -07:00
Richard Roberson
4e857a75f0 withResolvers() try again
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
2025-03-04 14:27:05 -07:00
Richard Roberson
50877d6543 Use legacy PDF worker for lower Safari versions
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
2025-03-04 13:37:41 -07:00
Richard Roberson
ce9df9a5ab implement retry logic for TTS API calls and clean up code 2025-03-03 23:03:52 -07:00
Richard Roberson
54dea5da36 Add onloaderror retries 2025-03-02 22:13:08 -07:00
Richard Roberson
4e07e737f0 Stop using audio blobs 2025-03-02 21:16:24 -07:00
Richard Roberson
4aaa74414f Update tests 2025-03-02 20:19:52 -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
e3370f7526 Further audiobook extraction optimizations 2025-02-26 04:03:05 -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
4a2d75e155 Export to m4b from WAV efficiently 2025-02-25 20:01:15 -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
9ad1f5f117 Pause in background 2025-02-23 04:46:20 -07:00
Richard Roberson
0be34a09fe Re-add AbortController API, fixes duplicate playback 2025-02-23 01:29:10 -07:00
Richard Roberson
0251aae04b Huge iOS playback fix 2025-02-22 13:36:45 -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
86be935737 Fully unified navigation system 2025-02-19 15:19:37 -07:00
Richard Roberson
d447132859 Refactors to fix blank sections 2025-02-19 15:10:11 -07:00
Richard Roberson
8acf3f6ba6 Fix initial system theme 2025-02-19 12:32:16 -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
09188ecab2 Update nlp max length 2025-02-13 17:17:29 -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
005ac66d7e More themes 2025-02-13 04:25:49 -07:00
Richard Roberson
80bc0b0006 Refactor new doc list 2025-02-13 04:12:16 -07:00
Richard Roberson
1f2ebb7ba2 Fix theme flickering on Chromium 2025-02-13 00:56:48 -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
a6915ee51d Merge branch 'main' into advanced-doclist 2025-02-12 20:29:27 -07:00
Richard Roberson
9d4377cdf9 switch settings location 2025-02-12 05:25:46 -07:00
Richard Roberson
ca895109f3 Fix lint errors 2025-02-12 02:42:13 -07:00
Richard Roberson
b7f64a28b1 Merge branch 'main' into advanced-doclist 2025-02-12 02:39:18 -07:00
Richard Roberson
2a9510aa55 Another nlp optimization 2025-02-12 02:19:57 -07:00
Richard Roberson
f16116cab4 Huge PDF text extraction optimization 2025-02-12 02:15:21 -07:00
Richard Roberson
521eda6cff Move nlp processing to next server 2025-02-12 02:14:56 -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
b7dc67f97f Stop epub audio on back fix 2025-02-10 20:22:50 -07:00
Richard Roberson
01ba8d57ba Update sentence processing to using max sentence blocks of 250 chars 2025-02-10 19:58:14 -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
a5ea48ed3d Update SEO metadata 2025-02-09 15:13:48 -07:00
Richard Roberson
804a08dcd5 Update structure 2025-02-09 12:05:18 -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
6e96aeb821 Use open ai api as default in docker 2025-02-04 23:01:44 -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
74b486139d Only show footer in production 2025-02-04 03:18:20 -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
737ab5f919 Restructure 2025-01-29 21:13:18 -07:00
Richard Roberson
7ae0dfd80a Fix z-indexes 2025-01-29 15:07:34 -07:00
Richard Roberson
84f530f4cc Extract PDF context items to hooks 2025-01-28 21:51:45 -07:00
Richard Roberson
055e87e8c1 Extract TTS extras to hooks 2025-01-28 21:38:44 -07:00
Richard Roberson
dd7154cccf Contexts refactor + commenting 2025-01-28 21:22:22 -07:00
Richard Roberson
8f90455862 Darker dark 2025-01-28 18:35:56 -07:00
Richard Roberson
ca1e3a83a9 Better mobile styling 2025-01-28 18:14:33 -07:00
Richard Roberson
610167f058 Fix saved speed + voice 2025-01-27 00:15:54 -07:00
Richard Roberson
ced82d7bf5 Allow 300% zoom 2025-01-26 23:14:56 -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
92ee491363 Apple web app capable changes 2025-01-26 16:49:05 -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
2201dac391 Text to click fix 2025-01-26 13:55:14 -07:00
Richard Roberson
21e1b8f9ca Another build fix 2025-01-26 03:02:32 -07:00
Richard Roberson
8495e4212d Document load fix 2025-01-26 02:33:41 -07:00
Richard Roberson
9374d3efbe Build fixes 2025-01-26 02:15:14 -07:00
Richard Roberson
43d34fb2f7 Fix 2025-01-25 23:55:07 -07:00
Richard Roberson
34d9d4715c Fix increment page 2025-01-25 23:47:19 -07:00
Richard Roberson
de1ad2c4da Implement page forward and back 2025-01-25 22:57:29 -07:00
Richard Roberson
b6880b9910 Fix end of document reached 2025-01-25 22:36:28 -07:00
Richard Roberson
429ec3f264 Single page viewer + Major refactor 2025-01-25 22:23:29 -07:00
Richard Roberson
86c263cb86 use howl for audio playback 2025-01-22 14:59:43 -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
d4b4ad8187 Sliding ctx window for string matching highlighting 2025-01-20 16:36:57 -07:00
Richard Roberson
28fe51c80d Prevent text click jump while processing + refeactor text comparison 2025-01-20 15:12:23 -07:00
Richard Roberson
9823cd9596 Fix refreshing issue 2025-01-19 20:27:39 -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