Spaces:
Sleeping
Sleeping
File size: 2,089 Bytes
1cea837 d4a1dc1 1cea837 8e3d721 f24ad59 8919651 db70195 1cea837 8919651 1cea837 f24ad59 db70195 f24ad59 1cea837 f24ad59 1cea837 f24ad59 1cea837 58b1ffb 1cea837 d4a1dc1 58b1ffb 1cea837 c1ce586 8e3d721 f24ad59 db70195 8e3d721 1cea837 6419aeb 1cea837 f24ad59 1cea837 |
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 { NextResponse, NextRequest } from "next/server"
import { ClapProject, ClapSegment, ClapSegmentCategory, newClap, parseClap, serializeClap } from "@aitube/clap"
import { processShot } from "./processShot"
import queryString from "query-string"
import { parseCompletionMode } from "@/app/api/parsers/parseCompletionMode"
import { throwIfInvalidToken } from "@/app/api/v1/auth/throwIfInvalidToken"
import { ClapCompletionMode } from "@aitube/client"
import { parseTurbo } from "@/app/api/parsers/parseTurbo"
// a helper to generate speech for a Clap
export async function POST(req: NextRequest) {
await throwIfInvalidToken(req.headers.get("Authorization"))
const qs = queryString.parseUrl(req.url || "")
const query = (qs || {}).query
const mode = parseCompletionMode(query?.c)
const turbo = parseTurbo(query?.t)
const blob = await req.blob()
const existingClap: ClapProject = await parseClap(blob)
if (!existingClap?.segments) { throw new Error(`no segment found in the provided clap!`) }
// console.log(`[api/edit/dialogues] detected ${existingClap.segments.length} segments`)
const shotsSegments: ClapSegment[] = existingClap.segments.filter(s => s.category === ClapSegmentCategory.CAMERA)
// console.log(`[api/edit/dialogues] detected ${shotsSegments.length} shots`)
if (shotsSegments.length > 32) {
throw new Error(`Error, this endpoint being synchronous, it is designed for short stories only (max 32 shots).`)
}
const newerClap = mode === ClapCompletionMode.FULL ? existingClap : newClap({
meta: existingClap.meta
})
// we process the shots in parallel (this will increase the queue size in the Gradio spaces)
await Promise.all(shotsSegments.map(shotSegment =>
processShot({
shotSegment,
existingClap,
newerClap,
mode,
turbo,
})
))
// console.log(`[api/edit/dialogues] returning the clap augmented with dialogues`)
return new NextResponse(await serializeClap(newerClap), {
status: 200,
headers: new Headers({ "content-type": "application/x-gzip" }),
})
}
|