Display Now Playing Media
Use useMediaMetadata() to get the title, artist, and artwork of the track currently playing in any system media player (Spotify, Apple Music, etc.).
Basic usage
import { useMediaMetadata } from "@fluxlay/react";
function NowPlaying() {
const { title, artist, isPlaying } = useMediaMetadata();
if (!isPlaying || !title) {
return null;
}
return (
<div style={{ position: "absolute", bottom: 40, left: 40, color: "white" }}>
<div style={{ fontSize: 24, fontWeight: 600 }}>{title}</div>
<div style={{ opacity: 0.7 }}>{artist}</div>
</div>
);
}Show album artwork
artwork is returned as a base64-encoded data URL, so you can pass it directly to <img src>.
function NowPlayingCard() {
const { title, artist, artwork } = useMediaMetadata();
return (
<div style={{ display: "flex", gap: 16, padding: 16 }}>
{artwork && <img src={artwork} alt="" style={{ width: 80, height: 80, borderRadius: 8 }} />}
<div>
<div>{title ?? "Nothing playing"}</div>
<div>{artist}</div>
</div>
</div>
);
}Playback progress bar
function Progress() {
const { duration, elapsedTime } = useMediaMetadata();
const progress = duration && elapsedTime ? (elapsedTime / duration) * 100 : 0;
return (
<div style={{ height: 4, background: "rgba(255,255,255,0.2)" }}>
<div style={{ height: "100%", width: `${progress}%`, background: "white" }} />
</div>
);
}Notes
- All fields return
nullorfalsewhen nothing is playing. - Tune the polling interval with
intervalMs(default 1000ms). Lower values increase battery drain. - On macOS, the first run prompts for "Media & Activity" access.
- Only data exposed by the player to the OS media-control API is available.
See the useMediaMetadata Reference for full API details.