Repository navigation
Features Interface
Chris Funderburg edited this page Oct 1, 2026
·
3 revisions
Lyrics, visualizers, the player surfaces, appearance, accessibility, and settings. This page is part of the Feature List and describes shipped functionality only.
- A proper LRC parser: standard and extended timestamps, multi-timestamp lines, metadata tags, millisecond offsets, and word-level enhanced markers (parsed and stored for future use). Malformed lines degrade to unsynced text.
-
Five sources, resolved in priority order: your own edits, embedded synced lyrics (LRC timestamps inside the lyrics tag), sidecar
.lrcfiles, embedded unsynced lyrics, and an opt-in LRClib fetch. A badge shows where the current lyrics came from, and the priority order is configurable. - Karaoke-style lyrics pane (⌘⌥L) beside the queue, with the current line highlighted in time with playback and a per-track offset adjustment in milliseconds.
- Lyrics editor (⌘⌥⇧L) with an Auto / Synced / Plain mode picker; auto mode detects LRC timestamps. Works on any track, not just the one playing, and batch mode can apply lyrics to all selected tracks.
- Write-back is optional: lyrics can be saved into the files themselves (USLT / Vorbis LYRICS) or kept in Bòcan's database only.
- Six modes: Spectrum Bars, Oscilloscope, Halo (a breathing spectrum ring with beat ripples), Cascade (a scrolling spectrogram waterfall), Starfield (a frequency-coloured warp field that stretches into streaks on the beat), and Nebula (a luminous gas cloud driven by a live shader simulation).
- All GPU-rendered with Metal, so they stay smooth at full-screen native Retina resolution. Nebula is Metal-only and politely disables itself (with an explanatory tooltip) when Metal is unavailable or Reduce Motion is on.
- Six palettes: Accent, Spectrum, Mono, Ember, Drift (hue steered by the music), and Thermal (magnitude mapped to heat).
- Three surfaces: a dockable pane (⌘⇧V), a dedicated full-screen window (⌘⇧F), and a Mini Player layout.
- Hover controls let you step through modes and palettes right on the visualizer.
- Real analysis, not decoration: a genuine FFT from an audio tap, with spectral centroid, flux, and onset detection feeding palette and motion.
- Battery-aware: an optional simpler-on-battery mode caps the frame rate at 30 fps and switches to Spectrum Bars.
- Now Playing strip with artwork, marquee title, CUE marker ticks on the scrubber, love and rating controls, jump-to-current (⌘J), go-to-album (⌘⌥A) and go-to-artist (⌘⌥G), and mute (⌘⌥Z). A row of source badges under the title shows the format, bitrate, sample rate, bit depth, and channels of the current song, each with an explanatory tooltip. When a podcast plays, the transport swaps to skip-back/skip-forward with a chapter list and speed picker.
- Mini Player (⌘⌥M) in four layouts (Strip, Compact, Square, Visualizer) with always-on-top pinning. Swapping between Mini Player and main window uses a soft cross-fade rather than a blink, and the last window mode can be restored on launch.
- Immersive Mode (⌘⇧I, experimental). A full-screen window with the oscilloscope edge to edge and three cards over it: artwork with player controls, the next songs in the queue, and the lyrics. Esc returns to the main window.
- Dock integration: album art as the Dock icon while playing, a play/pause badge, and a thin progress bar, each independently toggleable, plus a Dock menu with transport controls and Stop After Current.
- Optional menu bar extra with title, artist, a position scrubber, and transport buttons.
- System Now Playing integration: Control Center and the media-key overlay show the current track with real album artwork, live radio titles included. Media keys, Control Center, and Siri work through the standard remote-command centre, with podcast-appropriate skip commands swapped in automatically.
- Track-change notifications (opt-in) fire only when Bòcan is not the frontmost app; tapping one brings the app forward.
- Trackpad haptics on love, rate, seek, and volume-release, honouring the system haptics setting.
- Theme: System, Light, or Dark.
- Accent colours: System, Blue, Purple, Pink, Red, Orange, Yellow, Green, Teal, and Bòcan's own Will-o'-the-Wisp. Individual playlists can carry their own accent colour.
- Row density: Compact, Regular, or Spacious.
- System-respectful: Reduce Motion is honoured everywhere (including disabling the Nebula visualizer), Reduce Transparency makes panels fully opaque, and Increase Contrast upgrades translucent materials.
Bòcan aims to be fully usable without a mouse or a screen:
- VoiceOver-first track list: each row announces "Title, Artist, Album, Duration" as one spoken sentence instead of reading every column separately.
- Live now-playing announcements: VoiceOver speaks the new track name automatically on track change.
- Full keyboard navigation with logical focus sections and no focus traps.
- Dynamic Type throughout: every label, badge, and table cell scales with the macOS text size setting.
- Grouped elements: album cells, artist rows, and genre chips read as single logical elements.
- Stateful controls: transport buttons carry their state ("Shuffle, on, button") and EQ sliders report gain meaningfully ("63 Hz EQ band, +3.0 dB").
- A built-in colour-contrast audit in Settings checks the app's own palette against WCAG 2.1 AA.
- Accessibility identifiers cover every surface, verified by automated tests. The README is candid that this is ongoing work.
- Dedicated windows for the main browser, Mini Player, Settings, Equaliser and DSP, Library Summary, Full-screen Visualizer, Track Info, Log Console, Help, About, and Notices and Licences (third-party licences rendered in-app, no browser).
- Single-instance enforcement: launching a second copy just activates the running one.
- Launch at login option, window-mode restoration, and a quit guard during scans and analysis.
- In-app Help (⌘?) with seven pages: Getting Started, Podcasts, Internet Radio, Subsonic Servers, Keyboard Shortcuts, Mouse Buttons, and Supported Formats. Automated tests check that each help string is in the String Catalog and that each shortcut the help mentions agrees with the menus.
- Native window tabbing is deliberately disabled: every main window shares one view model, so tabs would have been a lie.
Almost every action has a shortcut. The full reference is on its own page: Keyboard Shortcuts.
Settings uses the modern macOS System Settings layout, organised into sections:
- General: launch at login, window-mode restoration, menu bar extra, the three Dock options, and track-change notifications.
- Appearance: theme, accent colour, row density.
- Library: folder watching, cover-art embedding, Deep Dive, and library roots management.
- Sources: the Subsonic server list and per-server editors, with Test Connection and Test All.
- Smart Playlists: live-update default, observation debounce window, and random-order re-rolling.
- Podcasts: refresh, auto-download, skip intervals, default speed, storefront, and Podcast Index API status.
- Phone Sync: the enable toggle, paired phones with revocation, pairing, and sync profiles.
- Playback: default speed, gapless pre-roll, cross-album gapless, sleep-timer fade.
- Equaliser, Effects, and ReplayGain: the full DSP chain described above.
- Lyrics: auto-show, font size, source priority, LRClib opt-in, and write-back.
- Visualizer: mode, palette, frame-rate cap, battery mode, sensitivity.
- Scrobbling: provider connections, queue statistics, and failure handling.
- Advanced: iCloud and local database backups, log level, and database tools.
- Diagnostics: crash-report consent, local diagnostic reports, log capture, and the colour-contrast audit.
bocan.app · Source · Report an issue · Releases · Apache 2.0
Features
- Overview
- Playback and Sound
- Formats
- Library
- Browsing and Playlists
- Interface
- Sources and Sync
- Privacy and Engineering
User Guide
In-App Help
- Getting Started
- Podcasts
- Internet Radio
- Subsonic Servers
- Keyboard Shortcuts
- Mouse Buttons
- Supported Formats
Developer Documentation
Design Notes
Links