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

import Foundation

public struct UpsampleParamsSpec: Codable, Equatable {
    public var batchSize: Int?
    public var clarity: Double?
    public var clipId: String?
    public var coverImageS3Id: String?
    public var creationSource: CreationSource?
    public var diffusionContextCfg: Double?
    public var diffusionSteps: Int?
    public var diffusionTextCfg: Double?
    public var freedom: Double?
    public var gptDescriptionPrompt: String?
    public var gptLang: String?
    public var gptPrompt: String?
    public var makeInstrumental: Bool?
    public var metadata: AnyJSON?
    public var modelName: String?
    public var prompt: String?
    public var stereoWidth: Double?
    public var stream: Bool
    public var strength: Double?
    public var tags: String?
    public var task: Task?
    public var title: String?
    public var tone: Double?
    public var variationCategory: VariationCategory?
    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 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 struct VariationCategory: RawRepresentable, Codable, Equatable {
        public let rawValue: String

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

        public static let subtle = Self(rawValue: "subtle")
        public static let normal = Self(rawValue: "normal")
        public static let high = Self(rawValue: "high")
    }

    public init(batchSize: Int? = nil, clarity: Double? = nil, clipId: String? = nil, coverImageS3Id: String? = nil, creationSource: CreationSource? = nil, diffusionContextCfg: Double? = nil, diffusionSteps: Int? = nil, diffusionTextCfg: Double? = nil, freedom: Double? = nil, gptDescriptionPrompt: String? = nil, gptLang: String? = nil, gptPrompt: String? = nil, makeInstrumental: Bool? = nil, metadata: AnyJSON? = nil, modelName: String? = nil, prompt: String? = nil, stereoWidth: Double? = nil, stream: Bool? = nil, strength: Double? = nil, tags: String? = nil, task: Task? = nil, title: String? = nil, tone: Double? = nil, variationCategory: VariationCategory? = nil, voice: String? = nil, voiceId: String? = nil) {
        self.batchSize = batchSize
        self.clarity = clarity
        self.clipId = clipId
        self.coverImageS3Id = coverImageS3Id
        self.creationSource = creationSource
        self.diffusionContextCfg = diffusionContextCfg
        self.diffusionSteps = diffusionSteps
        self.diffusionTextCfg = diffusionTextCfg
        self.freedom = freedom
        self.gptDescriptionPrompt = gptDescriptionPrompt
        self.gptLang = gptLang
        self.gptPrompt = gptPrompt
        self.makeInstrumental = makeInstrumental
        self.metadata = metadata
        self.modelName = modelName
        self.prompt = prompt
        self.stereoWidth = stereoWidth
        self.stream = stream ?? false
        self.strength = strength
        self.tags = tags
        self.task = task
        self.title = title
        self.tone = tone
        self.variationCategory = variationCategory
        self.voice = voice
        self.voiceId = voiceId
    }
}
