Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions extensions/kaset-control/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Changelog

## [Queue, YouTube Search and History] - 2026-10-31

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 Release date is hardcoded

The new release heading replaces {PR_MERGE_DATE} with a fixed date. Repository rules require new changelog entries to keep that placeholder so publication can set the actual merge date. Restore {PR_MERGE_DATE} before merging.

Suggested change
## [Queue, YouTube Search and History] - 2026-10-31
## [Queue, YouTube Search and History] - {PR_MERGE_DATE}

Rule Used: What: Changelog entries must use {PR_MERGE_DATE} placeholder in titles, be placed at the top of the file, and maintain descending version order. Why: Standardized placeholders and consistent ordering ensure changelogs are maintainable and merge da... (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/kaset-control/CHANGELOG.md
Line: 3

Comment:
**Release date is hardcoded**

The new release heading replaces `{PR_MERGE_DATE}` with a fixed date. Repository rules require new changelog entries to keep that placeholder so publication can set the actual merge date. Restore `{PR_MERGE_DATE}` before merging.

```suggestion
## [Queue, YouTube Search and History] - {PR_MERGE_DATE}
```

**Rule Used:** What: Changelog entries must use `{PR_MERGE_DATE}` placeholder in titles, be placed at the top of the file, and maintain descending version order.  Why: Standardized placeholders and consistent ordering ensure changelogs are maintainable and merge da... ([source](https://app.greptile.com/-/switch-tenant?tenant=raycast&next=%2Fcustom-context%3Fmemory%3Dc2214c11-df56-490a-b1c0-09a385df481a))

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

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!


### Added

- Now Playing rebuilt around Kaset's queue: queue, recently played and up next in one list, with live progress and full playback controls
- Album names resolved by searching YouTube Music, since Kaset's player payload does not include them
- YouTube search in Play Song, merged with YouTube Music and filterable by source
- Queue actions: play now, remove from queue, play next, add to queue
- Recently played history recorded in the background without a menu bar item
- Track Info view (`⌘I`) with large artwork and a metadata column

### Changed

- Upgraded to `@raycast/api` 2.8.2
- Menu bar player: artwork or progress-ring icon, marquee titles, hide when idle

## [Update] - 2026-05-05

### Added
Expand Down
108 changes: 43 additions & 65 deletions extensions/kaset-control/README.md
Original file line number Diff line number Diff line change
@@ -1,73 +1,51 @@
# Kaset Raycast Extension
# Kaset Control

Control [Kaset](https://github.com/sozercan/kaset) - YouTube Music client for macOS - directly from Raycast.
Control [Kaset](https://github.com/sozercan/kaset) — the YouTube Music client for
macOS — from Raycast.

## Features

- **Menu Bar Player** - Shows current track in macOS menu bar with full playback controls
- **Now Playing** - View current track with artwork, progress, and controls
- **Toggle Play/Pause** - Quick playback control
- **Next/Previous Track** - Skip tracks
- **Volume Control** - Set volume from 0-100%
- **Toggle Shuffle** - Enable/disable shuffle mode
- **Cycle Repeat** - Cycle through repeat modes (off → all → one)
- **Toggle Mute** - Mute/unmute audio
- **Like/Dislike** - Rate the current track
Kaset is a separate app: this extension drives it over AppleScript, so Kaset has
to be installed and running.

## Requirements

- [Kaset](https://github.com/sozercan/kaset) with AppleScript support
- macOS 14.0 or later
- **Kaset 0.14.2 or newer.** The queue commands and the merged YouTube Music and
YouTube search need 0.14.2 or later.
- macOS.

## Commands

| Command | Description |
|---------|-------------|
| Show Menu Bar | Show current track in menu bar with controls |
| Now Playing | View current track with artwork and controls |
| Toggle Play/Pause | Play or pause |
| Next Track | Skip to next |
| Previous Track | Go back |
| Set Volume | Choose volume level |
| Toggle Shuffle | Toggle shuffle mode |
| Cycle Repeat | Cycle repeat modes |
| Toggle Mute | Mute/unmute |
| Like Track | Like or unlike current track |
| Dislike Track | Dislike or remove dislike |

## Menu Bar

The menu bar player shows the current track and provides quick access to all controls:

- **Show**: Run "Show Menu Bar" from Raycast
- **Hide**: Click "Hide Menu Bar" in the menu bar dropdown

### Settings

Configure the menu bar display style in Raycast extension preferences:

- **Icon only** - Just the music icon
- **Short** - Track name truncated to 20 characters
- **Medium** - Track name truncated to 35 characters
- **Long** - Track name truncated to 50 characters

## Development

```bash
# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production
npm run build

# Lint
npm run lint
npm run fix-lint
```

## License

MIT
| Command | What it does |
| --- | --- |
| **Now Playing** | The current track with live progress, the queue, and recently played. Full playback controls, queue actions, and rating. |
| **Play Song** | Search YouTube Music and YouTube together and play, queue, or play next. |
| **Toggle Play/Pause**, **Next Track**, **Previous Track** | Playback control, no window. |
| **Set Volume** | Pick a volume level. |
| **Toggle Shuffle**, **Cycle Repeat**, **Toggle Mute** | Playback modes. |
| **Like Track**, **Dislike Track** | Rate the current track. |
| **Show Menu Bar** | Keep the current track and artwork in the menu bar with controls. |
| **Record Player State** | Records history in the background. See below. |

## Preferences

- **Play Song Source** — whether Play Song searches YouTube Music, YouTube, or
both (the default). You can also narrow this inside the search itself.
- **Menu Bar Style** / **Menu Bar Icon** / **Hide When Idle** — control the menu
bar item.

## Recently Played

History is recorded without the menu bar. Open **Record Player State** once, or
turn on its background refresh in Raycast's extension settings, so it can keep
recording while the Now Playing window is closed.

A track is added to Recently Played only once it has stopped playing, so the
track you are listening to never appears in both Now Playing and Recently
Played.

## Notes

- **Seeking is display-only.** Kaset exposes no AppleScript command to seek, so
the progress ring tracks playback but cannot scrub.
- **Album** is resolved by searching YouTube Music, because Kaset's player
payload does not carry album names. This costs one search per track change.
- The menu bar item is optional and off unless you enable it.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed extensions/kaset-control/metadata/screenshot-01.png
Binary file not shown.
Binary file removed extensions/kaset-control/metadata/screenshot-02.png
Binary file not shown.
Binary file removed extensions/kaset-control/metadata/screenshot-03.png
Binary file not shown.
Loading