---
title: Music 1.0
description: Generate music from text (and optional image conditioning) with Sume Music 1.0.
---

Music 1.0 is retiring gradually. Its routes keep working and keep
`job.model = sume/music-1.0`, but every request now resolves through the
[Music Router](/models/music-router) (`sume/music-auto`). New integrations
should call `POST /v1/music-router/generate`.

Use Music 1.0 for prompt-driven music generation. The request is text-first;
optional image conditioning is supported. Provider model ids stay internal.
Music 1.0 runs on Google Lyria 3.5: full-length structured songs up to a few
minutes, steered by the prompt (say "a 2-minute track" or use section markers
like `[0:00-0:30] Intro: ...`).

Primary invoke URL:

```text
POST /v1/music-1.0/generate
```

Model-run alias (same body):

```text
POST /v1/models/sume/music-1.0/runs
```

Public model id: `sume/music-1.0`.

## When to use

| Goal | Approach |
|---|---|
| Text → music | `prompt` only |
| Visual conditioning | `prompt` + optional `image_url` |
| Steer away from styles | put exclusions in the positive `prompt` (e.g. “no vocals, no spoken word”) |

## Writing the prompt (music brief)

Music 1.0 accepts a text prompt and optional image conditioning, with no
seed, temperature, guidance or duration parameter. To avoid generic musical
choices, write a scene-specific brief with seven axes. These are creative
directions, not guaranteed output settings; verify the generated audio.

| Axis | Example |
|---|---|
| Emotion (precise; darker allowed) | “hushed, slightly melancholic”, “proud and nostalgic”, “cocky, restless” |
| Genre / lineage | neo-soul, drill, bossa nova, gugak fusion, synthwave, chamber folk |
| Tempo as a number | “72 BPM”, “142 BPM half-time” |
| Key and mode | “D minor”, “E phrygian”, “G major with a lydian lift” |
| Instruments with texture (2–4) | “Rhodes through tape wow”, “gayageum plucks”, “808 with long glide” |
| Arc with one named moment | “breakdown to bass and claps at 0:20, full return at 0:28” |
| Era / production | “1998 production, dry and close”, “2024 hyper-clean” |

Close with one clause: “Instrumental, no vocals.” (add “no spoken word” only
under narration). For contrasting scenes in one project, vary broad genre
family, tempo (at least 12 BPM apart) and lead instrument. Preserve continuity
when the user requests one consistent score. Pass the accepted scene still as
`image_url` when appropriate. On a policy rejection,
revise the flagged content while retaining the musical brief; retry only within
the authorized budget. Do not strip the request to a generic bed. Provider
`lyrics` may describe tempo and structure; this is model-reported metadata,
not an audio measurement.

```text
Hushed and slightly melancholic neo-soul nocturne, 72 BPM, D minor. Rhodes through tape wow, soft sub bass, brushed snare with rimshots, a single muted trumpet line. Sparse first half; the trumpet answers the Rhodes from 0:12 and the bass thickens for the last pass. Late-night, dry and close, 1998 production. Instrumental, no vocals.
```

## Hard constraints

- Do **not** send `duration` or `duration_seconds`. They are unrecognized and
  rejected on Music 1.0.
- Do **not** send a non-empty `negative_prompt`. Music 1.0 / Lyria does not
  support negative prompting; non-empty values return HTTP 400 with
  `public_reason=negative_prompt_unsupported`. Omit the field or send `""`.
- Prompt max length is 5000 characters.
- Image URLs must be public HTTPS. Send `null` for `image_url` only when you
  intentionally clear an image input on a client that reuses request objects.

## Request fields

| Field | Required | Notes |
|---|---|---|
| `prompt` | Yes | 1–5000 characters. Include exclusions in the positive prompt. |
| `negative_prompt` | No | Unsupported when non-empty. Omit or send `""`. |
| `image_url` | No | Optional public HTTPS image URL, or `null` to clear. |
| `metadata` | No | Caller metadata stored on the job; not sent to the provider. |
| `mode` | No | `async`, `sync`, `subscribe`, `webhook`. |
| `webhook_url` | No | Public HTTPS callback for webhook mode. |
| `wait_timeout_seconds` | No | 0–30 for `sync` / `subscribe`. |

## Create a music job

<!-- api-call-example:music-generate -->

Image-conditioned example:

```bash
curl -X POST https://api.sume.com/v1/music-1.0/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: music-image-001" \
  -d '{
    "prompt": "Cinematic ambient underscore matching the mood of the reference still, instrumental only",
    "image_url": "https://example.com/moodboard.png"
  }'
```

## Poll and fetch the result

```bash
curl https://api.sume.com/v1/jobs/job_123/status \
  -H "Authorization: Bearer $SUME_API_KEY"

curl https://api.sume.com/v1/jobs/job_123/result \
  -H "Authorization: Bearer $SUME_API_KEY"
```

On success, read the audio artifact from `result.artifacts[]` where `type` is
`audio` (typically `audio/mpeg` on `media.sume.com`).

## Artifacts

Completed Music 1.0 jobs return Sume-hosted audio artifacts:

```json
{
  "id": "job_...",
  "status": "completed",
  "result": {
    "artifacts": [
      {
        "id": "artifact_...",
        "type": "audio",
        "url": "https://media.sume.com/artifacts/...",
        "content_type": "audio/mpeg"
      }
    ]
  }
}
```

Use Sume media URLs from the result. Raw provider URLs are not public outputs.

## Pricing

Fixed **$0.10 USD** per accepted Music 1.0 generation. Price does not vary by
prompt length or optional image conditioning.

## Next

- [Jobs and results](/workflows/jobs-and-results) for polling and webhooks
- [Recipes](/api/cookbook) for short copy-paste flows
