// Generated by Create API
// https://github.com/CreateAPI/CreateAPI

import Foundation

public struct GenParamsSpec: Codable, Equatable {
    public var artistClipId: String?
    public var artistClipIds: [String]?
    public var artistEndS: Double?
    public var artistStartS: Double?
    public var batchSize: Int?
    public var continueAt: Double?
    public var continueClipId: String?
    public var continuedAlignedPrompt: String?
    public var coverClipId: String?
    public var coverEndS: Double?
    public var coverImageS3Id: String?
    public var coverStartS: Double?
    public var creationSource: CreationSource?
    public var doPersonalizeLyrics: Bool?
    public var duration: Int?
    public var editSessionId: String?
    public var generationType: GenerationType?
    public var gptDescriptionPrompt: String?
    public var gptLang: String?
    public var gptPrompt: String?
    public var includeFutureS: Double?
    public var includeHistory: Bool?
    public var includeHistoryS: Double?
    public var infillContextEndS: Double?
    public var infillContextStartS: Double?
    public var infillDurS: Double?
    public var infillEndS: Double?
    public var infillLyrics: String?
    public var infillStartS: Double?
    public var isRegenerate: Bool
    public var isRemix: Bool?
    public var makeInstrumental: Bool
    public var metadata: AnyJSON?
    public var model: String?
    public var modelName: String?
    public var mv: String?
    public var negativeTags: String?
    public var overpaintingClipId: String?
    public var overpaintingEndS: Double?
    public var overpaintingStartS: Double?
    public var overrideFields: [OverrideField]?
    public var overrideFutureClipId: String?
    public var overrideFutureStartSeconds: Double?
    public var overrideHistoryClipId: String?
    public var overrideHistoryEndSeconds: Double?
    public var personaId: String?
    public var personaIds: [String]?
    public var personalizationUserUuid: String?
    public var playlistClipEnds: [Double]?
    public var playlistClipIds: [String]?
    public var playlistClipStarts: [Double]?
    public var playlistId: String?
    public var projectId: String?
    public var prompt: String
    public var sampleClipIds: [String]?
    public var stemConditionClipId: String?
    public var stemConditionEndS: Double?
    public var stemConditionStartS: Double?
    public var stemControlTags: String?
    public var stemTask: String?
    public var stemTypeGroupName: String?
    public var stemTypeId: Int?
    public var stream: Bool
    public var stylesLyricsClipId: String?
    public var tags: String?
    public var task: Task?
    public var title: String?
    public var titles: [String]?
    public var token: String?
    public var underpaintingClipId: String?
    public var underpaintingEndS: Double?
    public var underpaintingStartS: Double?
    public var usePersonalization: Bool?
    public var userUploadedImageIds: [String]?
    public var userUploadedImagesB64: [String]?
    public var userUploadedVideoId: String?
    public var voice: String?
    public var voiceId: String?

    public struct CreationSource: RawRepresentable, Codable, Equatable {
        public let rawValue: String

        public init(rawValue: String) {
            self.rawValue = rawValue
        }

        public static let studio = Self(rawValue: "studio")
        public static let radio = Self(rawValue: "radio")
        public static let liveRadio = Self(rawValue: "live-radio")
    }

    public struct GenerationType: RawRepresentable, Codable, Equatable {
        public let rawValue: String

        public init(rawValue: String) {
            self.rawValue = rawValue
        }

        public static let text = Self(rawValue: "TEXT")
        public static let audio = Self(rawValue: "AUDIO")
        public static let image = Self(rawValue: "IMAGE")
        public static let video = Self(rawValue: "VIDEO")
        public static let twitter = Self(rawValue: "TWITTER")
    }

    public struct OverrideField: RawRepresentable, Codable, Equatable {
        public let rawValue: String

        public init(rawValue: String) {
            self.rawValue = rawValue
        }

        public static let prompt = Self(rawValue: "prompt")
        public static let tags = Self(rawValue: "tags")
    }

    public struct Task: RawRepresentable, Codable, Equatable {
        public let rawValue: String

        public init(rawValue: String) {
            self.rawValue = rawValue
        }

        public static let extend = Self(rawValue: "extend")
        public static let uploadExtend = Self(rawValue: "upload_extend")
        public static let infill = Self(rawValue: "infill")
        public static let fixedInfill = Self(rawValue: "fixed_infill")
        public static let infillIntro = Self(rawValue: "infill_intro")
        public static let infillOutro = Self(rawValue: "infill_outro")
        public static let coverInfill = Self(rawValue: "cover_infill")
        public static let coverExtend = Self(rawValue: "cover_extend")
        public static let artistInfill = Self(rawValue: "artist_infill")
        public static let artistConsistency = Self(rawValue: "artist_consistency")
        public static let cover = Self(rawValue: "cover")
        public static let imageToSong = Self(rawValue: "image_to_song")
        public static let videoToSong = Self(rawValue: "video_to_song")
        public static let concat = Self(rawValue: "concat")
        public static let concatInfilling = Self(rawValue: "concat_infilling")
        public static let upsample = Self(rawValue: "upsample")
        public static let twitterToSong = Self(rawValue: "twitter_to_song")
        public static let artistCover = Self(rawValue: "artist_cover")
        public static let voxCover = Self(rawValue: "vox_cover")
        public static let artistExtend = Self(rawValue: "artist_extend")
        public static let artistCoverExtend = Self(rawValue: "artist_cover_extend")
        public static let vox = Self(rawValue: "vox")
        public static let stem = Self(rawValue: "stem")
        public static let genStem = Self(rawValue: "gen_stem")
        public static let generate = Self(rawValue: "generate")
        public static let nonauthPreview = Self(rawValue: "nonauth_preview")
        public static let multiArtistConsistency = Self(rawValue: "multi_artist_consistency")
        public static let playlistCondition = Self(rawValue: "playlist_condition")
        public static let underpainting = Self(rawValue: "underpainting")
        public static let overpainting = Self(rawValue: "overpainting")
        public static let stemCondition = Self(rawValue: "stem_condition")
        public static let coverStemCondition = Self(rawValue: "cover_stem_condition")
        public static let artistStemCondition = Self(rawValue: "artist_stem_condition")
        public static let stemInfill = Self(rawValue: "stem_infill")
        public static let stemConditionInfill = Self(rawValue: "stem_condition_infill")
        public static let voxPlaylistCondition = Self(rawValue: "vox_playlist_condition")
        public static let sampleCondition = Self(rawValue: "sample_condition")
        public static let empty = Self(rawValue: "")
    }

    public init(artistClipId: String? = nil, artistClipIds: [String]? = nil, artistEndS: Double? = nil, artistStartS: Double? = nil, batchSize: Int? = nil, continueAt: Double? = nil, continueClipId: String? = nil, continuedAlignedPrompt: String? = nil, coverClipId: String? = nil, coverEndS: Double? = nil, coverImageS3Id: String? = nil, coverStartS: Double? = nil, creationSource: CreationSource? = nil, doPersonalizeLyrics: Bool? = nil, duration: Int? = nil, editSessionId: String? = nil, generationType: GenerationType? = nil, gptDescriptionPrompt: String? = nil, gptLang: String? = nil, gptPrompt: String? = nil, includeFutureS: Double? = nil, includeHistory: Bool? = nil, includeHistoryS: Double? = nil, infillContextEndS: Double? = nil, infillContextStartS: Double? = nil, infillDurS: Double? = nil, infillEndS: Double? = nil, infillLyrics: String? = nil, infillStartS: Double? = nil, isRegenerate: Bool? = nil, isRemix: Bool? = nil, makeInstrumental: Bool? = nil, metadata: AnyJSON? = nil, model: String? = nil, modelName: String? = nil, mv: String? = nil, negativeTags: String? = nil, overpaintingClipId: String? = nil, overpaintingEndS: Double? = nil, overpaintingStartS: Double? = nil, overrideFields: [OverrideField]? = nil, overrideFutureClipId: String? = nil, overrideFutureStartSeconds: Double? = nil, overrideHistoryClipId: String? = nil, overrideHistoryEndSeconds: Double? = nil, personaId: String? = nil, personaIds: [String]? = nil, personalizationUserUuid: String? = nil, playlistClipEnds: [Double]? = nil, playlistClipIds: [String]? = nil, playlistClipStarts: [Double]? = nil, playlistId: String? = nil, projectId: String? = nil, prompt: String, sampleClipIds: [String]? = nil, stemConditionClipId: String? = nil, stemConditionEndS: Double? = nil, stemConditionStartS: Double? = nil, stemControlTags: String? = nil, stemTask: String? = nil, stemTypeGroupName: String? = nil, stemTypeId: Int? = nil, stream: Bool? = nil, stylesLyricsClipId: String? = nil, tags: String? = nil, task: Task? = nil, title: String? = nil, titles: [String]? = nil, token: String? = nil, underpaintingClipId: String? = nil, underpaintingEndS: Double? = nil, underpaintingStartS: Double? = nil, usePersonalization: Bool? = nil, userUploadedImageIds: [String]? = nil, userUploadedImagesB64: [String]? = nil, userUploadedVideoId: String? = nil, voice: String? = nil, voiceId: String? = nil) {
        self.artistClipId = artistClipId
        self.artistClipIds = artistClipIds
        self.artistEndS = artistEndS
        self.artistStartS = artistStartS
        self.batchSize = batchSize
        self.continueAt = continueAt
        self.continueClipId = continueClipId
        self.continuedAlignedPrompt = continuedAlignedPrompt
        self.coverClipId = coverClipId
        self.coverEndS = coverEndS
        self.coverImageS3Id = coverImageS3Id
        self.coverStartS = coverStartS
        self.creationSource = creationSource
        self.doPersonalizeLyrics = doPersonalizeLyrics
        self.duration = duration
        self.editSessionId = editSessionId
        self.generationType = generationType
        self.gptDescriptionPrompt = gptDescriptionPrompt
        self.gptLang = gptLang
        self.gptPrompt = gptPrompt
        self.includeFutureS = includeFutureS
        self.includeHistory = includeHistory
        self.includeHistoryS = includeHistoryS
        self.infillContextEndS = infillContextEndS
        self.infillContextStartS = infillContextStartS
        self.infillDurS = infillDurS
        self.infillEndS = infillEndS
        self.infillLyrics = infillLyrics
        self.infillStartS = infillStartS
        self.isRegenerate = isRegenerate ?? false
        self.isRemix = isRemix
        self.makeInstrumental = makeInstrumental ?? false
        self.metadata = metadata
        self.model = model
        self.modelName = modelName
        self.mv = mv
        self.negativeTags = negativeTags
        self.overpaintingClipId = overpaintingClipId
        self.overpaintingEndS = overpaintingEndS
        self.overpaintingStartS = overpaintingStartS
        self.overrideFields = overrideFields
        self.overrideFutureClipId = overrideFutureClipId
        self.overrideFutureStartSeconds = overrideFutureStartSeconds
        self.overrideHistoryClipId = overrideHistoryClipId
        self.overrideHistoryEndSeconds = overrideHistoryEndSeconds
        self.personaId = personaId
        self.personaIds = personaIds
        self.personalizationUserUuid = personalizationUserUuid
        self.playlistClipEnds = playlistClipEnds
        self.playlistClipIds = playlistClipIds
        self.playlistClipStarts = playlistClipStarts
        self.playlistId = playlistId
        self.projectId = projectId
        self.prompt = prompt
        self.sampleClipIds = sampleClipIds
        self.stemConditionClipId = stemConditionClipId
        self.stemConditionEndS = stemConditionEndS
        self.stemConditionStartS = stemConditionStartS
        self.stemControlTags = stemControlTags
        self.stemTask = stemTask
        self.stemTypeGroupName = stemTypeGroupName
        self.stemTypeId = stemTypeId
        self.stream = stream ?? false
        self.stylesLyricsClipId = stylesLyricsClipId
        self.tags = tags
        self.task = task
        self.title = title
        self.titles = titles
        self.token = token
        self.underpaintingClipId = underpaintingClipId
        self.underpaintingEndS = underpaintingEndS
        self.underpaintingStartS = underpaintingStartS
        self.usePersonalization = usePersonalization
        self.userUploadedImageIds = userUploadedImageIds
        self.userUploadedImagesB64 = userUploadedImagesB64
        self.userUploadedVideoId = userUploadedVideoId
        self.voice = voice
        self.voiceId = voiceId
    }
}
