workflow_dispatch music brief: 25 inputs, 65,535 chars vs Sume's 5,000

GitHub dispatch takes 25 inputs and 65,535 characters; Sume's music prompt stops at 5,000 and rejects duration. Guard the length, then call the router.

4 min readSume
All posts

A workflow_dispatch workflow can take up to 25 top-level inputs and a payload of 65,535 characters, according to GitHub. Sume's music prompt is capped at 5,000 characters, and the Music Router rejects duration and any non-empty negative_prompt. So use choice inputs for tempo and length, one string input for the scene, join them in the shell, and fail the job before the call if the result is over 5,000 characters.

The two limits side by side

GitHub's limits are for the dispatch itself; Sume's limits are for one request body.

Dispatch and Music Router limits (GitHub Docs and Sume docs, read 2026-10-05)
ItemLimitSource
workflow_dispatch top-level inputs25GitHub
workflow_dispatch input payload65,535 charactersGitHub
Input types GitHub listsstring, choice, boolean, environmentGitHub
Music prompt1 to 5,000 charactersSume
duration / duration_secondsRejected; write the length in the promptSume
negative_promptNon-empty value returns 400 negative_prompt_unsupportedSume

A workflow with a guard

Offer the knobs that Sume reads from the prompt: tempo as a number and a length phrase. GitHub's choice type keeps people from typing a length such as 2 mins ish that the model has to guess at.

on:
  workflow_dispatch:
    inputs:
      scene:
        description: Scene and mood, one sentence
        required: true
        type: string
      bpm:
        type: choice
        options: ["72", "96", "128"]
      length:
        type: choice
        options: ["15-second", "30-second", "60-second"]
jobs:
  bed:
    runs-on: ubuntu-latest
    steps:
      - env:
          SUME_API_KEY: ${{ secrets.SUME_API_KEY }}
          PROMPT: "${{ inputs.scene }}, ${{ inputs.bpm }} BPM. A ${{ inputs.length }} track. Instrumental, no vocals."
        run: |
          [ "${#PROMPT}" -le 5000 ] || { echo "prompt too long"; exit 1; }
          jq -n --arg p "$PROMPT" '{prompt:$p}' | curl -fsS -X POST \
            https://api.sume.com/v1/music-router/generate \
            -H "Authorization: Bearer $SUME_API_KEY" \
            -H "Content-Type: application/json" \
            -H "Idempotency-Key: dispatch-${{ github.run_id }}" -d @-

Why the prompt carries the length

Sume documents that the prompt controls the structure and there is no duration parameter. A phrase such as a 30-second track is the lever. Treat the result as a take to listen to, not a guaranteed length; trim in Timeline if the video needs an exact duration.

Passing user text through an environment variable, as above, also avoids a classic mistake. Writing the input straight into a shell command lets a scene with quotes or $(...) run as code. The env: form puts the value in a variable, and jq --arg builds valid JSON.

Limits

The step returns when Sume accepts the job, not when the track exists. Add a poll step, or use webhook mode and a receiver, if the next step needs the file. Billing is a fixed $0.125 per generation, so a workflow that anyone can dispatch needs a protected environment or a restricted branch: the dispatch form is a button that spends money.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume