Commit Graph

324 Commits

Author SHA1 Message Date
Claude
00923e8898 refactor: use shared FormHelpers in SummaryTemplateDialog
Remove 4 duplicated CSS class constants and replace manual Select/Switch
blocks with SelectField and SwitchField from FormHelpers.

225 → 185 lines (-18%)

https://claude.ai/code/session_01YMyUwpk577EradV93tMMqS
2026-04-21 10:38:20 -07:00
Claude
5cdc91cf48 refactor: deduplicate TranscriptionConfigDialog with shared form helpers
- Extract SelectField, SwitchField, SliderField, AdvancedAccordion to FormHelpers
- Move shared CSS class constants (inputClassName, etc.) to FormHelpers
- Extract DiarizationSection to eliminate 3x copy-pasted diarization blocks
- Replace 11 inline Select blocks, 5 Switch+label blocks, 2 Slider blocks,
  2 Accordion wrappers with single-line helper calls

TranscriptionConfigDialog: 1178 → 702 lines (-40%)
FormHelpers: 119 → 264 lines (reusable form infrastructure)

https://claude.ai/code/session_01YMyUwpk577EradV93tMMqS
2026-04-21 10:38:20 -07:00
Paul Irish
a378335ebd refactor(frontend): extract auth logic to helpers and interceptor
needed because I was adding a new SpeakerSettings component but
the useAuth hook triggered an infinite recusion bug because of the
window.fetch wrappings.
2026-03-22 12:10:24 -07:00
Peter Somlo
175832e8e7 fix: voxtral duration comparison and "auto" language handling
- use shared LANGUAGES constant in frontend config dialog
2026-02-28 10:59:07 -08:00
Fran Fitzpatrick
4e75295019 feat: add speaker identification toggle to summary templates
Add option to include speaker labels in summary prompts when diarization
is available. When enabled, transcripts are formatted as:
[SPEAKER_NAME] Text here...

The prompt also includes a hint to the LLM that speaker labels are present,
helping it produce summaries that attribute statements to specific speakers.

Changes:
- Add IncludeSpeakerInfo field to SummaryTemplate model
- Add toggle UI in summary template dialog
- Format transcript with speaker labels when generating summary
- Update prompt prefix to indicate speaker labels are present

Closes #353

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 10:58:49 -08:00
Paul Irish
71e7588c75 fix the 'any's 2026-02-28 10:58:17 -08:00
Paul Irish
6e707f363c fix(auth): prevent infinite fetch recursion and multiple wrapper layers
This fixes an issue where the frontend would spam the auth endpoints repeatedly when logged out or when a session expired.

1. Infinite Recursion on 401: The window.fetch wrapper would catch a 401, call tryRefresh(), which then called fetch() again, triggering the wrapper recursively if the refresh also failed. We now use the original fetch for refresh attempts and exclude auth endpoints from auto-refresh logic.
2. Multiple Wrapper Layers: Since useAuth is a hook used by many components, multiple instances were independently wrapping window.fetch. We now store the original fetch globally and ensure wrapping only happens once.
2026-02-28 10:58:17 -08:00
Fran Fitzpatrick
f6df31b500 feat: add VAD segmentation thresholds for Pyannote diarization
Add configurable voice activity detection thresholds to improve
speaker diarization accuracy for noisy or distant audio recordings.

- Add --segmentation-onset and --segmentation-offset CLI args to
  pyannote_diarize.py
- Pass segmentation thresholds from Go adapter to Python script
- Map existing vad_onset/vad_offset params to Pyannote segmentation
- Add VAD Onset/Offset inputs to UI when Pyannote diarization is
  selected (Whisper, Parakeet, Canary model families)

Lower onset values (0.3-0.4) help detect quieter/distant speakers.
Lower offset values improve detection of speech endings.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:20:31 -08:00
Fran Fitzpatrick
f8c0c6759d fix: Listen button in selection menu now works in Timeline View
The selection menu's "Listen" button wasn't working in Timeline View because
the character-to-timestamp mapping was incorrectly counting text from timestamp
and speaker name elements.

Changes:
- Add data-transcript-text attribute to transcript text containers
- Update TreeWalker in useSelectionMenu to only count text inside these marked elements

This fixes the character index calculation so word timestamps are correctly looked up.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:20:07 -08:00
Fran Fitzpatrick
8c3f345cee style: add glass-card styling to sticky title section
Match the title/controls section styling to the audio player below
with glass-card, rounded corners, border, shadow, and padding.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:19:23 -08:00
Fran Fitzpatrick
6944e6719c fix: keep header controls visible during auto-scroll
Make title, chat button, and settings dropdown sticky so users can
toggle auto-scroll without pausing playback. Wraps both the title
section and audio player in a single sticky container.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:19:23 -08:00
Fran Fitzpatrick
1dedde96a8 feat: fix auto-scroll and add active segment highlighting in Timeline View
The "Auto Scroll On" feature was broken because it relied on a word-level ref
that was never assigned. This fix implements segment-level auto-scroll for
Timeline View.

Changes:
- Enable autoScrollEnabled prop usage in TranscriptView
- Add activeSegmentIndex computation to track current playback position
- Add auto-scroll effect that scrolls to active segment on segment change
- Add subtle background highlight to indicate the currently playing segment

The auto-scroll only triggers when:
- Mode is 'expanded' (Timeline View)
- Auto-scroll is enabled
- Audio is playing
- The segment actually changes (debounced to prevent jitter)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:19:23 -08:00
Fran Fitzpatrick
0db419e5cd fix: speaker rename now updates in real-time without page reload
After renaming speakers in Timeline View, the changes now appear immediately
in both the transcript display and downloads (JSON, TXT, SRT).

Root cause: The onSpeakerMappingsUpdate callback was a no-op, so the React
Query cache wasn't being invalidated after saving speaker mappings.

Fix: Invalidate the speakerMappings cache when the dialog saves, triggering
an automatic refetch that updates all components using the hook.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:18:57 -08:00
Peter Somlo
93abf6eb21 feat: expand language support in the UI to 58 languages for Whisper and OpenAI models
Expands language selection from 24 to 58 languages for Whisper and OpenAI transcription profiles.

Changes:
- Expand LANGUAGES array to 58 languages (all with WER >50%)
- Add 34 new languages including Afrikaans, Armenian, Czech, Danish, Hungarian, Norwegian, Romanian, Serbian, Slovak, Thai, and many more
- Create VOXTRAL_LANGUAGES array with original 24-language subset for Voxtral
- Update VoxtralConfig to use VOXTRAL_LANGUAGES instead of LANGUAGES
- All languages alphabetically sorted

Language array usage:
- LANGUAGES (58) → Whisper and OpenAI models
- VOXTRAL_LANGUAGES (24) → Voxtral model
- CANARY_LANGUAGES (4) → NVIDIA Canary model
2026-01-01 12:47:41 -08:00
rishikanthc
f9a58baa1e clean lint 2025-12-31 15:53:35 -08:00
rishikanthc
efff1a3a7c fix: use Literata font for all transcripts
Changed from font-inter to font-literata to ensure consistent
typography across all transcript views regardless of model used.
2025-12-31 15:47:19 -08:00
rishikanthc
f08504eaa3 fix: disable timeline view for transcripts without word-level timestamps
- Check for presence of word_segments in transcript data
- Show disabled menu item with explanation when timestamps unavailable
- Applies to Voxtral and other models without word-level timestamps
2025-12-31 15:47:19 -08:00
rishikanthc
5a947e8739 fix: update Voxtral token limits based on 32k context window
- Default: 4096 → 8192 tokens
- Maximum: 8192 → 16384 tokens
- Minimum: 512 → 1024 tokens
- Voxtral has 32k context window, handles 30-40 min audio
- Updated UI description to reflect capabilities
2025-12-31 15:47:19 -08:00
rishikanthc
95ecbf6d21 fix: increase Voxtral max_new_tokens to 4096 (max 8192)
- Default increased from 500 to 4096 tokens
- Maximum increased from 2000 to 8192 tokens
- Minimum increased from 100 to 512 tokens
- Add max_new_tokens to TypeScript interface
- Fix UI to use correct parameter (was using max_line_width)
2025-12-31 15:47:19 -08:00
rishikanthc
1ae7b2bf71 feat: add Voxtral-mini transcription support
- Add VoxtralAdapter using transformers library with direct model loading
- Add Python transcription script with apply_transcription_request() method
- Register Voxtral adapter in main.go with dedicated environment
- Add UI configuration in TranscriptionConfigDialog with warning banner
- Support multilingual transcription without word-level timestamps
- Auto GPU/CPU detection, no device parameter needed
- Graceful degradation for missing timestamp features

Voxtral provides high-quality text-only transcription but does not
support word-level timestamps. UI warns users that synchronized
playback and seek features won't be available.
2025-12-31 15:47:19 -08:00
rishikanthc
5e5dc17a13 fix colors and styles 2025-12-29 21:11:47 -08:00
rishikanthc
c433db07b7 feat: add toggle for Automatic Gain Control
Allow users to enable/disable AGC before starting recording.
AGC automatically adjusts microphone volume for consistent levels.
2025-12-29 21:11:47 -08:00
rishikanthc
ca2ed2fd72 fix: use remote-only echo cancellation for microphone
Use Chrome/Edge's 'remote-only' echo cancellation mode to allow
microphone input during local system audio playback while still
preventing acoustic echo from remote sources in video calls
2025-12-29 21:11:47 -08:00
rishikanthc
76d92e2055 style: apply brand gradient to Upload Recording button 2025-12-29 21:11:47 -08:00
rishikanthc
8ca2b5ba2b refactor: use consistent design system in SystemAudioRecorder
- Replace hardcoded colors with CSS variables
- Match button design with transcription settings
- Apply brand gradient to Start Recording button
2025-12-29 21:11:47 -08:00
rishikanthc
b13d1b360d refactor: use default button components in SystemAudioRecorder 2025-12-29 21:11:47 -08:00
rishikanthc
eb6192960f refactor: restrict system audio to Chromium browsers only
Removed Firefox/Safari support as only Chromium browsers (Chrome, Edge, Brave)
reliably support tab audio capture via getDisplayMedia API.

Changes:
- Added Chromium browser detection (Chrome, Edge, Brave, Chromium)
- Show compatibility error dialog for non-Chromium browsers
- Removed all Firefox-specific code and constraints
- Simplified UI instructions (tab selection only)
- Cleaner error messages focused on tab audio

Tested working on: Chrome, Edge, Brave
Not supported: Firefox, Safari, other browsers
2025-12-29 21:11:47 -08:00
rishikanthc
f5379464f6 feat: add system audio recording with microphone mixing
Implements Screen Capture API based system audio recording for meeting recordings.
Works on Chrome/Edge with tab audio capture.

Features:
- Client-side audio mixing (system audio + microphone) using Web Audio API
- Real-time volume controls via GainNode
- Simple timer-based recording (no visualization complexity)
- Echo cancellation enabled for microphone to prevent feedback loops
- Browser compatibility checks
- Graceful error handling for permissions and stream interruptions

Technical details:
- Uses getDisplayMedia() for system audio capture (requires video=true, immediately stopped)
- getUserMedia() for microphone with echo cancellation
- MediaRecorder for direct recording without WaveSurfer dependency
- Cyan/blue themed UI to differentiate from regular microphone recording

Tested and working on Chrome. Firefox support needs investigation (v146.0.1).
2025-12-29 21:11:47 -08:00
Paul Irish
edb65339b8 dont blank on vite startup 2025-12-29 21:09:53 -08:00
Paul Irish
ff41bd7dc6 drop the any 2025-12-21 08:38:42 -08:00
Paul Irish
410e6ea91b add speaker dialog to download menu 2025-12-21 08:38:42 -08:00
rishikanthc
83a44c0478 fix: dialogues causing elements to shift 2025-12-16 19:17:44 -08:00
rishikanthc
839231b576 chore: formatting updates from previous hook runs 2025-12-15 22:29:41 -08:00
rishikanthc
a5ce460949 chore: add type checking to lefthook and fix prettier deps 2025-12-15 22:29:41 -08:00
rishikanthc
5097ca1037 chore(lint): enforce strict linting rules and fix violations 2025-12-15 22:29:41 -08:00
rishikanthc
f3ac62b8d4 fix: resolve remaining lint errors in Transcription feature 2025-12-15 22:29:41 -08:00
rishikanthc
d0479f937d fix: resolve lexical declaration error in SpeakerRenameDialog 2025-12-15 22:29:41 -08:00
rishikanthc
ec37d939b0 fix: resolve lint errors in Settings feature 2025-12-15 22:29:41 -08:00
rishikanthc
80276fb257 fix: resolve lint errors in Auth feature 2025-12-15 22:29:41 -08:00
rishikanthc
4008007958 fix: resolve lint errors in Contexts 2025-12-15 22:29:41 -08:00
rishikanthc
4b66b96e42 fix: resolve lint errors in ChatInterface, AudioRecorder and ChatSessionsSidebar 2025-12-15 22:29:41 -08:00
rishikanthc
1b6c62b36f fix: resolve useEffect dependencies in TranscribeDDialog 2025-12-15 22:29:41 -08:00
rishikanthc
4c0ce0f4e2 fix: resolve lint warnings in audio components 2025-12-15 22:29:41 -08:00
rishikanthc
7df90246d5 fix: resolve hooks violation and lint errors in TranscriptView 2025-12-15 22:29:41 -08:00
rishikanthc
0b58628201 chore: configure eslint with relaxed rules and clean up UI components 2025-12-15 22:29:41 -08:00
rishikanthc
fe2f0fcf58 fix: PWA icon bg color 2025-12-14 19:09:52 -08:00
rishikanthc
0f0b23b2ee feat: update pwa icons and favicon 2025-12-14 19:09:52 -08:00
rishikanthc
56b9eda843 feat: redesign icon logo and implement independent dev workflow 2025-12-14 19:09:52 -08:00
rishikanthc
7deff5b903 fix: change logo.. fix chat 2025-12-14 19:09:52 -08:00
rishikanthc
bb5a73826e feat: implement infinite scroll in audio files table
replaced load more button with intersection observer and added skeleton loaders
2025-12-14 19:09:52 -08:00