diff --git a/src/website/packages/fakeyou.com/public/images/trump-select/trump-angry.webp b/src/website/packages/fakeyou.com/public/images/trump-select/trump-angry.webp new file mode 100644 index 0000000000..d251368c2c Binary files /dev/null and b/src/website/packages/fakeyou.com/public/images/trump-select/trump-angry.webp differ diff --git a/src/website/packages/fakeyou.com/public/images/trump-select/trump-casual.webp b/src/website/packages/fakeyou.com/public/images/trump-select/trump-casual.webp new file mode 100644 index 0000000000..f084b7e044 Binary files /dev/null and b/src/website/packages/fakeyou.com/public/images/trump-select/trump-casual.webp differ diff --git a/src/website/packages/fakeyou.com/public/images/trump-select/trump-sarcastic.webp b/src/website/packages/fakeyou.com/public/images/trump-select/trump-sarcastic.webp new file mode 100644 index 0000000000..56265cae95 Binary files /dev/null and b/src/website/packages/fakeyou.com/public/images/trump-select/trump-sarcastic.webp differ diff --git a/src/website/packages/fakeyou.com/public/locales/en/NewTTS.json b/src/website/packages/fakeyou.com/public/locales/en/NewTTS.json index 4a0b0c4f2b..783fdeff71 100644 --- a/src/website/packages/fakeyou.com/public/locales/en/NewTTS.json +++ b/src/website/packages/fakeyou.com/public/locales/en/NewTTS.json @@ -16,7 +16,10 @@ "output": "Output", "search": "Search for a Voice", "select": "Select a Voice", - "selected": "Selected Voice" + "selected": "Selected Voice", + "trumpAngry": "angry", + "trumpCasual": "casual", + "trumpSarcastic": "sarcastic" }, "link": { "exploreNewVoices": "Explore Newest Voices", @@ -50,4 +53,4 @@ "featuredVoices": "Featured Voices", "tts": "Text to Speech" } -} \ No newline at end of file +} diff --git a/src/website/packages/fakeyou.com/src/components/layout/ProfileSidePanel/ProfileSidePanel.scss b/src/website/packages/fakeyou.com/src/components/layout/ProfileSidePanel/ProfileSidePanel.scss index 8331726191..04d77c8e2d 100644 --- a/src/website/packages/fakeyou.com/src/components/layout/ProfileSidePanel/ProfileSidePanel.scss +++ b/src/website/packages/fakeyou.com/src/components/layout/ProfileSidePanel/ProfileSidePanel.scss @@ -2,16 +2,16 @@ /* Toggle Styles */ -#wrapper { - padding-left: 0; - -webkit-transition: all 0.2s ease; - -moz-transition: all 0.2s ease; - -o-transition: all 0.2s ease; - transition: all 0.2s ease; -} - $topbar-height: 66px; +#wrapper { + padding: $topbar-height 0 0; + // -webkit-transition: all 0.2s ease; + // -moz-transition: all 0.2s ease; + // -o-transition: all 0.2s ease; + // transition: all 0.2s ease; +} + #profile-sidebar-wrapper { z-index: 999; position: fixed; diff --git a/src/website/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/src/website/packages/fakeyou.com/src/v2/view/PageContainer.tsx index 247fdbc495..ce8cfed413 100644 --- a/src/website/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/src/website/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -70,7 +70,6 @@ import { GetComputedTtsCategoryAssignmentsSuccessResponse } from "@storyteller/c import { NewsPage } from "./pages/news/NewsPage"; import { LandingPage } from "./pages/landing/LandingPage"; import { ChannelsPage } from "./pages/channels/Channels"; -import { TrumpTtsPage } from "./pages/character/trump/TrumpTtsPage"; //import { LandingPage } from "./pages/landing/LandingPage"; // import { VcModelListPage } from "./pages/vc/vc_model_list/VcModelListPage"; @@ -113,6 +112,7 @@ import DomainConfigProvider from "context/DomainConfigContext"; import DevUpload from "./pages/dev_upload/DevUpload"; import DevMediaInput from "./pages/dev_upload/DevMediaInput"; import NewTTS from "./pages/audio_gen/tts/NewTTS"; +import NewTrumpTTS from "./pages/audio_gen/tts/NewTrumpTTS"; import NewVC from "./pages/audio_gen/vc/NewVC"; import DashboardPage from "./pages/dashboard/DashboardPage"; import DevUploadAlt from "./pages/dev_upload/DevUploadAlt"; @@ -228,8 +228,6 @@ class PageContainer extends React.Component<
-
- + + + + + + + -
- - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - {/* Old Profile Page */} - {/* + {/* Old Profile Page */} + {/* */} - - - + + + - - {}} - sessionWrapper={this.props.sessionWrapper} - querySessionAction={this.props.querySessionAction} - /> - + + {}} + sessionWrapper={this.props.sessionWrapper} + querySessionAction={this.props.querySessionAction} + /> + - - - + + + - - {}} - sessionWrapper={this.props.sessionWrapper} - /> - - - {}} - sessionWrapper={this.props.sessionWrapper} - /> - - - {}} - sessionWrapper={this.props.sessionWrapper} - /> - + + {}} + sessionWrapper={this.props.sessionWrapper} + /> + + + {}} + sessionWrapper={this.props.sessionWrapper} + /> + + + {}} + sessionWrapper={this.props.sessionWrapper} + /> + - - - + + + - - - + + + - {/* + {/* */} - {/* + {/* */} - - - + + + - - - + + + - - - + + + - ( - - )} + ( + + )} + /> + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - {/* + {/* */} - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - {/* + {/* // // */} - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - {/* NEW TTS PAGE */} - - - + {/* NEW TTS PAGE */} + + + - {/* NEW VC PAGE */} - - - + {/* NEW VC PAGE */} + + + - {/* NEW LIVE PORTRAIT PAGE */} - - - + {/* NEW LIVE PORTRAIT PAGE */} + + + - - - + + + - - - + + + - {/* Route for initial voice creation */} - - - + {/* Route for initial voice creation */} + + + - {/* Route for editing the dataset details */} - - - + {/* Route for editing the dataset details */} + + + - {/* Route for handling dataset token for uploading samples */} - - - + {/* Route for handling dataset token for uploading samples */} + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - {/* OLD TTS PAGE */} - {/* + {/* + + */} + + {/* OLD TTS PAGE */} + {/* */} - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - {/* test page for tools */} - - - + {/* test page for tools */} + + + - - - + + + - - - + + + - {/* + {/* */} - {/* + {/* // // */} - - - - -
+ + + +
diff --git a/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/AudioGen.scss b/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/AudioGen.scss index 21d42e1dea..dde6132d4d 100644 --- a/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/AudioGen.scss +++ b/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/AudioGen.scss @@ -97,3 +97,60 @@ display: flex; height: min-content; } + +.fy-trump-select { + // background-color: red; + height: 10rem; + margin-bottom: 1rem; + display: flex; + + // display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 1rem; + + button { + flex-grow: 1; + background: $secondary; + appearance: none; + color: #fff; + outline: none; + border-radius: 0.5rem; + border: 2px solid $secondary; + overflow: hidden; + padding: 0; + display: flex; + // justify-content: center; + // align-items: center; + position: relative; + + &.fy-selected-trump { + border-color: $primary; + } + + img { + border-radius: 0.25rem; + width: 100%; + height: auto; + position: absolute; + top: 50%; + left: 50%; + opacity: 0.45; + transform: translate(-50%, -50%); + transition: 0.25s all; + } + + &:hover img { + transform: translate(-50%, -50%) scale(1.05); + opacity: 0.66; + } + + b { + position: absolute; + color: rgba(#fff, 0.66); + font-size: 1.125rem; + height: 1em; + line-height: 1em; + margin: 0.5rem auto auto 0.5rem; + } + } +} diff --git a/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/tts/NewTrumpTTS.tsx b/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/tts/NewTrumpTTS.tsx new file mode 100644 index 0000000000..743477000f --- /dev/null +++ b/src/website/packages/fakeyou.com/src/v2/view/pages/audio_gen/tts/NewTrumpTTS.tsx @@ -0,0 +1,181 @@ +import React, { useState } from "react"; +import { Button, Container, Label, Panel, TextArea } from "components/common"; +import { useInferenceJobs, useLocalize, useSession } from "hooks"; +import { + faVolumeHigh, + faDeleteLeft, + faWaveformLines, +} from "@fortawesome/pro-solid-svg-icons"; +import "../AudioGen.scss"; +import { SessionTtsInferenceResultList } from "v2/view/_common/SessionTtsInferenceResultsList"; +import { usePrefixedDocumentTitle } from "common/UsePrefixedDocumentTitle"; +import { + GenerateTtsAudio, + GenerateTtsAudioRequest, + GenerateTtsAudioResponse, + GenerateTtsAudioIsOk, +} from "@storyteller/components/src/api/tts/GenerateTtsAudio"; +import { v4 as uuidv4 } from "uuid"; +import { FrontendInferenceJobType } from "@storyteller/components/src/jobs/InferenceJob"; +import { isMobile } from "react-device-detect"; +import { useTtsStore } from "hooks"; +import { AITools } from "components/marketing"; +import { getLocalStorageItem, setLocalStorageItem } from "utils/localStorage"; +import PageHeaderWithImage from "components/layout/PageHeaderWithImage"; +import TrumpSelect, { TrumpOption } from "./TrumpSelect"; + +export default function NewTTS() { + const { enqueueInferenceJob } = useInferenceJobs(); + const { loggedIn, loggedInOrModal, sessionSubscriptions } = useSession(); + const [trumpOption, trumpOptionSet] = useState({ + trump: "angry", + token: "weight_x6r5w2tsxgcrrsgweva6dkrqj", + }); + const { text, setText } = useTtsStore(); + const textChange = ({ target }: { target: any }) => { + setText(target.value); + }; + const [isGenerating, setIsGenerating] = useState(false); + usePrefixedDocumentTitle("FakeYou. Deep Fake Text to Speech."); + + const { t } = useLocalize("NewTTS"); + + const cap = (string: string) => + string.charAt(0).toUpperCase() + string.slice(1); + + const handleSpeak = async (ev: React.FormEvent) => { + ev.preventDefault(); + + const generationCountKey = "generationCountTTS"; + const promptShownKey = "promptShownTTS"; + const ttl = 2 * 60 * 1000; // 2 minutes in milliseconds + let generationCount = parseInt( + getLocalStorageItem(generationCountKey) || "0" + ); + const promptShown = getLocalStorageItem(promptShownKey); + + // Show sign up prompt after 2 generations, and dont show again until local storage expires + if (!loggedIn && generationCount >= 2 && !promptShown) { + loggedInOrModal({ + loginMessage: "Login to keep your generated audio history", + signupMessage: "Sign up to keep your generated audio history", + }); + setLocalStorageItem(promptShownKey, "true", ttl); + } + + if (!text) return; + + setIsGenerating(true); + + const request: GenerateTtsAudioRequest = { + uuid_idempotency_token: uuidv4(), + tts_model_token: trumpOption.token, + inference_text: text, + }; + + try { + const response: GenerateTtsAudioResponse = + await GenerateTtsAudio(request); + if (GenerateTtsAudioIsOk(response)) { + console.log("TTS queued successfully:", response.inference_job_token); + enqueueInferenceJob( + response.inference_job_token, + FrontendInferenceJobType.TextToSpeech + ); + setIsGenerating(false); + } else { + console.error("Error queuing TTS:", response.error); + setIsGenerating(false); + } + } catch (error) { + // @ts-ignore + window.dataLayer.push({ + event: "enqueue_failure", + page: "/tts", + user_id: "$user_id", + }); + console.error("Unexpected error:", error); + setIsGenerating(false); + } + + generationCount += 1; + setLocalStorageItem(generationCountKey, generationCount.toString(), ttl); + }; + + return ( + <> + + + +