From 6bdeb8429f21cf4c8f9edf0b7d10e5d7c654d51a Mon Sep 17 00:00:00 2001 From: olivicmic Date: Mon, 2 Oct 2023 13:15:50 -0700 Subject: [PATCH 1/5] added face animator example added with useVideo hook --- .../videos/face-animator-instruction-en.mp4 | Bin 0 -> 107641 bytes packages/fakeyou.com/src/hooks/index.tsx | 3 +- .../fakeyou.com/src/hooks/useVideo/index.ts | 1 + .../src/hooks/useVideo/useVideo.tsx | 23 ++++++ .../lipsync/LipsyncEditor/LipsyncEditor.scss | 46 +++++++++++ .../lipsync/LipsyncEditor/LipsyncEditor.tsx | 75 +++++++++++------- 6 files changed, 117 insertions(+), 31 deletions(-) create mode 100644 packages/fakeyou.com/public/videos/face-animator-instruction-en.mp4 create mode 100644 packages/fakeyou.com/src/hooks/useVideo/index.ts create mode 100644 packages/fakeyou.com/src/hooks/useVideo/useVideo.tsx diff --git a/packages/fakeyou.com/public/videos/face-animator-instruction-en.mp4 b/packages/fakeyou.com/public/videos/face-animator-instruction-en.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..9b839fe748e3a7cca64352f0bca97dc8c76f014d GIT binary patch literal 107641 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%0A!s=tS}J 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 Hf0+IYjZtQH literal 0 HcmV?d00001 diff --git a/packages/fakeyou.com/src/hooks/index.tsx b/packages/fakeyou.com/src/hooks/index.tsx index 142e5b804d..180f81aab4 100644 --- a/packages/fakeyou.com/src/hooks/index.tsx +++ b/packages/fakeyou.com/src/hooks/index.tsx @@ -3,5 +3,6 @@ import useHover from './useHover'; import useId from './useId'; import useIdempotency from './useIdempotency'; import useLocalize from './useLocalize'; +import useVideo from './useVideo'; -export { useFile, useHover, useId, useIdempotency, useLocalize }; +export { useFile, useHover, useId, useIdempotency, useLocalize, useVideo }; diff --git a/packages/fakeyou.com/src/hooks/useVideo/index.ts b/packages/fakeyou.com/src/hooks/useVideo/index.ts new file mode 100644 index 0000000000..9eb5a944ae --- /dev/null +++ b/packages/fakeyou.com/src/hooks/useVideo/index.ts @@ -0,0 +1 @@ +export { default } from './useVideo'; \ No newline at end of file diff --git a/packages/fakeyou.com/src/hooks/useVideo/useVideo.tsx b/packages/fakeyou.com/src/hooks/useVideo/useVideo.tsx new file mode 100644 index 0000000000..a89c7a7746 --- /dev/null +++ b/packages/fakeyou.com/src/hooks/useVideo/useVideo.tsx @@ -0,0 +1,23 @@ +import { useRef } from 'react'; + +interface Props { + onEnded?: any; +} + +export default function useVideo({ onEnded }: Props) { + const ref = useRef(null); + const playCtrl = (toDo = (b:any) => {}) => { + if (ref.current) { + let isPlaying = !!(ref.current.currentTime > 0 && !ref.current.paused && !ref.current.ended && ref.current.readyState > 2); + if (!isPlaying) { + toDo(false); + ref.current.play(); + } else { + toDo(true); + ref.current.pause(); + } + } + }; + + return [{ playCtrl },{ onEnded, ref }]; +}; \ No newline at end of file diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss index bed71245ae..938826d2f1 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss @@ -1,4 +1,6 @@ @import "scss/_breakpoint.scss"; +@import "scss/colours.scss"; + $under992: max-width 992px; .lipsync-editor { @@ -12,6 +14,50 @@ $under992: max-width 992px; margin-bottom: 1rem; } } + + .video-frame { + width: 100%; + position: relative; + + video, .video-overlay { + border-radius: .5rem; + width: 100%; + height: 100%; + } + + video { + } + .video-overlay { + background: linear-gradient(rgba($primary,0.5) 0%, rgba($secondary,0.75) 75%); + cursor: pointer; + padding: 2rem; + position: absolute; + top: 0px; + + h6 { + color: #fff; + filter: drop-shadow(0 3px 3px rgba($primary-dark,.25)); + font-size: 2rem; + text-align: center; + } + + svg { + filter: drop-shadow(0 3px 7px rgba($primary-dark,.45)); + position: absolute; + width: 3rem; + height: 3rem; + inset: 50%; + transform: translate(-50%, -50%); + } + + .video-play-button { + background-color: green; + width: 4rem; + height: 4rem; + stroke: white; + } + } + } } .progress-header { diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx index 542eaea13e..6f7822ed3f 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; -import { animated, useTransition } from "@react-spring/web"; +import { animated, useSpring, useTransition } from "@react-spring/web"; import { v4 as uuidv4 } from "uuid"; -import { useFile, useLocalize } from "hooks"; +import { useFile, useLocalize, useVideo } from "hooks"; import { AudioInput, ImageInput, Spinner } from "components/common"; import { springs } from "resources"; import { @@ -24,10 +24,9 @@ import FaceAnimatorTitle from "./FaceAnimatorTitle"; import FaceAnimatorSuccess from "./FaceAnimatorSuccess"; import "./LipsyncEditor.scss"; import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; -import { - FrontendInferenceJobType, - InferenceJob, -} from "@storyteller/components/src/jobs/InferenceJob"; +import { FrontendInferenceJobType, InferenceJob } from "@storyteller/components/src/jobs/InferenceJob"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faPlay } from "@fortawesome/free-solid-svg-icons"; interface LipSyncProps { audioProps: any; @@ -60,31 +59,47 @@ const InputPage = ({ style, t, }: LipSyncProps) => { - return ( - -
-
{t("headings.image")}
- toggle.image(imageProps.file ? true : false), - }} - /> + const [tint,tintSet] = useState(true); + const [{ playCtrl },vidProps] = useVideo({ onEnded: () => tintSet(true) }); + const tintSpring = useSpring({ + onRest: () => { if (!tint) { playCtrl!(tintSet) }}, + opacity: tint ? 1 : 0 + }); + const overlayClick = () => tintSet(!tint); + + + return +
+
{t("headings.image")}
+ toggle.image(imageProps.file ? true : false), + }} + /> +
+
+
{t("headings.audio")}
+ { + toggle.audio(!!audioProps.file); + }, + hideActions: true, + }} + /> +
+ + +
Face Animator Sample
+ +
-
-
{t("headings.audio")}
- { - toggle.audio(!!audioProps.file); - }, - hideActions: true, - }} - /> -
- - ); +
+
; }; const Working = ({ audioProps, imageProps, index, style, t }: LipSyncProps) => { From e07207c195a86a27491fd4181a4910eab2d6862b Mon Sep 17 00:00:00 2001 From: olivicmic Date: Fri, 6 Oct 2023 12:06:32 -0700 Subject: [PATCH 2/5] fit smaple video into face animator layout with inputs --- .../common/ImageInput/ImageInput.scss | 6 +++--- .../lipsync/LipsyncEditor/LipsyncEditor.scss | 19 ++++++++++++++++--- .../lipsync/LipsyncEditor/LipsyncEditor.tsx | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/fakeyou.com/src/components/common/ImageInput/ImageInput.scss b/packages/fakeyou.com/src/components/common/ImageInput/ImageInput.scss index e9804a0ae8..c6a2169d5d 100644 --- a/packages/fakeyou.com/src/components/common/ImageInput/ImageInput.scss +++ b/packages/fakeyou.com/src/components/common/ImageInput/ImageInput.scss @@ -4,9 +4,9 @@ .image-upload-frame { // aspect-ratio: 4/3; - // @include breakpoint(min-width 992px) { - // aspect-ratio: 1/1; - // } + @include breakpoint(min-width 992px) { + aspect-ratio: 1/1; + } } .fy-image-uploader { diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss index 5a51725881..546808d21a 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss @@ -15,8 +15,21 @@ $under992: max-width 992px; } } + .audio-input-column { + display: flex; + flex: 1; + flex-direction: column; + + .fy-audio-uploder { + flex: 1 0 auto; + } + } + .video-frame { + overflow: hidden; width: 100%; + margin: 0; + flex: 1; position: relative; video, .video-overlay { @@ -25,8 +38,8 @@ $under992: max-width 992px; height: 100%; } - video { - } + video { position: absolute; object-fit: cover; } + .video-overlay { background: linear-gradient(rgba($primary,0.5) 0%, rgba($secondary,0.75) 75%); cursor: pointer; @@ -59,7 +72,7 @@ $under992: max-width 992px; } } .animation-configure-panel { - margin: 1rem 0 -.5rem; + margin: 1.5rem 0 -.5rem; padding: 1rem; display: flex; flex-wrap: wrap; diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx index 75a6029b9f..f02192cee7 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx @@ -102,7 +102,7 @@ const InputPage = ({ }} />
-
+
{t("headings.audio")}
Date: Fri, 6 Oct 2023 13:08:11 -0700 Subject: [PATCH 3/5] organized face animator components --- .../LipsyncEditor/FaceAnimatorInput.tsx | 82 ++++++++ .../LipsyncEditor/FaceAnimatorSuccess.tsx | 13 +- .../LipsyncEditor/FaceAnimatorTypes.ts | 33 ++++ .../LipsyncEditor/FaceAnimatorWorking.tsx | 42 ++++ .../lipsync/LipsyncEditor/LipsyncEditor.tsx | 179 +----------------- 5 files changed, 168 insertions(+), 181 deletions(-) create mode 100644 packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx create mode 100644 packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorTypes.ts create mode 100644 packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorWorking.tsx diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx new file mode 100644 index 0000000000..0a08f62b4b --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx @@ -0,0 +1,82 @@ +import React, { useState } from 'react'; +import { animated, useSpring } from "@react-spring/web"; +import { useVideo } from "hooks"; +import { AudioInput, Checkbox, ImageInput, SegmentButtons } from "components/common"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faPlay } from "@fortawesome/free-solid-svg-icons"; +import { FaceAnimatorSlide } from "./FaceAnimatorTypes"; + +export default function FaceAnimatorInput({ + audioProps, + imageProps, + frameDimensions, + frameDimensionsChange, + disableFaceEnhancement, + disableFaceEnhancementChange, + still, + stillChange, + toggle, + style, + t, + removeWatermark, + removeWatermarkChange, }: FaceAnimatorSlide) { + const [tint,tintSet] = useState(true); + const [{ playCtrl },vidProps] = useVideo({ onEnded: () => tintSet(true) }); + const tintSpring = useSpring({ + onRest: () => { if (!tint) { playCtrl!(tintSet) }}, + opacity: tint ? 1 : 0 + }); + const overlayClick = () => tintSet(!tint); + + return +
+
{t("headings.image")}
+ toggle.image(imageProps.file ? true : false), + }} + /> +
+
+
{t("headings.audio")}
+ { + toggle.audio(!!audioProps.file); + }, + hideActions: true, + }} + /> +
+ + +
Face Animator Sample
+ +
+
+
+
+
+ Video Dimensions + +
+
+ Watermark + +
+
+ Animation + + +
+
+
; +}; \ No newline at end of file diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorSuccess.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorSuccess.tsx index d76fce1c44..5d57ca41f5 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorSuccess.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorSuccess.tsx @@ -11,20 +11,11 @@ import { JobState } from "@storyteller/components/src/jobs/JobStates"; import { Analytics } from "common/Analytics"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faDownload } from "@fortawesome/free-solid-svg-icons"; - -interface Props { - audioProps: any; - imageProps: any; - style: any; - enqueueInferenceJob: any; - sessionSubscriptionsWrapper: any; - inferenceJobsByCategory: any; - t: any; -} +import { FaceAnimatorSlide } from "./FaceAnimatorTypes"; const DEFAULT_QUEUE_REFRESH_INTERVAL_MILLIS = 15000; -export default function FaceAnimatorSuccess({ audioProps, imageProps, style, enqueueInferenceJob, sessionSubscriptionsWrapper, inferenceJobsByCategory, t }: Props) { +export default function FaceAnimatorSuccess({ audioProps, imageProps, style, enqueueInferenceJob, sessionSubscriptionsWrapper, inferenceJobsByCategory, t }: FaceAnimatorSlide) { const [pending, pendingSet] = useState({ success: true, pending_job_count: 0, diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorTypes.ts b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorTypes.ts new file mode 100644 index 0000000000..86db526447 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorTypes.ts @@ -0,0 +1,33 @@ +import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; +import { FrontendInferenceJobType, InferenceJob } from "@storyteller/components/src/jobs/InferenceJob"; + +export interface FaceAnimatorSlide { + audioProps: any; + children?: any; + imageProps: any; + frameDimensions: any; + frameDimensionsChange: any; + disableFaceEnhancement: any; + disableFaceEnhancementChange: any; + index: number; + still: any; + stillChange: any; + style: any; + toggle: any; + enqueueInferenceJob: any; + sessionSubscriptionsWrapper: any; + t: any; + inferenceJobsByCategory: any; + removeWatermark: any; + removeWatermarkChange: any; +} + +export interface FaceAnimatorCore { + sessionSubscriptionsWrapper: SessionSubscriptionsWrapper; + enqueueInferenceJob: ( + jobToken: string, + frontendInferenceJobType: FrontendInferenceJobType + ) => void; + inferenceJobs: Array; + inferenceJobsByCategory: Map>; +} \ No newline at end of file diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorWorking.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorWorking.tsx new file mode 100644 index 0000000000..fdfd242941 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorWorking.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { a, useTransition } from "@react-spring/web"; +import { Spinner } from "components/common"; +import { springs } from "resources"; +import { FaceAnimatorSlide } from "./FaceAnimatorTypes"; + +export default function FaceAnimatorWorking({ audioProps, imageProps, index, style, t }: FaceAnimatorSlide) { + const workStatus = [ + "", + t("status.uploadingAudio"), + t("status.uploadingImage"), + t("status.requestingAnimation"), + "", + ]; + + const transitions = useTransition(index, { + ...springs.soft, + from: { opacity: 0, position: "absolute" }, + enter: { opacity: 1, position: "relative" }, + leave: { opacity: 0, position: "absolute" }, + }); + return +
+

+ {" "} + {transitions(({ opacity, position }, i) => { + return ( + + {workStatus[index]} ... + + ); + })} +

+ +
+
; +}; \ No newline at end of file diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx index f02192cee7..bd39e63654 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx @@ -1,8 +1,7 @@ import React, { useState } from "react"; -import { animated, useSpring, useTransition } from "@react-spring/web"; +import { useTransition } from "@react-spring/web"; import { v4 as uuidv4 } from "uuid"; -import { useFile, useLocalize, useVideo } from "hooks"; -import { AudioInput, Checkbox, ImageInput, SegmentButtons, Spinner } from "components/common"; +import { useFile, useLocalize } from "hooks"; import { springs } from "resources"; import { UploadAudio, @@ -19,176 +18,20 @@ import { // EnqueueFaceAnimationIsSuccess, // EnqueueFaceAnimationRequest, } from "@storyteller/components/src/api/face_animation/EnqueueFaceAnimation"; -// import { FrontendInferenceJobType } from "@storyteller/components/src/jobs/InferenceJob"; import FaceAnimatorTitle from "./FaceAnimatorTitle"; +import FaceAnimatorInput from './FaceAnimatorInput'; +import FaceAnimatorWorking from './FaceAnimatorWorking'; import FaceAnimatorSuccess from "./FaceAnimatorSuccess"; +import { FaceAnimatorCore } from "./FaceAnimatorTypes"; import "./LipsyncEditor.scss"; -import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; -import { FrontendInferenceJobType, InferenceJob } from "@storyteller/components/src/jobs/InferenceJob"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faPlay } from "@fortawesome/free-solid-svg-icons"; - -interface LipSyncProps { - // animationChange: any; - // animationStyle: any; - audioProps: any; - children?: any; - // cropChange: any; - // cropping: any; - imageProps: any; - frameDimensions: any; - frameDimensionsChange: any; - disableFaceEnhancement: any; - disableFaceEnhancementChange: any; - index: number; - still: any; - stillChange: any; - style: any; - toggle: any; - enqueueInferenceJob: any; - sessionSubscriptionsWrapper: any; - t: any; - inferenceJobsByCategory: any; - removeWatermark: any; - removeWatermarkChange: any; -} -interface EditorProps { - sessionSubscriptionsWrapper: SessionSubscriptionsWrapper; - enqueueInferenceJob: ( - jobToken: string, - frontendInferenceJobType: FrontendInferenceJobType - ) => void; - inferenceJobs: Array; - inferenceJobsByCategory: Map>; -} - -const softSpring = { config: { mass: 1, tension: 80, friction: 10 } }; - -const InputPage = ({ - // animationChange, - // animationStyle, - audioProps, - // cropping, - // cropChange, - imageProps, - frameDimensions, - frameDimensionsChange, - disableFaceEnhancement, - disableFaceEnhancementChange, - still, - stillChange, - toggle, - style, - t, - removeWatermark, - removeWatermarkChange, -}: LipSyncProps) => { - const [tint,tintSet] = useState(true); - const [{ playCtrl },vidProps] = useVideo({ onEnded: () => tintSet(true) }); - const tintSpring = useSpring({ - onRest: () => { if (!tint) { playCtrl!(tintSet) }}, - opacity: tint ? 1 : 0 - }); - const overlayClick = () => tintSet(!tint); - - - return -
-
{t("headings.image")}
- toggle.image(imageProps.file ? true : false), - }} - /> -
-
-
{t("headings.audio")}
- { - toggle.audio(!!audioProps.file); - }, - hideActions: true, - }} - /> -
- - -
Face Animator Sample
- -
-
-
-
-
- Video Dimensions - -
-
- Watermark - -
-
- Animation - - -
-
-
; -}; - -const Working = ({ audioProps, imageProps, index, style, t }: LipSyncProps) => { - const workStatus = [ - "", - t("status.uploadingAudio"), - t("status.uploadingImage"), - t("status.requestingAnimation"), - "", - ]; - const transitions = useTransition(index, { - ...springs.soft, - from: { opacity: 0, position: "absolute" }, - enter: { opacity: 1, position: "relative" }, - leave: { opacity: 0, position: "absolute" }, - }); - return ( - -
-

- {" "} - {transitions(({ opacity, position }, i) => { - return ( - - {workStatus[index]} ... - - ); - })} -

- -
-
- ); -}; +import { FrontendInferenceJobType } from "@storyteller/components/src/jobs/InferenceJob"; export default function LipsyncEditor({ enqueueInferenceJob, sessionSubscriptionsWrapper, inferenceJobsByCategory, ...rest -}: EditorProps) { +}: FaceAnimatorCore) { const { t } = useLocalize("FaceAnimator"); // the ready states are set by functions which run after the upload input animation is completed, which then illuminates the respective checkmark in a staggered way to draw attention to the workflow, and reduces concurrent animations @@ -248,10 +91,6 @@ export default function LipsyncEditor({ if ("upload_token" in responses.image) { indexSet(3); // set face animator API working page return EnqueueFaceAnimation({ - // backend_animation_key: animationStyle, - // backend_cropping_key: cropping === "cropped", - // backend_orientation_key: orientation === "landscape", - // backend_watermark_key: watermark, uuid_idempotency_token: uuidv4(), audio_source: { maybe_media_upload_token: responses.audio.upload_token, @@ -293,7 +132,7 @@ export default function LipsyncEditor({ }; const transitions = useTransition(index, { - ...softSpring, + ...springs.soft, from: { opacity: 0, position: "absolute" }, enter: { opacity: 1, position: "relative" }, leave: { opacity: 0, position: "absolute" }, @@ -304,7 +143,7 @@ export default function LipsyncEditor({
{transitions((style, i) => { - const Page = [InputPage, Working, FaceAnimatorSuccess][page]; + const Page = [FaceAnimatorInput, FaceAnimatorWorking, FaceAnimatorSuccess][page]; return Page ? ( Date: Fri, 6 Oct 2023 13:57:26 -0700 Subject: [PATCH 4/5] added BasicVideo component --- .../common/BasicVideo/BasicVideo.scss | 48 +++++++++++++++++ .../common/BasicVideo/BasicVideo.tsx | 35 ++++++++++++ .../src/components/common/BasicVideo/index.ts | 1 + .../src/components/common/index.tsx | 54 ++++++++++--------- .../LipsyncEditor/FaceAnimatorInput.tsx | 27 ++-------- 5 files changed, 116 insertions(+), 49 deletions(-) create mode 100644 packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss create mode 100644 packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.tsx create mode 100644 packages/fakeyou.com/src/components/common/BasicVideo/index.ts diff --git a/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss b/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss new file mode 100644 index 0000000000..2560b73748 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss @@ -0,0 +1,48 @@ +@import "scss/colours.scss"; + +.fy-basic-video { + overflow: hidden; + width: 100%; + margin: 0; + flex: 1; + position: relative; + + video, .video-overlay { + border-radius: .5rem; + width: 100%; + height: 100%; + } + + video { position: absolute; object-fit: cover; } + + .video-overlay { + background: linear-gradient(rgba($primary,0.5) 0%, rgba($secondary,0.75) 75%); + cursor: pointer; + padding: 2rem; + position: absolute; + top: 0px; + + h6 { + color: #fff; + filter: drop-shadow(0 3px 3px rgba($primary-dark,.25)); + font-size: 1.5rem; + text-align: center; + } + + svg { + filter: drop-shadow(0 3px 7px rgba($primary-dark,.45)); + position: absolute; + width: 3rem; + height: 3rem; + inset: 50%; + transform: translate(-50%, -50%); + } + + .video-play-button { + background-color: green; + width: 4rem; + height: 4rem; + stroke: white; + } + } +}; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.tsx b/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.tsx new file mode 100644 index 0000000000..31bebbc534 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.tsx @@ -0,0 +1,35 @@ +import React, { useState } from "react"; +import { a, useSpring } from "@react-spring/web"; +import { useVideo } from "hooks"; +import makeClass from "resources/makeClass"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faPlay } from "@fortawesome/free-solid-svg-icons"; +import "./BasicVideo.scss" + +interface Props { + className?: string; + src?: string; +} + +export default function BasicVideo({ className, src }: Props) { + const [tint,tintSet] = useState(true); + const [{ playCtrl },vidProps] = useVideo({ onEnded: () => tintSet(true) }); + const style = useSpring({ + onRest: () => { if (!tint) { playCtrl!(tintSet) }}, + opacity: tint ? 1 : 0 + }); + const onClick = () => { + tintSet(!tint) + if (!tint) playCtrl!(); + }; + + return
+ + +
Face Animator Sample
+ +
+
; +}; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/common/BasicVideo/index.ts b/packages/fakeyou.com/src/components/common/BasicVideo/index.ts new file mode 100644 index 0000000000..006a41e25a --- /dev/null +++ b/packages/fakeyou.com/src/components/common/BasicVideo/index.ts @@ -0,0 +1 @@ +export { default } from './BasicVideo'; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/common/index.tsx b/packages/fakeyou.com/src/components/common/index.tsx index 63363e3f37..0401d60177 100644 --- a/packages/fakeyou.com/src/components/common/index.tsx +++ b/packages/fakeyou.com/src/components/common/index.tsx @@ -1,29 +1,31 @@ -import AudioInput from './AudioInput'; -import Check from './Check'; -import Checkbox from './Checkbox'; -import FileActions from './FileActions'; -import FileDetails from './FileDetails'; -import FileWrapper from './FileWrapper'; -import FileLabel from './FileLabel'; -import ImageInput from './ImageInput'; -import NumberSlider from './NumberSlider'; -import Radio from './Radio'; -import SegmentButtons from './SegmentButtons'; -import Slider from './Slider'; -import Spinner from './Spinner'; +import AudioInput from "./AudioInput"; +import BasicVideo from "./BasicVideo"; +import Check from "./Check"; +import Checkbox from "./Checkbox"; +import FileActions from "./FileActions"; +import FileDetails from "./FileDetails"; +import FileWrapper from "./FileWrapper"; +import FileLabel from "./FileLabel"; +import ImageInput from "./ImageInput"; +import NumberSlider from "./NumberSlider"; +import Radio from "./Radio"; +import SegmentButtons from "./SegmentButtons"; +import Slider from "./Slider"; +import Spinner from "./Spinner"; export { - AudioInput, - Check, - Checkbox, - FileActions, - FileDetails, - FileWrapper, - FileLabel, - ImageInput, - NumberSlider, - Radio, - SegmentButtons, - Slider, - Spinner + AudioInput, + BasicVideo, + Check, + Checkbox, + FileActions, + FileDetails, + FileWrapper, + FileLabel, + ImageInput, + NumberSlider, + Radio, + SegmentButtons, + Slider, + Spinner }; \ No newline at end of file diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx index 0a08f62b4b..290e113f3b 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx @@ -1,9 +1,6 @@ -import React, { useState } from 'react'; -import { animated, useSpring } from "@react-spring/web"; -import { useVideo } from "hooks"; -import { AudioInput, Checkbox, ImageInput, SegmentButtons } from "components/common"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faPlay } from "@fortawesome/free-solid-svg-icons"; +import React from "react"; +import { animated } from "@react-spring/web"; +import { AudioInput, BasicVideo, Checkbox, ImageInput, SegmentButtons } from "components/common"; import { FaceAnimatorSlide } from "./FaceAnimatorTypes"; export default function FaceAnimatorInput({ @@ -20,14 +17,6 @@ export default function FaceAnimatorInput({ t, removeWatermark, removeWatermarkChange, }: FaceAnimatorSlide) { - const [tint,tintSet] = useState(true); - const [{ playCtrl },vidProps] = useVideo({ onEnded: () => tintSet(true) }); - const tintSpring = useSpring({ - onRest: () => { if (!tint) { playCtrl!(tintSet) }}, - opacity: tint ? 1 : 0 - }); - const overlayClick = () => tintSet(!tint); - return
{t("headings.image")}
@@ -49,15 +38,7 @@ export default function FaceAnimatorInput({ hideActions: true, }} /> -
- - -
Face Animator Sample
- -
-
+
From c01bab46ef18fd45e5db46265f6802b193d71076 Mon Sep 17 00:00:00 2001 From: olivicmic Date: Fri, 6 Oct 2023 14:30:19 -0700 Subject: [PATCH 5/5] added responsive sample video to face animator --- .../common/BasicVideo/BasicVideo.scss | 4 +- .../LipsyncEditor/FaceAnimatorInput.tsx | 2 +- .../lipsync/LipsyncEditor/LipsyncEditor.scss | 66 ++++++------------- .../lipsync/LipsyncEditor/LipsyncEditor.tsx | 4 ++ 4 files changed, 27 insertions(+), 49 deletions(-) diff --git a/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss b/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss index 2560b73748..52baadeff5 100644 --- a/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss +++ b/packages/fakeyou.com/src/components/common/BasicVideo/BasicVideo.scss @@ -4,7 +4,7 @@ overflow: hidden; width: 100%; margin: 0; - flex: 1; + height: fit-content; position: relative; video, .video-overlay { @@ -13,7 +13,7 @@ height: 100%; } - video { position: absolute; object-fit: cover; } + video {object-fit: cover; } .video-overlay { background: linear-gradient(rgba($primary,0.5) 0%, rgba($secondary,0.75) 75%); diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx index 290e113f3b..1e58d19a1f 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/FaceAnimatorInput.tsx @@ -38,7 +38,7 @@ export default function FaceAnimatorInput({ hideActions: true, }} /> - +
diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss index 546808d21a..f4b01ae774 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.scss @@ -2,6 +2,7 @@ @import "scss/colours.scss"; $under992: max-width 992px; +$over992: min-width 992px; .lipsync-editor { padding-top: 2rem; @@ -25,52 +26,6 @@ $under992: max-width 992px; } } - .video-frame { - overflow: hidden; - width: 100%; - margin: 0; - flex: 1; - position: relative; - - video, .video-overlay { - border-radius: .5rem; - width: 100%; - height: 100%; - } - - video { position: absolute; object-fit: cover; } - - .video-overlay { - background: linear-gradient(rgba($primary,0.5) 0%, rgba($secondary,0.75) 75%); - cursor: pointer; - padding: 2rem; - position: absolute; - top: 0px; - - h6 { - color: #fff; - filter: drop-shadow(0 3px 3px rgba($primary-dark,.25)); - font-size: 2rem; - text-align: center; - } - - svg { - filter: drop-shadow(0 3px 7px rgba($primary-dark,.45)); - position: absolute; - width: 3rem; - height: 3rem; - inset: 50%; - transform: translate(-50%, -50%); - } - - .video-play-button { - background-color: green; - width: 4rem; - height: 4rem; - stroke: white; - } - } - } .animation-configure-panel { margin: 1.5rem 0 -.5rem; padding: 1rem; @@ -176,3 +131,22 @@ $under992: max-width 992px; font-size: 0.75rem; } } + + .face-animator-mobile-sample { + padding: 1rem; + + @include breakpoint($over992) { + display: none; + } + } + + .face-animator-wide-sample { + flex: 1; + height: auto; + + @include breakpoint($under992) { + display: none; + } + + video { position: absolute ;} + } diff --git a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx index bd39e63654..daf0ea63d9 100644 --- a/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/lipsync/LipsyncEditor/LipsyncEditor.tsx @@ -23,6 +23,7 @@ import FaceAnimatorInput from './FaceAnimatorInput'; import FaceAnimatorWorking from './FaceAnimatorWorking'; import FaceAnimatorSuccess from "./FaceAnimatorSuccess"; import { FaceAnimatorCore } from "./FaceAnimatorTypes"; +import { BasicVideo } from "components/common"; import "./LipsyncEditor.scss"; import { FrontendInferenceJobType } from "@storyteller/components/src/jobs/InferenceJob"; @@ -171,6 +172,9 @@ export default function LipsyncEditor({ ); })}
+
+ +
); }