Module: RunApi::Suno

Defined in:
lib/runapi/suno.rb,
lib/runapi/suno/types.rb,
lib/runapi/suno/client.rb,
lib/runapi/suno/validators.rb,
lib/runapi/suno/contract_gen.rb,
lib/runapi/suno/resources/add_vocals.rb,
lib/runapi/suno/resources/boost_style.rb,
lib/runapi/suno/resources/check_voice.rb,
lib/runapi/suno/resources/cover_audio.rb,
lib/runapi/suno/resources/extend_music.rb,
lib/runapi/suno/resources/convert_audio.rb,
lib/runapi/suno/resources/create_mashup.rb,
lib/runapi/suno/resources/generate_midi.rb,
lib/runapi/suno/resources/text_to_music.rb,
lib/runapi/suno/resources/text_to_sound.rb,
lib/runapi/suno/resources/generate_voice.rb,
lib/runapi/suno/resources/generate_lyrics.rb,
lib/runapi/suno/resources/replace_section.rb,
lib/runapi/suno/resources/visualize_music.rb,
lib/runapi/suno/resources/add_instrumental.rb,
lib/runapi/suno/resources/generate_artwork.rb,
lib/runapi/suno/resources/generate_persona.rb,
lib/runapi/suno/resources/separate_audio_stems.rb,
lib/runapi/suno/resources/get_timestamped_lyrics.rb,
lib/runapi/suno/resources/voice_to_validation_phrase.rb,
lib/runapi/suno/resources/regenerate_validation_phrase.rb

Defined Under Namespace

Modules: Resources, Types, Validators Classes: Client

Constant Summary collapse

AuthenticationError =
RunApi::Core::AuthenticationError
RateLimitError =
RunApi::Core::RateLimitError
InsufficientCreditsError =
RunApi::Core::InsufficientCreditsError
ValidationError =
RunApi::Core::ValidationError
NotFoundError =
RunApi::Core::NotFoundError
TaskFailedError =
RunApi::Core::TaskFailedError
TaskTimeoutError =
RunApi::Core::TaskTimeoutError
CONTRACT =
{
  "add-instrumental" => {
    "models" => ["suno-v4.5-plus", "suno-v5", "suno-v5.5"],
    "fields_by_model" => {
      "suno-v4.5-plus" => {
        "model" => {
          "required" => true
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v5" => {
        "model" => {
          "required" => true
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v5.5" => {
        "model" => {
          "required" => true
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      }
    }
  },
  "add-vocals" => {
    "models" => ["suno-v4.5-plus", "suno-v5"],
    "fields_by_model" => {
      "suno-v4.5-plus" => {
        "lyrics" => {
          "required" => true
        },
        "model" => {
          "required" => true
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v5" => {
        "lyrics" => {
          "required" => true
        },
        "model" => {
          "required" => true
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      }
    }
  },
  "boost-style" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "check-voice" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "task_id" => {
          "required" => true
        }
      }
    }
  },
  "convert-audio" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "cover-audio" => {
    "models" => ["suno-v4", "suno-v4.5", "suno-v4.5-all", "suno-v4.5-plus", "suno-v5", "suno-v5.5"],
    "fields_by_model" => {
      "suno-v4" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5-all" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5-plus" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v5" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v5.5" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      }
    },
    "rules" => [{
      "when" => {
        "vocal_mode" => "auto_lyrics"
      },
      "required" => ["prompt"],
      "forbidden" => ["lyrics", "style", "title"]
    }, {
      "when" => {
        "vocal_mode" => "exact_lyrics"
      },
      "required" => ["lyrics", "style", "title"],
      "forbidden" => ["prompt"]
    }, {
      "when" => {
        "vocal_mode" => "instrumental"
      },
      "required" => ["style", "title"],
      "forbidden" => ["prompt", "lyrics"]
    }]
  },
  "create-mashup" => {
    "models" => ["suno-v4", "suno-v4.5", "suno-v4.5-all", "suno-v4.5-plus", "suno-v5", "suno-v5.5"],
    "fields_by_model" => {
      "suno-v4" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url_list" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url_list" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5-all" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url_list" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5-plus" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url_list" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v5" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url_list" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v5.5" => {
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "upload_url_list" => {
          "required" => true
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      }
    },
    "rules" => [{
      "when" => {
        "vocal_mode" => "auto_lyrics"
      },
      "required" => ["prompt"],
      "forbidden" => ["lyrics", "style", "title"]
    }, {
      "when" => {
        "vocal_mode" => "exact_lyrics"
      },
      "required" => ["lyrics", "style", "title"],
      "forbidden" => ["prompt"]
    }, {
      "when" => {
        "vocal_mode" => "instrumental"
      },
      "required" => ["style", "title"],
      "forbidden" => ["prompt", "lyrics"]
    }]
  },
  "extend-music" => {
    "models" => ["suno-v4", "suno-v4.5", "suno-v4.5-all", "suno-v4.5-plus", "suno-v5", "suno-v5.5"],
    "fields_by_model" => {
      "suno-v4" => {
        "model" => {
          "required" => true
        },
        "parameter_mode" => {
          "enum" => ["source", "custom"]
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v4.5" => {
        "model" => {
          "required" => true
        },
        "parameter_mode" => {
          "enum" => ["source", "custom"]
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v4.5-all" => {
        "model" => {
          "required" => true
        },
        "parameter_mode" => {
          "enum" => ["source", "custom"]
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v4.5-plus" => {
        "model" => {
          "required" => true
        },
        "parameter_mode" => {
          "enum" => ["source", "custom"]
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v5" => {
        "model" => {
          "required" => true
        },
        "parameter_mode" => {
          "enum" => ["source", "custom"]
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      },
      "suno-v5.5" => {
        "model" => {
          "required" => true
        },
        "parameter_mode" => {
          "enum" => ["source", "custom"]
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        }
      }
    }
  },
  "generate-artwork" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "task_id" => {
          "required" => true
        }
      }
    }
  },
  "generate-lyrics" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "generate-midi" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "generate-persona" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "generate-voice" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "singer_skill_level" => {
          "enum" => ["beginner", "intermediate", "advanced", "professional"]
        },
        "task_id" => {
          "required" => true
        },
        "verify_url" => {
          "required" => true
        }
      }
    }
  },
  "get-timestamped-lyrics" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "regenerate-validation-phrase" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "task_id" => {
          "required" => true
        }
      }
    }
  },
  "replace-section" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "full_lyrics" => {
          "required" => true
        },
        "infill_end_time" => {
          "required" => true
        },
        "infill_start_time" => {
          "required" => true
        },
        "lyrics" => {
          "required" => true
        },
        "model" => {
          "enum" => ["suno-v4", "suno-v4.5", "suno-v4.5-all", "suno-v4.5-plus", "suno-v5", "suno-v5.5"]
        },
        "tags" => {
          "required" => true
        },
        "title" => {
          "required" => true
        }
      }
    }
  },
  "separate-audio-stems" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "audio_id" => {
          "required" => true
        },
        "stem_name" => {
          "enum" => ["Lead Vocal", "Drum Kit", "Kick", "Snare", "Risers", "Bass", "Backing Vocals", "Piano", "Electric Guitar", "Percussion", "String Section", "Synth", "Acoustic Guitar", "Sound Effects", "Synth Pad", "Synth Bass", "Guitar", "Brass Section", "Organ", "Electronic Drum Kit", "Lead Electric Guitar", "Synth Keys", "Rhythm Electric Guitar", "Electric Piano", "Upright Bass", "Keyboards", "Distorted Electric Guitar", "Synth Strings", "Synth Lead", "Woodwinds", "Rhythm Acoustic Guitar", "Flute", "Harp", "Tambourine", "Trumpet", "Arpeggiator", "Accordion", "Fiddle", "Pedal Steel Guitar", "Synth Voice", "Violin", "Digital Piano", "Synth Brass", "Mandolin", "Choir", "Banjo", "Bells", "Clarinet", "Tenor Saxophone", "Trombone", "Shaker", "French Horn", "Glockenspiel", "Electric Bass", "Cello", "Timpani", "Harmonica", "Marimba", "Vibraphone", "Lap Steel Guitar", "Saxophone", "Orchestra", "Horns", "Cymbals", "Hand Clap", "Oboe", "Celesta", "Congas", "Drone", "Alto Saxophone", "Double Bass", "Ukulele", "Harpsichord", "Baritone Saxophone", "Xylophone", "Tuba", "Bass Guitar", "Whistle", "Lead Guitar", "Rhodes", "808", "Bongos", "Bassoon", "Cowbell", "Viola", "Sitar", "Steel Drums", "Piccolo", "Theremin", "Bagpipes", "Hi-Hat", "Music Box", "Melodica", "Tabla", "Koto", "Djembe", "Taiko", "Didgeridoo"]
        },
        "task_id" => {
          "required" => true
        },
        "type" => {
          "enum" => ["separate_vocal", "split_stem", "split_stem_advanced"]
        }
      }
    },
    "rules" => [{
      "when" => {
        "type" => "split_stem_advanced"
      },
      "required" => ["stem_name"]
    }]
  },
  "text-to-music" => {
    "models" => ["suno-v4", "suno-v4.5", "suno-v4.5-all", "suno-v4.5-plus", "suno-v5", "suno-v5.5"],
    "fields_by_model" => {
      "suno-v4" => {
        "duration_seconds" => {
          "type" => "integer"
        },
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5" => {
        "duration_seconds" => {
          "type" => "integer"
        },
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5-all" => {
        "duration_seconds" => {
          "type" => "integer"
        },
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v4.5-plus" => {
        "duration_seconds" => {
          "type" => "integer"
        },
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v5" => {
        "duration_seconds" => {
          "type" => "integer"
        },
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      },
      "suno-v5.5" => {
        "duration_seconds" => {
          "type" => "integer"
        },
        "model" => {
          "required" => true
        },
        "persona_type" => {
          "enum" => ["style", "voice"]
        },
        "vocal_gender" => {
          "enum" => ["male", "female"]
        },
        "vocal_mode" => {
          "enum" => ["auto_lyrics", "exact_lyrics", "instrumental"],
          "required" => true
        }
      }
    },
    "rules" => [{
      "when" => {
        "vocal_mode" => "auto_lyrics"
      },
      "required" => ["prompt"],
      "forbidden" => ["lyrics", "style", "title"]
    }, {
      "when" => {
        "vocal_mode" => "exact_lyrics"
      },
      "required" => ["lyrics", "style", "title"],
      "forbidden" => ["prompt"]
    }, {
      "when" => {
        "vocal_mode" => "instrumental"
      },
      "required" => ["style", "title"],
      "forbidden" => ["prompt", "lyrics"]
    }]
  },
  "text-to-sound" => {
    "models" => ["suno-v5", "suno-v5.5"],
    "fields_by_model" => {
      "suno-v5" => {
        "model" => {
          "required" => true
        },
        "prompt" => {
          "required" => true
        },
        "sound_key" => {
          "enum" => ["Cm", "C#m", "Dm", "D#m", "Em", "Fm", "F#m", "Gm", "G#m", "Am", "A#m", "Bm", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
        },
        "sound_tempo" => {
          "type" => "integer"
        }
      },
      "suno-v5.5" => {
        "model" => {
          "required" => true
        },
        "prompt" => {
          "required" => true
        },
        "sound_key" => {
          "enum" => ["Cm", "C#m", "Dm", "D#m", "Em", "Fm", "F#m", "Gm", "G#m", "Am", "A#m", "Bm", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
        },
        "sound_tempo" => {
          "type" => "integer"
        }
      }
    }
  },
  "visualize-music" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {}
    }
  },
  "voice-to-validation-phrase" => {
    "models" => [],
    "fields_by_model" => {
      "_" => {
        "language" => {
          "enum" => ["en", "zh", "es", "fr", "pt", "de", "ja", "ko", "hi", "ru"]
        },
        "vocal_end_seconds" => {
          "required" => true,
          "type" => "integer"
        },
        "vocal_start_seconds" => {
          "required" => true,
          "type" => "integer"
        }
      }
    }
  }
}.freeze