Spaces:
Build error
Build error
File size: 1,399 Bytes
6b56adc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import queryString from "query-string"
import { ClapProject, serializeClap, blobToDataUri } from "@aitube/clap"
import { aitubeApiUrl } from "@/constants/config"
import { defaultExportFormat, SupportedExportFormat } from "@/constants"
export async function exportClapToVideo({
clap,
format = defaultExportFormat,
turbo = false,
token,
}: {
clap: ClapProject
/**
* Desired output video format (defaults to "mp4")
*
* Can be either "mp4" or "webm"
*/
format?: SupportedExportFormat
turbo?: boolean
token?: string
}): Promise<string> {
if (!clap) { throw new Error(`please provide a clap`) }
// TODO use an enum instead, and check the enum object
if (format !== "mp4" && format !== "webm") { throw new Error(`please provide a valid format ("${format}" is unrecognized)`) }
const params: Record<string, any> = {}
params.f = format
if (turbo) {
params.t = "true"
}
const hasToken = typeof token === "string" && token.length > 0
const res = await fetch(`${aitubeApiUrl}export?${queryString.stringify(params)}`, {
method: "POST",
headers: {
"Content-Type": "application/x-gzip",
...hasToken && {
"Authorization": `Bearer ${token}`
}
},
body: await serializeClap(clap),
cache: "no-store",
})
const blob = await res.blob()
const dataURL = await blobToDataUri(blob)
return dataURL
} |