Clarify local telemetry and harden Streamlit onboarding, diarization, and transcript UX - #1
Merged
Merged
Conversation
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/9d3fbf5e-2e17-404c-a5df-ae4726e55813 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/9d3fbf5e-2e17-404c-a5df-ae4726e55813 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/9d3fbf5e-2e17-404c-a5df-ae4726e55813 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/9d3fbf5e-2e17-404c-a5df-ae4726e55813 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/6bf90d2a-b088-41d6-adb6-510e1a32229c Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/6bf90d2a-b088-41d6-adb6-510e1a32229c Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/6ab93907-f604-45b0-b358-14135f5360c5 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/6ab93907-f604-45b0-b358-14135f5360c5 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/d269cecf-f60e-4c2b-8522-57c143a5fdce Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/d269cecf-f60e-4c2b-8522-57c143a5fdce Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/d269cecf-f60e-4c2b-8522-57c143a5fdce Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/52b534da-8105-4392-9d3f-73b16426bbf7 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/52b534da-8105-4392-9d3f-73b16426bbf7 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/c213140f-986d-4c39-b075-e21cb074e7fb Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/f94fc1d9-0a21-48ef-ad3d-e681c4259b3f Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/f94fc1d9-0a21-48ef-ad3d-e681c4259b3f Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Agent-Logs-Url: https://github.com/potemkin666/audio-transcriber/sessions/f94fc1d9-0a21-48ef-ad3d-e681c4259b3f Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com>
Copilot created this pull request from a session on behalf of
potemkin666
May 1, 2026 18:55
View session
potemkin666
marked this pull request as ready for review
May 1, 2026 18:56
There was a problem hiding this comment.
Pull request overview
This PR tightens the Streamlit app’s onboarding and transcript-review UX while clarifying privacy/telemetry behavior and more accurately positioning optional speaker labeling as KMeans-based diarization. It also hardens hot-folder de-dupe behavior and expands CI/test coverage to catch regressions earlier.
Changes:
- Documented local telemetry storage/path and clarified diarization positioning in README + SECURITY docs.
- Improved Streamlit UX for queue status, transcript diagnostics, saved-output reload, and copy-to-clipboard interactions; added diarization metadata surfacing.
- Refactored hot-folder de-dupe into a shared decision helper with new hashing modes; added unit/smoke tests and a root CI workflow.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| app/watch_hotfolder.py | Switches to shared hot-folder decision logic; adds “always hash before skip” mode and state persistence behavior. |
| app/transcriber/report.py | Renames “Top moments” to “Heuristic highlights” and adds an explanatory note in brief outputs. |
| app/transcriber/hotfolder.py | Introduces FileDecision + decide_file_action() to centralize hot-folder skip/process logic (incl. new hash mode). |
| app/transcriber/ffmpeg.py | Improves missing-FFmpeg error messaging with platform-specific install hints; minor import cleanup. |
| app/transcriber/core.py | Adds clearer Whisper-model download error messages; expands run stats/skipped-chunk counters and warning capture. |
| app/transcribe_cli.py | Adds FFmpeg + model preflight checks and clearer CLI exit messages. |
| app/tests/test_smoke.py | Adds smoke coverage for CLI help/model-preflight failure and key Streamlit helper functions. |
| app/tests/test_hotfolder.py | Adds tests for state persistence and hash-before-skip behavior. |
| app/tests/test_formats.py | Adds stable timestamp formatting tests for SRT/VTT/timestamped TXT. |
| app/streamlit_app.py | Major UX updates: onboarding checklist, queue badges, safer upload filenames, transcript reload from ZIP/folder, diagnostics + diarization surfacing, and revised copy widget. |
| app/setup_unix.sh | Adds failure trap with next steps and prints post-setup run/health-check guidance. |
| app/pyproject.toml | Adds qrcode dependency to support LAN-mode QR rendering. |
| app/docs/SECURITY.md | Updates disclosure guidance and documents local telemetry file contents/paths. |
| app/README.md | Expands platform install/run instructions; documents telemetry and diarization positioning. |
| app/.github/workflows/ci.yml | Removes app-local workflow (replaced by repo-root workflow). |
| app/.github/PULL_REQUEST_TEMPLATE.md | Removes app-local PR template (replaced by repo-root template). |
| START_HERE.md | Adds a root-level pointer guiding GitHub visitors into app/. |
| README.md | Adds a root-level README that points to app/ and provides copy/paste install paths. |
| LICENSE | Adds MIT license file at repo root. |
| .github/workflows/ci.yml | Adds root CI with compileall, bash -n, inline smoke checks, and unittest discovery. |
| .github/PULL_REQUEST_TEMPLATE.md | Adds root PR template with updated “How to test” checklist. |
| .github/ISSUE_TEMPLATE/bug_report.md | Updates log-path guidance to app/logs/streamlit.err.log. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+114
to
+117
| def _copy_text_widget(*, key: str, label: str, value: str, height: int = 140) -> None: | ||
| dom_id = _safe_dom_id(key, prefix="copy") | ||
| st.text_area(label, value=value, height=height, key=f"{dom_id}_value") | ||
| payload = base64.b64encode(value.encode("utf-8")).decode("ascii") |
| "diarization": _read_json_file(output_dir / "diarization.json"), | ||
| } | ||
| ) | ||
| return _collect_saved_outputs(rows, zip_bytes=_zip_dir(root)) |
Comment on lines
+471
to
473
| prepare_whisper_model(options.whisper_model, progress_cb=None) | ||
| model = _load_whisper_model_cached(options.whisper_model) | ||
| run_stats["timings"]["model_load_seconds"] = float(time.perf_counter() - t_model0) |
Comment on lines
+7
to
+12
| - [ ] `cd app && python - <<'PY'` | ||
| `from transcriber.formats import Segment, segments_to_srt, segments_to_vtt` | ||
| `segments = [Segment(0.0, 1.25, "Hello", "Speaker 1"), Segment(61.5, 62.0, "Bye")]` | ||
| `assert "WEBVTT" in segments_to_vtt(segments)` | ||
| `assert "00:00:00,000 --> 00:00:01,250" in segments_to_srt(segments)` | ||
| `PY` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The app exposed several rough edges in first-run onboarding and transcript review: local telemetry was undocumented, speaker labeling was positioned too broadly for what is actually KMeans-based diarization, and parts of the Streamlit UI relied on brittle custom interactions. This change tightens the product surface by documenting local state, surfacing diarization context, and replacing fragile UI patterns with clearer, more accessible controls.
Privacy + product positioning
app/README.mdapp/docs/SECURITY.mdDiarization visibility
diarization.jsoninto saved-output metadata.spk 0.87output with labeled speaker-match badges (High/Medium/Low) and heuristic explanations.Transcript tab UX
st.text_areaplus an isolated copy component that supports keyboard interaction and standard copy fallbacks.Transcribe / hot-folder onboarding
UI complexity control