Commit
·
893530c
1
Parent(s):
70e2a28
fix typo
Browse files- src/app/main.tsx +26 -2
- src/app/server/aitube/editClapVideos.ts +1 -1
- src/app/store.ts +8 -0
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> </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 |
-
{
|
|
|
|
|
|
|
|
|
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> </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
|
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 |
}))
|