jbilcke-hf HF staff commited on
Commit
893530c
1 Parent(s): 70e2a28
src/app/main.tsx CHANGED
@@ -34,12 +34,16 @@ export function Main() {
34
  const setStoryPromptDraft = useStore(s => s.setStoryPromptDraft)
35
  const setStoryPrompt = useStore(s => s.setStoryPrompt)
36
  const setStatus = useStore(s => s.setStatus)
 
 
37
  const setStoryGenerationStatus = useStore(s => s.setStoryGenerationStatus)
38
  const setVoiceGenerationStatus = useStore(s => s.setVoiceGenerationStatus)
39
  const setImageGenerationStatus = useStore(s => s.setImageGenerationStatus)
40
  const setVideoGenerationStatus = useStore(s => s.setVideoGenerationStatus)
41
  const setGeneratedClap = useStore(s => s.setGeneratedClap)
42
  const setGeneratedVideo = useStore(s => s.setGeneratedVideo)
 
 
43
 
44
  const hasPendingTasks =
45
  storyGenerationStatus === "generating" ||
@@ -61,16 +65,20 @@ export function Main() {
61
 
62
  let clap: ClapProject | undefined = undefined
63
  try {
 
64
  clap = await createClap({ prompt })
65
 
66
  if (!clap) { throw new Error(`failed to create the clap`) }
67
 
 
 
68
  console.log(`handleSubmit(): received a clap = `, clap)
69
  setGeneratedClap(clap)
70
  setStoryGenerationStatus("finished")
71
  } catch (err) {
72
  setStoryGenerationStatus("error")
73
  setStatus("error")
 
74
  return
75
  }
76
  if (!clap) {
@@ -81,6 +89,7 @@ export function Main() {
81
  console.log("handleSubmit(): TODO Julian: generate images in parallel of the dialogue using Promise.all()")
82
 
83
  try {
 
84
  setImageGenerationStatus("generating")
85
  clap = await editClapStoryboards({ clap })
86
 
@@ -92,6 +101,7 @@ export function Main() {
92
  } catch (err) {
93
  setImageGenerationStatus("error")
94
  setStatus("error")
 
95
  return
96
  }
97
  if (!clap) {
@@ -100,6 +110,7 @@ export function Main() {
100
 
101
 
102
  try {
 
103
  setVoiceGenerationStatus("generating")
104
  clap = await editClapDialogues({ clap })
105
 
@@ -111,6 +122,7 @@ export function Main() {
111
  } catch (err) {
112
  setVoiceGenerationStatus("error")
113
  setStatus("error")
 
114
  return
115
  }
116
  if (!clap) {
@@ -119,6 +131,7 @@ export function Main() {
119
 
120
  let assetUrl = ""
121
  try {
 
122
  setVideoGenerationStatus("generating")
123
  assetUrl = await exportClapToVideo({ clap })
124
 
@@ -127,6 +140,7 @@ export function Main() {
127
  } catch (err) {
128
  setVideoGenerationStatus("error")
129
  setStatus("error")
 
130
  return
131
  }
132
  if (!assetUrl) {
@@ -135,6 +149,7 @@ export function Main() {
135
 
136
  setGeneratedVideo(assetUrl)
137
  setStatus("finished")
 
138
  })
139
  }
140
 
@@ -327,6 +342,8 @@ export function Main() {
327
  : videoGenerationStatus === "generating" ? "Assembling final video.."
328
  : "Please wait.."
329
  )
 
 
330
  : <span>&nbsp;</span> // to prevent layout changes
331
  }
332
  </div>
@@ -361,7 +378,11 @@ export function Main() {
361
  w-full h-full
362
  bg-black text-white
363
  ">
364
- {generatedVideo && <video
 
 
 
 
365
  src={generatedVideo}
366
  controls
367
  autoPlay
@@ -371,7 +392,10 @@ export function Main() {
371
  className="object-cover"
372
  style={{
373
  }}
374
- />}
 
 
 
375
  </div>
376
  </DeviceFrameset>
377
  </div>
 
34
  const setStoryPromptDraft = useStore(s => s.setStoryPromptDraft)
35
  const setStoryPrompt = useStore(s => s.setStoryPrompt)
36
  const setStatus = useStore(s => s.setStatus)
37
+ const error = useStore(s => s.error)
38
+ const setError = useStore(s => s.setError)
39
  const setStoryGenerationStatus = useStore(s => s.setStoryGenerationStatus)
40
  const setVoiceGenerationStatus = useStore(s => s.setVoiceGenerationStatus)
41
  const setImageGenerationStatus = useStore(s => s.setImageGenerationStatus)
42
  const setVideoGenerationStatus = useStore(s => s.setVideoGenerationStatus)
43
  const setGeneratedClap = useStore(s => s.setGeneratedClap)
44
  const setGeneratedVideo = useStore(s => s.setGeneratedVideo)
45
+ const progress = useStore(s => s.progress)
46
+ const setProgress = useStore(s => s.setProgress)
47
 
48
  const hasPendingTasks =
49
  storyGenerationStatus === "generating" ||
 
65
 
66
  let clap: ClapProject | undefined = undefined
67
  try {
68
+ setProgress(0)
69
  clap = await createClap({ prompt })
70
 
71
  if (!clap) { throw new Error(`failed to create the clap`) }
72
 
73
+ if (clap.segments.length <= 1) { throw new Error(`failed to generate more than one segments`) }
74
+
75
  console.log(`handleSubmit(): received a clap = `, clap)
76
  setGeneratedClap(clap)
77
  setStoryGenerationStatus("finished")
78
  } catch (err) {
79
  setStoryGenerationStatus("error")
80
  setStatus("error")
81
+ setError(`${err}`)
82
  return
83
  }
84
  if (!clap) {
 
89
  console.log("handleSubmit(): TODO Julian: generate images in parallel of the dialogue using Promise.all()")
90
 
91
  try {
92
+ setProgress(5)
93
  setImageGenerationStatus("generating")
94
  clap = await editClapStoryboards({ clap })
95
 
 
101
  } catch (err) {
102
  setImageGenerationStatus("error")
103
  setStatus("error")
104
+ setError(`${err}`)
105
  return
106
  }
107
  if (!clap) {
 
110
 
111
 
112
  try {
113
+ setProgress(8)
114
  setVoiceGenerationStatus("generating")
115
  clap = await editClapDialogues({ clap })
116
 
 
122
  } catch (err) {
123
  setVoiceGenerationStatus("error")
124
  setStatus("error")
125
+ setError(`${err}`)
126
  return
127
  }
128
  if (!clap) {
 
131
 
132
  let assetUrl = ""
133
  try {
134
+ setProgress(23)
135
  setVideoGenerationStatus("generating")
136
  assetUrl = await exportClapToVideo({ clap })
137
 
 
140
  } catch (err) {
141
  setVideoGenerationStatus("error")
142
  setStatus("error")
143
+ setError(`${err}`)
144
  return
145
  }
146
  if (!assetUrl) {
 
149
 
150
  setGeneratedVideo(assetUrl)
151
  setStatus("finished")
152
+ setError("")
153
  })
154
  }
155
 
 
342
  : videoGenerationStatus === "generating" ? "Assembling final video.."
343
  : "Please wait.."
344
  )
345
+ : status === "error"
346
+ ? <span>{error || ""}</span>
347
  : <span>&nbsp;</span> // to prevent layout changes
348
  }
349
  </div>
 
378
  w-full h-full
379
  bg-black text-white
380
  ">
381
+ {isBusy ? <div className="
382
+ flex flex-col
383
+ items-center justify-center
384
+ text-2xl text-center font-bold">{progress}%</div>
385
+ : generatedVideo ? <video
386
  src={generatedVideo}
387
  controls
388
  autoPlay
 
392
  className="object-cover"
393
  style={{
394
  }}
395
+ /> : <div className="
396
+ flex flex-col
397
+ items-center justify-center
398
+ text-lg text-center"></div>}
399
  </div>
400
  </DeviceFrameset>
401
  </div>
src/app/server/aitube/editClapVideos.ts CHANGED
@@ -1,7 +1,7 @@
1
  "use server"
2
 
3
  import { ClapProject } from "@aitube/clap"
4
- import { editClapVideos as apiEditClapvideos } from "@aitube/client"
5
 
6
  import { getToken } from "./getToken"
7
 
 
1
  "use server"
2
 
3
  import { ClapProject } from "@aitube/clap"
4
+ import { editClapVideos as apiEditClapVideos } from "@aitube/client"
5
 
6
  import { getToken } from "./getToken"
7
 
src/app/store.ts CHANGED
@@ -14,6 +14,8 @@ export const useStore = create<{
14
  videoGenerationStatus: TaskStatus
15
  generatedClap?: ClapProject
16
  generatedVideo: string
 
 
17
  setStoryPromptDraft: (storyPromptDraft: string) => void
18
  setStoryPrompt: (storyPrompt: string) => void
19
  setStatus: (status: GlobalStatus) => void
@@ -23,6 +25,8 @@ export const useStore = create<{
23
  setVideoGenerationStatus: (videoGenerationStatus: TaskStatus) => void
24
  setGeneratedClap: (generatedClap?: ClapProject) => void
25
  setGeneratedVideo: (generatedVideo: string) => void
 
 
26
  }>((set, get) => ({
27
  storyPromptDraft: "Yesterday I was at my favorite pizza place and..",
28
  storyPrompt: "",
@@ -33,6 +37,8 @@ export const useStore = create<{
33
  videoGenerationStatus: "idle",
34
  generatedClap: undefined,
35
  generatedVideo: "",
 
 
36
  setStoryPromptDraft: (storyPromptDraft: string) => { set({ storyPromptDraft }) },
37
  setStoryPrompt: (storyPrompt: string) => { set({ storyPrompt }) },
38
  setStatus: (status: GlobalStatus) => { set({ status }) },
@@ -42,4 +48,6 @@ export const useStore = create<{
42
  setVideoGenerationStatus: (videoGenerationStatus: TaskStatus) => { set({ videoGenerationStatus }) },
43
  setGeneratedClap: (generatedClap?: ClapProject) => { set({ generatedClap }) },
44
  setGeneratedVideo: (generatedVideo: string) => { set({ generatedVideo }) },
 
 
45
  }))
 
14
  videoGenerationStatus: TaskStatus
15
  generatedClap?: ClapProject
16
  generatedVideo: string
17
+ progress: number
18
+ error: string
19
  setStoryPromptDraft: (storyPromptDraft: string) => void
20
  setStoryPrompt: (storyPrompt: string) => void
21
  setStatus: (status: GlobalStatus) => void
 
25
  setVideoGenerationStatus: (videoGenerationStatus: TaskStatus) => void
26
  setGeneratedClap: (generatedClap?: ClapProject) => void
27
  setGeneratedVideo: (generatedVideo: string) => void
28
+ setProgress: (progress: number) => void
29
+ setError: (error: string) => void
30
  }>((set, get) => ({
31
  storyPromptDraft: "Yesterday I was at my favorite pizza place and..",
32
  storyPrompt: "",
 
37
  videoGenerationStatus: "idle",
38
  generatedClap: undefined,
39
  generatedVideo: "",
40
+ progress: 0,
41
+ error: "",
42
  setStoryPromptDraft: (storyPromptDraft: string) => { set({ storyPromptDraft }) },
43
  setStoryPrompt: (storyPrompt: string) => { set({ storyPrompt }) },
44
  setStatus: (status: GlobalStatus) => { set({ status }) },
 
48
  setVideoGenerationStatus: (videoGenerationStatus: TaskStatus) => { set({ videoGenerationStatus }) },
49
  setGeneratedClap: (generatedClap?: ClapProject) => { set({ generatedClap }) },
50
  setGeneratedVideo: (generatedVideo: string) => { set({ generatedVideo }) },
51
+ setProgress: (progress: number) => { set({ progress }) },
52
+ setError: (error: string) => { set({ error }) },
53
  }))