in Diffusion/Common/Pipeline/PipelineLoader.swift [164:197]
func load(url: URL) async throws -> StableDiffusionPipelineProtocol {
let beginDate = Date()
let configuration = MLModelConfiguration()
configuration.computeUnits = computeUnits
let pipeline: StableDiffusionPipelineProtocol
if model.isXL {
if #available(macOS 14.0, iOS 17.0, *) {
pipeline = try StableDiffusionXLPipeline(resourcesAt: url,
configuration: configuration,
reduceMemory: model.reduceMemory)
} else {
throw "Stable Diffusion XL requires macOS 14"
}
} else if model.isSD3 {
if #available(macOS 14.0, iOS 17.0, *) {
pipeline = try StableDiffusion3Pipeline(resourcesAt: url,
configuration: configuration,
reduceMemory: model.reduceMemory)
} else {
throw "Stable Diffusion 3 requires macOS 14"
}
} else {
pipeline = try StableDiffusionPipeline(resourcesAt: url,
controlNet: [],
configuration: configuration,
disableSafety: false,
reduceMemory: model.reduceMemory)
}
try pipeline.loadResources()
print("Pipeline loaded in \(Date().timeIntervalSince(beginDate))")
state = .loaded
return pipeline
}