From e8261436c7c2f34811274b6f4aedd49d24a65d4a Mon Sep 17 00:00:00 2001 From: wil Date: Tue, 6 Feb 2024 13:23:05 -0500 Subject: [PATCH 01/18] translations --- download_locales.sh | 0 .../fakeyou.com/public/locales/bn/SideNav.json | 3 ++- .../public/locales/bn/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/de/SideNav.json | 3 ++- .../public/locales/de/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/en/SideNav.json | 3 ++- .../public/locales/en/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/es/SideNav.json | 3 ++- .../public/locales/es/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/fr/SideNav.json | 3 ++- .../public/locales/fr/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/hi/SideNav.json | 3 ++- .../public/locales/hi/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/id/SideNav.json | 3 ++- .../public/locales/id/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/it/SideNav.json | 3 ++- .../public/locales/it/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/ja/SideNav.json | 3 ++- .../public/locales/ja/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/ko/SideNav.json | 3 ++- .../public/locales/ko/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/pt/SideNav.json | 3 ++- .../public/locales/pt/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/ru/SideNav.json | 3 ++- .../public/locales/ru/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/th/SideNav.json | 3 ++- .../public/locales/th/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/tr/SideNav.json | 3 ++- .../public/locales/tr/VideoWorkflow.json | 17 +++++++++++++++++ .../fakeyou.com/public/locales/vi/SideNav.json | 3 ++- .../public/locales/vi/VideoWorkflow.json | 17 +++++++++++++++++ .../public/locales/zh-Hans/SideNav.json | 3 ++- .../public/locales/zh-Hans/VideoWorkflow.json | 17 +++++++++++++++++ 33 files changed, 304 insertions(+), 16 deletions(-) mode change 100644 => 100755 download_locales.sh create mode 100644 packages/fakeyou.com/public/locales/bn/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/de/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/en/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/es/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/fr/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/hi/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/id/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/it/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/ja/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/ko/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/pt/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/ru/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/th/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/tr/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/vi/VideoWorkflow.json create mode 100644 packages/fakeyou.com/public/locales/zh-Hans/VideoWorkflow.json diff --git a/download_locales.sh b/download_locales.sh old mode 100644 new mode 100755 diff --git a/packages/fakeyou.com/public/locales/bn/SideNav.json b/packages/fakeyou.com/public/locales/bn/SideNav.json index 931c70db28..6f52b17b08 100644 --- a/packages/fakeyou.com/public/locales/bn/SideNav.json +++ b/packages/fakeyou.com/public/locales/bn/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "ফেস অ্যানিমেটর", "videoMotionCapture": "ভিডিও মোশন ক্যাপচার", "videoTitle": "ভিডিও জেনারেশন", - "videoW2l": "ভিডিও লিপ সিঙ্ক" + "videoW2l": "ভিডিও লিপ সিঙ্ক", + "videoWorkflow": "ভিডিও ওয়ার্কফ্লো" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/bn/VideoWorkflow.json b/packages/fakeyou.com/public/locales/bn/VideoWorkflow.json new file mode 100644 index 0000000000..3084489e46 --- /dev/null +++ b/packages/fakeyou.com/public/locales/bn/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "ওয়ার্কফ্লো কন্ট্রোলে এগিয়ে যান", + "process": "কর্মপ্রবাহের প্রক্রিয়া", + "select": "নির্বাচন করুন", + "upload": "ভিডিও আপলোড কর" + }, + "headings": { + "title": "ভিডিও ওয়ার্কফ্লো" + }, + "tabTitle": { + "library": "মিডিয়া থেকে বেছে নিন", + "original": "আসল", + "preview": "পূর্বরূপ", + "upload": "আপলোড করুন" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/de/SideNav.json b/packages/fakeyou.com/public/locales/de/SideNav.json index 856514e377..7084a5c57b 100644 --- a/packages/fakeyou.com/public/locales/de/SideNav.json +++ b/packages/fakeyou.com/public/locales/de/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Gesichtsanimator", "videoMotionCapture": "Video-Bewegungserfassung", "videoTitle": "Videogenerierung", - "videoW2l": "Video-Lippensynchronisation" + "videoW2l": "Video-Lippensynchronisation", + "videoWorkflow": "Video-Workflow" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/de/VideoWorkflow.json b/packages/fakeyou.com/public/locales/de/VideoWorkflow.json new file mode 100644 index 0000000000..944b1d95a5 --- /dev/null +++ b/packages/fakeyou.com/public/locales/de/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Fahren Sie mit den Workflow-Kontrollen fort", + "process": "Vom Prozess zum Workflow", + "select": "Wählen", + "upload": "Video hochladen" + }, + "headings": { + "title": "Video-Workflow" + }, + "tabTitle": { + "library": "Wählen Sie aus Medien", + "original": "Original", + "preview": "Vorschau", + "upload": "Hochladen" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/en/SideNav.json b/packages/fakeyou.com/public/locales/en/SideNav.json index a2aed1861e..22b56ba943 100644 --- a/packages/fakeyou.com/public/locales/en/SideNav.json +++ b/packages/fakeyou.com/public/locales/en/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Face Animator", "videoMotionCapture": "Video Motion Capture", "videoTitle": "Video Generation", - "videoW2l": "Video Lip Sync" + "videoW2l": "Video Lip Sync", + "videoWorkflow": "Video Workflow" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/en/VideoWorkflow.json b/packages/fakeyou.com/public/locales/en/VideoWorkflow.json new file mode 100644 index 0000000000..debc9c2cd4 --- /dev/null +++ b/packages/fakeyou.com/public/locales/en/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Proceed to Workflow Controls", + "process": "Process to Workflow", + "select": "Select", + "upload": "Upload Video" + }, + "headings": { + "title": "Video Workflow" + }, + "tabTitle": { + "library": "Choose from media", + "original": "Original", + "preview": "Preview", + "upload": "Upload" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/es/SideNav.json b/packages/fakeyou.com/public/locales/es/SideNav.json index c27f36b03b..cac92b0c52 100644 --- a/packages/fakeyou.com/public/locales/es/SideNav.json +++ b/packages/fakeyou.com/public/locales/es/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Animador de rostros", "videoMotionCapture": "Captura de movimiento de vídeo", "videoTitle": "Generación de vídeo", - "videoW2l": "Sincronización de labios de vídeo" + "videoW2l": "Sincronización de labios de vídeo", + "videoWorkflow": "Flujo de trabajo de vídeo" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/es/VideoWorkflow.json b/packages/fakeyou.com/public/locales/es/VideoWorkflow.json new file mode 100644 index 0000000000..b0353fa5eb --- /dev/null +++ b/packages/fakeyou.com/public/locales/es/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Continúe con los controles del flujo de trabajo", + "process": "Proceso al flujo de trabajo", + "select": "Seleccionar", + "upload": "Subir vídeo" + }, + "headings": { + "title": "Flujo de trabajo de vídeo" + }, + "tabTitle": { + "library": "Elige entre los medios", + "original": "Original", + "preview": "Avance", + "upload": "Subir" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/fr/SideNav.json b/packages/fakeyou.com/public/locales/fr/SideNav.json index 69c80b70fc..e808325925 100644 --- a/packages/fakeyou.com/public/locales/fr/SideNav.json +++ b/packages/fakeyou.com/public/locales/fr/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Animateur de visage", "videoMotionCapture": "Capture de mouvement vidéo", "videoTitle": "Génération vidéo", - "videoW2l": "Synchronisation labiale vidéo" + "videoW2l": "Synchronisation labiale vidéo", + "videoWorkflow": "Flux de travail vidéo" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/fr/VideoWorkflow.json b/packages/fakeyou.com/public/locales/fr/VideoWorkflow.json new file mode 100644 index 0000000000..e460a7aaf3 --- /dev/null +++ b/packages/fakeyou.com/public/locales/fr/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Passer aux contrôles de flux de travail", + "process": "Du processus au flux de travail", + "select": "Sélectionner", + "upload": "Télécharger une video" + }, + "headings": { + "title": "Flux de travail vidéo" + }, + "tabTitle": { + "library": "Choisissez parmi les médias", + "original": "Original", + "preview": "Aperçu", + "upload": "Télécharger" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/hi/SideNav.json b/packages/fakeyou.com/public/locales/hi/SideNav.json index baba657bc8..bb0039100d 100644 --- a/packages/fakeyou.com/public/locales/hi/SideNav.json +++ b/packages/fakeyou.com/public/locales/hi/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "फेस एनिमेटर", "videoMotionCapture": "वीडियो मोशन कैप्चर", "videoTitle": "वीडियो जनरेशन", - "videoW2l": "वीडियो लिप सिंक" + "videoW2l": "वीडियो लिप सिंक", + "videoWorkflow": "वीडियो वर्कफ़्लो" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/hi/VideoWorkflow.json b/packages/fakeyou.com/public/locales/hi/VideoWorkflow.json new file mode 100644 index 0000000000..d5e4a9f133 --- /dev/null +++ b/packages/fakeyou.com/public/locales/hi/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "वर्कफ़्लो नियंत्रण के लिए आगे बढ़ें", + "process": "वर्कफ़्लो की प्रक्रिया", + "select": "चुनना", + "upload": "विडियो को अॅॅपलोड करें" + }, + "headings": { + "title": "वीडियो वर्कफ़्लो" + }, + "tabTitle": { + "library": "मीडिया से चुनें", + "original": "मूल", + "preview": "पूर्व दर्शन", + "upload": "डालना" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/id/SideNav.json b/packages/fakeyou.com/public/locales/id/SideNav.json index b35c070ccd..443f264f03 100644 --- a/packages/fakeyou.com/public/locales/id/SideNav.json +++ b/packages/fakeyou.com/public/locales/id/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Animator Wajah", "videoMotionCapture": "Pengambilan Gerakan Video", "videoTitle": "Pembuatan Video", - "videoW2l": "Sinkronisasi Bibir Video" + "videoW2l": "Sinkronisasi Bibir Video", + "videoWorkflow": "Alur Kerja Video" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/id/VideoWorkflow.json b/packages/fakeyou.com/public/locales/id/VideoWorkflow.json new file mode 100644 index 0000000000..a5995a681f --- /dev/null +++ b/packages/fakeyou.com/public/locales/id/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Lanjutkan ke Kontrol Alur Kerja", + "process": "Proses ke Alur Kerja", + "select": "Pilih", + "upload": "Mengunggah video" + }, + "headings": { + "title": "Alur Kerja Video" + }, + "tabTitle": { + "library": "Pilih dari media", + "original": "Asli", + "preview": "Pratinjau", + "upload": "Mengunggah" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/it/SideNav.json b/packages/fakeyou.com/public/locales/it/SideNav.json index a5ce323f30..44c5e390f9 100644 --- a/packages/fakeyou.com/public/locales/it/SideNav.json +++ b/packages/fakeyou.com/public/locales/it/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Animatore di volti", "videoMotionCapture": "Acquisizione del movimento video", "videoTitle": "Generazione video", - "videoW2l": "Sincronizzazione labiale video" + "videoW2l": "Sincronizzazione labiale video", + "videoWorkflow": "Flusso di lavoro video" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/it/VideoWorkflow.json b/packages/fakeyou.com/public/locales/it/VideoWorkflow.json new file mode 100644 index 0000000000..4f6c43d4de --- /dev/null +++ b/packages/fakeyou.com/public/locales/it/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Procedi ai controlli del flusso di lavoro", + "process": "Dal processo al flusso di lavoro", + "select": "Selezionare", + "upload": "Carica video" + }, + "headings": { + "title": "Flusso di lavoro video" + }, + "tabTitle": { + "library": "Scegli tra i media", + "original": "Originale", + "preview": "Anteprima", + "upload": "Caricamento" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ja/SideNav.json b/packages/fakeyou.com/public/locales/ja/SideNav.json index 03d6d2be6a..886551ae26 100644 --- a/packages/fakeyou.com/public/locales/ja/SideNav.json +++ b/packages/fakeyou.com/public/locales/ja/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "フェイスアニメーター", "videoMotionCapture": "ビデオモーションキャプチャ", "videoTitle": "ビデオ生成", - "videoW2l": "ビデオリップシンク" + "videoW2l": "ビデオリップシンク", + "videoWorkflow": "ビデオワークフロー" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ja/VideoWorkflow.json b/packages/fakeyou.com/public/locales/ja/VideoWorkflow.json new file mode 100644 index 0000000000..96138a3957 --- /dev/null +++ b/packages/fakeyou.com/public/locales/ja/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "ワークフロー制御に進む", + "process": "プロセスからワークフローへ", + "select": "選択する", + "upload": "ビデオをアップロードする" + }, + "headings": { + "title": "ビデオワークフロー" + }, + "tabTitle": { + "library": "メディアから選ぶ", + "original": "オリジナル", + "preview": "プレビュー", + "upload": "アップロード" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ko/SideNav.json b/packages/fakeyou.com/public/locales/ko/SideNav.json index 11114457c0..145a01a317 100644 --- a/packages/fakeyou.com/public/locales/ko/SideNav.json +++ b/packages/fakeyou.com/public/locales/ko/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "얼굴 애니메이터", "videoMotionCapture": "비디오 모션 캡처", "videoTitle": "비디오 생성", - "videoW2l": "비디오 립싱크" + "videoW2l": "비디오 립싱크", + "videoWorkflow": "비디오 워크플로우" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ko/VideoWorkflow.json b/packages/fakeyou.com/public/locales/ko/VideoWorkflow.json new file mode 100644 index 0000000000..87779d19bc --- /dev/null +++ b/packages/fakeyou.com/public/locales/ko/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "워크플로 제어로 진행", + "process": "워크플로 프로세스", + "select": "선택하다", + "upload": "비디오 업로드" + }, + "headings": { + "title": "비디오 워크플로우" + }, + "tabTitle": { + "library": "미디어에서 선택", + "original": "원래의", + "preview": "시사", + "upload": "업로드" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/pt/SideNav.json b/packages/fakeyou.com/public/locales/pt/SideNav.json index 8b997f944c..f9ed73864d 100644 --- a/packages/fakeyou.com/public/locales/pt/SideNav.json +++ b/packages/fakeyou.com/public/locales/pt/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Animador facial", "videoMotionCapture": "Captura de movimento de vídeo", "videoTitle": "Geração de Vídeo", - "videoW2l": "Sincronização labial de vídeo" + "videoW2l": "Sincronização labial de vídeo", + "videoWorkflow": "Fluxo de trabalho de vídeo" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/pt/VideoWorkflow.json b/packages/fakeyou.com/public/locales/pt/VideoWorkflow.json new file mode 100644 index 0000000000..366f318eec --- /dev/null +++ b/packages/fakeyou.com/public/locales/pt/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Prossiga para os controles de fluxo de trabalho", + "process": "Processo para fluxo de trabalho", + "select": "Selecione", + "upload": "Envio vídeo" + }, + "headings": { + "title": "Fluxo de trabalho de vídeo" + }, + "tabTitle": { + "library": "Escolha entre mídias", + "original": "Original", + "preview": "Visualização", + "upload": "Carregar" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ru/SideNav.json b/packages/fakeyou.com/public/locales/ru/SideNav.json index aa47c7f54e..a536362e98 100644 --- a/packages/fakeyou.com/public/locales/ru/SideNav.json +++ b/packages/fakeyou.com/public/locales/ru/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Лицевой Аниматор", "videoMotionCapture": "Захват видео движения", "videoTitle": "Создание видео", - "videoW2l": "Видео синхронизация губ" + "videoW2l": "Видео синхронизация губ", + "videoWorkflow": "Видео рабочий процесс" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ru/VideoWorkflow.json b/packages/fakeyou.com/public/locales/ru/VideoWorkflow.json new file mode 100644 index 0000000000..2fa1e7dce0 --- /dev/null +++ b/packages/fakeyou.com/public/locales/ru/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Перейдите к элементам управления рабочим процессом", + "process": "От процесса к рабочему процессу", + "select": "Выбирать", + "upload": "Загрузить видео" + }, + "headings": { + "title": "Видео рабочий процесс" + }, + "tabTitle": { + "library": "Выбирайте из медиа", + "original": "Оригинал", + "preview": "Предварительный просмотр", + "upload": "Загрузить" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/th/SideNav.json b/packages/fakeyou.com/public/locales/th/SideNav.json index 2015fd7771..c956350a2f 100644 --- a/packages/fakeyou.com/public/locales/th/SideNav.json +++ b/packages/fakeyou.com/public/locales/th/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "แอนิเมชั่นใบหน้า", "videoMotionCapture": "จับภาพวิดีโอเคลื่อนไหว", "videoTitle": "การสร้างวิดีโอ", - "videoW2l": "ลิปซิงค์วิดีโอ" + "videoW2l": "ลิปซิงค์วิดีโอ", + "videoWorkflow": "เวิร์กโฟลว์วิดีโอ" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/th/VideoWorkflow.json b/packages/fakeyou.com/public/locales/th/VideoWorkflow.json new file mode 100644 index 0000000000..bbad126203 --- /dev/null +++ b/packages/fakeyou.com/public/locales/th/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "ดำเนินการควบคุมเวิร์กโฟลว์", + "process": "กระบวนการสู่เวิร์กโฟลว์", + "select": "เลือก", + "upload": "อัปโหลดวิดีโอ" + }, + "headings": { + "title": "เวิร์กโฟลว์วิดีโอ" + }, + "tabTitle": { + "library": "เลือกจากสื่อ", + "original": "ต้นฉบับ", + "preview": "ดูตัวอย่าง", + "upload": "ที่อัพโหลด" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/tr/SideNav.json b/packages/fakeyou.com/public/locales/tr/SideNav.json index 7a4f3dc9bc..d15feb166a 100644 --- a/packages/fakeyou.com/public/locales/tr/SideNav.json +++ b/packages/fakeyou.com/public/locales/tr/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "Yüz Animatörü", "videoMotionCapture": "Video Hareket Yakalama", "videoTitle": "Video Oluşturma", - "videoW2l": "Video Dudak Senkronizasyonu" + "videoW2l": "Video Dudak Senkronizasyonu", + "videoWorkflow": "Video İş Akışı" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/tr/VideoWorkflow.json b/packages/fakeyou.com/public/locales/tr/VideoWorkflow.json new file mode 100644 index 0000000000..3a4c6a771b --- /dev/null +++ b/packages/fakeyou.com/public/locales/tr/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "İş Akışı Kontrollerine Devam Edin", + "process": "İş Akışına Geçiş Süreci", + "select": "Seçme", + "upload": "Video yükle" + }, + "headings": { + "title": "Video İş Akışı" + }, + "tabTitle": { + "library": "Medya arasından seçim yapın", + "original": "Orijinal", + "preview": "Ön izleme", + "upload": "Yüklemek" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/vi/SideNav.json b/packages/fakeyou.com/public/locales/vi/SideNav.json index b91e43ef04..dda5073295 100644 --- a/packages/fakeyou.com/public/locales/vi/SideNav.json +++ b/packages/fakeyou.com/public/locales/vi/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "khuôn mặt hoạt hình", "videoMotionCapture": "Quay video chuyển động", "videoTitle": "Tạo video", - "videoW2l": "Hát nhép video" + "videoW2l": "Hát nhép video", + "videoWorkflow": "Quy trình làm việc video" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/vi/VideoWorkflow.json b/packages/fakeyou.com/public/locales/vi/VideoWorkflow.json new file mode 100644 index 0000000000..71edb8b797 --- /dev/null +++ b/packages/fakeyou.com/public/locales/vi/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "Tiến tới Kiểm soát quy trình công việc", + "process": "Quy trình đến quy trình làm việc", + "select": "Lựa chọn", + "upload": "Tải video lên" + }, + "headings": { + "title": "Quy trình làm việc video" + }, + "tabTitle": { + "library": "Chọn từ phương tiện truyền thông", + "original": "Nguyên bản", + "preview": "Xem trước", + "upload": "Tải lên" + } +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json b/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json index be66673610..8156ed2e81 100644 --- a/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json +++ b/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json @@ -20,5 +20,6 @@ "videoFaceAnimator": "脸部动画师", "videoMotionCapture": "视频动作捕捉", "videoTitle": "视频生成", - "videoW2l": "视频唇形同步" + "videoW2l": "视频唇形同步", + "videoWorkflow": "视频工作流程" } \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/zh-Hans/VideoWorkflow.json b/packages/fakeyou.com/public/locales/zh-Hans/VideoWorkflow.json new file mode 100644 index 0000000000..86f56ac702 --- /dev/null +++ b/packages/fakeyou.com/public/locales/zh-Hans/VideoWorkflow.json @@ -0,0 +1,17 @@ +{ + "button": { + "proceed": "继续工作流程控制", + "process": "流程到工作流程", + "select": "选择", + "upload": "上传视频" + }, + "headings": { + "title": "视频工作流程" + }, + "tabTitle": { + "library": "从媒体中选择", + "original": "原来的", + "preview": "预览", + "upload": "上传" + } +} \ No newline at end of file From 66ffc3127d52819736ba762a65f09aee4a091a08 Mon Sep 17 00:00:00 2001 From: wil Date: Tue, 6 Feb 2024 15:19:17 -0500 Subject: [PATCH 02/18] optimized select modal's state machine, squashed bugs on workflow's media provisions segment --- .../common/SelectModal/SelectModal.tsx | 68 +++++++++++-------- .../components/tabContentLibrary.tsx | 2 +- .../pages/video_workflow/VideoWorkflow.tsx | 2 +- .../components/pageWorkflowControls.tsx | 8 +-- .../components/tabContentLibrary.tsx | 20 ++++-- .../components/tabContentUpload.tsx | 7 +- .../inference_panels/SdInferencePanel.tsx | 8 +-- 7 files changed, 67 insertions(+), 48 deletions(-) diff --git a/packages/fakeyou.com/src/components/common/SelectModal/SelectModal.tsx b/packages/fakeyou.com/src/components/common/SelectModal/SelectModal.tsx index 87b8b2f2aa..20eb445b2e 100644 --- a/packages/fakeyou.com/src/components/common/SelectModal/SelectModal.tsx +++ b/packages/fakeyou.com/src/components/common/SelectModal/SelectModal.tsx @@ -8,22 +8,23 @@ import { faTrash } from "@fortawesome/free-solid-svg-icons"; import SelectMediaList from "./SelectMediaList"; import SelectWeightsList from "./SelectWeightsList"; +export type SelectModalData = { + token: string; + title: string; +} interface TabConfig { label: string; tabKey: string; type: "media" | "weights"; - weightTypeFilter?: string; - mediaTypeFilter?: string; + typeFilter?: string; searcher?: boolean; } interface SelectModalProps { label?: string; tabs: TabConfig[]; modalTitle?: string; - onSelect?: (data:{ - token: string, - title: string, - }) => void; + value?: SelectModalData; + onSelect?: (data: SelectModalData) => void; required?: boolean; } @@ -33,42 +34,44 @@ const SelectModal = memo( tabs, modalTitle = "Select", onSelect, + value, required, }: SelectModalProps) => { - const [isModalOpen, setIsModalOpen] = useState(false); - const initialValue = {token:"", title:""}; - const [selectedValue, setSelectedValue] = useState(initialValue); - const [activeTab, setActiveTab] = useState(tabs[0].tabKey); - const [mediaType, setMediaType] = useState( - tabs[0].mediaTypeFilter || "all" - ); - const [weightType, setWeightType] = useState( - tabs[0].weightTypeFilter || "all" - ); -console.log("🔫", tabs, activeTab, weightType); + const emptyValue = {token:"", title:""}; + const [{isModalOpen, selectedValue, valueType, activeTab}, setState] = useState({ + isModalOpen:false, + selectedValue: value ? value : emptyValue, + activeTab: tabs[0].tabKey, + valueType: tabs[0].typeFilter || "all" + }) + console.log("🔫", tabs, activeTab, valueType); + // Update mediaType when activeTab changes useEffect(() => { const currentTab = tabs.find(tab => tab.tabKey === activeTab); - setMediaType(currentTab?.mediaTypeFilter || "all"); - setWeightType(currentTab?.weightTypeFilter || "all"); + setState((curr)=>({...curr, valueType: currentTab?.typeFilter || "all"})) }, [activeTab, tabs]); const openModal = () => { - setIsModalOpen(true); + setState((curr)=>({...curr, isModalOpen: true})); }; const closeModal = () => { - setIsModalOpen(false); + setState((curr)=>({...curr, isModalOpen: false})); }; const handleRemove = () => { - setSelectedValue(initialValue); + setState((curr)=>({...curr, selectedValue: emptyValue})); + if (onSelect) onSelect(emptyValue); }; const handleOnSelect = (data:{token:string, title:string}) => { - setSelectedValue({token: data.token, title: data.title || ""}); + setState((curr)=>({ + ...curr, + selectedValue: {token: data.token, title: data.title || ""}, + isModalOpen: false + })); if (onSelect) onSelect(data); - closeModal(); } const searchTabs = tabs.map(tab => ({ @@ -78,20 +81,20 @@ console.log("🔫", tabs, activeTab, weightType); type="modal" onResultSelect={handleOnSelect} searcherKey={tab.tabKey} - weightType={tab.weightTypeFilter} + weightType={tab.typeFilter} /> ) : ( <> {tab.type === "media" && ( )} {tab.type === "weights" && ( @@ -99,7 +102,7 @@ console.log("🔫", tabs, activeTab, weightType); ), padding: true, - onClick: () => setActiveTab(tab.tabKey), + onClick: () => setState((curr)=>({...curr, activeTab: tab.tabKey})), })); return ( @@ -111,15 +114,22 @@ console.log("🔫", tabs, activeTab, weightType); )} -
+
+
+
+ }
); } diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx index 022eb3dcdc..d6f99af1d2 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/components/tabContentUpload.tsx @@ -13,7 +13,7 @@ export default function TabContentUpload({t, pageState, dispatchPageState}: { dispatchPageState: (action: Action) => void; }) { const videoProps = useFile({}); - const {NO_FILE, FILE_STAGED} = states; + const {NO_FILE, FILE_STAGED, FILE_UPLOADING} = states; const makeVideoUploadRequest = () => ({ @@ -38,7 +38,7 @@ export default function TabContentUpload({t, pageState, dispatchPageState}: { }; // contains upload inout state and controls, see docs - if (pageState.status === NO_FILE || pageState.status === FILE_STAGED) { + if (pageState.status < FILE_UPLOADING) { return ( <>
diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/videoMocapReducer.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/videoMocapReducer.tsx index 236e747404..cbe98ad488 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/videoMocapReducer.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/videoMocapReducer.tsx @@ -1,10 +1,11 @@ export enum states{ NO_FILE, + FILE_SELECTED, + FILE_SELECTED_PROCEED, FILE_STAGED, FILE_UPLOADING, FILE_UPLOADED, - FILE_SELECTED, MOCAPNET_ENQUEUEING, MOCAPNET_ENQUEUED, } @@ -20,6 +21,7 @@ export type Action = | {type: 'stagedFile'} | {type: 'clearedFile'} | {type: 'selectedFile', payload:{ mediaFileToken: string}} + | {type: 'proceedSelectedFile'} | {type: 'uploadFile'} | {type: 'uploadFileSuccess', payload:{ mediaFileToken: string}} | {type: 'enqueueMocapNet'} @@ -32,13 +34,19 @@ export function reducer (state: State, action: Action): State { case 'stagedFile': return {...state, status: states.FILE_STAGED} case 'clearedFile': - return {...state, status: states.NO_FILE} + return { + ...state, + status: states.NO_FILE, + mediaFileToken: undefined + } case 'selectedFile': return { ...state, status: states.FILE_SELECTED, mediaFileToken: action.payload.mediaFileToken } + case 'proceedSelectedFile': + return {...state, status: states.FILE_SELECTED_PROCEED } case 'uploadFile': return {...state,status: states.FILE_UPLOADING}; case 'uploadFileSuccess': diff --git a/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/tabContentLibrary.tsx b/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/tabContentLibrary.tsx index 799c9c5b67..2cfbe9e4f3 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/tabContentLibrary.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/tabContentLibrary.tsx @@ -28,21 +28,21 @@ export default function TabContentLibrary({ return (
- +
{pageState.status === states.FILE_SELECTED &&
From 34849ab4ef73a4f7c6ceba6f41ba30f7e809e959 Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 6 Feb 2024 23:26:39 -0800 Subject: [PATCH 04/18] weight card revision/type consolidation --- .../src/components/common/Label/Label.tsx | 30 ++++------- .../entities/EntityInput/EntityInput.scss | 10 ++++ .../entities/EntityInput/EntityInput.tsx | 41 +++++++++----- .../src/components/entities/EntityTypes.tsx | 3 +- .../entities/MediaList/MediaList.tsx | 6 ++- .../entities/WeightCard/WeightCard.tsx | 54 +++++++++++++++++++ .../components/entities/WeightCard/index.tsx | 1 + .../src/components/entities/index.tsx | 3 +- .../modals/MediaBrowser/MediaBrowser.tsx | 8 +-- .../providers/ModalProvider/ModalProvider.tsx | 5 +- .../hooks/useListContent/useListContent.tsx | 1 - .../EngineCompositor/EngineCompositor.scss | 10 +--- .../view/pages/dev_upload/DevMediaInput.tsx | 40 +++++++------- 13 files changed, 137 insertions(+), 75 deletions(-) create mode 100644 packages/fakeyou.com/src/components/entities/WeightCard/WeightCard.tsx create mode 100644 packages/fakeyou.com/src/components/entities/WeightCard/index.tsx diff --git a/packages/fakeyou.com/src/components/common/Label/Label.tsx b/packages/fakeyou.com/src/components/common/Label/Label.tsx index 8950320fcd..e20984c47b 100644 --- a/packages/fakeyou.com/src/components/common/Label/Label.tsx +++ b/packages/fakeyou.com/src/components/common/Label/Label.tsx @@ -14,24 +14,14 @@ export default function Label({ required, disabled, }: Props) { - return ( -
- {label ? ( - - ) : null} - {invalidReason ? ( - - {invalidReason} - - ) : null} -
- ); + return label ?
+ + { invalidReason ? ( + + {invalidReason} + + ) : null } +
: null; } diff --git a/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.scss b/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.scss index a0d864315d..72b4355d6f 100644 --- a/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.scss +++ b/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.scss @@ -106,4 +106,14 @@ label { } } + + .fy-entity-input-upload-detail { + span { + opacity: .66; + display: block; + font-size: .75rem; + line-height: 1em; + height: .75rem; + } + } } \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.tsx b/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.tsx index ec306800b6..3224678abb 100644 --- a/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.tsx +++ b/packages/fakeyou.com/src/components/entities/EntityInput/EntityInput.tsx @@ -8,7 +8,7 @@ import { FileWrapper, Label, Spinner } from "components/common"; import { EntityType, MediaFilterProp, WeightFilterProp } from "components/entities/EntityTypes"; import { useFile, useMedia, useModal, useSession } from "hooks"; import { BucketConfig } from "@storyteller/components/src/api/BucketConfig"; -import { faFileArrowUp, faGrid, faPersonWalking } from "@fortawesome/pro-solid-svg-icons"; +import { faDiagramSankey, faFile, faFileArrowUp, faGrid, faImage, faPersonWalking, faWaveform } from "@fortawesome/pro-solid-svg-icons"; import { FontAwesomeIcon as Icon } from "@fortawesome/react-fontawesome"; import { UploadMedia, UploadMediaResponse } from "@storyteller/components/src/api/media_files/UploadMedia"; import { v4 as uuidv4 } from "uuid"; @@ -17,6 +17,7 @@ import "./EntityInput.scss"; interface Props { label?: string, onChange?: any, + owner?: string, mediaType?: MediaFilterProp, aspectRatio?: "square" | "landscape" | "portrait", weightType?: WeightFilterProp, @@ -32,6 +33,7 @@ interface EmptySlideProps extends SlideProps { inputProps?: any, onSelect: any, open: any, + owner: string, user: any }; @@ -64,24 +66,37 @@ const MocapInputFull = ({ media }: SlideProps) => { ; }; -const MediaPickerEmpty = ({ entityType, filterType, media, onSelect, open, inputProps, user }: EmptySlideProps) => { +const MediaPickerEmpty = ({ entityType, filterType, media, onSelect, open, owner, inputProps, user }: EmptySlideProps) => { const browserClick = () => open({ component: MediaBrowser, - props: { entityType, filterType, onSelect, username: user?.username || "" } + props: { entityType, filterType, onSelect, owner, username: user?.username || "" } }); + const mediaIcons = () => { + switch (filterType) { + case "audio": return faWaveform; + case "image": return faImage; + case "bvh": return faPersonWalking; + default: return faFile; + } + } + return <> - +
- - <> - - Upload, click or drag here - - + { entityType === EntityType.media && + + <> + +
+ Upload, click or drag here + { filterType !== "all" && { filterType } files supported } +
+ +
}
- Choose from your media + Choose from your { ["","media","weights"][entityType] }
; @@ -94,7 +109,7 @@ const AniMod = ({ animating, className, isLeaving, render: Render, style, ...res ; -export default function EntityInput({ aspectRatio = "square", label, onChange, mediaType, weightType }: Props) { +export default function EntityInput({ aspectRatio = "square", label, onChange, owner, mediaType, weightType }: Props) { const entityType = mediaType ? EntityType.media : weightType ? EntityType.weights : EntityType.unknown; const filterType = mediaType || weightType || "all"; const { search } = useLocation(); @@ -149,7 +164,7 @@ export default function EntityInput({ aspectRatio = "square", label, onChange, m return [ , , - + ][i]; }) diff --git a/packages/fakeyou.com/src/components/entities/EntityTypes.tsx b/packages/fakeyou.com/src/components/entities/EntityTypes.tsx index 2a6e3eaddc..cb36434825 100644 --- a/packages/fakeyou.com/src/components/entities/EntityTypes.tsx +++ b/packages/fakeyou.com/src/components/entities/EntityTypes.tsx @@ -11,6 +11,7 @@ export enum MediaFilters { export enum WeightsFilters { all, hifigan_tt2, + rvc_v2, sd_1, "sd_1.5", sdxl, @@ -35,6 +36,6 @@ export const EntityFilterOptions = ( mode: EntityType, t = (v:string) => v) => { .filter(val => isNaN(Number(val))) .map((value) => { if (typeof value === "string") return { value, label: t(value) } - return { label: "", value: "" }; + return { label: "all", value: "all" }; }) : []; }; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/entities/MediaList/MediaList.tsx b/packages/fakeyou.com/src/components/entities/MediaList/MediaList.tsx index 7a0662e0d6..2a5522647f 100644 --- a/packages/fakeyou.com/src/components/entities/MediaList/MediaList.tsx +++ b/packages/fakeyou.com/src/components/entities/MediaList/MediaList.tsx @@ -2,7 +2,7 @@ import React, { useRef } from "react"; import { MediaFile } from "@storyteller/components/src/api/media_files/GetMedia"; import MasonryGrid from "components/common/MasonryGrid/MasonryGrid"; import { ImagePreview, MocapPreview, VideoPreview } from '../CardPreviews'; -import { AudioCard, OverlayCard, CardWrapper } from "components/entities"; +import { AudioCard, OverlayCard, CardWrapper, WeightCard } from "components/entities"; import { EntityType } from "components/entities/EntityTypes"; interface MediaCardsProps { @@ -33,6 +33,10 @@ const MediaCards = ({ props, type }: MediaCardsProps) => { const WeightsCards = ({ props, type }: MediaCardsProps) => { switch (type) { + case "rvc_v2": + return ; + case "tt2": + return ; default: return
Unsupported media type
; } diff --git a/packages/fakeyou.com/src/components/entities/WeightCard/WeightCard.tsx b/packages/fakeyou.com/src/components/entities/WeightCard/WeightCard.tsx new file mode 100644 index 0000000000..cc8f31cd6f --- /dev/null +++ b/packages/fakeyou.com/src/components/entities/WeightCard/WeightCard.tsx @@ -0,0 +1,54 @@ +import React from "react"; +import moment from "moment"; +import { MakeRatingsProps } from "hooks/useRatings"; +import WeightCoverImage from "components/common/WeightCoverImage"; +import CardBadge from "../CardBadge"; +import CardFooter from "../CardFooter"; +import { BucketConfig } from "@storyteller/components/src/api/BucketConfig"; + +interface Props { + data: any, + makeRatingsProps?: MakeRatingsProps, + showCover?: boolean + showCreator?: boolean +} + +export default function WeightCard({ data, makeRatingsProps, showCover = true, showCreator }: Props) { + const { cover_image, created_at, details, maybe_creator, title, token, weight_type } = data || {} + const timeCreated = moment( created_at || "").fromNow(); + const path = cover_image.maybe_cover_image_public_bucket_path || details?.maybe_weight_data?.maybe_cover_image_public_bucket_path; + const bucketConfig = new BucketConfig(); + const coverImage = bucketConfig.getCdnUrl(path, 110, 100); + + return <> +
+ {showCover && ( + + )} + +
+ + +
+
+
+ { title || details.maybe_weight_data.title} +
+

{ timeCreated }

+
+
+
+
+ + ; +}; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/entities/WeightCard/index.tsx b/packages/fakeyou.com/src/components/entities/WeightCard/index.tsx new file mode 100644 index 0000000000..51be8d0bee --- /dev/null +++ b/packages/fakeyou.com/src/components/entities/WeightCard/index.tsx @@ -0,0 +1 @@ +export { default } from "./WeightCard"; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/entities/index.tsx b/packages/fakeyou.com/src/components/entities/index.tsx index dc973c453e..043d89b296 100644 --- a/packages/fakeyou.com/src/components/entities/index.tsx +++ b/packages/fakeyou.com/src/components/entities/index.tsx @@ -3,5 +3,6 @@ import CardWrapper from "./CardWrapper"; import EntityInput from "./EntityInput"; import MediaList from "./MediaList"; import OverlayCard from "./OverlayCard"; +import WeightCard from "./WeightCard"; -export { AudioCard, CardWrapper, EntityInput, MediaList, OverlayCard }; \ No newline at end of file +export { AudioCard, CardWrapper, EntityInput, MediaList, OverlayCard, WeightCard }; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/modals/MediaBrowser/MediaBrowser.tsx b/packages/fakeyou.com/src/components/modals/MediaBrowser/MediaBrowser.tsx index 4c6eeb3ba8..37400276ae 100644 --- a/packages/fakeyou.com/src/components/modals/MediaBrowser/MediaBrowser.tsx +++ b/packages/fakeyou.com/src/components/modals/MediaBrowser/MediaBrowser.tsx @@ -20,12 +20,12 @@ interface Props { handleClose: any, mediaToken: string, onSelect?: any, + owner?: string, filterType?: MediaFilterProp | WeightFilterProp, username: string, } -export default function MediaBrowser({ entityType, filterType: inputFilter, mediaToken, handleClose = () => {}, onSelect, username }: Props) { - console.log("😎",entityType); +export default function MediaBrowser({ entityType, filterType: inputFilter, mediaToken, handleClose = () => {}, onSelect, owner, username }: Props) { const ratings = useRatings(); const [showMasonryGrid, setShowMasonryGrid] = useState(true); const [filterType, filterTypeSet] = useState(inputFilter || "all"); @@ -46,7 +46,7 @@ export default function MediaBrowser({ entityType, filterType: inputFilter, medi setShowMasonryGrid(true); }, requestList: true, - urlParam: "echelon", + urlParam: owner || username, urlUpdate: false }); @@ -74,7 +74,7 @@ export default function MediaBrowser({ entityType, filterType: inputFilter, medi return <>
-

{ ["","Media","Weights"][entityType] }

+

{ ["",`${ owner ? owner + "'s " : "" }Media`,"Weights"][entityType] }

handleClose() }}/>
diff --git a/packages/fakeyou.com/src/components/providers/ModalProvider/ModalProvider.tsx b/packages/fakeyou.com/src/components/providers/ModalProvider/ModalProvider.tsx index 4ad7b68506..e003c45a34 100644 --- a/packages/fakeyou.com/src/components/providers/ModalProvider/ModalProvider.tsx +++ b/packages/fakeyou.com/src/components/providers/ModalProvider/ModalProvider.tsx @@ -13,10 +13,7 @@ interface ModalConfig { export default function ModalProvider({ children }: Props) { const [modalState,modalStateSet] = useState(null); - const open = (cfg: ModalConfig) => { - console.log("🪬",cfg); - modalStateSet(cfg); - }; + const open = (cfg: ModalConfig) => modalStateSet(cfg); const close = () => modalStateSet(null); return diff --git a/packages/fakeyou.com/src/hooks/useListContent/useListContent.tsx b/packages/fakeyou.com/src/hooks/useListContent/useListContent.tsx index ec88d331fd..59f7369eaf 100644 --- a/packages/fakeyou.com/src/hooks/useListContent/useListContent.tsx +++ b/packages/fakeyou.com/src/hooks/useListContent/useListContent.tsx @@ -33,7 +33,6 @@ export default function useListContent({ urlParam = "", urlUpdate = true }: Props) { - console.log("💎",fetcher); const { pathname, search: locSearch } = useLocation(); const history = useHistory(); const urlQueries = new URLSearchParams(locSearch); diff --git a/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.scss b/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.scss index d5cddc989a..c10af58fbc 100644 --- a/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.scss +++ b/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.scss @@ -1,12 +1,10 @@ .fy-engine-compositor { - // margin: 1rem; padding: 1rem; .engine-compositor-container { padding: 1rem; header { - // background: blue; margin-bottom: 1.5rem; display: flex; align-items: center; @@ -14,16 +12,12 @@ width: 100%; } - h2 { margin-bottom: 0; } + h2, .fy-temp-select, .fy-input { margin-bottom: 0; } } .compositor-content { display: flex; gap: 1rem; - // padding: 1rem; - > * { - width: 100%; - // background: red; - } + > * { width: 100%; } } } \ No newline at end of file diff --git a/packages/fakeyou.com/src/v2/view/pages/dev_upload/DevMediaInput.tsx b/packages/fakeyou.com/src/v2/view/pages/dev_upload/DevMediaInput.tsx index 2d970a6a6d..4a079ab0de 100644 --- a/packages/fakeyou.com/src/v2/view/pages/dev_upload/DevMediaInput.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/dev_upload/DevMediaInput.tsx @@ -1,11 +1,7 @@ import React, { useState } from "react"; import { EntityInput } from "components/entities"; -import { Button } from "components/common"; -// import { useInferenceJobs } from "hooks"; -// import InferenceJobsList from "components/layout/InferenceJobsList"; -// import { EnqueueEngineCompositing } from "@storyteller/components/src/api/engine_compositor/EnqueueEngineCompositing"; -// import { FrontendInferenceJobType } from "@storyteller/components/src/jobs/InferenceJob"; -// import { v4 as uuidv4 } from "uuid"; +import { EntityFilterOptions, EntityType, MediaFilterProp, WeightFilterProp } from "components/entities/EntityTypes"; +import { Button, SegmentButtons, TempInput, TempSelect } from "components/common"; interface Props { value?: any; @@ -13,34 +9,34 @@ interface Props { export default function DevMediaInput({ value }: Props) { const [mediaToken,mediaTokenSet] = useState(); + const [mediaType,mediaTypeSet] = useState("all"); + const [weightType,weightTypeSet] = useState("all"); + const [entityType,entityTypeSet] = useState(EntityType.media); + const [owner,ownerSet] = useState(""); const onChange = ({ target }: any) => mediaTokenSet(target.value); - // const inferenceJobs = useInferenceJobs(FrontendInferenceJobType.EngineComposition); - // const failures = (fail = "") => { - // switch (fail) { - // default: - // return "Uknown failure"; - // } - // }; + const options = [{ label: "Media", value: EntityType.media },{ label: "Weights", value: EntityType.weights }]; + const changeFilter = ({ target }: { target: any }) => [mediaTypeSet,mediaTypeSet,weightTypeSet][entityType](target.value); return

{ [526,187].map((num = 0) => String.fromCodePoint(128000 + num)) }

+ entityTypeSet(target.value), options, value: entityType }}/> + ownerSet(target.value), placeholder: "User" }}/> +
- +
{ mediaToken }
- { - // - }
; }; \ No newline at end of file From 2abe1c1a46fdba21ffe2a13c96bea3d87fe205f1 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 7 Feb 2024 03:20:04 -0500 Subject: [PATCH 05/18] studio rollout domain check and session flag --- .../src/api/session/GetSessionInfo.ts | 3 +++ .../components/src/session/SessionWrapper.ts | 9 +++++++++ .../src/utils/StudioRolloutHostnameAllowed.ts | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 packages/components/src/utils/StudioRolloutHostnameAllowed.ts diff --git a/packages/components/src/api/session/GetSessionInfo.ts b/packages/components/src/api/session/GetSessionInfo.ts index 1b9d8ea1a8..f9bade4f3c 100644 --- a/packages/components/src/api/session/GetSessionInfo.ts +++ b/packages/components/src/api/session/GetSessionInfo.ts @@ -18,6 +18,9 @@ export interface UserInfo { display_name: string, email_gravatar_hash: string, + // Rollout feature flags + can_access_studio: boolean, + // Usage can_use_tts: boolean, can_use_w2l: boolean, diff --git a/packages/components/src/session/SessionWrapper.ts b/packages/components/src/session/SessionWrapper.ts index 0e9cc9c14e..33b8c5d2e6 100644 --- a/packages/components/src/session/SessionWrapper.ts +++ b/packages/components/src/session/SessionWrapper.ts @@ -1,4 +1,5 @@ import { GetSessionInfo, GetSessionInfoIsOk, SessionInfoSuccessResponse } from '../api/session/GetSessionInfo' +import { StudioRolloutHostnameAllowed } from '../utils/StudioRolloutHostnameAllowed'; // A lot of the APIs return null or leave values absent. // I need to pick a single strategy and stick with it. @@ -44,6 +45,14 @@ export class SessionWrapper { return this.sessionStateResponse?.logged_in || false; } + // Feature flag rollout for Storyteller Studio + // This depends on the domain name and the backend. + public canAccessStudio() : boolean { + const hostnameAllowed = StudioRolloutHostnameAllowed(); + const userAllowed = this.sessionStateResponse?.user?.can_access_studio || false; + return hostnameAllowed && userAllowed; + } + // Username is all lowercase public getUsername() : string | undefined { return this.sessionStateResponse?.user?.username; diff --git a/packages/components/src/utils/StudioRolloutHostnameAllowed.ts b/packages/components/src/utils/StudioRolloutHostnameAllowed.ts new file mode 100644 index 0000000000..e98bfd83b9 --- /dev/null +++ b/packages/components/src/utils/StudioRolloutHostnameAllowed.ts @@ -0,0 +1,19 @@ + +// Check if hostname is allowed to display studio features. +// This should allow more frequently landing against production. +export function StudioRolloutHostnameAllowed() : boolean { + const allowed = StudioRolloutHostnameCheck(); + return allowed; +} + +function StudioRolloutHostnameCheck() : boolean { + // Do not allow "production" or "staging" domains to use studio yet. + // Other domains (local development and feature branches) are allowed. + switch (window.location.hostname) { + case 'fakeyou.com': + case 'storyteller.ai': + return false; + default: + return true; + } +} From aea007086772f273bec48fcc7f313f444d7afe82 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 7 Feb 2024 03:30:07 -0500 Subject: [PATCH 06/18] block access to video mocap --- .../fakeyou.com/src/v2/view/PageContainer.tsx | 2 ++ .../v2/view/_common/StudioNotAvailable.tsx | 19 +++++++++++++++++++ .../v2/view/pages/video_mocap/VideoMocap.tsx | 9 ++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 packages/fakeyou.com/src/v2/view/_common/StudioNotAvailable.tsx diff --git a/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/packages/fakeyou.com/src/v2/view/PageContainer.tsx index 04270e9ae7..d08ce2a1c6 100644 --- a/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -824,6 +824,7 @@ class PageContainer extends React.Component< inferenceJobs: this.props.inferenceJobs, inferenceJobsByCategory: this.props.inferenceJobsByCategory, + sessionWrapper: this.props.sessionWrapper, }} /> @@ -1331,6 +1332,7 @@ class PageContainer extends React.Component< this.props.sessionSubscriptionsWrapper, inferenceJobs: this.props.inferenceJobs, inferenceJobsByCategory: this.props.inferenceJobsByCategory, + sessionWrapper: this.props.sessionWrapper, }} /> diff --git a/packages/fakeyou.com/src/v2/view/_common/StudioNotAvailable.tsx b/packages/fakeyou.com/src/v2/view/_common/StudioNotAvailable.tsx new file mode 100644 index 0000000000..2cecd47369 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/_common/StudioNotAvailable.tsx @@ -0,0 +1,19 @@ +import { DiscordLink2 } from "@storyteller/components/src/elements/DiscordLink2"; +import { Container } from "components/common"; +import PageHeader from "components/layout/PageHeader"; +import React from "react"; + +export function StudioNotAvailable() { + const subText = ( +

Please visit our to join the wait list.

+ ); + + return ( + + + + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx b/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx index 7893fec7cf..e0072e12e1 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_mocap/VideoMocap.tsx @@ -21,6 +21,8 @@ import { faPersonRays, } from "@fortawesome/pro-solid-svg-icons"; import PageHeaderWithImage from "components/layout/PageHeaderWithImage"; +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { StudioNotAvailable } from "v2/view/_common/StudioNotAvailable"; export default function VideoMotionCapture(props: { enqueueInferenceJob: ( @@ -29,8 +31,9 @@ export default function VideoMotionCapture(props: { ) => void; inferenceJobs: Array; inferenceJobsByCategory: Map>; + sessionWrapper: SessionWrapper; }) { - const { enqueueInferenceJob } = props; + const { enqueueInferenceJob, sessionWrapper } = props; const { t } = useLocalize("VideoMotionCapture"); const { NO_FILE, FILE_UPLOADING, MOCAPNET_ENQUEUED } = states; const [pageState, dispatchPageState] = useReducer(reducer, { @@ -59,6 +62,10 @@ export default function VideoMotionCapture(props: { }, [pageState, enqueueInferenceJob]); const { pathname } = useLocation(); + if (!sessionWrapper.canAccessStudio()) { + return + } + if (pathname === `/video-mocap` || pathname === `/video-mocap/`) { return ; } From 155920b7234c0eefbb3a791cfdf2b6370aaaaf97 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 7 Feb 2024 03:42:11 -0500 Subject: [PATCH 07/18] hide top-level pages without studio access --- packages/fakeyou.com/src/v2/view/PageContainer.tsx | 6 +++++- .../view/pages/EngineCompositor/EngineCompositor.tsx | 11 ++++++++--- .../vc_model_list/StorytellerStudioListPage.tsx | 5 +++++ .../v2/view/pages/text_to_image/TextToImagePage.tsx | 8 ++++++++ .../v2/view/pages/video_workflow/VideoWorkflow.tsx | 9 ++++++++- 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/packages/fakeyou.com/src/v2/view/PageContainer.tsx index d08ce2a1c6..f7631fd27a 100644 --- a/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -838,6 +838,7 @@ class PageContainer extends React.Component< inferenceJobs: this.props.inferenceJobs, inferenceJobsByCategory: this.props.inferenceJobsByCategory, + sessionWrapper: this.props.sessionWrapper, }} /> @@ -847,6 +848,7 @@ class PageContainer extends React.Component< sessionSubscriptionsWrapper={ this.props.sessionSubscriptionsWrapper } + sessionWrapper={this.props.sessionWrapper} enqueueInferenceJob={this.props.enqueueInferenceJob} /> @@ -1313,7 +1315,9 @@ class PageContainer extends React.Component< - + diff --git a/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.tsx b/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.tsx index fb9bdbd520..f3c0b2cee8 100644 --- a/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/EngineCompositor/EngineCompositor.tsx @@ -6,12 +6,15 @@ import { EnqueueEngineCompositing } from "@storyteller/components/src/api/engine import { FrontendInferenceJobType } from "@storyteller/components/src/jobs/InferenceJob"; import { v4 as uuidv4 } from "uuid"; import "./EngineCompositor.scss" +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { StudioNotAvailable } from "v2/view/_common/StudioNotAvailable"; interface Props { value?: any; + sessionWrapper: SessionWrapper; } -export default function EngineCompositor({ value }: Props) { +export default function EngineCompositor({ value, sessionWrapper }: Props) { const [mediaToken,mediaTokenSet] = useState(); const onChange = ({ target }: any) => mediaTokenSet(target.value); const inferenceJobs = useInferenceJobs(FrontendInferenceJobType.EngineComposition); @@ -23,12 +26,10 @@ export default function EngineCompositor({ value }: Props) { }) .then((res: any) => { if (res && res.success) { - console.log("🚛 success!",{ mediaToken, res }); inferenceJobs.enqueue( // I need to pass this res.inference_job_token, FrontendInferenceJobType.EngineComposition ); - } }); } @@ -40,6 +41,10 @@ export default function EngineCompositor({ value }: Props) { } }; + if (!sessionWrapper.canAccessStudio()) { + return + } + return
diff --git a/packages/fakeyou.com/src/v2/view/pages/storyteller_studio/vc_model_list/StorytellerStudioListPage.tsx b/packages/fakeyou.com/src/v2/view/pages/storyteller_studio/vc_model_list/StorytellerStudioListPage.tsx index dcf776d3f0..8b36c6c59d 100644 --- a/packages/fakeyou.com/src/v2/view/pages/storyteller_studio/vc_model_list/StorytellerStudioListPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/storyteller_studio/vc_model_list/StorytellerStudioListPage.tsx @@ -5,6 +5,7 @@ import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session import PageHeaderWithImage from "components/layout/PageHeaderWithImage"; import { Container, Panel } from "components/common"; import { faCameraMovie } from "@fortawesome/pro-solid-svg-icons"; +import { StudioNotAvailable } from "v2/view/_common/StudioNotAvailable"; interface Props { sessionWrapper: SessionWrapper; @@ -12,6 +13,10 @@ interface Props { } function StorytellerStudioListPage(props: Props) { + if (!props.sessionWrapper.canAccessStudio()) { + return + } + return ( 0; + if (!sessionWrapper.canAccessStudio()) { + return + } + return ( void; inferenceJobs: Array; inferenceJobsByCategory: Map>; + sessionWrapper: SessionWrapper; }){ - const debug=true; + const debug = true; const {t} = useLocalize("VideoWorkflow"); const { NO_FILE } = states; const [pageState, dispatchPageState] = useReducer(reducer, { @@ -44,6 +47,10 @@ export default function StorytellerFilter(props:{ } }, [pageState, enqueueInferenceJob]); + if (!props.sessionWrapper.canAccessStudio()) { + return + } + return( Date: Wed, 7 Feb 2024 03:50:11 -0500 Subject: [PATCH 08/18] disable weights views for non-Studio --- packages/fakeyou.com/src/v2/view/PageContainer.tsx | 1 + .../src/v2/view/pages/weight/WeightPage.tsx | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/packages/fakeyou.com/src/v2/view/PageContainer.tsx index f7631fd27a..e940538c04 100644 --- a/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -373,6 +373,7 @@ class PageContainer extends React.Component< render={props => ( ; ttsInferenceJobs: Array; @@ -49,6 +52,7 @@ interface WeightProps { } export default function WeightPage({ + sessionWrapper, sessionSubscriptionsWrapper, inferenceJobs, ttsInferenceJobs, @@ -100,6 +104,15 @@ export default function WeightPage({ const deleteWeight = () => remove(!!user?.can_ban_users); + switch (weight?.weight_type) { + case WeightType.SD_15: + case WeightType.SDXL: + case WeightType.LORA: + if (!sessionWrapper.canAccessStudio()) { + return + } + } + function renderWeightComponent(weight: Weight) { switch (weight.weight_category) { case WeightCategory.TTS: From 313fcc58a032f58e135bd5a0dd3334b62cd4e9a0 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 7 Feb 2024 03:58:30 -0500 Subject: [PATCH 09/18] hide team (for now) --- .../src/v2/view/pages/about/about_page/AboutPage.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx b/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx index 6380c662b8..098207b10b 100644 --- a/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx @@ -104,6 +104,9 @@ function AboutPage(props: Props) { }, ]; + // NB: just to prevent yarn lints from complaining + console.log(teamMembers.length); + return ( - + {/*

Lorem Ipsum

@@ -124,7 +127,7 @@ function AboutPage(props: Props) { pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

-
+
*/}

Our Mission

@@ -138,6 +141,7 @@ function AboutPage(props: Props) {

+ {/*

The Team

@@ -199,6 +203,7 @@ function AboutPage(props: Props) { ))}
+ */} ); } From 0b57859580b4ace6b353cab086fee5714388955f Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 7 Feb 2024 03:59:10 -0500 Subject: [PATCH 10/18] hide some staff --- .../v2/view/pages/about/about_page/AboutPage.tsx | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx b/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx index 098207b10b..8b272325ac 100644 --- a/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/about/about_page/AboutPage.tsx @@ -77,21 +77,6 @@ function AboutPage(props: Props) { role: "Growth", imageSrc: "/images/avatars/default-pfp.png", }, - { - name: "Evgenii", - role: "Gen AI Artist", - imageSrc: "/images/avatars/default-pfp.png", - }, - { - name: "Steven", - role: "Gen AI Artist", - imageSrc: "/images/avatars/default-pfp.png", - }, - { - name: "Willis", - role: "Gen AI Artist", - imageSrc: "/images/avatars/default-pfp.png", - }, { name: "Jose", role: "Data Team", From b4bf7c4c11b27d091c138a5669b7d59b76ccc82f Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 7 Feb 2024 04:06:19 -0500 Subject: [PATCH 11/18] hide sidebar links --- .../src/components/layout/SideNav/SideNav.tsx | 165 ++++++++++-------- 1 file changed, 94 insertions(+), 71 deletions(-) diff --git a/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx b/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx index b8e0fa71ad..21c182e55c 100644 --- a/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx +++ b/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx @@ -256,6 +256,96 @@ export default function SideNav({ queueStats.legacy_tts.pending_job_count + queueStats.inference.by_queue.pending_tacotron2_jobs; + let maybeVideoGeneration = <>; + + if (sessionWrapper.canAccessStudio()) { + maybeVideoGeneration = ( + <> +
  • + + + {t("videoMotionCapture")} + +
  • + +
  • + + + {t("videoWorkflow")} + +
  • + +
  • + + + Storyteller Studio + {/* {t("videoStorytellerStudio")} */} + +
  • +
  • + + + Engine Compositor + {/* {t("videoStorytellerStudio")} */} + +
  • + + ); + } + + let maybeImageGeneration = <>; + + if (sessionWrapper.canAccessStudio()) { + maybeImageGeneration = ( + <> +
  • Image Generation
  • +
  • + + + Text to Image + {/* {t("videoStorytellerStudio")} */} + +
  • +
    + + ); + } + return ( <>
    -
  • - - - {t("videoMotionCapture")} - -
  • -
  • - - - {t("videoWorkflow")} - -
  • - -
  • - - - Storyteller Studio - {/* {t("videoStorytellerStudio")} */} - -
  • -
  • - - - Engine Compositor - {/* {t("videoStorytellerStudio")} */} - -
  • -
    -
  • Image Generation
  • -
  • - - - Text to Image - {/* {t("videoStorytellerStudio")} */} - -
  • + {maybeVideoGeneration}
    + + {maybeImageGeneration} +
  • {t("communityTitle")}
  • Date: Wed, 7 Feb 2024 10:07:36 -0500 Subject: [PATCH 12/18] second attempt to making the namespace change in the inference jobs end --- packages/components/src/api/ApiConfig.ts | 4 +- .../src/api/storyteller_filter/index.ts | 7 - .../EnqueueVideoWorkflow.tsx} | 8 +- .../src/api/video_workflow/index.ts | 7 + packages/components/src/jobs/InferenceJob.ts | 2 +- packages/fakeyou.com/src/App.tsx | 2 +- .../pages/video_workflow/VideoWorkflow.tsx | 4 +- .../components/pageFilterControls.tsx | 473 ++++++++++++++++++ .../video_workflow/components/pageJobList.tsx | 6 +- .../components/pageWorkflowControls/index.tsx | 1 + .../pageWorkflowControls.tsx | 15 +- 11 files changed, 502 insertions(+), 27 deletions(-) delete mode 100644 packages/components/src/api/storyteller_filter/index.ts rename packages/components/src/api/{storyteller_filter/EnqueueStorytellerFilter.tsx => video_workflow/EnqueueVideoWorkflow.tsx} (83%) create mode 100644 packages/components/src/api/video_workflow/index.ts create mode 100644 packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageFilterControls.tsx create mode 100644 packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageWorkflowControls/index.tsx rename packages/fakeyou.com/src/v2/view/pages/video_workflow/components/{ => pageWorkflowControls}/pageWorkflowControls.tsx (97%) diff --git a/packages/components/src/api/ApiConfig.ts b/packages/components/src/api/ApiConfig.ts index 59df11f2ba..42c934ed21 100644 --- a/packages/components/src/api/ApiConfig.ts +++ b/packages/components/src/api/ApiConfig.ts @@ -496,8 +496,8 @@ class ApiConfig { return `${this.getApiOrigin()}/v1/mocap/mocapnet/create`; } - // =============== Storyteller Filter =============== - enqueueStorytellerFilter(): string { + // =============== Video Workflow =============== + enqueueVideoWorkflow(): string { return `${this.getApiOrigin()}/v1/workflow/comfy/create`; } diff --git a/packages/components/src/api/storyteller_filter/index.ts b/packages/components/src/api/storyteller_filter/index.ts deleted file mode 100644 index aebe56e156..0000000000 --- a/packages/components/src/api/storyteller_filter/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type { - EnqueueStorytellerFilterRequest, EnqueueStorytellerFilterResponse, -} from './EnqueueStorytellerFilter'; - -export { - EnqueueStorytellerFilter -} from './EnqueueStorytellerFilter'; \ No newline at end of file diff --git a/packages/components/src/api/storyteller_filter/EnqueueStorytellerFilter.tsx b/packages/components/src/api/video_workflow/EnqueueVideoWorkflow.tsx similarity index 83% rename from packages/components/src/api/storyteller_filter/EnqueueStorytellerFilter.tsx rename to packages/components/src/api/video_workflow/EnqueueVideoWorkflow.tsx index 1da9000fc3..db261cff39 100644 --- a/packages/components/src/api/storyteller_filter/EnqueueStorytellerFilter.tsx +++ b/packages/components/src/api/video_workflow/EnqueueVideoWorkflow.tsx @@ -1,6 +1,6 @@ import { ApiConfig } from "@storyteller/components"; -export interface EnqueueStorytellerFilterRequest { +export interface EnqueueVideoWorkflowRequest { "uuid_idempotency_token": string, "maybe_sd_model": string, @@ -29,16 +29,16 @@ export interface EnqueueStorytellerFilterRequest { } } -export interface EnqueueStorytellerFilterResponse { +export interface EnqueueVideoWorkflowResponse { success: boolean, inference_job_token?: string, } -export async function EnqueueStorytellerFilter(request: EnqueueStorytellerFilterRequest) : Promise +export async function EnqueueVideoWorkflow(request: EnqueueVideoWorkflowRequest) : Promise { // const endpoint = "/v1/workflow/comfy/create"; - const endpoint = new ApiConfig().enqueueStorytellerFilter(); + const endpoint = new ApiConfig().enqueueVideoWorkflow(); return await fetch(endpoint, { method: 'POST', diff --git a/packages/components/src/api/video_workflow/index.ts b/packages/components/src/api/video_workflow/index.ts new file mode 100644 index 0000000000..6c3f2ee01b --- /dev/null +++ b/packages/components/src/api/video_workflow/index.ts @@ -0,0 +1,7 @@ +export type { + EnqueueVideoWorkflowRequest, EnqueueVideoWorkflowResponse, +} from './EnqueueVideoWorkflow'; + +export { + EnqueueVideoWorkflow +} from './EnqueueVideoWorkflow'; \ No newline at end of file diff --git a/packages/components/src/jobs/InferenceJob.ts b/packages/components/src/jobs/InferenceJob.ts index 88388e07b2..4ff6ad37db 100644 --- a/packages/components/src/jobs/InferenceJob.ts +++ b/packages/components/src/jobs/InferenceJob.ts @@ -12,7 +12,7 @@ export enum FrontendInferenceJobType { VideoMotionCapture, ConvertFbxtoGltf, EngineComposition, - StorytellerFilter, + VideoWorkflow, } // NB: Many of these fields are optional despite the response payload containing them diff --git a/packages/fakeyou.com/src/App.tsx b/packages/fakeyou.com/src/App.tsx index e6b7de0e21..1eaa81b114 100644 --- a/packages/fakeyou.com/src/App.tsx +++ b/packages/fakeyou.com/src/App.tsx @@ -210,7 +210,7 @@ function initInferenceJobsByCategoryMap(): Map< inferenceJobsByCategory.set(FrontendInferenceJobType.VideoMotionCapture, []); inferenceJobsByCategory.set(FrontendInferenceJobType.ImageGeneration, []); inferenceJobsByCategory.set(FrontendInferenceJobType.ConvertFbxtoGltf, []); - inferenceJobsByCategory.set(FrontendInferenceJobType.StorytellerFilter, []) + inferenceJobsByCategory.set(FrontendInferenceJobType.VideoWorkflow, []) return inferenceJobsByCategory; } diff --git a/packages/fakeyou.com/src/v2/view/pages/video_workflow/VideoWorkflow.tsx b/packages/fakeyou.com/src/v2/view/pages/video_workflow/VideoWorkflow.tsx index 0ea447f01f..ad2c8af1db 100644 --- a/packages/fakeyou.com/src/v2/view/pages/video_workflow/VideoWorkflow.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/video_workflow/VideoWorkflow.tsx @@ -26,7 +26,7 @@ export default function StorytellerFilter(props:{ const { enqueueInferenceJob } = props; useInferenceJobs( - FrontendInferenceJobType.StorytellerFilter + FrontendInferenceJobType.VideoWorkflow ); useEffect(() => { if ( @@ -35,7 +35,7 @@ export default function StorytellerFilter(props:{ ) { enqueueInferenceJob( pageState.inferenceJobToken, - FrontendInferenceJobType.StorytellerFilter + FrontendInferenceJobType.VideoWorkflow ); dispatchPageState({ type: "enqueueFilterSuccess", diff --git a/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageFilterControls.tsx b/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageFilterControls.tsx new file mode 100644 index 0000000000..8b3f149bb3 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageFilterControls.tsx @@ -0,0 +1,473 @@ +import React, {useState} from "react"; +import { useParams, useHistory } from "react-router-dom"; +import { v4 as uuidv4 } from "uuid"; +import { faChevronRight } from "@fortawesome/pro-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useMedia } from "hooks"; + +import { BucketConfig } from "@storyteller/components/src/api/BucketConfig"; +import { EnqueueVideoWorkflow } from "@storyteller/components/src/api/video_workflow"; +import { states, Action, State } from "../videoWorkflowReducer"; +import { + Accordion, + Button, + BasicVideo, + Checkbox, + ErrorMessage, + Input, + InputSeed, + NumberSliderV2, + Panel, + SelectModal, + Spinner, + TextArea +} from "components/common"; + + +export default function PageWorkflowControls({ + t, pageState, dispatchPageState, parentPath +}: { + debug?: boolean; + t: Function; + pageState: State; + parentPath: string; + dispatchPageState: (action: Action) => void; +}) { + const { mediaToken } = useParams(); + useMedia({ + mediaToken: pageState.mediaFileToken || mediaToken, + onSuccess: (res: any) => { + dispatchPageState({ + type: 'loadFileSuccess', + payload: { + mediaFile: res, + mediaFileToken: pageState.mediaFileToken || mediaToken + } + }) + }, + }); + + const [filterState, setFilterState] = useState({ + outputPath: "vid2vid/SparseUpscaleInterp_00001.mp4", + workflowConfig: "weight_q8sz47gmfw2zx02snrbz88ns9", + seed: "", + sdModelToken: "", + loraModelToken: "", + posPrompt: "", + negPrompt: "", + firstPass: 1, + upscalePass: 0.42, + motionScale:1, + upscaleMultiplier: 1.5, + useEmptyLatent: false, + useFaceDetailer: false, + denoiseFaceDetailer: 0.45, + useLCM: false, + lcmCFG: 2, + lcmSteps: 8, + framesCap:16, + skipFrames:0, + nthFrames:2, + inputFps: 24, + interpolationMutiplier: 2, + cnTile: 0, + cnCanny: 0, + cnLinearAnime: 0, + cnLinearRealistic: 0, + cnDepth: 0, + cnOpenPose: 0, + cnPipeFace: 0, + cnSparse: 0.7, + }); + + const handleOnChange = (key: string, newValue:any,) => { + setFilterState((curr)=>({...curr, [key]: newValue})); + } + + const history = useHistory(); + const handleGenerate = ()=>{ + console.log("filterState:") + console.log(filterState) + + const request = { + "uuid_idempotency_token": uuidv4(), + "maybe_sd_model": filterState.sdModelToken, + "maybe_workflow_config": filterState.workflowConfig, + "maybe_input_file": pageState.mediaFileToken || mediaToken, + "maybe_output_path": filterState.outputPath, + "maybe_json_modifications": { + "$.510.inputs.Text": filterState.posPrompt, + "$.8.inputs.text": filterState.negPrompt, + "$.173.inputs.seed": filterState.seed, + "$.401.inputs.Value": filterState.firstPass, + "$.918.inputs.Value": filterState.motionScale, + "$.137.inputs.Value": filterState.framesCap, + "$.186.inputs.Value": filterState.skipFrames, + "$.140.inputs.Value": filterState.nthFrames, + "$.154.inputs.Value": filterState.inputFps, + "$.445.inputs.number": filterState.interpolationMutiplier, + "$.947.inputs.Value": filterState.cnTile, + "$.800.inputs.Value": filterState.cnCanny, + "$.797.inputs.Value": filterState.cnLinearAnime, + "$.796.inputs.Value": filterState.cnLinearRealistic, + "$.772.inputs.Value": filterState.cnDepth, + "$.771.inputs.Value": filterState.cnOpenPose, + "$.527.inputs.Value": filterState.cnPipeFace, + "$.403.inputs.Value": filterState.cnSparse + }, + } + EnqueueVideoWorkflow(request).then(res => { + if (res.success && res.inference_job_token) { + dispatchPageState({ + type: 'enqueueFilterSuccess', + payload: { + inferenceJobToken: res.inference_job_token + } + }) + }else{ + console.log(res); + } + }) + dispatchPageState({type: 'enqueueFilter'}) + history.push(`${parentPath}/jobs`); + } + + if (pageState.mediaFile){ + const mediaLink = new BucketConfig().getGcsUrl(pageState.mediaFile.public_bucket_path); + + if (mediaLink) + return( + <> + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + +
    + { + handleOnChange("sdModelToken", token); + }} + tabs={[ + { + label: "All Weights", + tabKey: "allWeights", + typeFilter: "sd_1.5", + searcher: true, + type: "weights", + }, + { + label: "Bookmarked", + tabKey: "bookmarkedWeights", + typeFilter: "sd_1.5", + searcher: false, + type: "weights", + }, + ]} + /> +
    +
    + { + console.log(`calling from select modal result select ${token}`); + handleOnChange("loraModelToken", token); + }} + tabs={[ + { + label: "All LoRA Weights", + tabKey: "allLoraWeights", + typeFilter: "rvc_v2", + searcher: true, + type: "weights", + }, + { + label: "Bookmarked", + tabKey: "bookmarkedLoraWeights", + typeFilter: "rvc_v2", + searcher: false, + type: "weights", + }, + ]} + /> +
    +
    +
    +