Skip to content

Add youtube-highlights extension#23756

Merged
raycastbot merged 4 commits intoraycast:mainfrom
getdekoded:ext/youtube-highlights
Jan 27, 2026
Merged

Add youtube-highlights extension#23756
raycastbot merged 4 commits intoraycast:mainfrom
getdekoded:ext/youtube-highlights

Conversation

@getdekoded
Copy link
Contributor

@getdekoded getdekoded commented Dec 18, 2025

Description

YouTube Highlights lets you save timestamped highlights from YouTube videos while watching in Arc browser. Instead of losing valuable insights from podcasts, tutorials, and lectures, capture them instantly with a keyboard shortcut and build a searchable personal knowledge base.

What it does

  • Create Highlight - Captures the current timestamp from a playing YouTube video with one shortcut. Add optional notes and tags.
  • View Highlights - Browse all saved highlights, grouped by video. Click any highlight to jump directly to that moment in the video.
  • Search Videos - Find highlights across your entire collection by video title or highlight text.
  • Cloud Backup (Pro) - Optional sync across devices for Pro subscribers.

Why this extension?

We consume hours of YouTube content daily - podcasts, tutorials, documentaries - but retain almost nothing. This extension turns passive watching into active learning by letting you bookmark the moments that matter without interrupting your flow.

Technical notes

  • Uses AppleScript/JXA to communicate with Arc browser (macOS only)
  • Highlights stored locally in Raycast's LocalStorage
  • Optional cloud sync via authenticated API for Pro users
  • No YouTube API keys required - works directly with the browser

Requirements

  • macOS
  • Arc browser
  • YouTube video playing in the active tab

Screencast

So... lol please excuse me, the video was playing in the bg over me talking 😂🙈

yth-screencast.mp4

Checklist

- Merge pull request raycast#19 from getdekoded:preparing-for-prod
- chore(functions): rebuild with JSDoc comments preserved
- docs: Update Raycast metadata, README, and add screenshots for store submission
- feat: Refactor browser preference loading, centralize video extraction script, update Raycast auth redirect URIs, and add a new Arc debug probe script.
- refactor(raycast): remove Obsidian and Notion export functionality
- feat(raycast): fetch Pro status from API instead of stale JWT claims
- chore: Remove verbose console logging and debugging statements from various modules.
- fix(functions): resolve body parser stream error in Firebase Functions v2
- refactor: remove redundant JSDoc comments from utility functions
- chore: Remove development-specific code and debug logs from auth and storage utilities, archiving the removed code in a new documentation file.
- removed comments
- fix: clarify no video found error message and ensure command exits
- fix: Add robust error handling for browser tab queries to prevent crashes from AppleScript errors.
- Updates and analysis
- feat(website): Add branding images and update page content
- docs: Add development notes and research
- chore: Update gitignore
- fix(auth,raycast): Minor updates to auth and sync
- chore(firebase): Add production project configuration
- refactor(functions): Simplify config and clean up code
- feat(website): Prepare website for production launch
- feat: add `com.raycast://` and `com.raycast:/` to allowed Raycast production redirect URIs
- preparing raycast to test prod
- cleanup
- Updating next to bypass vulnerability
- making space on laptop
- Merge pull request raycast#15 from getdekoded:verifying-firebase-firestore
- fix: address CodeRabbit review issues across functions and Raycast
- fixes
- feat: implement background sync and fix critical runtime issues
- preferences
- feat(functions): Add Firebase Functions API infrastructure
- docs: add Kofi Functions Architecture and implementation plan
- docs: Organize .notes directory into logical folders
- feat(raycast): Add backup/restore for free users and improve auth flow
- Merge pull request raycast#14 from getdekoded:marketing-website
- fix(website): CodeRabbit review fixes - 6 issues resolved
- fix: patch React Server Components vulnerability (CVE-2025-55182)
- new rules
- feat(website): add SEO metadata and fix inaccurate feature claims
- chore(website): sync lockfile with package.json versions
- added more quotes
- fix(website): address CodeRabbit review issues
- feat(website): integrate interactive Raycast demo and landing page
- raycast ui
- feat(website): add raycast landing page and dynamic quote cards
- fix(website): address CodeRabbit review findings
- feat(website): rebuild Pro page with pricing cards and update footer nav
- feat(website): add Collector use case and refine layouts
- refactor(website): enhance Lifelong Learner page with improved spacing and visual consistency
- first iteration
- chore: remove .DS_Store files from tracking
- Merge pull request raycast#12 from getdekoded/better-highlight-creation
- Fixes
- perf(arc): optimize background video detection speed
- fix: improve background video detection with robust isPlaying check
- feat: Add deep state probe utility to gather detailed YouTube player information from Arc browser tabs.
- refactor: Make `getBackgroundPlayingVideo` optional on `BrowserAdapter` and call it type-safely.
- refactor: improve JSON parsing error handling by logging a warning and returning null on failure
- fix: enable stealth background extraction for Arc
- docs: confirm Arc blocks all background tab data extraction
- docs: add Arc learnings about pinned tabs and background DOM limitations
- feat: pivot to foreground-only extraction and remove background processing
- fix(browser): improve foreground extraction robustness with null check
- docs: Update JXA learnings and add background extraction deep dive
- docs: Document Arc JXA learnings and background flow pivot
- feat: Add background
- Updates
- Code reveiw
- feat(create-highlight): streamline extraction flow with auto-fallback
- fix(browser): restore regex escaping in JXA script and update learnings
- fix(browser): reliably extract metadata from background Arc tabs
- logger
- feat: Implement manual timestamp input, enhance video metadata fallback handling, and integrate a new logger.
- feat: Implement manual time input, add Arc browser preference, and enhance browser interaction with JXA, logging, and related documentation.
- chore: fix linting and formatting issues
- Merge pull request raycast#11 from getdekoded:feat/raycast-auth
- fix: Correct Raycast redirect URI and refine token refresh logic to explicitly handle expired tokens without a refresh token.
- fix: address PR review comments
- feat: update \'Get Raycast\' button text to \'Get The App\'
- feat: configure external link based on deployment environment
- fix(auth): allow custom redirect schemes without strict URL parsing
- feat: security hardening and code quality improvements
- feat(raycast): implement Recent Highlights view with simplified UX
- refactor: address code review comments and improve UX
- feat(raycast): Implement Free/Pro tiers, Sync logic, and UI refinements
- Planning
- feat: implement detail views and comprehensive documentation
- feat: finalize raycast auth UI and document free vs pro features
- ui: use extension-icon-big.png for command and auth icons
- ui: use extension-icon-big for command icons
- ui: reduce icon size to 64x64 in sign-in view
- fix: update UserToken interface to match firebase token structure
- ui: update sign-in page with custom logo and privacy fixes
- fix: map user_id to uid in auth utility
- debug: log decoded token structure
- chore: v0.04 - add service-account.json to gitignore
- fix: support service account JSON from env var for Vercel
- chore: bump to v0.03 - trigger rebuild with admin credentials
- debug: add comprehensive logging to token exchange flow
- chore: bump version to v0.02 for deployment verification
- chore: add debug logs for firebase config
- chore: add version and timestamp to landing page for verification
- fix(auth): allow com.raycast redirect and register commands
- feat: implement raycast auth and pro features
- add website
- Update to content
- Merge pull request raycast#10 from getdekoded:feat/central-auth
- PR fixes
- feat(auth): harden security for oauth flow and add legal pages
- feat(auth): initialize centralized auth service
- added sample auth website
- feat: Implement advanced features for YouTube Highlights
- chore: Configure monorepo workspaces and gitignore
- chore: Initialize monorepo structure
- UI cleanup (raycast#9)
- UI cleanup
- Refactor URL Input Section layout by repositioning icon and adjusting spacing for improved UI consistency.
- Added guide
- its-50-hide-elements-that-arent-ready-and-fix-ui-overflow (raycast#8)
- its-50-hide-elements-that-arent-ready-and-fix-ui-overflow
- its-49-fix-android-cicd (raycast#7)
- its-49-fix-android-cicd
- its-48-fix-cicd-for-web (raycast#6)
- Refactor Firebase configuration in .firebaserc to standardize app names for staging and dev environments; update binary configuration files for multiple architectures in Android app.
- Refactor firebase.json to support multiple hosting targets (staging, prod, dev) with enhanced configuration including CORS and cache control headers.
- uses: actions/checkout@v3
- Enhance deployment workflow by setting up SSH key, configuring Git for SSH access, and testing SSH connection to GitHub
- Update genie dependency URL to use SSH format
- GENIE_ACCESS_SECRET 2
- GENIE_ACCESS_SECRET
- Update genie dependency to use Git URL and reference; adjust binary configuration files for multiple architectures
- Update deployment workflow to build web from main_development.dart; remove unused character count and storytime examples
- target
- no web renderer
- test
- test cicd
- its-48-fix-cicd-for-web
- its-47-ui-cleanup (raycast#5)
- its-47-ui-cleanup
- 03-13-its-29_create_first_highlight_mode_flow (raycast#4)
- 03-13-its-29_create_first_highlight_mode_flow
- its-30-experiment-with-supereditor (raycast#3)
- its-30-experiment-with-supereditor
- ITS-29 create first highlight mode flow (raycast#2)
- ITS-29 create first highlight mode flow
- Refactor video data models and update addition date handling (raycast#1)
- Enhance video handling and initialization in app startup
- Refactor video data models and update addition date handling
- Enhance paste handling and processing overlay in HomePage
- Refactor HomeController and enhance paste handling in HomePage
- Update routes to include QuickTest page and refactor video response handling
- Refactor video handling and enhance data models
- Add export for paths.dart in core.dart
- Remove deprecated extensions.mdc file and refactor video-related imports and models
- Integrate Remote Config with Dynamic UI Strings
- Implement comprehensive Landing Page with responsive design and Google Sign-In
- Enhance Videos View with Decorative Icons and Section Headers
- Add keyboard shortcut hints and tooltips across views
- Add keyboard shortcuts panel and enhance keyboard navigation
- Refactor Profile Page to ProfileView and Update Routing
- Implement comprehensive keyboard navigation and shortcut system
- Enhance UI with playful animations and decorative elements
- Refactor UI components with Shadcn styling and improved layout
- Implement comprehensive video management and UI enhancements
- Update HomeAppBar styling and elevation
- Implement Videos View and Add Dividers to App Bar and Bottom Navigation
- Refactor project dependencies and code quality improvements
- Refactor mobile home view layout and animations
- Enhance UI animations and layout for mobile home view
- Add new video modal and integrate with home page
- quick cleanup
- Refactor home app bar and shared widgets
- Refactor notifications UI with modular components and centralized text
- Refactor home page and centralize UI constants
- Migrate to Firebase, Riverpod, and update project configuration
- Remove boilerplate counter app and simplify main entry points and added a .prototype folder
- Added cursor rules
- counter app
- Initial commit
@raycastbot raycastbot added new extension Label for PRs with new extensions platform: macOS labels Dec 18, 2025
@raycastbot
Copy link
Collaborator

raycastbot commented Dec 18, 2025

Congratulations on your new Raycast extension! 🚀

Due to our current reduced availability, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@getdekoded getdekoded marked this pull request as ready for review December 18, 2025 04:33
- chore: update root package-lock.json
- chore(raycast): add package-lock.json for store submission
- fix: update raycast API to 1.104.0 and regenerate lock file
@raycastbot
Copy link
Collaborator

This pull request has been automatically marked as stale because it did not have any recent activity.

It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊

@raycastbot raycastbot added the status: stalled Stalled due inactivity label Jan 2, 2026
@getdekoded
Copy link
Contributor Author

Hey team @pernielsentikaer
Hope you are good?

Just checking if there is anything I need do or anything that I am missing here?
Please let me know - keen to fix any issue if you spot any 🙌🏾

@raycastbot raycastbot removed the status: stalled Stalled due inactivity label Jan 5, 2026
@0xdhrv 0xdhrv assigned 0xdhrv and unassigned pernielsentikaer Jan 19, 2026
@getdekoded
Copy link
Contributor Author

hi @0xdhrv hope you are good, just checking if there is anything you still need from me on this? Keen to try work on this and get it approved 👋🏾

@0xdhrv
Copy link
Contributor

0xdhrv commented Jan 23, 2026

Hey @getdekoded 👋

Thanks for your contribution 🔥

I think YouTube has a built-in highlights ↗ feature, so users might get confused since this is a separate service. We should make that clear in the README. If it makes sense, add a note and a link to your service's landing page.

@0xdhrv 0xdhrv marked this pull request as draft January 23, 2026 09:44
Updated the Readme.md to provide clarity and explain where to find more info
@getdekoded
Copy link
Contributor Author

Thanks chief @0xdhrv made the changes to the readme like you suggested, please have a look and let me know if the changes are ok 🙌🏾

@getdekoded getdekoded marked this pull request as ready for review January 24, 2026 09:53
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 24, 2026

Greptile Summary

Adds a new YouTube Highlights extension that captures timestamped highlights from YouTube videos playing in Arc browser. The extension implements local storage with optional cloud backup (free) and sync (Pro).

Key changes:

  • Creates highlight capture functionality with configurable duration
  • Implements local storage using Raycast's LocalStorage API
  • Adds OAuth PKCE authentication for cloud backup/sync
  • Uses JXA (JavaScript for Automation) to interact with Arc browser
  • Supports exporting highlights to Markdown, JSON, and CSV formats
  • Includes Pro feature gating for advanced exports and cross-device sync

Code quality:

  • Well-structured with proper separation of concerns
  • Good error handling and user feedback
  • Proper use of TypeScript
  • Follows Raycast extension patterns

Minor issue:

  • One manual Preferences interface definition that should use auto-generated types

Confidence Score: 4/5

  • This PR is safe to merge with one minor style improvement recommended
  • The extension is well-implemented with proper error handling, security practices, and follows Raycast guidelines. Only one non-critical style issue was found regarding manual preference type definitions. The code is production-ready.
  • extensions/youtube-highlights/src/create-highlight.tsx - contains a manual Preferences interface that should be removed

Important Files Changed

Filename Overview
extensions/youtube-highlights/package.json Configuration follows Raycast standards with proper dependencies and metadata
extensions/youtube-highlights/src/create-highlight.tsx Manually defines Preferences interface instead of using auto-generated types
extensions/youtube-highlights/src/utils/storage.ts Robust storage implementation with proper error handling and sync logic
extensions/youtube-highlights/src/utils/browser.ts Complex but well-implemented browser interaction using JXA for Arc browser
extensions/youtube-highlights/src/utils/auth.ts Proper OAuth PKCE implementation with token refresh and caching

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

23 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

Comment on lines +28 to +33
interface Preferences {
highlightDuration: string;
autoExport: boolean;
exportFormat: "markdown" | "json" | "csv";
showNoteInput: boolean;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Don't manually define the Preferences interface. Raycast auto-generates preference types in raycast-env.d.ts when the extension runs. Manual definitions can become out of sync with your actual package.json configuration.

Remove this interface and use the auto-generated type:

Suggested change
interface Preferences {
highlightDuration: string;
autoExport: boolean;
exportFormat: "markdown" | "json" | "csv";
showNoteInput: boolean;
}
const preferences = getPreferenceValues<Preferences>();

Context Used: Rule from dashboard - What: Don't manually define Preferences for getPreferenceValues() or commends Argument interfa... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, approved 🔥

@raycastbot raycastbot merged commit ac53895 into raycast:main Jan 27, 2026
2 checks passed
@github-actions
Copy link
Contributor

Published to the Raycast Store:
https://raycast.com/itskofio/youtube-highlights

@raycastbot
Copy link
Collaborator

🎉 🎉 🎉

Such a great contribution deserves a reward, but unfortunately we couldn't find your Raycast account based on your GitHub username (@getdekoded).

Please link your GitHub account to your Raycast account to receive your credits and soon be able to exchange them for some swag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions platform: macOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants