Extension Icon

SomaFM

Browse and play SomaFM internet radio stations with smart player detection, favorites, and now playing information
Overview

SomaFM for Raycast

Browse and play SomaFM internet radio stations directly from Raycast.

Note: "SomaFM" is the correct branding for this service. The Raycast linter may suggest "Somafm" but we're keeping the official branding.

Features

๐ŸŽฏ Current Features (v1.0)

๐Ÿš€ Quick Access

  • Menu Bar Access: Always-visible menu bar icon shows your favorite stations
    • Click the ๐ŸŽต icon in your menu bar
    • Play any favorite station with one click
    • Updates automatically when you add/remove favorites

๐ŸŽต Stream Playback

  • Smart Player Detection: Automatically plays streams in your preferred media player
    • Supports IINA, VLC, and Music.app
    • Falls back to system default if no supported player is found
  • High-Quality Streams: Uses MP3 format for best compatibility
  • Quick Feedback: Shows loading status and confirms which player opened
  • Now Playing: See what's currently playing on each station
    • Grid view shows current track in subtitle
    • List view shows with ๐ŸŽต icon
    • Auto-refreshes every 30 seconds

๐ŸŽจ Beautiful Interface

  • Grid View: Visual 3-column layout with station artwork
  • List View: Compact view with listener counts
  • Toggle Views: Switch between grid and list with โŒ˜+Shift+V
  • Station Details: See genre, current listeners, and descriptions

โญ Favorites & History

  • Favorites: Star your favorite stations for quick access
    • Favorites appear at the top of the list
    • Toggle with โŒ˜+D or the star action
    • Persists between sessions
  • Recently Played: Automatically tracks your last 5 played stations
    • Shows ALL recently played stations (including favorites)
    • Stations appear in both Recently Played AND their regular section
    • Clear history with the menu action when needed
    • Helps you quickly return to stations you just discovered

๐Ÿ” Smart Search

  • Search by station name, genre, or description
  • Prioritizes name matches for better results
  • Real-time filtering as you type

๐Ÿ“Š Organization & Sorting

  • Sort Options:
    • Sort by Name (โŒ˜+1) - A-Z or Z-A
    • Sort by Listeners (โŒ˜+2) - Least to most or most to least
  • Genre Grouping: Toggle genre groups with โŒ˜+G
  • Station Sections: Favorites โ†’ Recently Played โ†’ All Stations

โŒจ๏ธ Keyboard Shortcuts

  • Enter - Play selected station
  • 1-9 - Quick play stations 1-9
  • โŒ˜+D - Toggle favorite
  • โŒ˜+Shift+V - Switch between grid/list view
  • โŒ˜+1 - Sort by name
  • โŒ˜+2 - Sort by listeners
  • โŒ˜+G - Group by genre
  • โŒ˜+โŒฅ+C - Copy stream URL
  • โŒ˜+R - Refresh station list

Installation

  1. Install Raycast (macOS only)
  2. Clone this repository
  3. Run npm install && npm run build
  4. Import the extension into Raycast

Recommended Media Players

For the best experience, install one of these media players:

  • IINA - Modern media player for macOS (recommended)
  • VLC - Cross-platform media player

Without these, streams will open in Music.app or your default browser.

Usage

Browse & Play

  1. Open Raycast (โŒ˜+Space by default)
  2. Type "soma" or "Browse SomaFM Stations"
  3. Browse stations in the grid or search for specific genres/stations
  4. Press Enter or use number keys 1-9 to play
  5. Use โŒ˜+D to favorite stations you love

Menu Bar

  1. Look for the ๐ŸŽต icon in your menu bar
  2. Click to see all your favorite stations
  3. Click any station to play immediately
  4. The menu updates automatically when you add/remove favorites

About SomaFM

SomaFM is a listener-supported, commercial-free internet radio station broadcasting from San Francisco. With over 30 unique channels of underground/alternative radio, SomaFM has been serving up electronic music, indie rock, and more since 2000.

Consider supporting SomaFM if you enjoy their stations!

Development

This extension is built with:

Project Structure

src/
โ”œโ”€โ”€ browse-stations.tsx # Main browse command
โ”œโ”€โ”€ menu-bar-player.tsx # Menu bar extension
โ”œโ”€โ”€ types/              # TypeScript interfaces
โ”œโ”€โ”€ utils/              # API, player, and storage utilities
โ””โ”€โ”€ hooks/              # React hooks for state management

To Contribute

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run npm run lint to ensure code quality
  5. Run npm test to ensure tests pass
  6. Submit a pull request

License

MIT - See LICENSE file for details

Credits

  • Station data and streams provided by SomaFM
  • Extension icon and station artwork ยฉ SomaFM
  • Built with โค๏ธ using Raycast