From b1db48ff3c05240e741fbf1de204ebc6c40cdcb3 Mon Sep 17 00:00:00 2001 From: BFlat Date: Thu, 5 Sep 2024 18:34:28 +0700 Subject: [PATCH] new lipsync first push dev (#694) * init new lipsync * update --- .../src/api/media_files/GetMedia.ts | 1 + .../src/api/workflows/EnqueueLipsync.ts | 31 + .../components/src/jobs/InferenceJob.ts | 1 + .../components/common/TextArea/TextArea.tsx | 8 +- .../fakeyou.com/src/v2/view/PageContainer.tsx | 9 + .../src/v2/view/pages/lipsync/GenerateTts.tsx | 306 ++++++ .../src/v2/view/pages/lipsync/Lipsync.scss | 28 + .../src/v2/view/pages/lipsync/Lipsync.tsx | 998 ++++++++++++++++++ .../view/pages/lipsync/LipsyncAudioPlayer.tsx | 36 + .../v2/view/pages/lipsync/LipsyncTokens.ts | 3 + .../lipsync/SessionLsInferenceResultsList.tsx | 244 +++++ .../pages/live_portrait/ThumbnailItem.tsx | 4 +- .../live_portrait/ThumbnailMediaPicker.tsx | 126 ++- 13 files changed, 1737 insertions(+), 58 deletions(-) create mode 100644 src/website/packages/components/src/api/workflows/EnqueueLipsync.ts create mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/lipsync/GenerateTts.tsx create mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/lipsync/Lipsync.scss create mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/lipsync/Lipsync.tsx create mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncAudioPlayer.tsx create mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncTokens.ts create mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/lipsync/SessionLsInferenceResultsList.tsx diff --git a/src/website/packages/components/src/api/media_files/GetMedia.ts b/src/website/packages/components/src/api/media_files/GetMedia.ts index d267ed1828..920b8694c6 100644 --- a/src/website/packages/components/src/api/media_files/GetMedia.ts +++ b/src/website/packages/components/src/api/media_files/GetMedia.ts @@ -46,6 +46,7 @@ export interface MediaFile { maybe_moderator_fields?: MediaFileModeratorFields; created_at: Date; updated_at: Date; + maybe_text_transcript: string | undefined; } export interface MediaFileModeratorFields { diff --git a/src/website/packages/components/src/api/workflows/EnqueueLipsync.ts b/src/website/packages/components/src/api/workflows/EnqueueLipsync.ts new file mode 100644 index 0000000000..0055621208 --- /dev/null +++ b/src/website/packages/components/src/api/workflows/EnqueueLipsync.ts @@ -0,0 +1,31 @@ +import MakeRequest from "../MakeRequest"; + +export interface MediaFileCropArea { + height: number; + width: number; + x: number; + y: number; +} +export interface EnqueueLipsyncRequest { + creator_set_visibility: "public" | "private"; + audio_media_file_token: string; + image_or_video_media_file_token: string; + maybe_crop?: MediaFileCropArea; + remove_watermark: boolean; + uuid_idempotency_token: string; +} + +export interface EnqueueLipsyncResponse { + inference_job_token?: string; + success: boolean; +} + +export const EnqueueLipsync = MakeRequest< + string, + EnqueueLipsyncRequest, + EnqueueLipsyncResponse, + {} +>({ + method: "POST", + routingFunction: () => `/v1/workflows/enqueue_lipsync`, +}); diff --git a/src/website/packages/components/src/jobs/InferenceJob.ts b/src/website/packages/components/src/jobs/InferenceJob.ts index f61359ba17..533cbc8340 100644 --- a/src/website/packages/components/src/jobs/InferenceJob.ts +++ b/src/website/packages/components/src/jobs/InferenceJob.ts @@ -19,6 +19,7 @@ export enum FrontendInferenceJobType { VideoWorkflow, // workflow ? VideoStyleTransfer, // video_filter LivePortrait, // live_portrait + Lipsync, // lip_sync } export enum AllInferenceJobs { diff --git a/src/website/packages/fakeyou.com/src/components/common/TextArea/TextArea.tsx b/src/website/packages/fakeyou.com/src/components/common/TextArea/TextArea.tsx index 8d11021de7..d882aa5eb0 100644 --- a/src/website/packages/fakeyou.com/src/components/common/TextArea/TextArea.tsx +++ b/src/website/packages/fakeyou.com/src/components/common/TextArea/TextArea.tsx @@ -7,6 +7,7 @@ interface TextAreaProps textArea?: boolean; required?: boolean; resize?: boolean; + className?: string; } export default function TextArea({ @@ -14,17 +15,20 @@ export default function TextArea({ textArea, required, resize = true, + className, ...rest }: TextAreaProps) { return ( -
+
{label && ( )}