File size: 1,165 Bytes
3d4392e
 
0d218b1
6215321
 
 
3d4392e
6215321
 
3d4392e
6215321
3d4392e
 
 
6215321
3d4392e
6215321
 
 
 
 
 
83defd6
6215321
3d4392e
 
 
6215321
 
 
 
 
3d4392e
 
 
 
6215321
 
 
8101ed0
6215321
8101ed0
 
 
6215321
 
 
3d4392e
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
"use client"

import { ClapProject, ClapSegment } from "@aitube/clap"

import { LayerElement } from "../../core/types"

import { generateVideo } from "./generateVideo"
import { BasicVideo } from "./basic-video"
import { useStore } from "@/app/state/useStore"

export async function resolve(segment: ClapSegment, clap: ClapProject): Promise<LayerElement> {

  const { prompt } = segment

  let src: string = ""

  try {
    src = await generateVideo({
      prompt,
      width: clap.meta.width,
      height: clap.meta.height,
      token: useStore.getState().jwtToken,
      mode: "object-uri" // it's better for videos withing Chrome, apparently
    })
    // console.log(`resolveVideo: generated ${assetUrl}`)

  } catch (err) {
    console.error(`resolveVideo failed: ${err}`)
    return {
      id: segment.id,
      element: <></>
    }
  }

  // note: the latent-video class is not used for styling, but to grab the component
  // from JS when we need to segment etc
  return {
    id: segment.id,
    element: <BasicVideo
      className="latent-video object-cover h-full"
      src={src}
      playsInline
      muted
      autoPlay
      loop
    />
  }
}