Skip to content

Commit 290748b

Browse files
committed
docs: vidu generation form
1 parent b2d5a4b commit 290748b

File tree

6 files changed

+329
-5
lines changed

6 files changed

+329
-5
lines changed

app/client/ViduProxy.ts

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
// app/client/ViduProxy.ts
22

3+
import {SunoEndpoint, ViduEndpoint} from "@/constant";
4+
import {api2ProviderBaseUrl} from "@/app/store";
5+
import {getRequestOptions} from "@/app/client/helper";
6+
37
export interface ViduTaskGenerationRequest {
48
input: {
59
prompts: {
10+
type: string | "text" | "image";
611
content: string;
712
enhance: boolean;
8-
type: "text"| "image";
913
}[];
1014
};
15+
type: string | "img2video";
1116
settings: {
1217
style: string;
1318
aspect_ratio: string;
1419
duration: number;
15-
model: string;
20+
model: string | "vidu-1";
1621
};
17-
type: string;
22+
}
23+
24+
export interface ViduTaskGenerationResponse {
25+
1826
}
1927

2028
export class ViduAPI {
@@ -24,5 +32,52 @@ export class ViduAPI {
2432
this.apiKey = apiKey;
2533
}
2634

35+
path(endpoint: ViduEndpoint) {
36+
return [api2ProviderBaseUrl.Vidu, endpoint].join("/");
37+
}
38+
39+
async generateViduTask(request: ViduTaskGenerationRequest, signal?: AbortSignal, timeoutMs: number = 10000) {
40+
const controller = new AbortController();
41+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
42+
const abortSignal = signal || controller.signal;
43+
44+
signal && signal.addEventListener("abort", () => controller.abort());
45+
46+
try {
47+
const res = await fetch(this.path(ViduEndpoint.GENERATION), {
48+
...getRequestOptions(this.apiKey, request),
49+
signal: abortSignal
50+
});
51+
52+
clearTimeout(timeoutId);
53+
54+
return res;
55+
} catch (e) {
56+
console.error("[ViduProxy] failed to make a vidu generate-task request", e);
57+
throw e;
58+
}
59+
}
60+
61+
async getViduTask(id: string, signal?: AbortSignal, timeoutMs: number = 10000) {
62+
const controller = new AbortController();
63+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
64+
const abortSignal = signal || controller.signal;
65+
66+
signal && signal.addEventListener("abort", () => controller.abort());
67+
68+
try {
69+
const res = await fetch(this.path(ViduEndpoint.TASK_GET).replace("{{id}}", id), {
70+
...getRequestOptions(this.apiKey,"GET"),
71+
signal: abortSignal
72+
});
73+
74+
clearTimeout(timeoutId);
75+
76+
return res;
77+
} catch (e) {
78+
console.error("[ViduProxy] failed to make a vidu get-task request", e);
79+
throw e;
80+
}
81+
}
2782

2883
}

app/home.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dynamic from "next/dynamic";
66
import {CENTER_STYLE, Path} from "@/constant";
77
import SystemLogo from "@/app/icons/logo/logo.svg";
88
import SunoIcon from "@/app/icons/suno.svg";
9+
import ViduIcon from "@/app/icons/vidu.svg";
910
import LoadingIcon from "@/app/icons/three-dots.svg";
1011
import MidjourneyIcon from "@/app/icons/midjourney.svg";
1112
import StableDiffusionIcon from "@/app/icons/stable-diffusion.svg";
@@ -78,6 +79,10 @@ const SunoPage = dynamic(async () => (await import("./pages/Suno")).SunoPage, {
7879
loading: () => <Loading logo={<SunoIcon/>}/>,
7980
});
8081

82+
const ViduPage = dynamic(async () => (await import("./pages/Vidu")).ViduPage, {
83+
loading: () => <Loading logo={<ViduIcon/>}/>,
84+
});
85+
8186
const PricingPage = dynamic(async () => (await import("./pages/Pricing")).PricingPage, {
8287
loading: () => <Loading/>,
8388
});
@@ -234,10 +239,14 @@ const App = (props: { dark: boolean, updateConfig: any }) => {
234239
name: "Suno",
235240
icon: <Icon component={SunoIcon}/>,
236241
},
242+
{
243+
path: Path.Vidu,
244+
name: "Vidu",
245+
icon: <Icon component={ViduIcon}/>,
246+
},
237247
{
238248
path: Path.Pika,
239249
name: "Pika",
240-
// icon: <VideoCameraFilled/>,
241250
icon: <Icon component={PikaIcon}/>,
242251
},
243252
{
@@ -290,6 +299,7 @@ const App = (props: { dark: boolean, updateConfig: any }) => {
290299
<Route path={Path.Midjourney} element={<MidjourneyPage/>}/>
291300
<Route path={Path.StableDiffusion} element={<StableDiffusionPage/>}/>
292301
<Route path={Path.Suno} element={<SunoPage/>}/>
302+
<Route path={Path.Vidu} element={<ViduPage/>}/>
293303
<Route path={Path.Pika} element={<PikaPage/>}/>
294304
<Route path={Path.Luma} element={<LumaPage/>}/>
295305
<Route path={Path.Doc2X} element={<Doc2XPage/>}/>

app/icons/vidu.svg

Lines changed: 6 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)