---
name: music-hum
description: Turn the person's hum, sung or rapped line into a full song on Suno V6 that keeps their melody and flow — the words with Scribe and the kind, genres, tempo and theme with Audio Understanding, three choices (words, vibe, lyrics), lyrics written around their line, a Suno V6 cover of the seed.
---
# From a hum to a song

FlashBoards user skill, version 1.2.3 (2026-10-13).

On the board, read these guides with `list_skills` and `get_skill` when the assistant exposes them; otherwise use the hosted index through an available read-only retrieval tool. Use that runtime’s actual model discovery, current page context and guarded board actions for execution. Keep native readiness, approval and cost gates; do not claim a guide was read when retrieval is unavailable.

Read related guides with `get_skill({skillId:"<id>"})` or the [hosted index](https://pub-78da82d51ed14147ac554d38094b0c0b.r2.dev/user-skills/1.2.3/index.html). Reading a guide does not start or authorize a paid generation.

Read `music` for the shared rules. The seed is {seed}: a recording the person sent (`show_media_upload_picker` → its receipt) or one of their own audio results.

## Steps (one choice per turn)

1. **Hear** — in the first turn, side by side:
   - `transcribe_media` with `model: "scribe_v2"`: the words with their times.
   - `run_skill_model` with the `audio-understanding` model, `audio_url` = {seed} and the question "What kind is it (rap, singing, humming)? The words you hear, three genres that fit, the tempo in BPM, the delivery, the register (male/female), the mood and the theme, and one song idea."
   Keep both answers as a note. Its tempo is a listener's estimate, not a measured beat.
2. **Words** — only if the two listeners disagree or a word is unclear: ask "Which words did you sing?" with both lines as options (shortened to the part that differs) and a free answer. If they agree, use them without asking.
3. **Vibe** — `describe_music_vibes({genres: [<the three genres heard>]})`: per genre three recognisable artists and a style line. Offer the three options ("like <A>, <B>, <C>"), the best fit first, and a free answer ("Like an artist or a song…" → `music-refs`). When the words agree, this is the question of the first turn. Skip it if the person already named a genre or an artist.
4. **Lyrics** — "Words for the rest of the song?": "Write them for me" · "I'll send my lyrics" · "No words — just the beat" (→ `instrumental: true`). Skip if they already said.
5. **Draft** — write the lyrics and the style with `music-write` (their line is the hook; the style starts from the picked vibe's style line). Show the lyrics as they will be sung, then ask "Make it?" · "Change the words" · "Different style".
6. **Make** — in the same turn as their "Make it": `estimate_skill_model`, then `run_skill_model` with model `suno-v6-cover`:
   ```json
   {"title": "<title in the seed's language>", "upload_url": "<the seed>", "style": "<style line>",
    "lyrics": "<lyrics with [Verse]/[Chorus] tags>", "vocal_gender": "m|f", "audio_weight": 0.65, "duration": 150, "model": "V6"}
   ```
   `audio_weight` 0.75 when they want it close to the hum, 0.5 when they want it reworked; `duration` 120–180 for a song. The seed fits the five-minute limit.
7. **Takes** — two takes come back. Ask "Which one?": take 1 · take 2 · another round (the same input again) · what to change. Then `music-after`.

## Pitfalls

- **No lyrics → instrumental.** A vocal song needs `lyrics`; do not work around it with empty tags.
- A seed shorter than about 6 s or pure speech gives a weak melody: say so in a line and offer the idea route (`suno-v6` without a seed).
- `vocal_gender` only raises the chance; if a take comes in the wrong voice, run again rather than changing the style.
- The person may answer a question by typing — go with what they wrote.

## Execute through MCP or on the board

Use the person's FlashBoards account; never ask for a personal provider key or run the source's local scripts. Discover `get_account`, `list_generation_models` and the tools of this client first: a published guide does not prove a feature is deployed.

**Headless, no open board.** Quote with `estimate_generation_cost` (skill models: `estimate_skill_model`), then run `generate_image`, `generate_video`, `generate_audio` or `run_skill_model` with one stable `generationAttemptId` per logical attempt. Pass `maxCostUsd` only when the current operation and selected model support it; otherwise use the quoted cost and the person's explicit approval with the supported controls. Never silently ignore an unsupported spending cap; make one `get_generation` check after `retryAfterSeconds`. Pass the person's own results by `generationId`: images in `referenceGenerationIds`, `firstFrameUrl` and `endFrameUrl`, audio in `referenceAudioUrls` or `targetAudioUrl`, videos in `referenceVideoGenerationIds`. They are read on the server; signed result links do not work as public URLs. Every `generationId` a tool returns stays valid: a later read of the same result gives a different string, and both work. Film frames and gallery pictures go in by `previewHandle`: `referencePreviewHandles` of the generation tools, a `{previewHandle}` source of `arrange_images`, `crop_image` and `pad_image`, and `describe_media`. New files come from `show_media_upload_picker` as receipts. The person's character comes in as its sheet, by `generationId` or as an upload; there is no search by name. If the person names a character without the sheet, ask for it or make one with `character-sheet`; do not scan recent results for it. Free server steps: `trim_video`, `concat_videos`, `conform_video`, `replace_video_audio`, `extract_video_frame`, `extract_video_audio`, `detect_video_cuts`, `crop_image`, `pad_image`, `arrange_images`, `cut_audio_span`, `concat_audio_tracks`, `mix_audio_tracks`, `fit_audio_duration`, `add_audio_reverb`. Check every result with `describe_media` (a question about an image; `model`, `mode` and `sourceRange` only for a video) and `transcribe_media` for speech. Both checks are paid: `describe_media` costs a fraction of a cent for an image and about 2–4 ¢ for a short video (more for a long one), `transcribe_media` under 1 ¢ a minute — count the checks you plan in the price you name before the first paid step. `describe_media` is not reliable about sound: it misses effects mixed under music and can hear voices or instruments that are not there. Check speech with `transcribe_media` and ask the person to listen for effects and music. Never repay an uncertain submission; reuse an attempt ID only for the identical request. Make each new `requestId` or `generationAttemptId` unique, for example the task, the date and a short random suffix: an ID used before, even in another chat, replays that earlier request or answers `REQUEST_ID_CONFLICT`.

**On the board.** Inspect with `list_board_sessions` and `get_board_snapshot` and carry the same `sessionId` and a fresh `activeBoardId` as `expectedBoardId`. Native cards: `execute_board_action` (`listNativeModels`, `setModel`), `prepare_board_generation` with ordered board items or owned outputs, then one `generate_on_board` within the authorized budget. Board media tools: `list_media_tools` → `start_media_tool` → `get_media_tool_run`. Put headless results on a board with `add_media_to_board`.

Keep mandatory safety settings and the live limits of each model. Prices, timings, endpoints and "free retry" claims in the sources are historical, not FlashBoards contracts. If a step this guide needs is not available or is refused (a tool error, `audio_not_configured`, a missing model or input), keep the finished assets, tell the person which step is blocked and why, and ask how to go on. A single generation that ends `failed` is not a blocked step: submit it once more with a new `generationAttemptId` (reworded if it may have hit the content checker), and stop to ask only if it fails again. A failed attempt is not always refunded, so the retry may be paid again and `maxCostUsd` caps each request on its own: count both against the budget the person approved. Never swap in another route on your own: no image model redrawing a layout or a frame, no `describe_media` in place of the frames it should check, no clip generated only to take its sound, no picture drawn where the guide takes a film frame.

## Source and related guides

- [Original Learn guide](https://flashboards-h01.vercel.app/learn/formats-and-exhibition/ai-song-from-a-hum/skills/music-hum.md)
- Updated from the owner's skill sources of 2026-10-11.

Read: `music`, `music-write`, `music-refs`, `music-after`. Source experiments and demo materials are historical; use the person's own approved media.
