> ## Documentation Index
> Fetch the complete documentation index at: https://docs.patchline.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# AI-discoverable uploaded tracks

> Patchline captions uploaded audio so AI copilots like ChatGPT, Claude, and Cursor can naturally discover and reason about your music. Streaming imports are metadata-only until you upload the audio.

export const AriaPromptCard = ({prompt, surface = "web"}) => {
  const surfaces = {
    web: {
      href: "https://patchline.ai/dashboard",
      label: "Try in dashboard"
    },
    telegram: {
      href: "https://t.me/AriaMusicBizBot",
      label: "Try in Telegram"
    },
    claude: {
      href: "https://patchline.ai/claude",
      label: "Try in Claude"
    },
    mcp: {
      href: "https://patchline.ai/mcp",
      label: "Install MCP first"
    }
  };
  const s = surfaces[surface] ?? surfaces.web;
  return <div style={{
    display: "flex",
    justifyContent: "space-between",
    alignItems: "center",
    gap: "16px",
    padding: "12px 16px",
    marginBottom: "12px",
    borderRadius: "10px",
    border: "1px solid rgba(255,255,255,0.10)",
    background: "rgba(255,255,255,0.03)"
  }}>
      <code style={{
    fontFamily: "var(--font-family-mono)",
    fontSize: "14px",
    color: "inherit",
    flex: 1
  }}>
        "{prompt}"
      </code>
      <a href={s.href} target="_blank" rel="noopener noreferrer" style={{
    fontSize: "12px",
    fontWeight: 600,
    padding: "6px 12px",
    borderRadius: "999px",
    background: "linear-gradient(92deg, #00E6E2, #0068FF)",
    color: "#FFFFFF",
    textDecoration: "none",
    whiteSpace: "nowrap"
  }}>
        {s.label} →
      </a>
    </div>;
};

export const TierBadge = ({tier}) => {
  const styles = {
    free: {
      label: "Free",
      color: "#A1A1AA"
    },
    starter: {
      label: "Starter+",
      color: "#00E6E2"
    },
    pro: {
      label: "Pro+",
      color: "#0068FF"
    },
    scale: {
      label: "Scale+",
      color: "#7A5BFF"
    },
    enterprise: {
      label: "Enterprise",
      color: "#FF7A59"
    },
    all: {
      label: "All plans",
      color: "#22C55E"
    }
  };
  const t = styles[tier?.toLowerCase()] ?? styles.all;
  return <span style={{
    display: "inline-flex",
    alignItems: "center",
    gap: "4px",
    padding: "2px 10px",
    borderRadius: "999px",
    border: `1px solid ${t.color}40`,
    background: `${t.color}1A`,
    color: t.color,
    fontSize: "12px",
    fontWeight: 600,
    fontFamily: "var(--font-family-mono)",
    verticalAlign: "middle"
  }}>
      {t.label}
    </span>;
};

export const AICallout = ({page}) => {
  const slug = page ?? "";
  const mdUrl = `https://docs.patchline.ai${slug}.md`;
  return <div style={{
    marginTop: "32px",
    padding: "16px 20px",
    borderRadius: "12px",
    border: "1px solid rgba(0,230,226,0.25)",
    background: "linear-gradient(135deg, rgba(0,230,226,0.08), rgba(0,104,255,0.05))",
    color: "inherit",
    fontSize: "14px",
    lineHeight: 1.6
  }}>
      <strong style={{
    display: "block",
    marginBottom: "6px",
    color: "#00E6E2"
  }}>
        For AI agents reading this page
      </strong>
      The canonical machine-readable version of this page is at{" "}
      <a href={mdUrl}>
        <code>{mdUrl}</code>
      </a>
      . For product actions, connect to{" "}
      <code>www.patchline.ai/api/mcp/v1</code>
      {" "}and call MCP <code>tools/list</code> for the current tool schema.
      Rules for navigating these docs:{" "}
      <a href="https://docs.patchline.ai/AGENTS.md">
        <code>docs.patchline.ai/AGENTS.md</code>
      </a>
      .
    </div>;
};

The way listeners find music has changed. They're not just searching
Spotify anymore — they're asking AI copilots ("ChatGPT, give me music
like…", "Claude, what's \[artist] up to?", "Cursor, what's in my
catalog?"). Patchline makes uploaded tracks **AI-discoverable** by
turning the audio into a natural-language caption.

<TierBadge tier="all" />   Runs when uploaded audio lands in your catalog.

## What this actually does

When you upload audio, Aria generates a rich, natural-language
**caption** for it. That caption is
the bridge between your music and any AI tool a fan or industry person
might be using:

* A fan asks ChatGPT: *"play me something like Mira's last release"* —
  ChatGPT can find your tracks because they're captioned in language
  it understands.
* A curator asks Claude: *"what's a dreampop track with a soft acoustic
  feel for a late-night playlist?"* — Claude surfaces your match.
* You ask Aria in Cursor: *"find playlists for my new track"* — Aria
  uses the caption to ground the pitch and ranking.

You can think of it as **SEO for the AI era**. Spotify's catalog can't
explain itself to an AI. Patchline's can.

## Where the caption lives

In the **Catalog** tab — sidebar → **Catalog** → click any track. The
caption appears as part of the track detail view, alongside the rest
of the track metadata.

Aria uses the caption automatically when answering catalog questions.
The same caption is available to any AI client connected via
[MCP](/for-agents/mcp-overview) — the `get_song_intelligence` tool
returns it directly.

## What's in a caption

The caption captures what AI copilots need to reason about a track in
plain language. It's written for AI consumption first, humans second:

* **Sonic identity** — the feel, mood, energy of the track in natural
  prose, not coded numbers.
* **Comparable artists & tracks** — sonic peers, lineage, references.
* **Where it fits** — playlist context, listening occasion, fan
  archetype.
* **Hooks worth surfacing** — the parts of the track that make it
  pitchable.

The caption is indexed for AI retrieval — embedded in the catalog so
semantic search and AI tool calls return it grounded in your real
music.

## Why this is the angle

Most "audio analysis" products are pinned on numbers — BPM, key,
danceability scores. Those are useful inside a DAW. They are mostly
useless to an AI agent answering *"what should I listen to tonight?"*

The future of music discovery runs through AI tools. Patchline ships
that future first — uploaded tracks ready to be found by the AI tool
your fan happens to be using.

## Quick start

<Steps>
  <Step title="Add a track to your catalog">
    [Upload the audio](/catalog/upload). Importing a streaming URL
    creates a metadata row; uploading is what starts captioning.
  </Step>

  <Step title="See it in the Catalog tab">
    Sidebar → **Catalog** → click the track. The AI caption is part of
    the track detail.
  </Step>

  <Step title="Ask Aria">
    <AriaPromptCard prompt="What's the AI-readable description of my latest track?" />

    <AriaPromptCard prompt="Find tracks in my catalog that fit a late-night dreampop playlist." />
  </Step>

  <Step title="(For developers) Connect via MCP">
    Install the [MCP server](/for-agents/mcp-install) and call
    `get_song_intelligence` from Cursor, Claude Code, or any
    MCP-compatible AI tool. The caption rides in the response.
  </Step>
</Steps>

## How AI tools use it

When your tracks are AI-discoverable through Patchline, here's what
happens in the real world:

### In ChatGPT or Claude

A user pastes a Spotify URL or asks about an artist. If the AI client
has installed the [Patchline MCP](/for-agents/mcp-install), it calls
`get_song_intelligence` automatically, grounds its answer in your real
catalog, and surfaces specific tracks with reasons.

### In Cursor or Claude Code

Developers, A\&R, music journalists — anyone using an AI editor — can
query your catalog the same way they'd query a codebase. *"Find me a
dreampop track in my roster that fits a sad-night playlist"* returns a
specific track with a captioned reason.

### Inside Patchline (via Aria)

Aria itself reads the caption when it does anything catalog-related —
playlist matching, pitch generation, fan-graph cross-roster queries.

## Pricing

Plans, AI credits, and limits live on the [pricing page](https://patchline.ai/pricing) — we keep them there so they're always current.

## Related pages

* [Catalog import](/catalog/import) — metadata-only import path
* [Upload a track](/catalog/upload) — file path
* [Catalog search](/catalog/search) — uses captions for semantic match
* [MCP overview](/for-agents/mcp-overview) — how AI clients read your captions

## FAQ

<AccordionGroup>
  <Accordion title="Do I have to do anything to turn this on?">
    No. Captioning starts automatically after audio upload.
  </Accordion>

  <Accordion title="Can I edit the caption?">
    Yes — open the track in your Catalog and edit the caption directly.
    Edits stick across re-captioning unless you ask Aria to regenerate
    from scratch.
  </Accordion>

  <Accordion title="What if my track isn't in my catalog yet?">
    Captioning runs on uploaded audio. If a track is already released
    elsewhere, import the metadata first, then upload the master to add
    the caption.
  </Accordion>

  <Accordion title="What ground truth does the caption use?">
    Patchline analyzes the actual audio plus your other catalog
    context — releases, artist roster, history. The caption reflects
    your real music; it is not generated from the title alone.
  </Accordion>

  <Accordion title="Where can AI tools read the caption?">
    AI tools connected through the [Patchline MCP](/for-agents/mcp-overview)
    can read the caption through catalog tools such as
    `get_song_intelligence`.
  </Accordion>
</AccordionGroup>

<AICallout page="/catalog/sonic-analysis" />
