From a68776f487dbfa2e8b5c171cdb12252009ae8d29 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 9 Sep 2024 22:13:34 -0700 Subject: [PATCH 1/3] replaced MediaFile instances of BucketConfig with server provided media links --- .../packages/components/src/api/index.tsx | 4 +- .../src/api/media_files/GetMedia.ts | 27 ++ .../src/api/media_files/MediaLinks.ts | 32 ++ .../components/src/api/media_files/index.tsx | 19 +- .../src/common/GetMediaFileTitle.ts | 24 +- .../common/AudioPlayer/AudioPlayer.tsx | 5 +- .../common/CameraInput/CameraInput.tsx | 4 +- .../common/Card/AudioCard/AudioCard.tsx | 46 +-- .../common/Card/ImageCard/ImageCard.tsx | 16 +- .../common/Card/VideoCard/VideoCard.tsx | 114 +------ .../common/MocapInput/MocapInput.scss | 109 ------- .../common/MocapInput/MocapInput.tsx | 155 ---------- .../components/common/MocapInput/index.tsx | 1 - .../common/Scene3D/GetEngineUrl.test.ts | 5 + .../components/common/Scene3D/GetEngineUrl.ts | 92 +++--- .../common/SelectModal/SelectMediaList.tsx | 2 +- .../TempAudioPlayer/TempAudioPlayer.tsx | 94 +++--- .../src/components/common/index.tsx | 2 - .../src/components/entities/CardPreviews.tsx | 62 ++-- .../entities/CardWrapper/CardWrapper.tsx | 11 +- .../entities/EntityInput/EntityInput.tsx | 29 +- .../entities/OverlayCard/OverlayCard.tsx | 66 ++-- .../layout/InferenceJobsList/JobItem.tsx | 19 +- .../InferenceJobsList/JobResultPreview.tsx | 15 +- .../fakeyou.com/src/hooks/useMedia.tsx | 23 +- .../ScrollingSceneCarousel.tsx | 37 +-- .../PrelaunchLanding/PrelaunchLanding.tsx | 29 +- .../src/v2/view/pages/lipsync/GenerateTts.tsx | 20 +- .../src/v2/view/pages/lipsync/Lipsync.tsx | 15 +- .../live_portrait/CameraLivePortrait.tsx | 14 +- .../view/pages/live_portrait/LivePortrait.tsx | 19 +- .../live_portrait/ThumbnailMediaPicker.tsx | 24 +- .../v2/view/pages/media/EditCoverImage.tsx | 88 +++--- .../view/pages/media/MediaAudioComponent.tsx | 17 -- .../v2/view/pages/media/MediaAudioPlayer.tsx | 15 +- .../view/pages/media/MediaImageComponent.tsx | 18 -- .../src/v2/view/pages/media/MediaPage.tsx | 13 +- .../v2/view/pages/media/MediaPageSwitch.tsx | 7 +- .../view/pages/media/MediaVideoComponent.tsx | 12 +- .../src/v2/view/pages/media/PromptViewer.tsx | 17 +- .../EngineMediaPanel/EngineMediaPanel.tsx | 8 +- .../components/pageWorkflowControls/index.tsx | 1 - .../pageWorkflowControls.tsx | 282 ------------------ .../video_workflow/videoWorkflowReducer.tsx | 103 +++---- .../video_workflow/videoWorkflowRoutes.tsx | 62 ++-- 45 files changed, 604 insertions(+), 1173 deletions(-) create mode 100644 src/website/packages/components/src/api/media_files/MediaLinks.ts delete mode 100644 src/website/packages/fakeyou.com/src/components/common/MocapInput/MocapInput.scss delete mode 100644 src/website/packages/fakeyou.com/src/components/common/MocapInput/MocapInput.tsx delete mode 100644 src/website/packages/fakeyou.com/src/components/common/MocapInput/index.tsx delete mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/media/MediaAudioComponent.tsx delete mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/media/MediaImageComponent.tsx delete mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageWorkflowControls/index.tsx delete mode 100644 src/website/packages/fakeyou.com/src/v2/view/pages/video_workflow/components/pageWorkflowControls/pageWorkflowControls.tsx diff --git a/src/website/packages/components/src/api/index.tsx b/src/website/packages/components/src/api/index.tsx index bf162cb57c..a854f77bc2 100644 --- a/src/website/packages/components/src/api/index.tsx +++ b/src/website/packages/components/src/api/index.tsx @@ -1,11 +1,11 @@ import { FetchStatus } from "./_common/SharedFetchTypes"; -import { MediaFileType, GetMediaByUser } from "./media_files"; +import { MediaFile, GetMediaByUser } from "./media_files"; import { Weight, ListWeights, ListFeaturedWeights } from "./weights"; import { GetBookmarksByUser } from "./bookmarks/GetBookmarksByUser"; import { MediaFileClass } from "./enums/MediaFileClass"; import { BucketConfig } from "./BucketConfig"; -export type { MediaFileType, Weight }; +export type { MediaFile, Weight }; export { BucketConfig, FetchStatus, diff --git a/src/website/packages/components/src/api/media_files/GetMedia.ts b/src/website/packages/components/src/api/media_files/GetMedia.ts index 45a41317f4..83eaadf1d1 100644 --- a/src/website/packages/components/src/api/media_files/GetMedia.ts +++ b/src/website/packages/components/src/api/media_files/GetMedia.ts @@ -10,10 +10,28 @@ import { WeightCategory, } from "@storyteller/components/src/api/_common/enums"; +export interface MediaVideoPreviews { + animated: string; + animated_thumbnail_template: string; + still: string; + still_thumbnail_template: string; +} + +// export type MediaThumbFn = (width: number) => string; + +export interface ResponseMediaLinks { + cdn_url: string; + // path for image media thumbnails + maybe_thumbnail_template: string | null; + // previews for video media + maybe_video_previews: MediaVideoPreviews | null; +} + export interface MediaFile { token: string; media_type: MediaFileType; media_class: MediaFileClass | null; + media_links: ResponseMediaLinks; maybe_engine_category: EngineCategory | null; maybe_animation_type: AnimationType | null; maybe_media_subtype: MediaFileSubtype | null; @@ -49,6 +67,15 @@ export interface MediaFile { maybe_text_transcript?: string | undefined; } +// export interface MediaFile extends ResponseMediaFile { +// frontendURLs: { +// imageThumb: MediaThumbFn; +// main: string; +// videoStill: MediaThumbFn; +// videoAnimated: MediaThumbFn; +// }; +// } + export interface MediaFileModeratorFields { maybe_style_transfer_source_media_file_token?: string; } diff --git a/src/website/packages/components/src/api/media_files/MediaLinks.ts b/src/website/packages/components/src/api/media_files/MediaLinks.ts new file mode 100644 index 0000000000..aa3b40711a --- /dev/null +++ b/src/website/packages/components/src/api/media_files/MediaLinks.ts @@ -0,0 +1,32 @@ +import { ResponseMediaLinks } from "./GetMedia"; + +const MediaLinker = (baseUrl: string) => (width: number) => + baseUrl.replace("{WIDTH}", width.toString()); + +export type MediaLinkFn = (width: number) => string; + +export interface MediaLinkUtility { + mainURL: string; + fixedVideoStill: string; + fixedVideoAnimated: string; + imageThumb: MediaLinkFn | null; + videoStill: MediaLinkFn | null; + videoAnimated: MediaLinkFn | null; +} + +export function MediaLinks(mediaLinks?: ResponseMediaLinks): MediaLinkUtility { + return { + mainURL: mediaLinks?.cdn_url || "", + fixedVideoStill: mediaLinks?.maybe_video_previews?.still || "", + fixedVideoAnimated: mediaLinks?.maybe_video_previews?.animated || "", + imageThumb: mediaLinks?.maybe_thumbnail_template + ? MediaLinker(mediaLinks.maybe_thumbnail_template) + : null, + videoStill: mediaLinks?.maybe_video_previews + ? MediaLinker(mediaLinks.maybe_video_previews.still_thumbnail_template) + : null, + videoAnimated: mediaLinks?.maybe_video_previews + ? MediaLinker(mediaLinks.maybe_video_previews.animated_thumbnail_template) + : null, + }; +} diff --git a/src/website/packages/components/src/api/media_files/index.tsx b/src/website/packages/components/src/api/media_files/index.tsx index 812530f3da..306792a860 100644 --- a/src/website/packages/components/src/api/media_files/index.tsx +++ b/src/website/packages/components/src/api/media_files/index.tsx @@ -1,10 +1,11 @@ -import { MediaFile } from "./GetMediaFile"; -import { GetMediaByUser } from "./GetMediaByUser"; +import { + GetMedia, + GetMediaRequest, + GetMediaResponse, + MediaFile, +} from "./GetMedia"; +import { GetMediaByUser } from "./GetMediaByUser"; +import { MediaLinks, MediaLinkUtility } from "./MediaLinks"; - -export type{ - MediaFile as MediaFileType -} -export { - GetMediaByUser -} \ No newline at end of file +export { GetMedia, GetMediaByUser, MediaLinks }; +export type { GetMediaRequest, GetMediaResponse, MediaFile, MediaLinkUtility }; diff --git a/src/website/packages/fakeyou.com/src/common/GetMediaFileTitle.ts b/src/website/packages/fakeyou.com/src/common/GetMediaFileTitle.ts index 7035f71eda..bab030e42a 100644 --- a/src/website/packages/fakeyou.com/src/common/GetMediaFileTitle.ts +++ b/src/website/packages/fakeyou.com/src/common/GetMediaFileTitle.ts @@ -1,32 +1,28 @@ import { MediaFileType } from "@storyteller/components/src/api/_common/enums/MediaFileType"; -import { MediaFile as MediaFileOne } from "@storyteller/components/src/api/media_files/GetMedia"; -import { MediaFile as MediaFileTwo } from "@storyteller/components/src/api/media_files/GetMediaFile"; +import { MediaFile } from "@storyteller/components/src/api/media_files/GetMedia"; -// Support multiple "Media File" API response payloads. -type MediaFile = MediaFileOne | MediaFileTwo ; - -export function GetMediaFileTitle(mediaFile?: MediaFile) : string { +export function GetMediaFileTitle(mediaFile?: MediaFile): string { if (mediaFile === undefined) { return "Untitled file"; } let mediaType = undefined; - + switch (mediaFile?.media_type) { case MediaFileType.Audio: case MediaFileType.Video: case MediaFileType.Image: - mediaType = mediaFile?.media_type.toLocaleLowerCase(); - break; + mediaType = mediaFile?.media_type.toLocaleLowerCase(); + break; case MediaFileType.BVH: case MediaFileType.GLTF: case MediaFileType.GLB: case MediaFileType.FBX: - mediaType = mediaFile?.media_type.toUpperCase(); - break; + mediaType = mediaFile?.media_type.toUpperCase(); + break; case MediaFileType.SceneRon: - mediaType = "RON"; - break; + mediaType = "RON"; + break; } let title = ""; @@ -44,7 +40,7 @@ export function GetMediaFileTitle(mediaFile?: MediaFile) : string { } if (title.length < 4) { - const maybeSuffix = (!!mediaType) ? ` (${mediaType} file)` : ""; + const maybeSuffix = !!mediaType ? ` (${mediaType} file)` : ""; return `${title}${maybeSuffix}`; } else { return title; diff --git a/src/website/packages/fakeyou.com/src/components/common/AudioPlayer/AudioPlayer.tsx b/src/website/packages/fakeyou.com/src/components/common/AudioPlayer/AudioPlayer.tsx index b5c19dd9ea..4e21619d55 100644 --- a/src/website/packages/fakeyou.com/src/components/common/AudioPlayer/AudioPlayer.tsx +++ b/src/website/packages/fakeyou.com/src/components/common/AudioPlayer/AudioPlayer.tsx @@ -1,6 +1,5 @@ import React, { useEffect, useState, useRef } from "react"; import WaveSurfer from "wavesurfer.js"; -import { BucketConfig } from "@storyteller/components/src/api/BucketConfig"; import { faPlay, faPause } from "@fortawesome/pro-solid-svg-icons"; import Button from "components/common/Button"; import "./AudioPlayer.scss"; @@ -20,8 +19,6 @@ export default function AudioPlayer({ src, id }: AudioPlayerProps) { const isPlayerOnScreen = useOnScreen(waveformRef); //This stops the audio from playing when the player is not on screen useEffect(() => { - const audioLink = new BucketConfig().getGcsUrl(src); - if (!waveSurferRef.current && waveformRef.current) { const wavesurferInstance = WaveSurfer.create({ container: waveformRef.current, @@ -36,7 +33,7 @@ export default function AudioPlayer({ src, id }: AudioPlayerProps) { waveSurferRef.current = wavesurferInstance; - waveSurferRef.current.load(audioLink); + waveSurferRef.current.load(src); waveSurferRef.current.on("pause", () => { setIsPlaying(false); diff --git a/src/website/packages/fakeyou.com/src/components/common/CameraInput/CameraInput.tsx b/src/website/packages/fakeyou.com/src/components/common/CameraInput/CameraInput.tsx index 7c6b97f51f..5a2db7410e 100644 --- a/src/website/packages/fakeyou.com/src/components/common/CameraInput/CameraInput.tsx +++ b/src/website/packages/fakeyou.com/src/components/common/CameraInput/CameraInput.tsx @@ -27,7 +27,7 @@ export default function CameraInput({ const { open } = useModal(); const camera = useCameraState(true); const [token, tokenSet] = useState(""); - const { bucketUrl } = useMedia({ mediaToken: token }); + const { links } = useMedia({ mediaToken: token }); const cameraSupported = MediaRecorder.isTypeSupported("video/mp4"); const cameraClick = () => @@ -83,7 +83,7 @@ export default function CameraInput({