RepoReplicateReplicatepublished Sep 30, 2022seen 5d

replicate/replicate-swift

Swift

Open original ↗

Captured source

source ↗
published Sep 30, 2022seen 5dcaptured 10hhttp 200method plain

replicate/replicate-swift

Description: Swift client for Replicate

Language: Swift

License: Apache-2.0

Stars: 190

Forks: 35

Open issues: 5

Created: 2022-09-30T13:51:03Z

Pushed: 2024-09-16T09:33:51Z

Default branch: main

Fork: no

Archived: no

README:

Replicate Swift client

This is a Swift client for [Replicate]. It lets you run models from your Swift code, and do various other things on Replicate.

To learn how to use it, take a look at our guide to building a SwiftUI app with Replicate.

Usage

Grab your API token from replicate.com/account and pass it to Client(token:):

import Foundation
import Replicate

let replicate = Replicate.Client(token: )

> [!WARNING] > Don't store secrets in code or any other resources bundled with your app. > Instead, fetch them from CloudKit or another server and store them in the keychain.

You can run a model and get its output:

let output = try await replicate.run(
"stability-ai/stable-diffusion-3",
["prompt": "a 19th century portrait of a gentleman otter"]
) { prediction in
// Print the prediction status after each update
print(prediction.status)
}

print(output)
// ["https://replicate.delivery/yhqm/bh9SsjWXY3pGKJyQzYjQlsZPzcNZ4EYOeEsPjFytc5TjYeNTA/R8_SD3_00001_.webp"]

Or fetch a model by name and create a prediction against its latest version:

let model = try await replicate.getModel("stability-ai/stable-diffusion-3")
if let latestVersion = model.latestVersion {
let prompt = "a 19th century portrait of a gentleman otter"
let prediction = try await replicate.createPrediction(version: latestVersion.id,
input: ["prompt": "\(prompt)"],
wait: true)
print(prediction.id)
// "s654jhww3hrm60ch11v8t3zpkg"
print(prediction.output)
// ["https://replicate.delivery/yhqm/bh9SsjWXY3pGKJyQzYjQlsZPzcNZ4EYOeEsPjFytc5TjYeNTA/R8_SD3_00001_.webp"]
}

Some models, like tencentarc/gfpgan, receive images as inputs. To run a model that takes a file input you can pass either a URL to a publicly accessible file on the Internet or use the `uriEncoded(mimeType:) helper method to create a base64-encoded data URL from the contents of a local file.

let model = try await replicate.getModel("tencentarc/gfpgan")
if let latestVersion = model.latestVersion {
let data = try! Data(contentsOf: URL(fileURLWithPath: "/path/to/image.jpg"))
let mimeType = "image/jpeg"
let prediction = try await replicate.createPrediction(version: latestVersion.id,
input: ["img": "\(data.uriEncoded(mimeType: mimeType))"])
print(prediction.output)
// ["https://replicate.delivery/mgxm/85f53415-0dc7-4703-891f-1e6f912119ad/output.png"]
}

You can start a model and run it in the background:

let model = replicate.getModel("kvfrans/clipdraw")

let prompt = "watercolor painting of an underwater submarine"
var prediction = replicate.createPrediction(version: model.latestVersion!.id,
input: ["prompt": "\(prompt)"])
print(prediction.status)
// "starting"

try await prediction.wait(with: replicate)
print(prediction.status)
// "succeeded"

You can cancel a running prediction:

let model = replicate.getModel("kvfrans/clipdraw")

let prompt = "watercolor painting of an underwater submarine"
var prediction = replicate.createPrediction(version: model.latestVersion!.id,
input: ["prompt": "\(prompt)"])
print(prediction.status)
// "starting"

try await prediction.cancel(with: replicate)
print(prediction.status)
// "canceled"

You can list all the predictions you've run:

var predictions: [Prediction] = []
var cursor: Replicate.Client.Pagination.Cursor?
let limit = 100

repeat {
let page = try await replicate.getPredictions(cursor: cursor)
predictions.append(contentsOf: page.results)
cursor = page.next
} while predictions.count ", dependencies: [
// other dependencies
.product(name: "Replicate", package: "replicate-swift"),
]),
// other targets
]
)

[Replicate]: https://replicate.com