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
        },
        "task_id" => {
          "required" => true
        }
      }
    }
  },
  "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