{"id":51132469,"url":"https://github.com/felizvida/slidewright","last_synced_at":"2026-06-25T14:01:26.251Z","repository":{"id":365124695,"uuid":"1270653446","full_name":"felizvida/slidewright","owner":"felizvida","description":"Craft readable slide decks from YouTube lectures with optional caption or AI narrative notes.","archived":false,"fork":false,"pushed_at":"2026-06-16T01:32:50.000Z","size":65,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T02:16:57.978Z","etag":null,"topics":["desktop-app","ffmpeg","lecture-notes","lectures","macos","openai","powerpoint","pyside6","slides","slidewright","windows","youtube","yt-dlp"],"latest_commit_sha":null,"homepage":"https://github.com/felizvida/slidewright/releases","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/felizvida.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-15T23:33:08.000Z","updated_at":"2026-06-16T01:32:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/felizvida/slidewright","commit_stats":null,"previous_names":["felizvida/tube2slides"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/felizvida/slidewright","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felizvida%2Fslidewright","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felizvida%2Fslidewright/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felizvida%2Fslidewright/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felizvida%2Fslidewright/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felizvida","download_url":"https://codeload.github.com/felizvida/slidewright/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felizvida%2Fslidewright/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34778079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop-app","ffmpeg","lecture-notes","lectures","macos","openai","powerpoint","pyside6","slides","slidewright","windows","youtube","yt-dlp"],"created_at":"2026-06-25T14:01:25.324Z","updated_at":"2026-06-25T14:01:26.239Z","avatar_url":"https://github.com/felizvida.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Slidewright\n\nTurn YouTube lectures and technical talk videos into readable slide decks.\n\nSlidewright extracts distinct presentation slides from a YouTube URL or local video, exports numbered PNG slides, and can build a PowerPoint deck plus an HTML reading view. The native desktop app is intended for coworkers who want a simple no-server workflow on macOS or Windows.\n\n## Features\n\n- Extract unique slide frames from YouTube lectures or local videos.\n- Export slide PNGs, a JSON manifest, and a contact sheet.\n- Create editable PowerPoint decks.\n- Create an HTML reading view for quick review.\n- Add caption-derived speaker notes with no OpenAI token usage.\n- Optionally generate AI narrative notes from captions using the OpenAI Responses API.\n- Reuse browser cookies when YouTube requires sign-in or bot confirmation.\n- Build native macOS and Windows desktop apps with PyInstaller.\n\n## Best Way To Use It\n\nFor nontechnical users, use the native desktop app from the GitHub release. No shared server is required. The app runs locally, bundles the video tooling it needs, and saves each lecture into a local job folder.\n\n1. Open **Slidewright**.\n2. Paste a YouTube lecture URL or choose a local video.\n3. Choose an output folder.\n4. If YouTube asks for sign-in or bot confirmation, choose the browser where you are already signed in.\n5. Pick a narrative mode.\n6. Click **Extract**.\n\nSee [docs/NATIVE_APP.md](docs/NATIVE_APP.md) for distribution and build details.\n\n## Narrative Modes\n\n- **No notes**: extracts slides only.\n- **Caption notes**: downloads English YouTube captions and places the matching caption segment into PowerPoint speaker notes. This does not use OpenAI tokens.\n- **AI narrative**: asks for an OpenAI API key for that run only, sends caption excerpts to the OpenAI Responses API, and writes concise reader-friendly speaker notes. The key is not saved by the app.\n\n## CLI Install\n\nFrom this directory:\n\n```bash\npython3 -m pip install -e .\n```\n\nFor YouTube URL support in CLI mode, install the downloader extra:\n\n```bash\npython3 -m pip install -e \".[download]\"\n```\n\nThe legacy command names `tube2slides` and `youtube-slides` are still available, but `slidewright` is the preferred command.\n\n## CLI Usage\n\nExtract slides from a local file:\n\n```bash\nslidewright talk.mp4 -o slides\n```\n\nExtract slides from YouTube:\n\n```bash\nslidewright \"https://www.youtube.com/watch?v=VIDEO_ID\" -o slides\n```\n\nUse browser cookies for YouTube videos that require sign-in:\n\n```bash\nslidewright \"https://www.youtube.com/watch?v=VIDEO_ID\" -o slides --cookies-from-browser chrome\n```\n\nUseful options:\n\n```bash\nslidewright talk.mp4 \\\n  --sample-interval 2 \\\n  --min-stable-samples 2 \\\n  --similarity-threshold 20 \\\n  --crop 120,80,1680,945 \\\n  -o slides\n```\n\nThe output directory contains:\n\n- `slide_001.png`, `slide_002.png`, ...\n- `manifest.json` with timestamps and scoring metadata\n- `index.html` contact sheet\n\n## Build Desktop Apps\n\nBuild the macOS app on macOS:\n\n```bash\n./scripts/build_macos.sh\n```\n\nBuild the Windows app on Windows:\n\n```powershell\n.\\scripts\\build_windows.ps1\n```\n\nGitHub Actions can also build both platforms from the **Build desktop apps** workflow.\n\n## Requirements\n\n- Python 3.10+\n- `ffmpeg` on your `PATH` for CLI use\n- `yt-dlp` and `certifi` for YouTube URL support in CLI use\n\nThe packaged desktop app includes Python dependencies, `yt-dlp`, CA certificates through `certifi`, and a bundled `ffmpeg` binary via `imageio-ffmpeg`.\n\n## Notes\n\nThe extractor samples frames with `ffmpeg`, scores slide-like frames, de-duplicates near-identical frames with perceptual hashes, and writes high-quality PNG output. If a talk uses picture-in-picture or a fixed room camera, pass `--crop x,y,w,h` in CLI mode to isolate the slide area before hashing and export.\n\nFor fast-moving animations, lower `--sample-interval`. For noisy scene changes, raise `--min-stable-samples`.\n\n## License\n\nApache-2.0. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelizvida%2Fslidewright","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelizvida%2Fslidewright","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelizvida%2Fslidewright/lists"}