diff --git a/_redirects b/_redirects index 3633d7f316..8e9ea431d8 100644 --- a/_redirects +++ b/_redirects @@ -7,6 +7,7 @@ /checkout_success* /index.html 200 /clone* /index.html 200 /coming-soon* /index.html 200 +/character* /index.html 200 /contribute* /index.html 200 /firehose* /index.html 200 /guide* /index.html 200 @@ -34,16 +35,15 @@ /upload* /index.html 200 /video* /index.html 200 /w2l* /index.html 200 - -# This is for YCombinator. +# This is for YCombinator. # This is the *OLD* video for Summer 2022. We'll re-edit. -# PLEASE DO NOT ACECSS THIS URL OR WATCH. IT WILL CHANGE THE +# PLEASE DO NOT ACECSS THIS URL OR WATCH. IT WILL CHANGE THE # VIEW STATISTICS AND WE WON'T BE ABLE TO TELL IF THEY SAW IT #/demo https://www.youtube.com/watch?v=wfFpi-Mv3fY 302 # This is for AI Grant. # This is the *OLD* video for Summer 2022. We'll re-edit. -# PLEASE DO NOT ACECSS THIS URL OR WATCH. IT WILL CHANGE THE +# PLEASE DO NOT ACECSS THIS URL OR WATCH. IT WILL CHANGE THE # VIEW STATISTICS AND WE WON'T BE ABLE TO TELL IF THEY SAW IT #/ai-grant-founder-video https://www.youtube.com/watch?v=Cj7rchSSuLg 302 #/ai-grant-demo https://www.youtube.com/watch?v=0EOZsrH7jxI 302 diff --git a/packages/components/src/api/ApiConfig.ts b/packages/components/src/api/ApiConfig.ts index ca754d2924..ada9b5f4e8 100644 --- a/packages/components/src/api/ApiConfig.ts +++ b/packages/components/src/api/ApiConfig.ts @@ -95,6 +95,9 @@ class ApiConfig { } } + //v2ApiHost = "api.dev.fakeyou.com:12345"; + //useSsl = false; + this.domain = domain; this.useSsl = useSsl; this.v2ApiHost = v2ApiHost; diff --git a/packages/components/src/api/leaderboard/GetLeaderboard.ts b/packages/components/src/api/leaderboard/GetLeaderboard.ts index 6202df8661..0b77d70523 100644 --- a/packages/components/src/api/leaderboard/GetLeaderboard.ts +++ b/packages/components/src/api/leaderboard/GetLeaderboard.ts @@ -2,14 +2,16 @@ import { ApiConfig } from "@storyteller/components"; export interface Leaderboard { success: boolean, - tts_leaderboard: Array - w2l_leaderboard: Array + tts_leaderboard: Array + w2l_leaderboard: Array } -export interface LeaderboardEntryForList { +export interface LeaderboardRow { username: string, display_name: string, gravatar_hash: string, + default_avatar_index: number, + default_avatar_color_index: number, uploaded_count: number, } diff --git a/packages/components/src/api/user/GetUserByUsername.ts b/packages/components/src/api/user/GetUserByUsername.ts index 2c293e4f92..15bb0fe3d5 100644 --- a/packages/components/src/api/user/GetUserByUsername.ts +++ b/packages/components/src/api/user/GetUserByUsername.ts @@ -5,6 +5,8 @@ export interface User { username: string, display_name: string, email_gravatar_hash: string, + default_avatar_index: number, + default_avatar_color_index: number, profile_markdown: string, profile_rendered_html: string, user_role_slug: string, diff --git a/packages/components/src/elements/GetBGColor.tsx b/packages/components/src/elements/GetBGColor.tsx new file mode 100644 index 0000000000..4fb046ecf3 --- /dev/null +++ b/packages/components/src/elements/GetBGColor.tsx @@ -0,0 +1,24 @@ +export function getBackgroundColor(backgroundIndex?: number): string { + switch (backgroundIndex) { + case 0: + return "#E66462"; + case 1: + return "#FD881B"; + case 2: + return "#E7C13C"; + case 3: + return "#4BA905"; + case 4: + return "#25B8A0"; + case 5: + return "#0078D1"; + case 6: + return "#7F52C1"; + case 7: + return "#FF66AC"; + case 8: + return "#259FEC"; + default: + return `#1a1a27`; + } +} diff --git a/packages/components/src/elements/Gravatar.tsx b/packages/components/src/elements/Gravatar.tsx index 6e7bf3f586..a3e303ea23 100644 --- a/packages/components/src/elements/Gravatar.tsx +++ b/packages/components/src/elements/Gravatar.tsx @@ -1,13 +1,26 @@ import React from "react"; +import { getBackgroundColor } from "./GetBGColor"; interface Props { size: number; email_hash?: string; username?: string; + avatarIndex?: number; + backgroundIndex?: number; } function Gravatar(props: Props) { - const gravatarUrl = `https://www.gravatar.com/avatar/${props.email_hash}?s=${props.size}&d=https://fakeyou.com/images/avatars/default-pfp.png`; + // TODO: staging domain + local dev support + let defaultImageUrl = + props.avatarIndex === undefined + ? "https://fakeyou.com/images/avatars/default-pfp.png" + : `https://fakeyou.com/images/avatars/2000x2000/${props.avatarIndex}.webp`; + + // NB: Gravatar suggests URI encoding these: + // https://en.gravatar.com/site/implement/images/ + defaultImageUrl = encodeURIComponent(defaultImageUrl); + + const gravatarUrl = `https://www.gravatar.com/avatar/${props.email_hash}?s=${props.size}&d=${defaultImageUrl}`; let altText = "gravatar"; if (props.username !== undefined) { @@ -21,6 +34,7 @@ function Gravatar(props: Props) { src={gravatarUrl} height={props.size} width={props.size} + style={{ backgroundColor: getBackgroundColor(props.backgroundIndex) }} /> ); } diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/0.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/0.webp new file mode 100644 index 0000000000..f95afe03b2 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/0.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/1.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/1.webp new file mode 100644 index 0000000000..6acf0da539 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/1.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/10.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/10.webp new file mode 100644 index 0000000000..f6fd4df884 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/10.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/11.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/11.webp new file mode 100644 index 0000000000..c14bcebda5 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/11.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/12.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/12.webp new file mode 100644 index 0000000000..0078476c03 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/12.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/13.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/13.webp new file mode 100644 index 0000000000..e8b1635f36 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/13.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/14.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/14.webp new file mode 100644 index 0000000000..fd532381f9 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/14.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/15.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/15.webp new file mode 100644 index 0000000000..c61aea6d96 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/15.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/16.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/16.webp new file mode 100644 index 0000000000..f112d25df5 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/16.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/17.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/17.webp new file mode 100644 index 0000000000..f7ab766002 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/17.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/18.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/18.webp new file mode 100644 index 0000000000..fa3fc2f0ac Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/18.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/19.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/19.webp new file mode 100644 index 0000000000..0207cd889e Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/19.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/2.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/2.webp new file mode 100644 index 0000000000..03777b780f Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/2.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/20.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/20.webp new file mode 100644 index 0000000000..367f411541 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/20.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/21.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/21.webp new file mode 100644 index 0000000000..e6eeb4d155 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/21.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/22.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/22.webp new file mode 100644 index 0000000000..f8c0ffca87 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/22.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/23.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/23.webp new file mode 100644 index 0000000000..15137375b5 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/23.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/24.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/24.webp new file mode 100644 index 0000000000..4e925a9e35 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/24.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/3.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/3.webp new file mode 100644 index 0000000000..ccb44b0afc Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/3.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/4.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/4.webp new file mode 100644 index 0000000000..421877e2e4 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/4.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/5.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/5.webp new file mode 100644 index 0000000000..2b4db489a0 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/5.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/6.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/6.webp new file mode 100644 index 0000000000..dc8e5a2d96 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/6.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/7.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/7.webp new file mode 100644 index 0000000000..d711281f67 Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/7.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/8.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/8.webp new file mode 100644 index 0000000000..a71c77e64a Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/8.webp differ diff --git a/packages/fakeyou.com/public/images/avatars/2000x2000/9.webp b/packages/fakeyou.com/public/images/avatars/2000x2000/9.webp new file mode 100644 index 0000000000..bf72a412ce Binary files /dev/null and b/packages/fakeyou.com/public/images/avatars/2000x2000/9.webp differ diff --git a/packages/fakeyou.com/public/mascot/april_fools.webp b/packages/fakeyou.com/public/mascot/april_fools.webp new file mode 100644 index 0000000000..910f585dff Binary files /dev/null and b/packages/fakeyou.com/public/mascot/april_fools.webp differ diff --git a/packages/fakeyou.com/public/mascot/trump.webp b/packages/fakeyou.com/public/mascot/trump.webp new file mode 100644 index 0000000000..f81a90ab7c Binary files /dev/null and b/packages/fakeyou.com/public/mascot/trump.webp differ diff --git a/packages/fakeyou.com/public/sitemaps/sitemap_static_pages.xml b/packages/fakeyou.com/public/sitemaps/sitemap_static_pages.xml index a75c88c46f..cfd65d43e5 100644 --- a/packages/fakeyou.com/public/sitemaps/sitemap_static_pages.xml +++ b/packages/fakeyou.com/public/sitemaps/sitemap_static_pages.xml @@ -18,4 +18,7 @@ https://fakeyou.com/guide + + https://fakeyou.com/character/donald-trump + diff --git a/packages/fakeyou.com/src/common/UsePrefixedDocumentTitle.tsx b/packages/fakeyou.com/src/common/UsePrefixedDocumentTitle.tsx index 0581fc7261..08a99eabca 100644 --- a/packages/fakeyou.com/src/common/UsePrefixedDocumentTitle.tsx +++ b/packages/fakeyou.com/src/common/UsePrefixedDocumentTitle.tsx @@ -7,6 +7,6 @@ export function usePrefixedDocumentTitle(title?: string) { // NB: Choice of a vertical bar "|" separator is due to conserving pixels, which *might* matter to SEO. // I haven't fully investigated the veracity of this, nor the position of prefixes, suffixes, etc. // https://www.searchenginejournal.com/pipe-or-dash-in-title-tag/378099/#close - const outputTitle = fixed.length === 0 ? DEFAULT_FOR_EMPTY_TITLE : `FakeYou | ${fixed}`; + const outputTitle = fixed.length === 0 ? DEFAULT_FOR_EMPTY_TITLE : `${fixed} | FakeYou`; useDocumentTitle(outputTitle); } diff --git a/packages/fakeyou.com/src/scss/site-refresh.scss b/packages/fakeyou.com/src/scss/site-refresh.scss index c6d2982e47..dbd4d66a1e 100644 --- a/packages/fakeyou.com/src/scss/site-refresh.scss +++ b/packages/fakeyou.com/src/scss/site-refresh.scss @@ -55,7 +55,7 @@ styles with important tags: select { cursor: pointer; - border-radius: 5px; + border-radius: 0.5rem; } .no-wrap { @@ -94,11 +94,11 @@ styles with important tags: } .rounded { - border-radius: 8px !important; + border-radius: 0.5rem !important; } .rounded-5 { - border-radius: 5px !important; + border-radius: 0.5rem !important; } code { @@ -143,6 +143,11 @@ styles with important tags: padding-bottom: 0.4rem !important; } + .py-4 { + padding-top: 2rem !important; + padding-bottom: 2rem !important; + } + .lead { color: rgba($white, 0.8); font-size: 17px; @@ -171,11 +176,11 @@ styles with important tags: } .btn { - border-radius: 5px; + border-radius: 0.5rem; outline: none; font-size: 15px; font-weight: 500; - padding: 10px 24px; + padding: 10px 20px; z-index: 2; display: flex; align-items: center; @@ -275,7 +280,7 @@ styles with important tags: } .panel-tts-results { - border-radius: 5px; + border-radius: 0.5rem; background-color: lighten($panel, 4%); } @@ -308,13 +313,13 @@ styles with important tags: } .menu { - border-radius: 8px !important; + border-radius: 0.5rem !important; color: $white; font-weight: 400; position: absolute; border-color: rgba($white, 0.12) !important; border: 1px solid; - border-radius: 8px; + border-radius: 0.5rem; box-shadow: 0px 5px 20px rgba($black, 0.3); z-index: 3; overflow: hidden; @@ -353,7 +358,7 @@ styles with important tags: } .form-control { - border-radius: 5px; + border-radius: 0.5rem; background-color: $input-dark !important; border-color: $input-dark !important; color: $white !important; @@ -388,7 +393,7 @@ styles with important tags: } .alert { - border-radius: 5px; + border-radius: 0.5rem; font-weight: 400; font-size: 12px; margin-bottom: 1rem; @@ -454,7 +459,7 @@ styles with important tags: } #resultLink { - border-radius: 5px 0 0 5px; + border-radius: 0.5rem 0 0 5px; } #copyBtn { @@ -531,7 +536,7 @@ styles with important tags: } .video-card { - border-radius: 5px; + border-radius: 0.5rem; border: 4px solid; border-color: #fff; padding: 1rem; @@ -625,7 +630,7 @@ styles with important tags: color: $primary; &.btn { - border-radius: 5px; + border-radius: 0.5rem; font-weight: 600; &:hover { background-color: #fdcfce; @@ -671,7 +676,7 @@ styles with important tags: .direct-view-link { background-color: lighten($panel, 4%); border: 1px solid #39394c; - border-radius: 5px; + border-radius: 0.5rem; padding: 12px 16px; min-height: 63px; height: 100%; @@ -740,7 +745,7 @@ styles with important tags: background: $input-dark; margin-top: 6px; padding: 0; - border-radius: 5px; + border-radius: 0.5rem; z-index: 3; } @@ -757,7 +762,7 @@ styles with important tags: background-color: $panel; border-color: lighten($panel, 8%) !important; border: 1px solid; - border-radius: 8px; + border-radius: 0.5rem; box-shadow: 0px 9px 33px 1px rgba(19, 19, 27, 0.8); -webkit-box-shadow: 0px 9px 33px 1px rgba(19, 19, 27, 0.8); -moz-box-shadow: 0px 9px 33px 1px rgba(19, 19, 27, 0.8); @@ -877,7 +882,7 @@ styles with important tags: .twitch-chat-container { border: 1px solid #ffffff12 !important; - border-radius: 8px; + border-radius: 0.5rem; background-color: $panel !important; min-height: 650px; box-shadow: 0 0 0 1px rgba(0 0 0 / 30%), 0 70px 65px rgb(0 0 0 / 10%), @@ -923,8 +928,8 @@ styles with important tags: position: absolute; width: 90%; margin: auto; - top: 18%; - right: 6%; + top: 22%; + right: 9%; bottom: 0; } @@ -976,7 +981,7 @@ styles with important tags: } .channel-thumbnail { - border-radius: 8px; + border-radius: 0.5rem; border: 1px solid #ffffff15; overflow: hidden; transition: all 0.2s; @@ -1146,7 +1151,7 @@ textarea { .panel-select { transition: 0.2s all; cursor: pointer; - border-radius: 8px !important; + border-radius: 0.5rem !important; max-width: 500px; border-width: 1px !important; @@ -1234,11 +1239,11 @@ textarea { margin-right: auto; margin-left: auto; max-width: 1080px; - border-radius: 8px; + border-radius: 0.5rem; } .panel { - border-radius: 8px; + border-radius: 0.5rem; } ul.patrons-list { @@ -1252,7 +1257,7 @@ textarea { .twitch-video-container { min-height: 391px; height: 100%; - border-radius: 8px; + border-radius: 0.5rem; } .p-md-4 { diff --git a/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/packages/fakeyou.com/src/v2/view/PageContainer.tsx index 5b3e46bf49..b426004016 100644 --- a/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -66,6 +66,7 @@ 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"; @@ -479,6 +480,48 @@ class PageContainer extends React.Component { + + + + +

{props.titleIcon} {props.title}

-
-

{props.subText}

+

{props.subText}

{props.showButtons && (
{props.actionButtons} diff --git a/packages/fakeyou.com/src/v2/view/_common/PageHeaderWithImage.tsx b/packages/fakeyou.com/src/v2/view/_common/PageHeaderWithImage.tsx index 81d23e20fe..a1ec5383d3 100644 --- a/packages/fakeyou.com/src/v2/view/_common/PageHeaderWithImage.tsx +++ b/packages/fakeyou.com/src/v2/view/_common/PageHeaderWithImage.tsx @@ -13,7 +13,7 @@ interface Props { function PageHeaderWithImage(props: Props) { return ( -
+
@@ -30,10 +30,12 @@ function PageHeaderWithImage(props: Props) { {props.titleIcon} {props.title} -
-

{props.subText}

+ +

+ {props.subText} +

{props.showButtons && ( -
+
{props.actionButtons}
)} diff --git a/packages/fakeyou.com/src/v2/view/nav/FooterNav.tsx b/packages/fakeyou.com/src/v2/view/nav/FooterNav.tsx index 6d1fc77b34..6848cf2ccd 100644 --- a/packages/fakeyou.com/src/v2/view/nav/FooterNav.tsx +++ b/packages/fakeyou.com/src/v2/view/nav/FooterNav.tsx @@ -109,7 +109,7 @@ function FooterNav(props: Props) { href={ThirdPartyLinks.FAKEYOU_TIKTOK} target="_blank" rel="noopener noreferrer" - title="Support us by becoming a patreon" + title="Follow us on Tiktok" > @@ -145,10 +145,6 @@ function FooterNav(props: Props) { Leaderboard -
  • - Patrons -
  • -
  • Feed
  • @@ -184,8 +180,10 @@ function FooterNav(props: Props) {
    - © 2023 FakeYou, built by{" "} - echelon in Atlanta. + © 2023 FakeYou by{" "} + + Storyteller.ai +
    {moderationLink} diff --git a/packages/fakeyou.com/src/v2/view/nav/TopNav.tsx b/packages/fakeyou.com/src/v2/view/nav/TopNav.tsx index 4e564cc6a0..77c5914b5d 100644 --- a/packages/fakeyou.com/src/v2/view/nav/TopNav.tsx +++ b/packages/fakeyou.com/src/v2/view/nav/TopNav.tsx @@ -18,7 +18,7 @@ import { faBook, faStar, } from "@fortawesome/free-solid-svg-icons"; -import { faDiscord, faPatreon } from "@fortawesome/free-brands-svg-icons"; +import { faDiscord } from "@fortawesome/free-brands-svg-icons"; import { Logout } from "@storyteller/components/src/api/session/Logout"; // import { Gravatar } from "@storyteller/components/src/elements/Gravatar"; import { @@ -96,8 +96,11 @@ function TopNav(props: Props) { }; // TODO: We're having an outage and need to lower this. //const interval = setInterval(async () => fetch(), 15000); - const refreshInterval = Math.max(DEFAULT_QUEUE_REFRESH_INTERVAL_MILLIS, pendingTtsJobs.refresh_interval_millis); - console.log('new interval', refreshInterval); + const refreshInterval = Math.max( + DEFAULT_QUEUE_REFRESH_INTERVAL_MILLIS, + pendingTtsJobs.refresh_interval_millis + ); + console.log("new interval", refreshInterval); const interval = setInterval(async () => fetch(), refreshInterval); fetch(); return () => clearInterval(interval); @@ -463,16 +466,6 @@ function TopNav(props: Props) { {t("nav.TopNav.main.discordOption")} -
  • - - - {t("nav.TopNav.main.patronsOption")} - -
  • - + A Glimpse of the Future
    diff --git a/packages/fakeyou.com/src/v2/view/pages/about/guide_page/GuidePage.tsx b/packages/fakeyou.com/src/v2/view/pages/about/guide_page/GuidePage.tsx index 8628008ba6..fbe105464b 100644 --- a/packages/fakeyou.com/src/v2/view/pages/about/guide_page/GuidePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/about/guide_page/GuidePage.tsx @@ -8,7 +8,6 @@ import { usePrefixedDocumentTitle } from "../../../../../common/UsePrefixedDocum interface Props {} function GuidePage(props: Props) { - usePrefixedDocumentTitle("Guide to all things Deep Fake"); return ( @@ -30,10 +29,7 @@ function GuidePage(props: Props) {
    - + FakeYou TTS Guide
    @@ -64,81 +60,90 @@ function GuidePage(props: Props) {

    Quick Tips

    - Here are some quick tips to generate the best sounding text-to-speech. + Here are some quick tips to generate the best sounding + text-to-speech.

    Fixing nonsense “babbling”

    +

    (This is not a typical problem.)

    +

    - (This is not a typical problem.) + Some of our very earliest models were built using a limited + amount of data and are sometimes prone to producing speech that + sounds like “babbling” or incoherent vocal + convulsions.


    - Some of our very earliest models were built using a limited amount of data - and are sometimes prone to producing speech that sounds like “babbling” - or incoherent vocal convulsions. + This problem can typically be fixed by{" "} + + adding ending punctuation to your sentence + + . If the audio still has problems,{" "} + + add a comma at the start and end of your text + {" "} + so that the program can add brief pauses. This usually corrects + the problem.


    - This problem can typically be fixed by - {" "} - adding ending punctuation to your sentence. - If the audio still has problems, - {" "} - add a comma at the start and end of your text - {" "} - so that the program can add brief pauses. This usually corrects the problem. -

    -
    -

    - If the incoherent audio is at the end, you can always edit it with software - such as Audacity. + If the incoherent audio is at the end, you can always edit it + with software such as Audacity.

    -

    - Getting the correct pronunciation -

    +

    Getting the correct pronunciation

    - Sometimes a TTS model will not pronounce words correctly or in the - way you like. - You can experiment with misspellings of words until you get something - that sounds better. For example “peekahchuu” might sound different - than “pikachu”. + Sometimes a TTS model will not pronounce words correctly or in + the way you like. You can{" "} + + experiment with misspellings + {" "} + of words until you get something that sounds better. For example{" "} + “peekahchuu” might sound different than{" "} + “pikachu”.


    - Many of our models also support Arpabet phonetic annotation. It's an advanced feature you can - learn to use by joining our . + Many of our models also support Arpabet phonetic annotation. + It's an advanced feature you can learn to use by joining our{" "} + .

    Emotional conditioning

    To get a certain emotion and personality in the message you - want, add some extra emotional “conditioning”. + want, add some extra emotional “conditioning”.


    - To do this, think of a strong emotional sentence or two you could start with. - Then add this to the very beginning of your text. - For example, to add some anger to “I can't believe you said that to me!”, - you could input the following instead: + To do this, think of a strong emotional sentence or two you + could start with. Then add this to the very beginning of your + text. For example, to add some anger to{" "} + “I can't believe you said that to me!”, you + could input the following instead:


    - “Darn it! I hate you! I can't believe you said that to me!” + + “Darn it! I hate you! I can't believe + you said that to me!” +


    - You can later remove these extra leading sentences with an audio editor such as Audacity, leaving - just the speech you want. + You can later remove these extra leading sentences with an audio + editor such as Audacity, leaving just the speech you want.

    Yelling emotions

    - While not all models support it, some of our models incorporate rich emotional samples - that were transcripted with an emphasis mark – typically an exclamation mark (!). + While not all models support it, some of our models incorporate + rich emotional samples that were transcripted with an emphasis + mark – typically an exclamation mark (!).

    diff --git a/packages/fakeyou.com/src/v2/view/pages/about/privacy_page/PrivacyPage.tsx b/packages/fakeyou.com/src/v2/view/pages/about/privacy_page/PrivacyPage.tsx index 07740ad8bb..8a121ea6e7 100644 --- a/packages/fakeyou.com/src/v2/view/pages/about/privacy_page/PrivacyPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/about/privacy_page/PrivacyPage.tsx @@ -6,7 +6,6 @@ import { usePrefixedDocumentTitle } from "../../../../../common/UsePrefixedDocum interface Props {} function PrivacyPage(props: Props) { - usePrefixedDocumentTitle("Privacy Statement"); return ( @@ -14,7 +13,7 @@ function PrivacyPage(props: Props) {
    FakeYou Privacy Statement @@ -32,53 +31,112 @@ function PrivacyPage(props: Props) {

    FakeYou and You

    + In simple terms, we basically run a web service that allows you to + register, submit data, upload voice data, and share results with + others. We run Google Analytics and collect payment information. We + do not analyze your audio in an attempt to identify it, sell it, or + use it in any way other than to provide and improve our service. But + here's the legalese: + {/* From https://app.termly.io/document/privacy-policy/772c10f5-4a8b-401e-b00a-c3cba9760652 */} +

    Privacy Statement

    +

    + This privacy notice for Learning Machines, Inc (doing business as + Storyteller) ("Storyteller," "we," "us," or "our"), describes how + and why we might collect, store, use, and/or share ("process") + your information when you use our services ("Services"), such as + when you: +

    +
      +
    • + Visit our website at https://fakeyou.com, or any website of ours + that links to this privacy notice +
    • -In simple terms, we basically run a web service that allows you to register, submit data, upload voice data, and share results with others. -We run Google Analytics and collect payment information. -We do not analyze your audio in an attempt to identify it, sell it, or use it in any way other than to provide and improve our service. -But here's the legalese: +
    • + Download and use our mobile application (FakeYou), or any other + application of ours that links to this privacy notice +
    • -{/* From https://app.termly.io/document/privacy-policy/772c10f5-4a8b-401e-b00a-c3cba9760652 */} - -

      Privacy Statement

      - -

      This privacy notice for Learning Machines, Inc (doing business as Storyteller) ("Storyteller," "we," "us," or "our"), describes how and why we might collect, store, use, and/or share ("process") your information when you use our services ("Services"), such as when you:

      - -
        -
      • Visit our website at https://fakeyou.com, or any website of ours that links to this privacy notice
      • - -
      • Download and use our mobile application (FakeYou), or any other application of ours that links to this privacy notice
      • - -
      • Engage with us in other related ways, including any sales, marketing, or events
      • -
      - -

      Questions or concerns? Reading this privacy notice will help you understand your privacy rights and choices. If you do not agree with our policies and practices, please do not use our Services. If you still have any questions or concerns, please contact us at support@storyteller.io.

      - - -

      SUMMARY OF KEY POINTS

      - -

      This summary provides key points from our privacy notice, but you can find out more details about any of these topics by clicking the link following each key point or by using our table of contents below to find the section you are looking for. {/*You can also click here to go directly to our table of contents.*/}

      - -

      What personal information do we process? When you visit, use, or navigate our Services, we may process personal information depending on how you interact with Storyteller and the Services, the choices you make, and the products and features you use. {/*Click here to learn more.*/}

      - -

      Do we process any sensitive personal information? We do not process sensitive personal information.

      - -

      Do we receive any information from third parties? We do not receive any information from third parties.

      - -

      How do we process your information? We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent. We process your information only when we have a valid legal reason to do so. {/*Click here to learn more.*/}

      - -

      In what situations and with which types of parties do we share personal information? We may share information in specific situations and with specific categories of third parties. {/*Click here to learn more.*/}

      - -

      How do we keep your information safe? We have organizational and technical processes and procedures in place to protect your personal information. However, no electronic transmission over the internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. {/*Click here to learn more.*/}

      - -

      What are your rights? Depending on where you are located geographically, the applicable privacy law may mean you have certain rights regarding your personal information. {/*Click here to learn more.*/}

      - -

      How do you exercise your rights? The easiest way to exercise your rights is by filling out our data subject request form available here, or by contacting us. We will consider and act upon any request in accordance with applicable data protection laws.

      - -{/*

      Want to learn more about what Storyteller does with any information we collect? Click here to review the notice in full.

      */} - - -{/*TABLE OF CONTENTS +
    • + Engage with us in other related ways, including any sales, + marketing, or events +
    • +
    +

    + Questions or concerns? Reading this privacy + notice will help you understand your privacy rights and choices. + If you do not agree with our policies and practices, please do not + use our Services. If you still have any questions or concerns, + please contact us at support@storyteller.io. +

    +

    SUMMARY OF KEY POINTS

    +

    + + This summary provides key points from our privacy notice, but + you can find out more details about any of these topics by + clicking the link following each key point or by using our table + of contents below to find the section you are looking for.{" "} + {/*You can also click here to go directly to our table of contents.*/} + +

    +

    + What personal information do we process? When you + visit, use, or navigate our Services, we may process personal + information depending on how you interact with Storyteller and the + Services, the choices you make, and the products and features you + use. {/*Click here to learn more.*/} +

    +

    + Do we process any sensitive personal information?{" "} + We do not process sensitive personal information. +

    +

    + Do we receive any information from third parties?{" "} + We do not receive any information from third parties. +

    +

    + How do we process your information? We process + your information to provide, improve, and administer our Services, + communicate with you, for security and fraud prevention, and to + comply with law. We may also process your information for other + purposes with your consent. We process your information only when + we have a valid legal reason to do so.{" "} + {/*Click here to learn more.*/} +

    +

    + + In what situations and with which types of parties do we share + personal information? + {" "} + We may share information in specific situations and with specific + categories of third parties. {/*Click here to learn more.*/} +

    +

    + How do we keep your information safe? We have + organizational and technical processes and procedures in place to + protect your personal information. However, no electronic + transmission over the internet or information storage technology + can be guaranteed to be 100% secure, so we cannot promise or + guarantee that hackers, cybercriminals, or other unauthorized + third parties will not be able to defeat our security and + improperly collect, access, steal, or modify your information.{" "} + {/*Click here to learn more.*/} +

    +

    + What are your rights? Depending on where you are + located geographically, the applicable privacy law may mean you + have certain rights regarding your personal information.{" "} + {/*Click here to learn more.*/} +

    +

    + How do you exercise your rights? The easiest way + to exercise your rights is by filling out our data subject request + form available here, or by contacting us. We will consider and act + upon any request in accordance with applicable data protection + laws. +

    + {/*

    Want to learn more about what Storyteller does with any information we collect? Click here to review the notice in full.

    */} + {/*TABLE OF CONTENTS 1. WHAT INFORMATION DO WE COLLECT? 2. HOW DO WE PROCESS YOUR INFORMATION? @@ -95,502 +153,1065 @@ But here's the legalese: 13. DO WE MAKE UPDATES TO THIS NOTICE? 14. HOW CAN YOU CONTACT US ABOUT THIS NOTICE? 15. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?*/} - -

    1. WHAT INFORMATION DO WE COLLECT?

    - -
    Personal information you disclose to us
    - -

    In Short: We collect personal information that you provide to us.

    - -

    We collect personal information that you voluntarily provide to us when you register on the Services, express an interest in obtaining information about us or our products and Services, when you participate in activities on the Services, or otherwise when you contact us.

    - -

    Personal Information Provided by You. The personal information that we collect depends on the context of your interactions with us and the Services, the choices you make, and the products and features you use. The personal information we collect may include the following:

    - -
      -
    • email addresses
    • - -
    • usernames
    • - -
    • passwords
    • - -
    • contact preferences
    • - -
    • debit/credit card numbers
    • - -
    • names
    • - -
    - -

    Sensitive Information. We do not process sensitive information.

    - -

    Payment Data. We may collect data necessary to process your payment if you make purchases, such as your payment instrument number, and the security code associated with your payment instrument. All payment data is stored by Stripe. You may find their privacy notice link(s) here: https://stripe.com/privacy.

    - -

    Social Media Login Data. We may provide you with the option to register with us using your existing social media account details, like your Facebook, Twitter, or other social media account. If you choose to register in this way, we will collect the information described in the section called "HOW DO WE HANDLE YOUR SOCIAL LOGINS?" below.

    - -

    Application Data. If you use our application(s), we also may collect the following information if you choose to provide us with access or permission:

    - -
    • Mobile Device Data. We automatically collect device information (such as your mobile device ID, model, and manufacturer), operating system, version information and system configuration information, device and application identification numbers, browser type and version, hardware model Internet service provider and/or mobile carrier, and Internet Protocol (IP) address (or proxy server). If you are using our application(s), we may also collect information about the phone network associated with your mobile device, your mobile device’s operating system or platform, the type of mobile device you use, your mobile device’s unique device ID, and information about the features of our application(s) you accessed.
    - -

    This information is primarily needed to maintain the security and operation of our application(s), for troubleshooting, and for our internal analytics and reporting purposes.

    - -

    All personal information that you provide to us must be true, complete, and accurate, and you must notify us of any changes to such personal information.

    - -
    Information automatically collected
    - -

    In Short: Some information — such as your Internet Protocol (IP) address and/or browser and device characteristics — is collected automatically when you visit our Services.

    - -

    We automatically collect certain information when you visit, use, or navigate the Services. This information does not reveal your specific identity (like your name or contact information) but may include device and usage information, such as your IP address, browser and device characteristics, operating system, language preferences, referring URLs, device name, country, location, information about how and when you use our Services, and other technical information. This information is primarily needed to maintain the security and operation of our Services, and for our internal analytics and reporting purposes.

    - -

    Like many businesses, we also collect information through cookies and similar technologies.

    - -

    The information we collect includes:

    - -
      -
    • Log and Usage Data. Log and usage data is service-related, diagnostic, usage, and performance information our servers automatically collect when you access or use our Services and which we record in log files. Depending on how you interact with us, this log data may include your IP address, device information, browser type, and settings and information about your activity in the Services (such as the date/time stamps associated with your usage, pages and files viewed, searches, and other actions you take such as which features you use), device event information (such as system activity, error reports (sometimes called "crash dumps"), and hardware settings).
    • - -
    • Device Data. We collect device data such as information about your computer, phone, tablet, or other device you use to access the Services. Depending on the device used, this device data may include information such as your IP address (or proxy server), device and application identification numbers, location, browser type, hardware model, Internet service provider and/or mobile carrier, operating system, and system configuration information.
    • - -
    • Location Data. We collect location data such as information about your device's location, which can be either precise or imprecise. How much information we collect depends on the type and settings of the device you use to access the Services. For example, we may use GPS and other technologies to collect geolocation data that tells us your current location (based on your IP address). You can opt out of allowing us to collect this information either by refusing access to the information or by disabling your Location setting on your device. However, if you choose to opt out, you may not be able to use certain aspects of the Services.
    • -
    - -

    2. HOW DO WE PROCESS YOUR INFORMATION?

    - -

    In Short: We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent.

    - -

    We process your personal information for a variety of reasons, depending on how you interact with our Services, including:

    - -
      -
    • To facilitate account creation and authentication and otherwise manage user accounts. We may process your information so you can create and log in to your account, as well as keep your account in working order.
    • - -
    • To fulfill and manage your orders. We may process your information to fulfill and manage your orders, payments, returns, and exchanges made through the Services.
    • - -
    • To request feedback. We may process your information when necessary to request feedback and to contact you about your use of our Services.
    • - -
    • To send you marketing and promotional communications. We may process the personal information you send to us for our marketing purposes, if this is in accordance with your marketing preferences. You can opt out of our marketing emails at any time. For more information, see "WHAT ARE YOUR PRIVACY RIGHTS?" below).
    • - -
    • To protect our Services. We may process your information as part of our efforts to keep our Services safe and secure, including fraud monitoring and prevention.
    • - -
    • To identify usage trends. We may process information about how you use our Services to better understand how they are being used so we can improve them.
    • - -
    • To save or protect an individual's vital interest. We may process your information when necessary to save or protect an individual’s vital interest, such as to prevent harm.
    • -
    - - -

    3. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR INFORMATION?

    - -

    In Short: We only process your personal information when we believe it is necessary and we have a valid legal reason (i.e., legal basis) to do so under applicable law, like with your consent, to comply with laws, to provide you with services to enter into or fulfill our contractual obligations, to protect your rights, or to fulfill our legitimate business interests.

    - -

    If you are located in the EU or UK, this section applies to you.

    - -

    The General Data Protection Regulation (GDPR) and UK GDPR require us to explain the valid legal bases we rely on in order to process your personal information. As such, we may rely on the following legal bases to process your personal information:

    - -
      -
    • Consent. We may process your information if you have given us permission (i.e., consent) to use your personal information for a specific purpose. You can withdraw your consent at any time. {/*Click here to learn more.*/}
    • - -
    • Performance of a Contract. We may process your personal information when we believe it is necessary to fulfill our contractual obligations to you, including providing our Services or at your request prior to entering into a contract with you.
    • - -
    • Legitimate Interests. We may process your information when we believe it is reasonably necessary to achieve our legitimate business interests and those interests do not outweigh your interests and fundamental rights and freedoms. For example, we may process your personal information for some of the purposes described in order to: - -
        -
      • Send users information about special offers and discounts on our products and services
      • - -
      • Analyze how our Services are used so we can improve them to engage and retain users
      • - -
      • Diagnose problems and/or prevent fraudulent activities
      • - -
      • Understand how our users use our products and services so we can improve user experience
      • -
      - -
    • - -
    • Legal Obligations. We may process your information where we believe it is necessary for compliance with our legal obligations, such as to cooperate with a law enforcement body or regulatory agency, exercise or defend our legal rights, or disclose your information as evidence in litigation in which we are involved.
    • - -
    • Vital Interests. We may process your information where we believe it is necessary to protect your vital interests or the vital interests of a third party, such as situations involving potential threats to the safety of any person.
    • -
    - -

    If you are located in Canada, this section applies to you.

    - -

    We may process your information if you have given us specific permission (i.e., express consent) to use your personal information for a specific purpose, or in situations where your permission can be inferred (i.e., implied consent). You can withdraw your consent at any time. {/*Click here to learn more.*/}

    - -

    In some exceptional cases, we may be legally permitted under applicable law to process your information without your consent, including, for example:

    - -
      -
    • If collection is clearly in the interests of an individual and consent cannot be obtained in a timely way
    • - -
    • For investigations and fraud detection and prevention
    • - -
    • For business transactions provided certain conditions are met
    • - -
    • If it is contained in a witness statement and the collection is necessary to assess, process, or settle an insurance claim
    • - -
    • For identifying injured, ill, or deceased persons and communicating with next of kin
    • - -
    • If we have reasonable grounds to believe an individual has been, is, or may be victim of financial abuse
    • - -
    • If it is reasonable to expect collection and use with consent would compromise the availability or the accuracy of the information and the collection is reasonable for purposes related to investigating a breach of an agreement or a contravention of the laws of Canada or a province
    • - -
    • If disclosure is required to comply with a subpoena, warrant, court order, or rules of the court relating to the production of records
    • - -
    • If it was produced by an individual in the course of their employment, business, or profession and the collection is consistent with the purposes for which the information was produced
    • - -
    • If the collection is solely for journalistic, artistic, or literary purposes
    • - -
    • If the information is publicly available and is specified by the regulations
    • -
    - - -

    4. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?

    - -

    In Short: We may share information in specific situations described in this section and/or with the following categories of third parties.

    - -

    Vendors, Consultants, and Other Third-Party Service Providers. We may share your data with third-party vendors, service providers, contractors, or agents ("third parties") who perform services for us or on our behalf and require access to such information to do that work. The categories of third parties we may share personal information with are as follows:

    - -
      -
    • Cloud Computing Services
    • - -
    • Data Analytics Services
    • - -
    • Payment Processors
    • - -
    • Performance Monitoring Tools
    • - -
    • User Account Registration & Authentication Services
    • -
    - - -

    We also may need to share your personal information in the following situations:

    - -
      -
    • Business Transfers. We may share or transfer your information in connection with, or during negotiations of, any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another company.
    • - -
    • Affiliates. We may share your information with our affiliates, in which case we will require those affiliates to honor this privacy notice. Affiliates include our parent company and any subsidiaries, joint venture partners, or other companies that we control or that are under common control with us.
    • -
    - - -

    5. DO WE USE COOKIES AND OTHER TRACKING TECHNOLOGIES?

    - -

    In Short: We may use cookies and other tracking technologies to collect and store your information.

    - -

    We may use cookies and similar tracking technologies (like web beacons and pixels) to access or store information. {/*Specific information about how we use such technologies and how you can refuse certain cookies is set out in our Cookie Notice. */}

    - -

    6. HOW DO WE HANDLE YOUR SOCIAL LOGINS?

    - -

    In Short: If you choose to register or log in to our Services using a social media account, we may have access to certain information about you.

    - -

    Our Services offer you the ability to register and log in using your third-party social media account details (like your Facebook or Twitter logins). Where you choose to do this, we will receive certain profile information about you from your social media provider. The profile information we receive may vary depending on the social media provider concerned, but will often include your name, email address, friends list, and profile picture, as well as other information you choose to make public on such a social media platform.

    - -

    We will use the information we receive only for the purposes that are described in this privacy notice or that are otherwise made clear to you on the relevant Services. Please note that we do not control, and are not responsible for, other uses of your personal information by your third-party social media provider. We recommend that you review their privacy notice to understand how they collect, use, and share your personal information, and how you can set your privacy preferences on their sites and apps.

    - -

    7. HOW LONG DO WE KEEP YOUR INFORMATION?

    - -

    In Short: We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.

    - -

    We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting, or other legal requirements). No purpose in this notice will require us keeping your personal information for longer than the period of time in which users have an account with us.

    - -

    When we have no ongoing legitimate business need to process your personal information, we will either delete or anonymize such information, or, if this is not possible (for example, because your personal information has been stored in backup archives), then we will securely store your personal information and isolate it from any further processing until deletion is possible.

    - -

    8. HOW DO WE KEEP YOUR INFORMATION SAFE?

    - -

    In Short: We aim to protect your personal information through a system of organizational and technical security measures.

    - -

    We have implemented appropriate and reasonable technical and organizational security measures designed to protect the security of any personal information we process. However, despite our safeguards and efforts to secure your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. Although we will do our best to protect your personal information, transmission of personal information to and from our Services is at your own risk. You should only access the Services within a secure environment.

    - -

    9. DO WE COLLECT INFORMATION FROM MINORS?

    - -

    In Short: We do not knowingly collect data from or market to children under 18 years of age.

    - -

    We do not knowingly solicit data from or market to children under 18 years of age. By using the Services, you represent that you are at least 18 or that you are the parent or guardian of such a minor and consent to such minor dependent’s use of the Services. If we learn that personal information from users less than 18 years of age has been collected, we will deactivate the account and take reasonable measures to promptly delete such data from our records. If you become aware of any data we may have collected from children under age 18, please contact us at support@storyteller.io.

    - -

    10. WHAT ARE YOUR PRIVACY RIGHTS?

    - -

    In Short: In some regions, such as the European Economic Area (EEA), United Kingdom (UK), and Canada, you have rights that allow you greater access to and control over your personal information. You may review, change, or terminate your account at any time.

    - -

    In some regions (like the EEA, UK, and Canada), you have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; and (iv) if applicable, to data portability. In certain circumstances, you may also have the right to object to the processing of your personal information. You can make such a request by contacting us by using the contact details provided in the section "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below.

    - -

    We will consider and act upon any request in accordance with applicable data protection laws.

    - -

    If you are located in the EEA or UK and you believe we are unlawfully processing your personal information, you also have the right to complain to your local data protection supervisory authority. You can find their contact details here: https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm.

    - -

    If you are located in Switzerland, the contact details for the data protection authorities are available here: https://www.edoeb.admin.ch/edoeb/en/home.html.

    - -

    Withdrawing your consent: If we are relying on your consent to process your personal information, which may be express and/or implied consent depending on the applicable law, you have the right to withdraw your consent at any time. You can withdraw your consent at any time by contacting us by using the contact details provided in the section "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below or updating your preferences.

    - -

    However, please note that this will not affect the lawfulness of the processing before its withdrawal nor, when applicable law allows, will it affect the processing of your personal information conducted in reliance on lawful processing grounds other than consent.

    - -
    Account Information
    - -

    If you would at any time like to review or change the information in your account or terminate your account, you can:

    - -
      -
    • Contact us using the contact information provided.
    • - -
    • Log in to your account settings and update your user account.
    • -
    - -

    Upon your request to terminate your account, we will deactivate or delete your account and information from our active databases. However, we may retain some information in our files to prevent fraud, troubleshoot problems, assist with any investigations, enforce our legal terms and/or comply with applicable legal requirements.

    - -

    Cookies and similar technologies: Most Web browsers are set to accept cookies by default. If you prefer, you can usually choose to set your browser to remove cookies and to reject cookies. If you choose to remove cookies or reject cookies, this could affect certain features or services of our Services. To opt out of interest-based advertising by advertisers on our Services visit http://www.aboutads.info/choices/.

    - -

    If you have questions or comments about your privacy rights, you may email us at support@storyteller.io.

    - -

    11. CONTROLS FOR DO-NOT-TRACK FEATURES

    - -

    Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting you can activate to signal your privacy preference not to have data about your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, we do not currently respond to DNT browser signals or any other mechanism that automatically communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must follow in the future, we will inform you about that practice in a revised version of this privacy notice.

    - -

    12. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?

    - -

    In Short: Yes, if you are a resident of California, you are granted specific rights regarding access to your personal information.

    - -

    California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits our users who are California residents to request and obtain from us, once a year and free of charge, information about categories of personal information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which we shared personal information in the immediately preceding calendar year. If you are a California resident and would like to make such a request, please submit your request in writing to us using the contact information provided below.

    - -

    If you are under 18 years of age, reside in California, and have a registered account with Services, you have the right to request removal of unwanted data that you publicly post on the Services. To request removal of such data, please contact us using the contact information provided below and include the email address associated with your account and a statement that you reside in California. We will make sure the data is not publicly displayed on the Services, but please be aware that the data may not be completely or comprehensively removed from all our systems (e.g., backups, etc.).

    - -

    CCPA Privacy Notice

    - -

    The California Code of Regulations defines a "resident" as:

    - -{/* TODO: REMOVE BULLET POINT STYLE */} -
      -
    1. (1) every individual who is in the State of California for other than a temporary or transitory purpose and
    2. -
    3. (2) every individual who is domiciled in the State of California who is outside the State of California for a temporary or transitory purpose
    4. -
    - -

    All other individuals are defined as "non-residents."

    - -

    If this definition of "resident" applies to you, we must adhere to certain rights and obligations regarding your personal information.

    - -

    What categories of personal information do we collect?

    - -

    We have collected the following categories of personal information in the past twelve (12) months:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CategoryExamplesCollected
    -A. Identifiers - -Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name - -YES -
    B. Personal information categories listed in the California Customer Records statuteName, contact information, education, employment, employment history, and financial informationYES
    C. Protected classification characteristics under California or federal lawGender and date of birthNO
    D. Commercial informationTransaction information, purchase history, financial details, and payment informationNO
    E. Biometric informationFingerprints and voiceprintsNO
    F. Internet or other similar network activityBrowsing history, search history, online behavior, interest data, and interactions with our and other websites, applications, systems, and advertisementsNO
    G. Geolocation dataDevice locationNO
    H. Audio, electronic, visual, thermal, olfactory, or similar informationImages and audio, video or call recordings created in connection with our business activitiesYES
    I. Professional or employment-related informationBusiness contact details in order to provide you our Services at a business level or job title, work history, and professional qualifications if you apply for a job with usNO
    J. Education InformationStudent records and directory informationNO
    K. Inferences drawn from other personal informationInferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristicsNO
    - - -

    We may also collect other personal information outside of these categories through instances where you interact with us in person, online, or by phone or mail in the context of:

    - -
      -
    • Receiving help through our customer support channels;
    • - -
    • Participation in customer surveys or contests; and
    • - -
    • Facilitation in the delivery of our Services and to respond to your inquiries.
    • -
    - -

    How do we use and share your personal information?

    - -

    More information about our data collection and sharing practices can be found in this privacy notice.

    - -

    You may contact us by email at support@storyteller.io, or by referring to the contact details at the bottom of this document.

    - -

    If you are using an authorized agent to exercise your right to opt out we may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on your behalf.

    - -

    Will your information be shared with anyone else?

    - -

    We may disclose your personal information with our service providers pursuant to a written contract between us and each service provider. Each service provider is a for-profit entity that processes the information on our behalf.

    - -

    We may use your personal information for our own business purposes, such as for undertaking internal research for technological development and demonstration. This is not considered to be "selling" of your personal information.

    - -

    Learning Machines, Inc has not sold any personal information to third parties for a business or commercial purpose in the preceding twelve (12) months. Learning Machines, Inc has disclosed the following categories of personal information to third parties for a business or commercial purpose in the preceding twelve (12) months:

    - -
      -
    • Category A. Identifiers, such as contact details like your real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name.
    • - -
    • Category B. Personal Information, as defined in the California Customer Records law, such as your name, contact information, education, employment, employment history, and financial information.
    • -
    - -

    The categories of third parties to whom we disclosed personal information for a business or commercial purpose can be found under "WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?".

    - -

    Your rights with respect to your personal data

    - -

    Right to request deletion of the data — Request to delete

    - -

    You can ask for the deletion of your personal information. If you ask us to delete your personal information, we will respect your request and delete your personal information, subject to certain exceptions provided by law, such as (but not limited to) the exercise by another consumer of his or her right to free speech, our compliance requirements resulting from a legal obligation, or any processing that may be required to protect against illegal activities.

    - -

    Right to be informed — Request to know

    - -

    Depending on the circumstances, you have a right to know:

    - -
      -
    • whether we collect and use your personal information;
    • - -
    • the categories of personal information that we collect;
    • - -
    • the purposes for which the collected personal information is used;
    • - -
    • whether we sell your personal information to third parties;
    • - -
    • the categories of personal information that we sold or disclosed for a business purpose;
    • - -
    • the categories of third parties to whom the personal information was sold or disclosed for a business purpose; and
    • - -
    • the business or commercial purpose for collecting or selling personal information.
    • -
    - -

    In accordance with applicable law, we are not obligated to provide or delete consumer information that is de-identified in response to a consumer request or to re-identify individual data to verify a consumer request.

    - -

    Right to Non-Discrimination for the Exercise of a Consumer’s Privacy Rights

    - -

    We will not discriminate against you if you exercise your privacy rights.

    - -

    Verification process

    - -

    Upon receiving your request, we will need to verify your identity to determine you are the same person about whom we have the information in our system. These verification efforts require us to ask you to provide information so that we can match it with information you have previously provided us. For instance, depending on the type of request you submit, we may ask you to provide certain information so that we can match the information you provide with the information we already have on file, or we may contact you through a communication method (e.g., phone or email) that you have previously provided to us. We may also use other verification methods as the circumstances dictate.

    - -

    We will only use personal information provided in your request to verify your identity or authority to make the request. To the extent possible, we will avoid requesting additional information from you for the purposes of verification. However, if we cannot verify your identity from the information already maintained by us, we may request that you provide additional information for the purposes of verifying your identity and for security or fraud-prevention purposes. We will delete such additionally provided information as soon as we finish verifying you.

    - -

    Other privacy rights

    - -
      -
    • You may object to the processing of your personal information.
    • - -
    • You may request correction of your personal data if it is incorrect or no longer relevant, or ask to restrict the processing of the information.
    • - -
    • You can designate an authorized agent to make a request under the CCPA on your behalf. We may deny a request from an authorized agent that does not submit proof that they have been validly authorized to act on your behalf in accordance with the CCPA.
    • - -
    • You may request to opt out from future selling of your personal information to third parties. Upon receiving an opt-out request, we will act upon the request as soon as feasibly possible, but no later than fifteen (15) days from the date of the request submission.
    • -
    - -

    To exercise these rights, you can contact us by email at support@storyteller.io, or by referring to the contact details at the bottom of this document. If you have a complaint about how we handle your data, we would like to hear from you.

    - -

    13. DO WE MAKE UPDATES TO THIS NOTICE?

    - -

    In Short: Yes, we will update this notice as necessary to stay compliant with relevant laws.

    - -

    We may update this privacy notice from time to time. The updated version will be indicated by an updated "Revised" date and the updated version will be effective as soon as it is accessible. If we make material changes to this privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting your information.

    - -

    14. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?

    - -

    If you have questions or comments about this notice, you may email us at support@storyteller.io

    - - -

    15. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?

    - -

    Based on the applicable laws of your country, you may have the right to request access to the personal information we collect from you, change that information, or delete it. To request to review, update, or delete your personal information, please {/*submit a request form by clicking here*/} contact us at support@storyteller.io.

    - - - - - - +

    1. WHAT INFORMATION DO WE COLLECT?

    +
    Personal information you disclose to us
    +

    + + In Short: We collect personal information that + you provide to us. + +

    +

    + We collect personal information that you voluntarily provide to us + when you register on the Services, express an interest in + obtaining information about us or our products and Services, when + you participate in activities on the Services, or otherwise when + you contact us. +

    +

    + Personal Information Provided by You. The personal information + that we collect depends on the context of your interactions with + us and the Services, the choices you make, and the products and + features you use. The personal information we collect may include + the following: +

    +
      +
    • email addresses
    • + +
    • usernames
    • + +
    • passwords
    • + +
    • contact preferences
    • + +
    • debit/credit card numbers
    • + +
    • names
    • +
    +

    + Sensitive Information. We do not process sensitive information. +

    +

    + Payment Data. We may collect data necessary to process your + payment if you make purchases, such as your payment instrument + number, and the security code associated with your payment + instrument. All payment data is stored by Stripe. You may find + their privacy notice link(s) here:{" "} + https://stripe.com/privacy. +

    +

    + Social Media Login Data. We may provide you with the option to + register with us using your existing social media account details, + like your Facebook, Twitter, or other social media account. If you + choose to register in this way, we will collect the information + described in the section called "HOW DO WE HANDLE YOUR SOCIAL + LOGINS?" below. +

    +

    + Application Data. If you use our application(s), we also may + collect the following information if you choose to provide us with + access or permission: +

    +
      +
    • + Mobile Device Data. We automatically collect device information + (such as your mobile device ID, model, and manufacturer), + operating system, version information and system configuration + information, device and application identification numbers, + browser type and version, hardware model Internet service + provider and/or mobile carrier, and Internet Protocol (IP) + address (or proxy server). If you are using our application(s), + we may also collect information about the phone network + associated with your mobile device, your mobile device’s + operating system or platform, the type of mobile device you use, + your mobile device’s unique device ID, and information about the + features of our application(s) you accessed. +
    • +
    +

    + This information is primarily needed to maintain the security and + operation of our application(s), for troubleshooting, and for our + internal analytics and reporting purposes. +

    +

    + All personal information that you provide to us must be true, + complete, and accurate, and you must notify us of any changes to + such personal information. +

    +
    Information automatically collected
    +

    + In Short: Some information — such as your Internet Protocol (IP) + address and/or browser and device characteristics — is collected + automatically when you visit our Services. +

    +

    + We automatically collect certain information when you visit, use, + or navigate the Services. This information does not reveal your + specific identity (like your name or contact information) but may + include device and usage information, such as your IP address, + browser and device characteristics, operating system, language + preferences, referring URLs, device name, country, location, + information about how and when you use our Services, and other + technical information. This information is primarily needed to + maintain the security and operation of our Services, and for our + internal analytics and reporting purposes. +

    +

    + Like many businesses, we also collect information through cookies + and similar technologies. +

    +

    The information we collect includes:

    +
      +
    • + Log and Usage Data. Log and usage data is service-related, + diagnostic, usage, and performance information our servers + automatically collect when you access or use our Services and + which we record in log files. Depending on how you interact with + us, this log data may include your IP address, device + information, browser type, and settings and information about + your activity in the Services (such as the date/time stamps + associated with your usage, pages and files viewed, searches, + and other actions you take such as which features you use), + device event information (such as system activity, error reports + (sometimes called "crash dumps"), and hardware settings). +
    • + +
    • + Device Data. We collect device data such as information about + your computer, phone, tablet, or other device you use to access + the Services. Depending on the device used, this device data may + include information such as your IP address (or proxy server), + device and application identification numbers, location, browser + type, hardware model, Internet service provider and/or mobile + carrier, operating system, and system configuration information. +
    • + +
    • + Location Data. We collect location data such as information + about your device's location, which can be either precise or + imprecise. How much information we collect depends on the type + and settings of the device you use to access the Services. For + example, we may use GPS and other technologies to collect + geolocation data that tells us your current location (based on + your IP address). You can opt out of allowing us to collect this + information either by refusing access to the information or by + disabling your Location setting on your device. However, if you + choose to opt out, you may not be able to use certain aspects of + the Services. +
    • +
    +

    2. HOW DO WE PROCESS YOUR INFORMATION?

    +

    + In Short: We process your information to provide, + improve, and administer our Services, communicate with you, for + security and fraud prevention, and to comply with law. We may also + process your information for other purposes with your consent. +

    +

    + + We process your personal information for a variety of reasons, + depending on how you interact with our Services, including: + +

    +
      +
    • + + To facilitate account creation and authentication and + otherwise manage user accounts. + {" "} + We may process your information so you can create and log in to + your account, as well as keep your account in working order. +
    • + +
    • + To fulfill and manage your orders. We may + process your information to fulfill and manage your orders, + payments, returns, and exchanges made through the Services. +
    • + +
    • + To request feedback. We may process your + information when necessary to request feedback and to contact + you about your use of our Services. +
    • + +
    • + + To send you marketing and promotional communications. + {" "} + We may process the personal information you send to us for our + marketing purposes, if this is in accordance with your marketing + preferences. You can opt out of our marketing emails at any + time. For more information, see "WHAT ARE YOUR PRIVACY RIGHTS?" + below). +
    • + +
    • + To protect our Services. We may process your + information as part of our efforts to keep our Services safe and + secure, including fraud monitoring and prevention. +
    • + +
    • + To identify usage trends. We may process + information about how you use our Services to better understand + how they are being used so we can improve them. +
    • + +
    • + + To save or protect an individual's vital interest. + {" "} + We may process your information when necessary to save or + protect an individual’s vital interest, such as to prevent harm. +
    • +
    +

    + 3. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR INFORMATION? +

    +

    + In Short: We only process your personal + information when we believe it is necessary and we have a valid + legal reason (i.e., legal basis) to do so under applicable law, + like with your consent, to comply with laws, to provide you with + services to enter into or fulfill our contractual obligations, to + protect your rights, or to fulfill our legitimate business + interests. +

    +

    + + + If you are located in the EU or UK, this section applies to + you. + + +

    +

    + The General Data Protection Regulation (GDPR) and UK GDPR require + us to explain the valid legal bases we rely on in order to process + your personal information. As such, we may rely on the following + legal bases to process your personal information: +

    +
      +
    • + Consent. We may process your information if you + have given us permission (i.e., consent) to use your personal + information for a specific purpose. You can withdraw your + consent at any time. {/*Click here to learn more.*/} +
    • + +
    • + Performance of a Contract. We may process your + personal information when we believe it is necessary to fulfill + our contractual obligations to you, including providing our + Services or at your request prior to entering into a contract + with you. +
    • + +
    • + Legitimate Interests. We may process your + information when we believe it is reasonably necessary to + achieve our legitimate business interests and those interests do + not outweigh your interests and fundamental rights and freedoms. + For example, we may process your personal information for some + of the purposes described in order to: +
        +
      • + Send users information about special offers and discounts on + our products and services +
      • + +
      • + Analyze how our Services are used so we can improve them to + engage and retain users +
      • + +
      • + Diagnose problems and/or prevent fraudulent activities +
      • + +
      • + Understand how our users use our products and services so we + can improve user experience +
      • +
      +
    • + +
    • + Legal Obligations. We may process your + information where we believe it is necessary for compliance with + our legal obligations, such as to cooperate with a law + enforcement body or regulatory agency, exercise or defend our + legal rights, or disclose your information as evidence in + litigation in which we are involved. +
    • + +
    • + Vital Interests. We may process your + information where we believe it is necessary to protect your + vital interests or the vital interests of a third party, such as + situations involving potential threats to the safety of any + person. +
    • +
    +

    + + + If you are located in Canada, this section applies to you. + + +

    +

    + We may process your information if you have given us specific + permission (i.e., express consent) to use your personal + information for a specific purpose, or in situations where your + permission can be inferred (i.e., implied consent). You can + withdraw your consent at any time. {/*Click here to learn more.*/} +

    +

    + In some exceptional cases, we may be legally permitted under + applicable law to process your information without your consent, + including, for example: +

    +
      +
    • + If collection is clearly in the interests of an individual and + consent cannot be obtained in a timely way +
    • + +
    • For investigations and fraud detection and prevention
    • + +
    • + For business transactions provided certain conditions are met +
    • + +
    • + If it is contained in a witness statement and the collection is + necessary to assess, process, or settle an insurance claim +
    • + +
    • + For identifying injured, ill, or deceased persons and + communicating with next of kin +
    • + +
    • + If we have reasonable grounds to believe an individual has been, + is, or may be victim of financial abuse +
    • + +
    • + If it is reasonable to expect collection and use with consent + would compromise the availability or the accuracy of the + information and the collection is reasonable for purposes + related to investigating a breach of an agreement or a + contravention of the laws of Canada or a province +
    • + +
    • + If disclosure is required to comply with a subpoena, warrant, + court order, or rules of the court relating to the production of + records +
    • + +
    • + If it was produced by an individual in the course of their + employment, business, or profession and the collection is + consistent with the purposes for which the information was + produced +
    • + +
    • + If the collection is solely for journalistic, artistic, or + literary purposes +
    • + +
    • + If the information is publicly available and is specified by the + regulations +
    • +
    +

    + 4. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION? +

    +

    + + In Short: We may share information in specific + situations described in this section and/or with the following + categories of third parties. + +

    +

    + + Vendors, Consultants, and Other Third-Party Service Providers. + {" "} + We may share your data with third-party vendors, service + providers, contractors, or agents ("third parties + ") who perform services for us or on our behalf and require access + to such information to do that work. The categories of third + parties we may share personal information with are as follows: +

    +
      +
    • Cloud Computing Services
    • + +
    • Data Analytics Services
    • + +
    • Payment Processors
    • + +
    • Performance Monitoring Tools
    • + +
    • User Account Registration & Authentication Services
    • +
    +

    + We also may need to share your personal information in the + following situations: +

    +
      +
    • + Business Transfers. We may share or transfer + your information in connection with, or during negotiations of, + any merger, sale of company assets, financing, or acquisition of + all or a portion of our business to another company. +
    • + +
    • + Affiliates. We may share your information with + our affiliates, in which case we will require those affiliates + to honor this privacy notice. Affiliates include our parent + company and any subsidiaries, joint venture partners, or other + companies that we control or that are under common control with + us. +
    • +
    +

    5. DO WE USE COOKIES AND OTHER TRACKING TECHNOLOGIES?

    +

    + + In Short: We may use cookies and other tracking + technologies to collect and store your information. + +

    +

    + We may use cookies and similar tracking technologies (like web + beacons and pixels) to access or store information.{" "} + {/*Specific information about how we use such technologies and how you can refuse certain cookies is set out in our Cookie Notice. */} +

    +

    6. HOW DO WE HANDLE YOUR SOCIAL LOGINS?

    +

    + + In Short: If you choose to register or log in + to our Services using a social media account, we may have access + to certain information about you. + +

    +

    + Our Services offer you the ability to register and log in using + your third-party social media account details (like your Facebook + or Twitter logins). Where you choose to do this, we will receive + certain profile information about you from your social media + provider. The profile information we receive may vary depending on + the social media provider concerned, but will often include your + name, email address, friends list, and profile picture, as well as + other information you choose to make public on such a social media + platform. +

    +

    + We will use the information we receive only for the purposes that + are described in this privacy notice or that are otherwise made + clear to you on the relevant Services. Please note that we do not + control, and are not responsible for, other uses of your personal + information by your third-party social media provider. We + recommend that you review their privacy notice to understand how + they collect, use, and share your personal information, and how + you can set your privacy preferences on their sites and apps. +

    +

    7. HOW LONG DO WE KEEP YOUR INFORMATION?

    +

    + + In Short: We keep your information for as long + as necessary to fulfill the purposes outlined in this privacy + notice unless otherwise required by law. + +

    +

    + We will only keep your personal information for as long as it is + necessary for the purposes set out in this privacy notice, unless + a longer retention period is required or permitted by law (such as + tax, accounting, or other legal requirements). No purpose in this + notice will require us keeping your personal information for + longer than the period of time in which users have an account with + us. +

    +

    + When we have no ongoing legitimate business need to process your + personal information, we will either delete or anonymize such + information, or, if this is not possible (for example, because + your personal information has been stored in backup archives), + then we will securely store your personal information and isolate + it from any further processing until deletion is possible. +

    +

    8. HOW DO WE KEEP YOUR INFORMATION SAFE?

    +

    + + In Short: We aim to protect your personal + information through a system of organizational and technical + security measures. + +

    +

    + We have implemented appropriate and reasonable technical and + organizational security measures designed to protect the security + of any personal information we process. However, despite our + safeguards and efforts to secure your information, no electronic + transmission over the Internet or information storage technology + can be guaranteed to be 100% secure, so we cannot promise or + guarantee that hackers, cybercriminals, or other unauthorized + third parties will not be able to defeat our security and + improperly collect, access, steal, or modify your information. + Although we will do our best to protect your personal information, + transmission of personal information to and from our Services is + at your own risk. You should only access the Services within a + secure environment. +

    +

    9. DO WE COLLECT INFORMATION FROM MINORS?

    +

    + + In Short: We do not knowingly collect data from + or market to children under 18 years of age. + +

    +

    + We do not knowingly solicit data from or market to children under + 18 years of age. By using the Services, you represent that you are + at least 18 or that you are the parent or guardian of such a minor + and consent to such minor dependent’s use of the Services. If we + learn that personal information from users less than 18 years of + age has been collected, we will deactivate the account and take + reasonable measures to promptly delete such data from our records. + If you become aware of any data we may have collected from + children under age 18, please contact us at{" "} + support@storyteller.io. +

    +

    10. WHAT ARE YOUR PRIVACY RIGHTS?

    +

    + + In Short: In some regions, such as the European + Economic Area (EEA), United Kingdom (UK), and Canada, you have + rights that allow you greater access to and control over your + personal information. You may review, change, or terminate your + account at any time. + +

    +

    + In some regions (like the EEA, UK, and Canada), you have certain + rights under applicable data protection laws. These may include + the right (i) to request access and obtain a copy of your personal + information, (ii) to request rectification or erasure; (iii) to + restrict the processing of your personal information; and (iv) if + applicable, to data portability. In certain circumstances, you may + also have the right to object to the processing of your personal + information. You can make such a request by contacting us by using + the contact details provided in the section "HOW CAN YOU CONTACT + US ABOUT THIS NOTICE?" below. +

    +

    + We will consider and act upon any request in accordance with + applicable data protection laws. +

    +

    + If you are located in the EEA or UK and you believe we are + unlawfully processing your personal information, you also have the + right to complain to your local data protection supervisory + authority. You can find their contact details here: + https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm. +

    +

    + If you are located in Switzerland, the contact details for the + data protection authorities are available here: + https://www.edoeb.admin.ch/edoeb/en/home.html. +

    +

    + + Withdrawing your consent + + : If we are relying on your consent to process your personal + information, which may be express and/or implied consent depending + on the applicable law, you have the right to withdraw your consent + at any time. You can withdraw your consent at any time by + contacting us by using the contact details provided in the section + "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below or updating your + preferences. +

    +

    + However, please note that this will not affect the lawfulness of + the processing before its withdrawal nor, when applicable law + allows, will it affect the processing of your personal information + conducted in reliance on lawful processing grounds other than + consent. +

    +
    Account Information
    +

    + If you would at any time like to review or change the information + in your account or terminate your account, you can: +

    +
      +
    • Contact us using the contact information provided.
    • + +
    • + Log in to your account settings and update your user account. +
    • +
    +

    + Upon your request to terminate your account, we will deactivate or + delete your account and information from our active databases. + However, we may retain some information in our files to prevent + fraud, troubleshoot problems, assist with any investigations, + enforce our legal terms and/or comply with applicable legal + requirements. +

    +

    + Cookies and similar technologies: Most Web browsers are set to + accept cookies by default. If you prefer, you can usually choose + to set your browser to remove cookies and to reject cookies. If + you choose to remove cookies or reject cookies, this could affect + certain features or services of our Services. To opt out of + interest-based advertising by advertisers on our Services visit + http://www.aboutads.info/choices/. +

    +

    + If you have questions or comments about your privacy rights, you + may email us at support@storyteller.io. +

    +

    11. CONTROLS FOR DO-NOT-TRACK FEATURES

    +

    + Most web browsers and some mobile operating systems and mobile + applications include a Do-Not-Track ("DNT") feature or setting you + can activate to signal your privacy preference not to have data + about your online browsing activities monitored and collected. At + this stage no uniform technology standard for recognizing and + implementing DNT signals has been finalized. As such, we do not + currently respond to DNT browser signals or any other mechanism + that automatically communicates your choice not to be tracked + online. If a standard for online tracking is adopted that we must + follow in the future, we will inform you about that practice in a + revised version of this privacy notice. +

    +

    12. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?

    +

    + In Short: Yes, if you are a resident of + California, you are granted specific rights regarding access to + your personal information. +

    +

    + California Civil Code Section 1798.83, also known as the "Shine + The Light" law, permits our users who are California residents to + request and obtain from us, once a year and free of charge, + information about categories of personal information (if any) we + disclosed to third parties for direct marketing purposes and the + names and addresses of all third parties with which we shared + personal information in the immediately preceding calendar year. + If you are a California resident and would like to make such a + request, please submit your request in writing to us using the + contact information provided below. +

    +

    + If you are under 18 years of age, reside in California, and have a + registered account with Services, you have the right to request + removal of unwanted data that you publicly post on the Services. + To request removal of such data, please contact us using the + contact information provided below and include the email address + associated with your account and a statement that you reside in + California. We will make sure the data is not publicly displayed + on the Services, but please be aware that the data may not be + completely or comprehensively removed from all our systems (e.g., + backups, etc.). +

    +

    CCPA Privacy Notice

    +

    The California Code of Regulations defines a "resident" as:

    + {/* TODO: REMOVE BULLET POINT STYLE */} +
      +
    1. + (1) every individual who is in the State of California for other + than a temporary or transitory purpose and +
    2. +
    3. + (2) every individual who is domiciled in the State of California + who is outside the State of California for a temporary or + transitory purpose +
    4. +
    +

    All other individuals are defined as "non-residents."

    +

    + If this definition of "resident" applies to you, we must adhere to + certain rights and obligations regarding your personal + information. +

    +

    + + What categories of personal information do we collect? + +

    +

    + We have collected the following categories of personal information + in the past twelve (12) months: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CategoryExamplesCollected
    A. Identifiers + Contact details, such as real name, alias, postal address, + telephone or mobile contact number, unique personal + identifier, online identifier, Internet Protocol address, + email address, and account name + YES
    + B. Personal information categories listed in the California + Customer Records statute + + Name, contact information, education, employment, employment + history, and financial information + YES
    + C. Protected classification characteristics under California + or federal law + Gender and date of birthNO
    D. Commercial information + Transaction information, purchase history, financial details, + and payment information + NO
    E. Biometric informationFingerprints and voiceprintsNO
    F. Internet or other similar network activity + Browsing history, search history, online behavior, interest + data, and interactions with our and other websites, + applications, systems, and advertisements + NO
    G. Geolocation dataDevice locationNO
    + H. Audio, electronic, visual, thermal, olfactory, or similar + information + + Images and audio, video or call recordings created in + connection with our business activities + YES
    I. Professional or employment-related information + Business contact details in order to provide you our Services + at a business level or job title, work history, and + professional qualifications if you apply for a job with us + NO
    J. Education InformationStudent records and directory informationNO
    K. Inferences drawn from other personal information + Inferences drawn from any of the collected personal + information listed above to create a profile or summary about, + for example, an individual’s preferences and characteristics + NO
    +

    + We may also collect other personal information outside of these + categories through instances where you interact with us in person, + online, or by phone or mail in the context of: +

    +
      +
    • Receiving help through our customer support channels;
    • + +
    • Participation in customer surveys or contests; and
    • + +
    • + Facilitation in the delivery of our Services and to respond to + your inquiries. +
    • +
    +

    + + How do we use and share your personal information? + +

    +

    + More information about our data collection and sharing practices + can be found in this privacy notice. +

    +

    + You may contact us by email at support@storyteller.io + , or by referring to the contact details at the bottom of this + document. +

    +

    + If you are using an authorized agent to exercise your right to opt + out we may deny a request if the authorized agent does not submit + proof that they have been validly authorized to act on your + behalf. +

    +

    + Will your information be shared with anyone else? +

    +

    + We may disclose your personal information with our service + providers pursuant to a written contract between us and each + service provider. Each service provider is a for-profit entity + that processes the information on our behalf. +

    +

    + We may use your personal information for our own business + purposes, such as for undertaking internal research for + technological development and demonstration. This is not + considered to be "selling" of your personal information. +

    +

    + Learning Machines, Inc has not sold any personal information to + third parties for a business or commercial purpose in the + preceding twelve (12) months. Learning Machines, Inc has disclosed + the following categories of personal information to third parties + for a business or commercial purpose in the preceding twelve (12) + months: +

    +
      +
    • + Category A. Identifiers, such as contact details like your real + name, alias, postal address, telephone or mobile contact number, + unique personal identifier, online identifier, Internet Protocol + address, email address, and account name. +
    • + +
    • + Category B. Personal Information, as defined in the California + Customer Records law, such as your name, contact information, + education, employment, employment history, and financial + information. +
    • +
    +

    + The categories of third parties to whom we disclosed personal + information for a business or commercial purpose can be found + under "WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?". +

    +

    + Your rights with respect to your personal data +

    +

    + Right to request deletion of the data — Request to delete +

    +

    + You can ask for the deletion of your personal information. If you + ask us to delete your personal information, we will respect your + request and delete your personal information, subject to certain + exceptions provided by law, such as (but not limited to) the + exercise by another consumer of his or her right to free speech, + our compliance requirements resulting from a legal obligation, or + any processing that may be required to protect against illegal + activities. +

    +

    + Right to be informed — Request to know +

    +

    Depending on the circumstances, you have a right to know:

    +
      +
    • whether we collect and use your personal information;
    • + +
    • the categories of personal information that we collect;
    • + +
    • + the purposes for which the collected personal information is + used; +
    • + +
    • + whether we sell your personal information to third parties; +
    • + +
    • + the categories of personal information that we sold or disclosed + for a business purpose; +
    • + +
    • + the categories of third parties to whom the personal information + was sold or disclosed for a business purpose; and +
    • + +
    • + the business or commercial purpose for collecting or selling + personal information. +
    • +
    +

    + In accordance with applicable law, we are not obligated to provide + or delete consumer information that is de-identified in response + to a consumer request or to re-identify individual data to verify + a consumer request. +

    +

    + + Right to Non-Discrimination for the Exercise of a Consumer’s + Privacy Rights + +

    +

    + We will not discriminate against you if you exercise your privacy + rights. +

    +

    + Verification process +

    +

    + Upon receiving your request, we will need to verify your identity + to determine you are the same person about whom we have the + information in our system. These verification efforts require us + to ask you to provide information so that we can match it with + information you have previously provided us. For instance, + depending on the type of request you submit, we may ask you to + provide certain information so that we can match the information + you provide with the information we already have on file, or we + may contact you through a communication method (e.g., phone or + email) that you have previously provided to us. We may also use + other verification methods as the circumstances dictate. +

    +

    + We will only use personal information provided in your request to + verify your identity or authority to make the request. To the + extent possible, we will avoid requesting additional information + from you for the purposes of verification. However, if we cannot + verify your identity from the information already maintained by + us, we may request that you provide additional information for the + purposes of verifying your identity and for security or + fraud-prevention purposes. We will delete such additionally + provided information as soon as we finish verifying you. +

    +

    + Other privacy rights +

    +
      +
    • + You may object to the processing of your personal information. +
    • + +
    • + You may request correction of your personal data if it is + incorrect or no longer relevant, or ask to restrict the + processing of the information. +
    • + +
    • + You can designate an authorized agent to make a request under + the CCPA on your behalf. We may deny a request from an + authorized agent that does not submit proof that they have been + validly authorized to act on your behalf in accordance with the + CCPA. +
    • + +
    • + You may request to opt out from future selling of your personal + information to third parties. Upon receiving an opt-out request, + we will act upon the request as soon as feasibly possible, but + no later than fifteen (15) days from the date of the request + submission. +
    • +
    +

    + To exercise these rights, you can contact us by email at{" "} + support@storyteller.io, or by referring to the + contact details at the bottom of this document. If you have a + complaint about how we handle your data, we would like to hear + from you. +

    +

    13. DO WE MAKE UPDATES TO THIS NOTICE?

    +

    + In Short: Yes, we will update this notice as + necessary to stay compliant with relevant laws. +

    +

    + We may update this privacy notice from time to time. The updated + version will be indicated by an updated "Revised" date and the + updated version will be effective as soon as it is accessible. If + we make material changes to this privacy notice, we may notify you + either by prominently posting a notice of such changes or by + directly sending you a notification. We encourage you to review + this privacy notice frequently to be informed of how we are + protecting your information. +

    +

    14. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?

    +

    + If you have questions or comments about this notice, you may email + us at support@storyteller.io +

    +

    + 15. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM + YOU? +

    +

    + Based on the applicable laws of your country, you may have the + right to request access to the personal information we collect + from you, change that information, or delete it. To request to + review, update, or delete your personal information, please{" "} + {/*submit a request form by clicking here*/} contact us at{" "} + support@storyteller.io. +

    diff --git a/packages/fakeyou.com/src/v2/view/pages/about/terms_page/TermsPage.tsx b/packages/fakeyou.com/src/v2/view/pages/about/terms_page/TermsPage.tsx index 49be8c323e..c095ffe25a 100644 --- a/packages/fakeyou.com/src/v2/view/pages/about/terms_page/TermsPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/about/terms_page/TermsPage.tsx @@ -8,7 +8,6 @@ import { usePrefixedDocumentTitle } from "../../../../../common/UsePrefixedDocum interface Props {} function TermsPage(props: Props) { - usePrefixedDocumentTitle("Terms of Use"); return ( @@ -30,10 +29,7 @@ function TermsPage(props: Props) {
    - + Terms and Conditions
    @@ -51,12 +47,12 @@ function TermsPage(props: Props) {

    Terms and Conditions of Use

    -

    - We do not condone the use of FakeYou for any type of impersonation, - deception, slur, abuse, or mistreatment of any individual or group. - Moreover, we do not allow the use of our service in such a way that - it violates any law of the United States of America. + We do not condone the use of FakeYou for any type of + impersonation, deception, slur, abuse, or mistreatment of any + individual or group. Moreover, we do not allow the use of our + service in such a way that it violates any law of the United + States of America.

    Do not engage in unlawful activity or attempt to impersonate any @@ -68,13 +64,13 @@ function TermsPage(props: Props) { community staff on Discord - . Bad actors will have their access revoked and materials deleted, + . Bad actors will have their access revoked and materials deleted, and may be reported to the appropriate authorities.

    This is a research technology for fun. You may not use FakeYou - deepfakes for commercial use (unless otherwise stated, and only with - specially denoted commercial voices). + deepfakes for commercial use (unless otherwise stated, and only + with specially denoted commercial voices).

    @@ -96,281 +92,1085 @@ function TermsPage(props: Props) {

    - {/* Generated with https://app.termly.io/document/terms-of-use-for-saas/c33f61fe-4527-4e0e-8832-e2b8effba280 */} + {/* Generated with https://app.termly.io/document/terms-of-use-for-saas/c33f61fe-4527-4e0e-8832-e2b8effba280 */} -

    Terms of Use

    +

    Terms of Use

    -

    Last updated November 18, 2022

    +

    Last updated November 18, 2022

    -

    1. AGREEMENT TO TERMS

    +

    1. AGREEMENT TO TERMS

    -

    These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) and Learning Machines, Inc, doing business as Storyteller ("Storyteller", “we”, “us”, or “our”), concerning your access to and use of the https://fakeyou.com website as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the “Site”). You agree that by accessing the Site, you have read, understood, and agree to be bound by all of these Terms of Use, including the User Agreement posted on the Site, which are incorporated into these Terms of Use. IF YOU DO NOT AGREE WITH ALL OF THESE TERMS OF USE, THEN YOU ARE EXPRESSLY PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE IMMEDIATELY.

    +

    + These Terms of Use constitute a legally binding agreement made + between you, whether personally or on behalf of an entity (“you”) + and Learning Machines, Inc, doing business as Storyteller ( + "Storyteller", “we”,{" "} + “us”, or “our”), concerning your + access to and use of the https://fakeyou.com website as well as + any other media form, media channel, mobile website or mobile + application related, linked, or otherwise connected thereto + (collectively, the “Site”). You agree that by accessing the Site, + you have read, understood, and agree to be bound by all of these + Terms of Use, including the User Agreement posted on the Site, + which are incorporated into these Terms of Use. IF YOU DO NOT + AGREE WITH ALL OF THESE TERMS OF USE, THEN YOU ARE EXPRESSLY + PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE + IMMEDIATELY. +

    -

    Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Use from time to time. We will alert you about any changes by updating the “Last updated” date of these Terms of Use, and you waive any right to receive specific notice of each such change. Please ensure that you check the applicable Terms every time you use our Site so that you understand which Terms apply. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted.

    +

    + Supplemental terms and conditions or documents that may be posted + on the Site from time to time are hereby expressly incorporated + herein by reference. We reserve the right, in our sole discretion, + to make changes or modifications to these Terms of Use from time + to time. We will alert you about any changes by updating the “Last + updated” date of these Terms of Use, and you waive any right to + receive specific notice of each such change. Please ensure that + you check the applicable Terms every time you use our Site so that + you understand which Terms apply. You will be subject to, and will + be deemed to have been made aware of and to have accepted, the + changes in any revised Terms of Use by your continued use of the + Site after the date such revised Terms of Use are posted. +

    -

    The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.

    +

    + The information provided on the Site is not intended for + distribution to or use by any person or entity in any jurisdiction + or country where such distribution or use would be contrary to law + or regulation or which would subject us to any registration + requirement within such jurisdiction or country. Accordingly, + those persons who choose to access the Site from other locations + do so on their own initiative and are solely responsible for + compliance with local laws, if and to the extent local laws are + applicable. +

    -

    The Site is not tailored to comply with industry-specific regulations (Health Insurance Portability and Accountability Act (HIPAA), Federal Information Security Management Act (FISMA), etc.), so if your interactions would be subjected to such laws, you may not use this Site. You may not use the Site in a way that would violate the Gramm-Leach-Bliley Act (GLBA).

    +

    + The Site is not tailored to comply with industry-specific + regulations (Health Insurance Portability and Accountability Act + (HIPAA), Federal Information Security Management Act (FISMA), + etc.), so if your interactions would be subjected to such laws, + you may not use this Site. You may not use the Site in a way that + would violate the Gramm-Leach-Bliley Act (GLBA). +

    -

    The Site is intended for users who are at least 13 years of age. All users who are minors in the jurisdiction in which they reside (generally under the age of 18) must have the permission of, and be directly supervised by, their parent or guardian to use the Site. If you are a minor, you must have your parent or guardian read and agree to these Terms of Use prior to you using the Site.

    +

    + The Site is intended for users who are at least 13 years of age. + All users who are minors in the jurisdiction in which they reside + (generally under the age of 18) must have the permission of, and + be directly supervised by, their parent or guardian to use the + Site. If you are a minor, you must have your parent or guardian + read and agree to these Terms of Use prior to you using the Site. +

    +

    2. INTELLECTUAL PROPERTY RIGHTS

    -

    2. INTELLECTUAL PROPERTY RIGHTS

    +

    + Unless otherwise indicated, the Site is our proprietary property + and all source code, databases, functionality, software, website + designs, audio, video, text, photographs, and graphics on the Site + (collectively, the “Content”) and the trademarks, service marks, + and logos contained therein (the “Marks”) are owned or controlled + by us or licensed to us, and are protected by copyright and + trademark laws and various other intellectual property rights and + unfair competition laws of the United States, international + copyright laws, and international conventions. The Content and the + Marks are provided on the Site “AS IS” for your information and + personal use only. Except as expressly provided in these Terms of + Use, no part of the Site and no Content or Marks may be copied, + reproduced, aggregated, republished, uploaded, posted, publicly + displayed, encoded, translated, transmitted, distributed, sold, + licensed, or otherwise exploited for any commercial purpose + whatsoever, without our express prior written permission. +

    -

    Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, international copyright laws, and international conventions. The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.

    +

    + Provided that you are eligible to use the Site, you are granted a + limited license to access and use the Site and to download or + print a copy of any portion of the Content to which you have + properly gained access solely for your personal, non-commercial + use. We reserve all rights not expressly granted to you in and to + the Site, the Content and the Marks. +

    -

    Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks.

    +

    3. USER REPRESENTATIONS

    +

    + By using the Site, you represent and warrant that: (1) all + registration information you submit will be true, accurate, + current, and complete; (2) you will maintain the accuracy of such + information and promptly update such registration information as + necessary; (3) you have the legal capacity and you agree to comply + with these Terms of Use; (4) you are not under the age of 13; (5) + you are not a minor in the jurisdiction in which you reside, or if + a minor, you have received parental permission to use the Site; + (6) you will not access the Site through automated or non-human + means, whether through a bot, script or otherwise; (7) you will + not use the Site for any illegal or unauthorized purpose; and (8) + your use of the Site will not violate any applicable law or + regulation. +

    -

    3. USER REPRESENTATIONS

    +

    + If you provide any information that is untrue, inaccurate, not + current, or incomplete, we have the right to suspend or terminate + your account and refuse any and all current or future use of the + Site (or any portion thereof). +

    -

    By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you are not under the age of 13; (5) you are not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Site; (6) you will not access the Site through automated or non-human means, whether through a bot, script or otherwise; (7) you will not use the Site for any illegal or unauthorized purpose; and (8) your use of the Site will not violate any applicable law or regulation.

    +

    4. USER REGISTRATION

    -

    If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof).

    +

    + You may be required to register with the Site. You agree to keep + your password confidential and will be responsible for all use of + your account and password. We reserve the right to remove, + reclaim, or change a username you select if we determine, in our + sole discretion, that such username is inappropriate, obscene, or + otherwise objectionable. +

    +

    5. FEES AND PAYMENT

    -

    4. USER REGISTRATION

    - -

    You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable.

    - - -

    5. FEES AND PAYMENT

    - - {/*We accept the following forms of payment: + {/*We accept the following forms of payment: - Visa - Mastercard - American Express - Discover*/} -

    You may be required to purchase or pay a fee to access some of our services. You agree to provide current, complete, and accurate purchase and account information for all purchases made via the Site. You further agree to promptly update account and payment information, including email address, payment method, and payment card expiration date, so that we can complete your transactions and contact you as needed. We bill you through an online billing account for purchases made via the Site. Sales tax will be added to the price of purchases as deemed required by us. We may change prices at any time. {/*All payments shall be in U.S. dollars.*/}

    - -

    You agree to pay all charges or fees at the prices then in effect for your purchases, and you authorize us to charge your chosen payment provider for any such amounts upon making your purchase. If your purchase is subject to recurring charges, then you consent to our charging your payment method on a recurring basis without requiring your prior approval for each recurring charge, until you notify us of your cancellation.

    - -

    We reserve the right to correct any errors or mistakes in pricing, even if we have already requested or received payment. We also reserve the right to refuse any order placed through the Site.

    - - -

    6. CANCELLATION

    - -

    You can cancel your subscription at any time by contacting us using the contact information provided below. Your cancellation will take effect at the end of the current paid term.

    - -

    If you are unsatisfied with our services, please email us at support@storyteller.io.

    - - -

    7. SOFTWARE

    - -

    We may include software for use in connection with our services. If such software is accompanied by an end user license agreement (“EULA”), the terms of the EULA will govern your use of the software. If such software is not accompanied by a EULA, then we grant to you a non-exclusive, revocable, personal, and non-transferable license to use such software solely in connection with our services and in accordance with these Terms of Use. Any Software and any related documentation is provided “as is” without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. You accept any and all risk arising out of use or performance of any Software. You may not reproduce or redistribute any software except in accordance with the EULA or these Terms of Use.

    - - -

    8. PROHIBITED ACTIVITIES

    - -

    You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.

    - -

    As a user of the Site, you agree not to:

    - -
      -
    • Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us.
    • -
    • Trick, defraud, or mislead us and other users, especially in any attempt to learn sensitive account information such as user passwords.
    • -
    • Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein.
    • -
    • Disparage, tarnish, or otherwise harm, in our opinion, us and/or the Site.
    • -
    • Use any information obtained from the Site in order to harass, abuse, or harm another person.
    • -
    • Make improper use of our support services or submit false reports of abuse or misconduct.
    • -
    • Use the Site in a manner inconsistent with any applicable laws or regulations.
    • -
    • Engage in unauthorized framing of or linking to the Site.
    • -
    • Upload or transmit (or attempt to upload or to transmit) viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party’s uninterrupted use and enjoyment of the Site or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Site.
    • -
    • Engage in any automated use of the system, such as using scripts to send comments or messages, or using any data mining, robots, or similar data gathering and extraction tools.
    • -
    • Delete the copyright or other proprietary rights notice from any Content.
    • -
    • Attempt to impersonate another user or person or use the username of another user.
    • -
    • Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats (“gifs”), 1×1 pixels, web bugs, cookies, or other similar devices (sometimes referred to as “spyware” or “passive collection mechanisms” or “pcms”).
    • -
    • Interfere with, disrupt, or create an undue burden on the Site or the networks or services connected to the Site.
    • -
    • Harass, annoy, intimidate, or threaten any of our employees or agents engaged in providing any portion of the Site to you.
    • -
    • Attempt to bypass any measures of the Site designed to prevent or restrict access to the Site, or any portion of the Site.
    • -
    • Copy or adapt the Site’s software, including but not limited to Flash, PHP, HTML, JavaScript, or other code.
    • -
    • Except as permitted by applicable law, decipher, decompile, disassemble, or reverse engineer any of the software comprising or in any way making up a part of the Site.
    • -
    • Except as may be the result of standard search engine or Internet browser usage, use, launch, develop, or distribute any automated system, including without limitation, any spider, robot, cheat utility, scraper, or offline reader that accesses the Site, or using or launching any unauthorized script or other software.
    • -
    • Use a buying agent or purchasing agent to make purchases on the Site.
    • -
    • Make any unauthorized use of the Site, including collecting usernames and/or email addresses of users by electronic or other means for the purpose of sending unsolicited email, or creating user accounts by automated means or under false pretenses.
    • -
    • Use the Site as part of any effort to compete with us or otherwise use the Site and/or the Content for any revenue-generating endeavor or commercial enterprise.
    • -
    • Use the website to defame other people
    • -
    • Use the website to impersonate other people without labeling the outputs as parody
    • -
    • Use the website for illegal purposes
    • -
    - - -

    9. USER GENERATED CONTRIBUTIONS

    - -

    The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that:

    - -
      -
    • The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party.
    • -
    • You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use.
    • -
    • You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use.
    • -
    • Your Contributions are not false, inaccurate, or misleading.
    • -
    • Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation.
    • -
    • Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us).
    • -
    • Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone.
    • -
    • Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person and to promote violence against a specific person or class of people.
    • -
    • Your Contributions do not violate any applicable law, regulation, or rule.
    • -
    • Your Contributions do not violate the privacy or publicity rights of any third party.
    • -
    • Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors.
    • -
    • Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, or physical handicap.
    • -
    • Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation.
    • -
    - -

    Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site.

    - - -

    10. CONTRIBUTION LICENSE

    - -

    By posting your Contributions to any part of the Site or making Contributions accessible to the Site by linking your account from the Site to any of your social networking accounts, you automatically grant, and you represent and warrant that you have the right to grant, to us an unrestricted, unlimited, irrevocable, perpetual, non-exclusive, transferable, royalty-free, fully-paid, worldwide right, and license to host, use, copy, reproduce, disclose, sell, resell, publish, broadcast, retitle, archive, store, cache, publicly perform, publicly display, reformat, translate, transmit, excerpt (in whole or in part), and distribute such Contributions (including, without limitation, your image and voice) for any purpose, commercial, advertising, or otherwise, and to prepare derivative works of, or incorporate into other works, such Contributions, and grant and authorize sublicenses of the foregoing. The use and distribution may occur in any media formats and through any media channels.

    - -

    This license will apply to any form, media, or technology now known or hereafter developed, and includes our use of your name, company name, and franchise name, as applicable, and any of the trademarks, service marks, trade names, logos, and personal and commercial images you provide. You waive all moral rights in your Contributions, and you warrant that moral rights have not otherwise been asserted in your Contributions.

    - -

    We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions.

    - -

    We have the right, in our sole and absolute discretion, (1) to edit, redact, or otherwise change any Contributions; (2) to re-categorize any Contributions to place them in more appropriate locations on the Site; and (3) to pre-screen or delete any Contributions at any time and for any reason, without notice. We have no obligation to monitor your Contributions.

    - - -

    11. MOBILE APPLICATION LICENSE

    - -

    Use License

    - -

    If you access the Site via a mobile application, then we grant you a revocable, non-exclusive, non-transferable, limited right to install and use the mobile application on wireless electronic devices owned or controlled by you, and to access and use the mobile application on such devices strictly in accordance with the terms and conditions of this mobile application license contained in these Terms of Use. You shall not: (1) except as permitted by applicable law, decompile, reverse engineer, disassemble, attempt to derive the source code of, or decrypt the application; (2) make any modification, adaptation, improvement, enhancement, translation, or derivative work from the application; (3) violate any applicable laws, rules, or regulations in connection with your access or use of the application; (4) remove, alter, or obscure any proprietary notice (including any notice of copyright or trademark) posted by us or the licensors of the application; (5) use the application for any revenue generating endeavor, commercial enterprise, or other purpose for which it is not designed or intended; (6) make the application available over a network or other environment permitting access or use by multiple devices or users at the same time; (7) use the application for creating a product, service, or software that is, directly or indirectly, competitive with or in any way a substitute for the application; (8) use the application to send automated queries to any website or to send any unsolicited commercial e-mail; or (9) use any proprietary information or any of our interfaces or our other intellectual property in the design, development, manufacture, licensing, or distribution of any applications, accessories, or devices for use with the application.

    - -

    Apple and Android Devices

    - -

    The following terms apply when you use a mobile application obtained from either the Apple Store or Google Play (each an “App Distributor”) to access the Site: (1) the license granted to you for our mobile application is limited to a non-transferable license to use the application on a device that utilizes the Apple iOS or Android operating systems, as applicable, and in accordance with the usage rules set forth in the applicable App Distributor’s terms of service; (2) we are responsible for providing any maintenance and support services with respect to the mobile application as specified in the terms and conditions of this mobile application license contained in these Terms of Use or as otherwise required under applicable law, and you acknowledge that each App Distributor has no obligation whatsoever to furnish any maintenance and support services with respect to the mobile application; (3) in the event of any failure of the mobile application to conform to any applicable warranty, you may notify the applicable App Distributor, and the App Distributor, in accordance with its terms and policies, may refund the purchase price, if any, paid for the mobile application, and to the maximum extent permitted by applicable law, the App Distributor will have no other warranty obligation whatsoever with respect to the mobile application; (4) you represent and warrant that (i) you are not located in a country that is subject to a U.S. government embargo, or that has been designated by the U.S. government as a “terrorist supporting” country and (ii) you are not listed on any U.S. government list of prohibited or restricted parties; (5) you must comply with applicable third-party terms of agreement when using the mobile application, e.g., if you have a VoIP application, then you must not be in violation of their wireless data service agreement when using the mobile application; and (6) you acknowledge and agree that the App Distributors are third-party beneficiaries of the terms and conditions in this mobile application license contained in these Terms of Use, and that each App Distributor will have the right (and will be deemed to have accepted the right) to enforce the terms and conditions in this mobile application license contained in these Terms of Use against you as a third-party beneficiary thereof.

    - - -

    12. SOCIAL MEDIA

    - -

    As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a “Third-Party Account”) by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access your Third-Party Account, as is permitted under the applicable terms and conditions that govern your use of each Third-Party Account. You represent and warrant that you are entitled to disclose your Third-Party Account login information to us and/or grant us access to your Third-Party Account, without breach by you of any of the terms and conditions that govern your use of the applicable Third-Party Account, and without obligating us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of the Third-Party Account. By granting us access to any Third-Party Accounts, you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in your Third-Party Account (the “Social Network Content”) so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from your Third-Party Account additional information to the extent you are notified when you link your account with the Third-Party Account. Depending on the Third-Party Accounts you choose and subject to the privacy settings that you have set in such Third-Party Accounts, personally identifiable information that you post to your Third-Party Accounts may be available on and through your account on the Site. Please note that if a Third-Party Account or associated service becomes unavailable or our access to such Third-Party Account is terminated by the third-party service provider, then Social Network Content may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and your Third-Party Accounts at any time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS. We make no effort to review any Social Network Content for any purpose, including but not limited to, for accuracy, legality, or non-infringement, and we are not responsible for any Social Network Content. You acknowledge and agree that we may access your email address book associated with a Third-Party Account and your contacts list stored on your mobile device or tablet computer solely for purposes of identifying and informing you of those contacts who have also registered to use the Site. You can deactivate the connection between the Site and your Third-Party Account by contacting us using the contact information below or through your account settings (if applicable). We will attempt to delete any information stored on our servers that was obtained through such Third-Party Account, except the username and profile picture that become associated with your account.

    - - -

    13. SUBMISSIONS

    - -

    You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions.

    - - -

    14. THIRD-PARTY WEBSITES AND CONTENT

    - -

    The Site may contain (or you may be sent via the Site) links to other websites ("Third-Party Websites") as well as articles, photographs, text, graphics, pictures, designs, music, sound, video, information, applications, software, and other content or items belonging to or originating from third parties ("Third-Party Content"). Such Third-Party Websites and Third-Party Content are not investigated, monitored, or checked for accuracy, appropriateness, or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any Third-Party Content posted on, available through, or installed from the Site, including the content, accuracy, offensiveness, opinions, reliability, privacy practices, or other policies of or contained in the Third-Party Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any Third-Party Websites or any Third-Party Content does not imply approval or endorsement thereof by us. If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, you do so at your own risk, and you should be aware these Terms of Use no longer govern. You should review the applicable terms and policies, including privacy and data gathering practices, of any website to which you navigate from the Site or relating to any applications you use or install from the Site. Any purchases you make through Third-Party Websites will be through other websites and from other companies, and we take no responsibility whatsoever in relation to such purchases which are exclusively between you and the applicable third party. You agree and acknowledge that we do not endorse the products or services offered on Third-Party Websites and you shall hold us harmless from any harm caused by your purchase of such products or services. Additionally, you shall hold us harmless from any losses sustained by you or harm caused to you relating to or resulting in any way from any Third-Party Content or any contact with Third-Party Websites.

    - - -

    15. U.S. GOVERNMENT RIGHTS

    - -

    Our services are “commercial items” as defined in Federal Acquisition Regulation (“FAR”) 2.101. If our services are acquired by or on behalf of any agency not within the Department of Defense (“DOD”), our services are subject to the terms of these Terms of Use in accordance with FAR 12.212 (for computer software) and FAR 12.211 (for technical data). If our services are acquired by or on behalf of any agency within the Department of Defense, our services are subject to the terms of these Terms of Use in accordance with Defense Federal Acquisition Regulation (“DFARS”) 227.7202-3. In addition, DFARS 252.227-7015 applies to technical data acquired by the DOD. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFARS, or other clause or provision that addresses government rights in computer software or technical data under these Terms of Use.

    - - -

    16. SITE MANAGEMENT

    - -

    We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.

    - - -

    17. PRIVACY POLICY

    - -

    We care about data privacy and security. Please review our Privacy Policy: https://fakeyou.com/privacy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site is hosted in the United States. If you access the Site from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in the United States, then through your continued use of the Site, you are transferring your data to the United States, and you agree to have your data transferred to and processed in the United States. Further, we do not knowingly accept, request, or solicit information from children or knowingly market to children. Therefore, in accordance with the U.S. Children’s Online Privacy Protection Act, if we receive actual knowledge that anyone under the age of 13 has provided personal information to us without the requisite and verifiable parental consent, we will delete that information from the Site as quickly as is reasonably practical.

    - - -

    18. COPYRIGHT INFRINGEMENTS

    - -

    We respect the intellectual property rights of others. If you believe that any material available on or through the Site infringes upon any copyright you own or control, please immediately notify us using the contact information provided below (a “Notification”). A copy of your Notification will be sent to the person who posted or stored the material addressed in the Notification. Please be advised that pursuant to applicable law you may be held liable for damages if you make material misrepresentations in a Notification. Thus, if you are not sure that material located on or linked to by the Site infringes your copyright, you should consider first contacting an attorney.

    - - -

    19. TERM AND TERMINATION

    - -

    These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.

    - -

    If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.

    - - -

    20. MODIFICATIONS AND INTERRUPTIONS

    - -

    We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site.

    - -

    We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith.

    - - -

    21. GOVERNING LAW

    - -

    These Terms of Use and your use of the Site are governed by and construed in accordance with the laws of the State of Georgia applicable to agreements made and to be entirely performed within the State of Georgia, without regard to its conflict of law principles.

    - - -

    22. DISPUTE RESOLUTION

    - -

    Informal Negotiations

    - -

    To expedite resolution and control the cost of any dispute, controversy, or claim related to these Terms of Use (each "Dispute" and collectively, the “Disputes”) brought by either you or us (individually, a “Party” and collectively, the “Parties”), the Parties agree to first attempt to negotiate any Dispute (except those Disputes expressly provided below) informally for at least thirty (30) days before initiating arbitration. Such informal negotiations commence upon written notice from one Party to the other Party.

    - -

    Binding Arbitration

    - -

    If the Parties are unable to resolve a Dispute through informal negotiations, the Dispute (except those Disputes expressly excluded below) will be finally and exclusively resolved by binding arbitration. YOU UNDERSTAND THAT WITHOUT THIS PROVISION, YOU WOULD HAVE THE RIGHT TO SUE IN COURT AND HAVE A JURY TRIAL. The arbitration shall be commenced and conducted under the Commercial Arbitration Rules of the American Arbitration Association ("AAA") and, where appropriate, the AAA’s Supplementary Procedures for Consumer Related Disputes ("AAA Consumer Rules"), both of which are available at the AAA website www.adr.org. Your arbitration fees and your share of arbitrator compensation shall be governed by the AAA Consumer Rules and, where appropriate, limited by the AAA Consumer Rules. If such costs are determined by the arbitrator to be excessive, we will pay all arbitration fees and expenses. The arbitration may be conducted in person, through the submission of documents, by phone, or online. The arbitrator will make a decision in writing, but need not provide a statement of reasons unless requested by either Party. The arbitrator must follow applicable law, and any award may be challenged if the arbitrator fails to do so. Except where otherwise required by the applicable AAA rules or applicable law, the arbitration will take place in Cobb, Georgia. Except as otherwise provided herein, the Parties may litigate in court to compel arbitration, stay proceedings pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator.

    - -

    If for any reason, a Dispute proceeds in court rather than arbitration, the Dispute shall be commenced or prosecuted in the state and federal courts located in Cobb, Georgia, and the Parties hereby consent to, and waive all defenses of lack of personal jurisdiction, and forum non conveniens with respect to venue and jurisdiction in such state and federal courts. Application of the United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transaction Act (UCITA) are excluded from these Terms of Use.

    - -

    In no event shall any Dispute brought by either Party related in any way to the Site be commenced more than one (1) years after the cause of action arose. If this provision is found to be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling within that portion of this provision found to be illegal or unenforceable and such Dispute shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, and the Parties agree to submit to the personal jurisdiction of that court.

    - -

    Restrictions

    - -

    The Parties agree that any arbitration shall be limited to the Dispute between the Parties individually. To the full extent permitted by law, (a) no arbitration shall be joined with any other proceeding; (b) there is no right or authority for any Dispute to be arbitrated on a class-action basis or to utilize class action procedures; and (c) there is no right or authority for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons.

    - -

    Exceptions to Informal Negotiations and Arbitration

    - -

    The Parties agree that the following Disputes are not subject to the above provisions concerning informal negotiations and binding arbitration: (a) any Disputes seeking to enforce or protect, or concerning the validity of, any of the intellectual property rights of a Party; (b) any Dispute related to, or arising from, allegations of theft, piracy, invasion of privacy, or unauthorized use; and (c) any claim for injunctive relief. If this provision is found to be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling within that portion of this provision found to be illegal or unenforceable and such Dispute shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, and the Parties agree to submit to the personal jurisdiction of that court.

    - - -

    23. CORRECTIONS

    - -

    There may be information on the Site that contains typographical errors, inaccuracies, or omissions, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.

    - - -

    24. DISCLAIMER

    - -

    THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.

    - - -

    25. LIMITATIONS OF LIABILITY

    - -

    IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO THE AMOUNT PAID, IF ANY, BY YOU TO US DURING THE SIX (6) MONTH PERIOD PRIOR TO ANY CAUSE OF ACTION ARISING. CERTAIN US STATE LAWS AND INTERNATIONAL LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS.

    - - -

    26. INDEMNIFICATION

    - -

    You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.

    - - -

    27. USER DATA

    - -

    We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.

    - - -

    28. ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES

    - -

    Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means.

    - - -

    29. CALIFORNIA USERS AND RESIDENTS

    - -

    If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at (800) 952-5210 or (916) 445-1254.

    - - -

    30. MISCELLANEOUS

    - -

    These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.

    - - -

    31. CONTACT US

    - -

    In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at:

    - -

    Learning Machines, Inc

    -

    support@storyteller.io

    - - - - - - +

    + You may be required to purchase or pay a fee to access some of our + services. You agree to provide current, complete, and accurate + purchase and account information for all purchases made via the + Site. You further agree to promptly update account and payment + information, including email address, payment method, and payment + card expiration date, so that we can complete your transactions + and contact you as needed. We bill you through an online billing + account for purchases made via the Site. Sales tax will be added + to the price of purchases as deemed required by us. We may change + prices at any time. {/*All payments shall be in U.S. dollars.*/} +

    + +

    + You agree to pay all charges or fees at the prices then in effect + for your purchases, and you authorize us to charge your chosen + payment provider for any such amounts upon making your purchase. + If your purchase is subject to recurring charges, then you consent + to our charging your payment method on a recurring basis without + requiring your prior approval for each recurring charge, until you + notify us of your cancellation. +

    + +

    + We reserve the right to correct any errors or mistakes in pricing, + even if we have already requested or received payment. We also + reserve the right to refuse any order placed through the Site. +

    + +

    6. CANCELLATION

    + +

    + You can cancel your subscription at any time by contacting us + using the contact information provided below. Your cancellation + will take effect at the end of the current paid term. +

    + +

    + If you are unsatisfied with our services, please email us at{" "} + support@storyteller.io. +

    + +

    7. SOFTWARE

    + +

    + We may include software for use in connection with our services. + If such software is accompanied by an end user license agreement + (“EULA”), the terms of the EULA will govern your use of the + software. If such software is not accompanied by a EULA, then we + grant to you a non-exclusive, revocable, personal, and + non-transferable license to use such software solely in connection + with our services and in accordance with these Terms of Use. Any + Software and any related documentation is provided “as is” without + warranty of any kind, either express or implied, including, + without limitation, the implied warranties of merchantability, + fitness for a particular purpose, or non-infringement. You accept + any and all risk arising out of use or performance of any + Software. You may not reproduce or redistribute any software + except in accordance with the EULA or these Terms of Use. +

    + +

    8. PROHIBITED ACTIVITIES

    + +

    + You may not access or use the Site for any purpose other than that + for which we make the Site available. The Site may not be used in + connection with any commercial endeavors except those that are + specifically endorsed or approved by us. +

    + +

    As a user of the Site, you agree not to:

    + +
      +
    • + Systematically retrieve data or other content from the Site to + create or compile, directly or indirectly, a collection, + compilation, database, or directory without written permission + from us. +
    • +
    • + Trick, defraud, or mislead us and other users, especially in any + attempt to learn sensitive account information such as user + passwords. +
    • +
    • + Circumvent, disable, or otherwise interfere with + security-related features of the Site, including features that + prevent or restrict the use or copying of any Content or enforce + limitations on the use of the Site and/or the Content contained + therein. +
    • +
    • + Disparage, tarnish, or otherwise harm, in our opinion, us and/or + the Site. +
    • +
    • + Use any information obtained from the Site in order to harass, + abuse, or harm another person. +
    • +
    • + Make improper use of our support services or submit false + reports of abuse or misconduct. +
    • +
    • + Use the Site in a manner inconsistent with any applicable laws + or regulations. +
    • +
    • Engage in unauthorized framing of or linking to the Site.
    • +
    • + Upload or transmit (or attempt to upload or to transmit) + viruses, Trojan horses, or other material, including excessive + use of capital letters and spamming (continuous posting of + repetitive text), that interferes with any party’s uninterrupted + use and enjoyment of the Site or modifies, impairs, disrupts, + alters, or interferes with the use, features, functions, + operation, or maintenance of the Site. +
    • +
    • + Engage in any automated use of the system, such as using scripts + to send comments or messages, or using any data mining, robots, + or similar data gathering and extraction tools. +
    • +
    • + Delete the copyright or other proprietary rights notice from any + Content. +
    • +
    • + Attempt to impersonate another user or person or use the + username of another user. +
    • +
    • + Upload or transmit (or attempt to upload or to transmit) any + material that acts as a passive or active information collection + or transmission mechanism, including without limitation, clear + graphics interchange formats (“gifs”), 1×1 pixels, web bugs, + cookies, or other similar devices (sometimes referred to as + “spyware” or “passive collection mechanisms” or “pcms”). +
    • +
    • + Interfere with, disrupt, or create an undue burden on the Site + or the networks or services connected to the Site. +
    • +
    • + Harass, annoy, intimidate, or threaten any of our employees or + agents engaged in providing any portion of the Site to you. +
    • +
    • + Attempt to bypass any measures of the Site designed to prevent + or restrict access to the Site, or any portion of the Site. +
    • +
    • + Copy or adapt the Site’s software, including but not limited to + Flash, PHP, HTML, JavaScript, or other code. +
    • +
    • + Except as permitted by applicable law, decipher, decompile, + disassemble, or reverse engineer any of the software comprising + or in any way making up a part of the Site. +
    • +
    • + Except as may be the result of standard search engine or + Internet browser usage, use, launch, develop, or distribute any + automated system, including without limitation, any spider, + robot, cheat utility, scraper, or offline reader that accesses + the Site, or using or launching any unauthorized script or other + software. +
    • +
    • + Use a buying agent or purchasing agent to make purchases on the + Site. +
    • +
    • + Make any unauthorized use of the Site, including collecting + usernames and/or email addresses of users by electronic or other + means for the purpose of sending unsolicited email, or creating + user accounts by automated means or under false pretenses. +
    • +
    • + Use the Site as part of any effort to compete with us or + otherwise use the Site and/or the Content for any + revenue-generating endeavor or commercial enterprise. +
    • +
    • Use the website to defame other people
    • +
    • + Use the website to impersonate other people without labeling the + outputs as parody +
    • +
    • Use the website for illegal purposes
    • +
    + +

    9. USER GENERATED CONTRIBUTIONS

    + +

    + The Site may invite you to chat, contribute to, or participate in + blogs, message boards, online forums, and other functionality, and + may provide you with the opportunity to create, submit, post, + display, transmit, perform, publish, distribute, or broadcast + content and materials to us or on the Site, including but not + limited to text, writings, video, audio, photographs, graphics, + comments, suggestions, or personal information or other material + (collectively, "Contributions"). Contributions may be viewable by + other users of the Site and through third-party websites. As such, + any Contributions you transmit may be treated as non-confidential + and non-proprietary. When you create or make available any + Contributions, you thereby represent and warrant that: +

    + +
      +
    • + The creation, distribution, transmission, public display, or + performance, and the accessing, downloading, or copying of your + Contributions do not and will not infringe the proprietary + rights, including but not limited to the copyright, patent, + trademark, trade secret, or moral rights of any third party. +
    • +
    • + You are the creator and owner of or have the necessary licenses, + rights, consents, releases, and permissions to use and to + authorize us, the Site, and other users of the Site to use your + Contributions in any manner contemplated by the Site and these + Terms of Use. +
    • +
    • + You have the written consent, release, and/or permission of each + and every identifiable individual person in your Contributions + to use the name or likeness of each and every such identifiable + individual person to enable inclusion and use of your + Contributions in any manner contemplated by the Site and these + Terms of Use. +
    • +
    • + Your Contributions are not false, inaccurate, or misleading. +
    • +
    • + Your Contributions are not unsolicited or unauthorized + advertising, promotional materials, pyramid schemes, chain + letters, spam, mass mailings, or other forms of solicitation. +
    • +
    • + Your Contributions are not obscene, lewd, lascivious, filthy, + violent, harassing, libelous, slanderous, or otherwise + objectionable (as determined by us). +
    • +
    • + Your Contributions do not ridicule, mock, disparage, intimidate, + or abuse anyone. +
    • +
    • + Your Contributions are not used to harass or threaten (in the + legal sense of those terms) any other person and to promote + violence against a specific person or class of people. +
    • +
    • + Your Contributions do not violate any applicable law, + regulation, or rule. +
    • +
    • + Your Contributions do not violate the privacy or publicity + rights of any third party. +
    • +
    • + Your Contributions do not violate any applicable law concerning + child pornography, or otherwise intended to protect the health + or well-being of minors. +
    • +
    • + Your Contributions do not include any offensive comments that + are connected to race, national origin, gender, sexual + preference, or physical handicap. +
    • +
    • + Your Contributions do not otherwise violate, or link to material + that violates, any provision of these Terms of Use, or any + applicable law or regulation. +
    • +
    + +

    + Any use of the Site in violation of the foregoing violates these + Terms of Use and may result in, among other things, termination or + suspension of your rights to use the Site. +

    + +

    10. CONTRIBUTION LICENSE

    + +

    + By posting your Contributions to any part of the Site or making + Contributions accessible to the Site by linking your account from + the Site to any of your social networking accounts, you + automatically grant, and you represent and warrant that you have + the right to grant, to us an unrestricted, unlimited, irrevocable, + perpetual, non-exclusive, transferable, royalty-free, fully-paid, + worldwide right, and license to host, use, copy, reproduce, + disclose, sell, resell, publish, broadcast, retitle, archive, + store, cache, publicly perform, publicly display, reformat, + translate, transmit, excerpt (in whole or in part), and distribute + such Contributions (including, without limitation, your image and + voice) for any purpose, commercial, advertising, or otherwise, and + to prepare derivative works of, or incorporate into other works, + such Contributions, and grant and authorize sublicenses of the + foregoing. The use and distribution may occur in any media formats + and through any media channels. +

    + +

    + This license will apply to any form, media, or technology now + known or hereafter developed, and includes our use of your name, + company name, and franchise name, as applicable, and any of the + trademarks, service marks, trade names, logos, and personal and + commercial images you provide. You waive all moral rights in your + Contributions, and you warrant that moral rights have not + otherwise been asserted in your Contributions.{" "} +

    + +

    + We do not assert any ownership over your Contributions. You retain + full ownership of all of your Contributions and any intellectual + property rights or other proprietary rights associated with your + Contributions. We are not liable for any statements or + representations in your Contributions provided by you in any area + on the Site. You are solely responsible for your Contributions to + the Site and you expressly agree to exonerate us from any and all + responsibility and to refrain from any legal action against us + regarding your Contributions. +

    + +

    + We have the right, in our sole and absolute discretion, (1) to + edit, redact, or otherwise change any Contributions; (2) to + re-categorize any Contributions to place them in more appropriate + locations on the Site; and (3) to pre-screen or delete any + Contributions at any time and for any reason, without notice. We + have no obligation to monitor your Contributions. +

    + +

    11. MOBILE APPLICATION LICENSE

    + +

    Use License

    + +

    + If you access the Site via a mobile application, then we grant you + a revocable, non-exclusive, non-transferable, limited right to + install and use the mobile application on wireless electronic + devices owned or controlled by you, and to access and use the + mobile application on such devices strictly in accordance with the + terms and conditions of this mobile application license contained + in these Terms of Use. You shall not: (1) except as permitted by + applicable law, decompile, reverse engineer, disassemble, attempt + to derive the source code of, or decrypt the application; (2) make + any modification, adaptation, improvement, enhancement, + translation, or derivative work from the application; (3) violate + any applicable laws, rules, or regulations in connection with your + access or use of the application; (4) remove, alter, or obscure + any proprietary notice (including any notice of copyright or + trademark) posted by us or the licensors of the application; (5) + use the application for any revenue generating endeavor, + commercial enterprise, or other purpose for which it is not + designed or intended; (6) make the application available over a + network or other environment permitting access or use by multiple + devices or users at the same time; (7) use the application for + creating a product, service, or software that is, directly or + indirectly, competitive with or in any way a substitute for the + application; (8) use the application to send automated queries to + any website or to send any unsolicited commercial e-mail; or (9) + use any proprietary information or any of our interfaces or our + other intellectual property in the design, development, + manufacture, licensing, or distribution of any applications, + accessories, or devices for use with the application. +

    + +

    Apple and Android Devices

    + +

    + The following terms apply when you use a mobile application + obtained from either the Apple Store or Google Play (each an “App + Distributor”) to access the Site: (1) the license granted to you + for our mobile application is limited to a non-transferable + license to use the application on a device that utilizes the Apple + iOS or Android operating systems, as applicable, and in accordance + with the usage rules set forth in the applicable App Distributor’s + terms of service; (2) we are responsible for providing any + maintenance and support services with respect to the mobile + application as specified in the terms and conditions of this + mobile application license contained in these Terms of Use or as + otherwise required under applicable law, and you acknowledge that + each App Distributor has no obligation whatsoever to furnish any + maintenance and support services with respect to the mobile + application; (3) in the event of any failure of the mobile + application to conform to any applicable warranty, you may notify + the applicable App Distributor, and the App Distributor, in + accordance with its terms and policies, may refund the purchase + price, if any, paid for the mobile application, and to the maximum + extent permitted by applicable law, the App Distributor will have + no other warranty obligation whatsoever with respect to the mobile + application; (4) you represent and warrant that (i) you are not + located in a country that is subject to a U.S. government embargo, + or that has been designated by the U.S. government as a “terrorist + supporting” country and (ii) you are not listed on any U.S. + government list of prohibited or restricted parties; (5) you must + comply with applicable third-party terms of agreement when using + the mobile application, e.g., if you have a VoIP application, then + you must not be in violation of their wireless data service + agreement when using the mobile application; and (6) you + acknowledge and agree that the App Distributors are third-party + beneficiaries of the terms and conditions in this mobile + application license contained in these Terms of Use, and that each + App Distributor will have the right (and will be deemed to have + accepted the right) to enforce the terms and conditions in this + mobile application license contained in these Terms of Use against + you as a third-party beneficiary thereof. +

    + +

    12. SOCIAL MEDIA

    + +

    + As part of the functionality of the Site, you may link your + account with online accounts you have with third-party service + providers (each such account, a “Third-Party Account”) by either: + (1) providing your Third-Party Account login information through + the Site; or (2) allowing us to access your Third-Party Account, + as is permitted under the applicable terms and conditions that + govern your use of each Third-Party Account. You represent and + warrant that you are entitled to disclose your Third-Party Account + login information to us and/or grant us access to your Third-Party + Account, without breach by you of any of the terms and conditions + that govern your use of the applicable Third-Party Account, and + without obligating us to pay any fees or making us subject to any + usage limitations imposed by the third-party service provider of + the Third-Party Account. By granting us access to any Third-Party + Accounts, you understand that (1) we may access, make available, + and store (if applicable) any content that you have provided to + and stored in your Third-Party Account (the “Social Network + Content”) so that it is available on and through the Site via your + account, including without limitation any friend lists and (2) we + may submit to and receive from your Third-Party Account additional + information to the extent you are notified when you link your + account with the Third-Party Account. Depending on the Third-Party + Accounts you choose and subject to the privacy settings that you + have set in such Third-Party Accounts, personally identifiable + information that you post to your Third-Party Accounts may be + available on and through your account on the Site. Please note + that if a Third-Party Account or associated service becomes + unavailable or our access to such Third-Party Account is + terminated by the third-party service provider, then Social + Network Content may no longer be available on and through the + Site. You will have the ability to disable the connection between + your account on the Site and your Third-Party Accounts at any + time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY + SERVICE PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS + GOVERNED SOLELY BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE + PROVIDERS. We make no effort to review any Social Network Content + for any purpose, including but not limited to, for accuracy, + legality, or non-infringement, and we are not responsible for any + Social Network Content. You acknowledge and agree that we may + access your email address book associated with a Third-Party + Account and your contacts list stored on your mobile device or + tablet computer solely for purposes of identifying and informing + you of those contacts who have also registered to use the Site. + You can deactivate the connection between the Site and your + Third-Party Account by contacting us using the contact information + below or through your account settings (if applicable). We will + attempt to delete any information stored on our servers that was + obtained through such Third-Party Account, except the username and + profile picture that become associated with your account. +

    + +

    13. SUBMISSIONS

    + +

    + You acknowledge and agree that any questions, comments, + suggestions, ideas, feedback, or other information regarding the + Site ("Submissions") provided by you to us are non-confidential + and shall become our sole property. We shall own exclusive rights, + including all intellectual property rights, and shall be entitled + to the unrestricted use and dissemination of these Submissions for + any lawful purpose, commercial or otherwise, without + acknowledgment or compensation to you. You hereby waive all moral + rights to any such Submissions, and you hereby warrant that any + such Submissions are original with you or that you have the right + to submit such Submissions. You agree there shall be no recourse + against us for any alleged or actual infringement or + misappropriation of any proprietary right in your Submissions. +

    + +

    14. THIRD-PARTY WEBSITES AND CONTENT

    + +

    + The Site may contain (or you may be sent via the Site) links to + other websites ("Third-Party Websites") as well as articles, + photographs, text, graphics, pictures, designs, music, sound, + video, information, applications, software, and other content or + items belonging to or originating from third parties ("Third-Party + Content"). Such Third-Party Websites and Third-Party Content are + not investigated, monitored, or checked for accuracy, + appropriateness, or completeness by us, and we are not responsible + for any Third-Party Websites accessed through the Site or any + Third-Party Content posted on, available through, or installed + from the Site, including the content, accuracy, offensiveness, + opinions, reliability, privacy practices, or other policies of or + contained in the Third-Party Websites or the Third-Party Content. + Inclusion of, linking to, or permitting the use or installation of + any Third-Party Websites or any Third-Party Content does not imply + approval or endorsement thereof by us. If you decide to leave the + Site and access the Third-Party Websites or to use or install any + Third-Party Content, you do so at your own risk, and you should be + aware these Terms of Use no longer govern. You should review the + applicable terms and policies, including privacy and data + gathering practices, of any website to which you navigate from the + Site or relating to any applications you use or install from the + Site. Any purchases you make through Third-Party Websites will be + through other websites and from other companies, and we take no + responsibility whatsoever in relation to such purchases which are + exclusively between you and the applicable third party. You agree + and acknowledge that we do not endorse the products or services + offered on Third-Party Websites and you shall hold us harmless + from any harm caused by your purchase of such products or + services. Additionally, you shall hold us harmless from any losses + sustained by you or harm caused to you relating to or resulting in + any way from any Third-Party Content or any contact with + Third-Party Websites. +

    + +

    15. U.S. GOVERNMENT RIGHTS

    + +

    + Our services are “commercial items” as defined in Federal + Acquisition Regulation (“FAR”) 2.101. If our services are acquired + by or on behalf of any agency not within the Department of Defense + (“DOD”), our services are subject to the terms of these Terms of + Use in accordance with FAR 12.212 (for computer software) and FAR + 12.211 (for technical data). If our services are acquired by or on + behalf of any agency within the Department of Defense, our + services are subject to the terms of these Terms of Use in + accordance with Defense Federal Acquisition Regulation (“DFARS”) + 227.7202-3. In addition, DFARS 252.227-7015 applies to technical + data acquired by the DOD. This U.S. Government Rights clause is in + lieu of, and supersedes, any other FAR, DFARS, or other clause or + provision that addresses government rights in computer software or + technical data under these Terms of Use. +

    + +

    16. SITE MANAGEMENT

    + +

    + We reserve the right, but not the obligation, to: (1) monitor the + Site for violations of these Terms of Use; (2) take appropriate + legal action against anyone who, in our sole discretion, violates + the law or these Terms of Use, including without limitation, + reporting such user to law enforcement authorities; (3) in our + sole discretion and without limitation, refuse, restrict access + to, limit the availability of, or disable (to the extent + technologically feasible) any of your Contributions or any portion + thereof; (4) in our sole discretion and without limitation, + notice, or liability, to remove from the Site or otherwise disable + all files and content that are excessive in size or are in any way + burdensome to our systems; and (5) otherwise manage the Site in a + manner designed to protect our rights and property and to + facilitate the proper functioning of the Site. +

    + +

    17. PRIVACY POLICY

    + +

    + We care about data privacy and security. Please review our Privacy + Policy: https://fakeyou.com/privacy. By + using the Site, you agree to be bound by our Privacy Policy, which + is incorporated into these Terms of Use. Please be advised the + Site is hosted in the United States. If you access the Site from + any other region of the world with laws or other requirements + governing personal data collection, use, or disclosure that differ + from applicable laws in the United States, then through your + continued use of the Site, you are transferring your data to the + United States, and you agree to have your data transferred to and + processed in the United States. Further, we do not knowingly + accept, request, or solicit information from children or knowingly + market to children. Therefore, in accordance with the U.S. + Children’s Online Privacy Protection Act, if we receive actual + knowledge that anyone under the age of 13 has provided personal + information to us without the requisite and verifiable parental + consent, we will delete that information from the Site as quickly + as is reasonably practical. +

    + +

    18. COPYRIGHT INFRINGEMENTS

    + +

    + We respect the intellectual property rights of others. If you + believe that any material available on or through the Site + infringes upon any copyright you own or control, please + immediately notify us using the contact information provided below + (a “Notification”). A copy of your Notification will be sent to + the person who posted or stored the material addressed in the + Notification. Please be advised that pursuant to applicable law + you may be held liable for damages if you make material + misrepresentations in a Notification. Thus, if you are not sure + that material located on or linked to by the Site infringes your + copyright, you should consider first contacting an attorney. +

    + +

    19. TERM AND TERMINATION

    + +

    + These Terms of Use shall remain in full force and effect while you + use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS + OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND + WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE + (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY + REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH + OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE + TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY + TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR + ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY + TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION. +

    + +

    + If we terminate or suspend your account for any reason, you are + prohibited from registering and creating a new account under your + name, a fake or borrowed name, or the name of any third party, + even if you may be acting on behalf of the third party. In + addition to terminating or suspending your account, we reserve the + right to take appropriate legal action, including without + limitation pursuing civil, criminal, and injunctive redress. +

    + +

    20. MODIFICATIONS AND INTERRUPTIONS

    + +

    + We reserve the right to change, modify, or remove the contents of + the Site at any time or for any reason at our sole discretion + without notice. However, we have no obligation to update any + information on our Site. We also reserve the right to modify or + discontinue all or part of the Site without notice at any time. We + will not be liable to you or any third party for any modification, + price change, suspension, or discontinuance of the Site. +

    + +

    + We cannot guarantee the Site will be available at all times. We + may experience hardware, software, or other problems or need to + perform maintenance related to the Site, resulting in + interruptions, delays, or errors. We reserve the right to change, + revise, update, suspend, discontinue, or otherwise modify the Site + at any time or for any reason without notice to you. You agree + that we have no liability whatsoever for any loss, damage, or + inconvenience caused by your inability to access or use the Site + during any downtime or discontinuance of the Site. Nothing in + these Terms of Use will be construed to obligate us to maintain + and support the Site or to supply any corrections, updates, or + releases in connection therewith. +

    + +

    21. GOVERNING LAW

    + +

    + These Terms of Use and your use of the Site are governed by and + construed in accordance with the laws of the State of Georgia + applicable to agreements made and to be entirely performed within + the State of Georgia, without regard to its conflict of law + principles. +

    + +

    22. DISPUTE RESOLUTION

    + +

    Informal Negotiations

    + +

    + To expedite resolution and control the cost of any dispute, + controversy, or claim related to these Terms of Use (each + "Dispute" and collectively, the “Disputes”) brought by either you + or us (individually, a “Party” and collectively, the “Parties”), + the Parties agree to first attempt to negotiate any Dispute + (except those Disputes expressly provided below) informally for at + least thirty (30) days before initiating arbitration. Such + informal negotiations commence upon written notice from one Party + to the other Party. +

    + +

    Binding Arbitration

    + +

    + If the Parties are unable to resolve a Dispute through informal + negotiations, the Dispute (except those Disputes expressly + excluded below) will be finally and exclusively resolved by + binding arbitration. YOU UNDERSTAND THAT WITHOUT THIS PROVISION, + YOU WOULD HAVE THE RIGHT TO SUE IN COURT AND HAVE A JURY TRIAL. + The arbitration shall be commenced and conducted under the + Commercial Arbitration Rules of the American Arbitration + Association ("AAA") and, where appropriate, the AAA’s + Supplementary Procedures for Consumer Related Disputes ("AAA + Consumer Rules"), both of which are available at the AAA website + www.adr.org. Your arbitration fees and your share of arbitrator + compensation shall be governed by the AAA Consumer Rules and, + where appropriate, limited by the AAA Consumer Rules. If such + costs are determined by the arbitrator to be excessive, we will + pay all arbitration fees and expenses. The arbitration may be + conducted in person, through the submission of documents, by + phone, or online. The arbitrator will make a decision in writing, + but need not provide a statement of reasons unless requested by + either Party. The arbitrator must follow applicable law, and any + award may be challenged if the arbitrator fails to do so. Except + where otherwise required by the applicable AAA rules or applicable + law, the arbitration will take place in Cobb, Georgia. Except as + otherwise provided herein, the Parties may litigate in court to + compel arbitration, stay proceedings pending arbitration, or to + confirm, modify, vacate, or enter judgment on the award entered by + the arbitrator. +

    + +

    + If for any reason, a Dispute proceeds in court rather than + arbitration, the Dispute shall be commenced or prosecuted in the + state and federal courts located in Cobb, Georgia, and the Parties + hereby consent to, and waive all defenses of lack of personal + jurisdiction, and forum non conveniens with respect to venue and + jurisdiction in such state and federal courts. Application of the + United Nations Convention on Contracts for the International Sale + of Goods and the Uniform Computer Information Transaction Act + (UCITA) are excluded from these Terms of Use. +

    + +

    + In no event shall any Dispute brought by either Party related in + any way to the Site be commenced more than one (1) years after the + cause of action arose. If this provision is found to be illegal or + unenforceable, then neither Party will elect to arbitrate any + Dispute falling within that portion of this provision found to be + illegal or unenforceable and such Dispute shall be decided by a + court of competent jurisdiction within the courts listed for + jurisdiction above, and the Parties agree to submit to the + personal jurisdiction of that court. +

    + +

    Restrictions

    + +

    + The Parties agree that any arbitration shall be limited to the + Dispute between the Parties individually. To the full extent + permitted by law, (a) no arbitration shall be joined with any + other proceeding; (b) there is no right or authority for any + Dispute to be arbitrated on a class-action basis or to utilize + class action procedures; and (c) there is no right or authority + for any Dispute to be brought in a purported representative + capacity on behalf of the general public or any other persons. +

    + +

    Exceptions to Informal Negotiations and Arbitration

    + +

    + The Parties agree that the following Disputes are not subject to + the above provisions concerning informal negotiations and binding + arbitration: (a) any Disputes seeking to enforce or protect, or + concerning the validity of, any of the intellectual property + rights of a Party; (b) any Dispute related to, or arising from, + allegations of theft, piracy, invasion of privacy, or unauthorized + use; and (c) any claim for injunctive relief. If this provision is + found to be illegal or unenforceable, then neither Party will + elect to arbitrate any Dispute falling within that portion of this + provision found to be illegal or unenforceable and such Dispute + shall be decided by a court of competent jurisdiction within the + courts listed for jurisdiction above, and the Parties agree to + submit to the personal jurisdiction of that court. +

    + +

    23. CORRECTIONS

    + +

    + There may be information on the Site that contains typographical + errors, inaccuracies, or omissions, including descriptions, + pricing, availability, and various other information. We reserve + the right to correct any errors, inaccuracies, or omissions and to + change or update the information on the Site at any time, without + prior notice. +

    + +

    24. DISCLAIMER

    + +

    + THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE + THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE + RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL + WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND + YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, + AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS + ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE + CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO + LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR + INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR + PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR + ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR + USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION + AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION + OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, + VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR + THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR + OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE + OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, + TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT + WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY + PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH + THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE + APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE + WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING + ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF + PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE + THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST + JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. +

    + +

    25. LIMITATIONS OF LIABILITY

    + +

    + IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE + LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, + CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE + DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR + OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE + BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING + ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU + FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, + WILL AT ALL TIMES BE LIMITED TO THE AMOUNT PAID, IF ANY, BY YOU TO + US DURING THE SIX (6) MONTH PERIOD PRIOR TO ANY CAUSE OF ACTION + ARISING. CERTAIN US STATE LAWS AND INTERNATIONAL LAWS DO NOT ALLOW + LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION + OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE + ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY + HAVE ADDITIONAL RIGHTS. +

    + +

    26. INDEMNIFICATION

    + +

    + You agree to defend, indemnify, and hold us harmless, including + our subsidiaries, affiliates, and all of our respective officers, + agents, partners, and employees, from and against any loss, + damage, liability, claim, or demand, including reasonable + attorneys’ fees and expenses, made by any third party due to or + arising out of: (1) your Contributions; (2) use of the Site; (3) + breach of these Terms of Use; (4) any breach of your + representations and warranties set forth in these Terms of Use; + (5) your violation of the rights of a third party, including but + not limited to intellectual property rights; or (6) any overt + harmful act toward any other user of the Site with whom you + connected via the Site. Notwithstanding the foregoing, we reserve + the right, at your expense, to assume the exclusive defense and + control of any matter for which you are required to indemnify us, + and you agree to cooperate, at your expense, with our defense of + such claims. We will use reasonable efforts to notify you of any + such claim, action, or proceeding which is subject to this + indemnification upon becoming aware of it. +

    + +

    27. USER DATA

    + +

    + We will maintain certain data that you transmit to the Site for + the purpose of managing the performance of the Site, as well as + data relating to your use of the Site. Although we perform regular + routine backups of data, you are solely responsible for all data + that you transmit or that relates to any activity you have + undertaken using the Site. You agree that we shall have no + liability to you for any loss or corruption of any such data, and + you hereby waive any right of action against us arising from any + such loss or corruption of such data. +

    + +

    28. ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES

    + +

    + Visiting the Site, sending us emails, and completing online forms + constitute electronic communications. You consent to receive + electronic communications, and you agree that all agreements, + notices, disclosures, and other communications we provide to you + electronically, via email and on the Site, satisfy any legal + requirement that such communication be in writing. YOU HEREBY + AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND + OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, + AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA + THE SITE. You hereby waive any rights or requirements under any + statutes, regulations, rules, ordinances, or other laws in any + jurisdiction which require an original signature or delivery or + retention of non-electronic records, or to payments or the + granting of credits by any means other than electronic means. +

    + +

    29. CALIFORNIA USERS AND RESIDENTS

    + +

    + If any complaint with us is not satisfactorily resolved, you can + contact the Complaint Assistance Unit of the Division of Consumer + Services of the California Department of Consumer Affairs in + writing at 1625 North Market Blvd., Suite N 112, Sacramento, + California 95834 or by telephone at (800) 952-5210 or (916) + 445-1254. +

    + +

    30. MISCELLANEOUS

    + +

    + These Terms of Use and any policies or operating rules posted by + us on the Site or in respect to the Site constitute the entire + agreement and understanding between you and us. Our failure to + exercise or enforce any right or provision of these Terms of Use + shall not operate as a waiver of such right or provision. These + Terms of Use operate to the fullest extent permissible by law. We + may assign any or all of our rights and obligations to others at + any time. We shall not be responsible or liable for any loss, + damage, delay, or failure to act caused by any cause beyond our + reasonable control. If any provision or part of a provision of + these Terms of Use is determined to be unlawful, void, or + unenforceable, that provision or part of the provision is deemed + severable from these Terms of Use and does not affect the validity + and enforceability of any remaining provisions. There is no joint + venture, partnership, employment or agency relationship created + between you and us as a result of these Terms of Use or use of the + Site. You agree that these Terms of Use will not be construed + against us by virtue of having drafted them. You hereby waive any + and all defenses you may have based on the electronic form of + these Terms of Use and the lack of signing by the parties hereto + to execute these Terms of Use. +

    + +

    31. CONTACT US

    + +

    + In order to resolve a complaint regarding the Site or to receive + further information regarding use of the Site, please contact us + at: +

    + +

    Learning Machines, Inc

    +

    support@storyteller.io

    diff --git a/packages/fakeyou.com/src/v2/view/pages/category/CreateCategoryPage.tsx b/packages/fakeyou.com/src/v2/view/pages/category/CreateCategoryPage.tsx index ebe63dac35..62fdf058d6 100644 --- a/packages/fakeyou.com/src/v2/view/pages/category/CreateCategoryPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/category/CreateCategoryPage.tsx @@ -208,7 +208,7 @@ function CreateCategoryPage(props: Props) { return (
    - + {categoryActionName} Category diff --git a/packages/fakeyou.com/src/v2/view/pages/channels/Channels.tsx b/packages/fakeyou.com/src/v2/view/pages/channels/Channels.tsx index 5deaedcf10..a11d76f5d9 100644 --- a/packages/fakeyou.com/src/v2/view/pages/channels/Channels.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/channels/Channels.tsx @@ -48,7 +48,7 @@ function ChannelsPage(props: Props) { animate="visible" variants={container} > - + Channels diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/TrumpTtsPage.tsx b/packages/fakeyou.com/src/v2/view/pages/character/trump/TrumpTtsPage.tsx new file mode 100644 index 0000000000..a46100a9f7 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/TrumpTtsPage.tsx @@ -0,0 +1,506 @@ +import React, { useEffect, useCallback, useState } from "react"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; +import { Link } from "react-router-dom"; +import { SessionTtsInferenceResultList } from "../../../_common/SessionTtsInferenceResultsList"; +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { TtsInferenceJob } from "@storyteller/components/src/jobs/TtsInferenceJobs"; +import { TtsModelUploadJob } from "@storyteller/components/src/jobs/TtsModelUploadJobs"; +import { W2lInferenceJob } from "@storyteller/components/src/jobs/W2lInferenceJobs"; +import { W2lTemplateUploadJob } from "@storyteller/components/src/jobs/W2lTemplateUploadJobs"; +import { v4 as uuidv4 } from "uuid"; +import { + ListTtsModels, + TtsModelListItem, +} from "@storyteller/components/src/api/tts/ListTtsModels"; +import { + GenerateTtsAudio, + GenerateTtsAudioErrorType, + GenerateTtsAudioIsError, + GenerateTtsAudioIsOk, +} from "@storyteller/components/src/api/tts/GenerateTtsAudio"; +import { + ListTtsCategories, + ListTtsCategoriesIsError, + ListTtsCategoriesIsOk, +} from "@storyteller/components/src/api/category/ListTtsCategories"; +import { TtsCategoryType } from "../../../../../AppWrapper"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + faBarsStaggered, + faDeleteLeft, + faVolumeHigh, +} from "@fortawesome/free-solid-svg-icons"; +import { motion } from "framer-motion"; +import { container, panel } from "../../../../../data/animation"; +import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; +import { TtsPageHero } from "./TrumpTtsPageHero"; +import { Analytics } from "../../../../../common/Analytics"; +import { + GetComputedTtsCategoryAssignments, + GetComputedTtsCategoryAssignmentsIsError, + GetComputedTtsCategoryAssignmentsIsOk, + GetComputedTtsCategoryAssignmentsSuccessResponse, +} from "@storyteller/components/src/api/category/GetComputedTtsCategoryAssignments"; +import { DynamicallyCategorizeModels } from "../../../../../model/categories/SyntheticCategory"; + +import { usePrefixedDocumentTitle } from "../../../../../common/UsePrefixedDocumentTitle"; +import { SearchOmnibar } from "./search/SearchOmnibar"; + +const PAGE_MODEL_TOKENS = new Set([ + "TM:pmd1wm3kf6az", // Development: "Fake Donald Trump #1" + "TM:7rrwdhdq8ezq", // Development: "Fake Donald Trump #2" + //"TM:aejrk66wq3ss", // Production: "Donald Trump (bibby's model)" + "TM:pyzss4phqk6r", // Production: "Donald Trump (Sarcastic)" + "TM:4v0ft4j72y2g", // Production: "Donald Trump (Angry)" + "TM:03690khwpsbz", // Production: "Donald Trump (Casual Speech)" +]); + +export interface EnqueueJobResponsePayload { + success: boolean; + inference_job_token?: string; +} + +interface Props { + sessionWrapper: SessionWrapper; + sessionSubscriptionsWrapper: SessionSubscriptionsWrapper; + + enqueueTtsJob: (jobToken: string) => void; + ttsInferenceJobs: Array; + ttsModelUploadJobs: Array; + w2lInferenceJobs: Array; + w2lTemplateUploadJobs: Array; + textBuffer: string; + setTextBuffer: (textBuffer: string) => void; + clearTextBuffer: () => void; + + ttsModels: Array; + setTtsModels: (ttsVoices: Array) => void; + + allTtsCategories: TtsCategoryType[]; + setAllTtsCategories: (allTtsCategories: TtsCategoryType[]) => void; + + computedTtsCategoryAssignments?: GetComputedTtsCategoryAssignmentsSuccessResponse; + setComputedTtsCategoryAssignments: ( + categoryAssignments: GetComputedTtsCategoryAssignmentsSuccessResponse + ) => void; + + allTtsCategoriesByTokenMap: Map; + allTtsModelsByTokenMap: Map; + ttsModelsByCategoryToken: Map>; + + dropdownCategories: TtsCategoryType[][]; + setDropdownCategories: (dropdownCategories: TtsCategoryType[][]) => void; + selectedCategories: TtsCategoryType[]; + setSelectedCategories: (selectedCategories: TtsCategoryType[]) => void; + + maybeSelectedTtsModel?: TtsModelListItem; + setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void; + + selectedTtsLanguageScope: string; + setSelectedTtsLanguageScope: (selectedTtsLanguageScope: string) => void; +} + +function TrumpTtsPage(props: Props) { + //Loading spinning icon + const [loading, setLoading] = useState(false); + const [isAudioLimitAlertVisible, setAudioLimitAlertVisible] = useState(false); + + usePrefixedDocumentTitle("Donald Trump TTS and Donald Trump AI Voice"); + + const handleLoading = () => { + setLoading(true); + setTimeout(() => { + setLoading(false); + }, 2000); + }; + + useEffect(() => { + const timeout = setTimeout(() => { + setLoading(false); + }, 2000); + return () => clearTimeout(timeout); + }, []); + + let { + setTtsModels, + setAllTtsCategories, + setComputedTtsCategoryAssignments, + ttsModels, + allTtsCategories, + computedTtsCategoryAssignments, + maybeSelectedTtsModel, + setMaybeSelectedTtsModel, + } = props; + + const [maybeTtsError, setMaybeTtsError] = useState< + GenerateTtsAudioErrorType | undefined + >(undefined); + + const ttsModelsLoaded = ttsModels.length > 0; + const ttsCategoriesLoaded = allTtsCategories.length > 0; + const computedTtsCategoryAssignmentsLoaded = + computedTtsCategoryAssignments !== undefined && + computedTtsCategoryAssignments.category_token_to_tts_model_tokens.recursive + .size > 0; + + const listModels = useCallback(async () => { + if (ttsModelsLoaded) { + return; // Already queried. + } + const models = await ListTtsModels(); + if (models) { + DynamicallyCategorizeModels(models); + setTtsModels(models); + if (!maybeSelectedTtsModel && models.length > 0) { + //let model = models[0]; + //const featuredModels = models.filter((m) => m.is_front_page_featured); + //if (featuredModels.length > 0) { + // // Random featured model + // model = + // featuredModels[Math.floor(Math.random() * featuredModels.length)]; + //} + + let trumpModels = models.filter((model) => { + return PAGE_MODEL_TOKENS.has(model.model_token); + }) + + let model = trumpModels[Math.floor(Math.random() * trumpModels.length)]; + + setMaybeSelectedTtsModel(model); + } + } + }, [ + setTtsModels, + maybeSelectedTtsModel, + setMaybeSelectedTtsModel, + ttsModelsLoaded, + ]); + + const listTtsCategories = useCallback(async () => { + if (ttsCategoriesLoaded) { + return; // Already queried. + } + const categoryList = await ListTtsCategories(); + if (ListTtsCategoriesIsOk(categoryList)) { + let categories = categoryList.categories; + + // NB: We'll use the frontend to order the synthetic categories first. + + const LATEST_MODELS_CATEGORY_TOKEN = "SYNTHETIC_CATEGORY:LATEST_MODELS"; + const TRENDING_MODELS_CATEGORY_TOKEN = + "SYNTHETIC_CATEGORY:TRENDING_MODELS"; + + let maybeLatestCategory = categories.find( + (category) => category.category_token === LATEST_MODELS_CATEGORY_TOKEN + ); + + let maybeTrendingCategory = categories.find( + (category) => category.category_token === TRENDING_MODELS_CATEGORY_TOKEN + ); + + let otherCategories = categories + .filter( + (category) => category.category_token !== LATEST_MODELS_CATEGORY_TOKEN + ) + .filter( + (category) => + category.category_token !== TRENDING_MODELS_CATEGORY_TOKEN + ); + + categories = []; + + if (maybeLatestCategory !== undefined) { + categories.push(maybeLatestCategory); + } + + if (maybeTrendingCategory !== undefined) { + categories.push(maybeTrendingCategory); + } + + categories.push(...otherCategories); + + setAllTtsCategories(categories); + } else if (ListTtsCategoriesIsError(categoryList)) { + // TODO: Retry on decay function + } + }, [setAllTtsCategories, ttsCategoriesLoaded]); + + const getComputedAssignments = useCallback(async () => { + if (computedTtsCategoryAssignmentsLoaded) { + return; // Already queried. + } + const computedAssignments = await GetComputedTtsCategoryAssignments(); + if (GetComputedTtsCategoryAssignmentsIsOk(computedAssignments)) { + setComputedTtsCategoryAssignments(computedAssignments); + } else if (GetComputedTtsCategoryAssignmentsIsError(computedAssignments)) { + // TODO: Retry on decay function + } + }, [setComputedTtsCategoryAssignments, computedTtsCategoryAssignmentsLoaded]); + + useEffect(() => { + listModels(); + listTtsCategories(); + getComputedAssignments(); + }, [listModels, listTtsCategories, getComputedAssignments]); + + const handleChangeText = (ev: React.FormEvent) => { + const textValue = (ev.target as HTMLTextAreaElement).value; + props.setTextBuffer(textValue); + setAudioLimitAlertVisible(textValue.length > 100); + }; + + const handleFormSubmit = async (ev: React.FormEvent) => { + ev.preventDefault(); + + if (!props.maybeSelectedTtsModel) { + return false; + } + + if (!props.textBuffer) { + return false; + } + + const modelToken = props.maybeSelectedTtsModel!.model_token; + + const request = { + uuid_idempotency_token: uuidv4(), + tts_model_token: modelToken, + inference_text: props.textBuffer, + }; + + const response = await GenerateTtsAudio(request); + + Analytics.ttsGenerate(modelToken, props.textBuffer.length); + + if (GenerateTtsAudioIsOk(response)) { + setMaybeTtsError(undefined); + props.enqueueTtsJob(response.inference_job_token); + } else if (GenerateTtsAudioIsError(response)) { + setMaybeTtsError(response.error); + } + + return false; + }; + + const handleClearClick = (ev: React.FormEvent) => { + ev.preventDefault(); + props.clearTextBuffer(); + + Analytics.ttsClear(props.maybeSelectedTtsModel?.model_token); + + return false; + }; + + // Show errors on TTS failure + let maybeError = <>; + if (!!maybeTtsError) { + let hasMessage = false; + let message = <>; + switch (maybeTtsError) { + case GenerateTtsAudioErrorType.TooManyRequests: + hasMessage = true; + message = ( + + You're sending too many requests! + Slow down a little. We have to slow things down a little when the + server gets busy. + + ); + break; + case GenerateTtsAudioErrorType.ServerError | + GenerateTtsAudioErrorType.BadRequest | + GenerateTtsAudioErrorType.NotFound: + break; + } + + if (hasMessage) { + maybeError = ( +
    + + {message} +
    + ); + } + } + + // NB: If the text is too long, don't allow submission + let remainingCharactersButtonDisabled = props.textBuffer.trim().length > 1024; + let noTextInputButtonDisabled = props.textBuffer.trim() === ""; + + const speakButtonClass = loading + ? "btn btn-primary w-100 disabled" + : "btn btn-primary w-100"; + + let audioLimitAlert = <>; + if ( + isAudioLimitAlertVisible && + !props.sessionSubscriptionsWrapper.hasPaidFeatures() + ) { + audioLimitAlert = ( + <> +
    + + Note: Non-premium is limited to 12 seconds of audio.{" "} + + Upgrade now + + . + +
    + + ); + } + + let trumpModels = props.ttsModels.filter((model) => { + return PAGE_MODEL_TOKENS.has(model.model_token); + }) + + let maybeSelectedModel = props.maybeSelectedTtsModel; + + if (maybeSelectedModel !== undefined && !PAGE_MODEL_TOKENS.has(maybeSelectedModel.model_token)) { + // If we don't select a trump model by default (which is rare), the list will be empty. + // We'll set it here. + maybeSelectedModel = trumpModels[0]; + } + + return ( + + + + +
    + + +
    +
    + {/* Explore Rollout */} + + {/* + + + EXPLORE OMNIBAR GOES HERE TODO + + */} + +
    +
    +
    +
    + +
    + + {audioLimitAlert} +
    + + +
    +
    +
    +
    +
    +

    + + {t("tts.TtsModelListPage.sessionTtsResultsLabel")} +

    +
    + +
    +
    +
    +
    + {maybeError} + +
    +
    +
    +
    + ); +} + +const LoadingIcon: React.FC = () => { + return ( + <> + + Loading... + + ); +}; + +export { TrumpTtsPage }; diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/TrumpTtsPageHero.tsx b/packages/fakeyou.com/src/v2/view/pages/character/trump/TrumpTtsPageHero.tsx new file mode 100644 index 0000000000..95b06e87c1 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/TrumpTtsPageHero.tsx @@ -0,0 +1,81 @@ +import React, { useMemo } from "react"; +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; +import { Link } from "react-router-dom"; +import { t } from "i18next"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + faStar, + faArrowRight, + faVolume, +} from "@fortawesome/pro-solid-svg-icons"; +import { Analytics } from "../../../../../common/Analytics"; +import { WebUrl } from "../../../../../common/WebUrl"; +import { PageHeaderWithImage } from "../../../_common/PageHeaderWithImage"; + +interface Props { + sessionWrapper: SessionWrapper; + sessionSubscriptionsWrapper: SessionSubscriptionsWrapper; +} + +export function TtsPageHero(props: Props) { + const randomImage = useMemo(() => { + const images = ["/mascot/trump.webp"]; + + return images[Math.floor(Math.random() * images.length)]; + }, []); + + let signUpButton = <>; + let viewPricingButton = <>; + + signUpButton = ( + <> + + + + + ); + viewPricingButton = ( + <> + { + Analytics.ttsClickHeroViewPricing(); + }} + > + + + + ); + + const titleIcon = ; + const title = <>Donald Trump TTS; + const subText = ( + <>FakeYou has the very best Donald Trump AI voice on the internet. Use deep fake Donald Trump to say your favorite memes. + ); + const actionButtons = ( + <> + {signUpButton} + {viewPricingButton} + + ); + + return ( + <> + + + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/search/SearchOmnibar.tsx b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/SearchOmnibar.tsx new file mode 100644 index 0000000000..a56b86517b --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/SearchOmnibar.tsx @@ -0,0 +1,59 @@ +import React from "react"; +import { TtsCategoryType } from "../../../../../../AppWrapper"; +import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels"; +import { ScopedVoiceModelOptions } from "./components/ScopedVoiceModelOptions"; +import { VoiceCountLabel } from "./components/VoiceCountLabel"; + +interface Props { + allTtsCategories: TtsCategoryType[]; + allTtsModels: TtsModelListItem[]; + + allTtsCategoriesByTokenMap: Map; + allTtsModelsByTokenMap: Map; + ttsModelsByCategoryToken: Map>; + + dropdownCategories: TtsCategoryType[][]; + setDropdownCategories: (dropdownCategories: TtsCategoryType[][]) => void; + + selectedCategories: TtsCategoryType[]; + setSelectedCategories: (selectedCategories: TtsCategoryType[]) => void; + + maybeSelectedTtsModel?: TtsModelListItem; + setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void; + + selectedTtsLanguageScope: string; + setSelectedTtsLanguageScope: (selectedTtsLanguageScope: string) => void; +} + +export function SearchOmnibar(props: Props) { + return ( + <> +
    + + +
    +
    + +
    +
    +
    + + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/ScopedVoiceModelOptions.tsx b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/ScopedVoiceModelOptions.tsx new file mode 100644 index 0000000000..83e92181d4 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/ScopedVoiceModelOptions.tsx @@ -0,0 +1,209 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels"; +import { TtsCategoryType } from "../../../../../../../AppWrapper"; +import Select, { createFilter } from "react-select"; +import { SearchFieldClass } from "./SearchFieldClass"; +import { FastReactSelectOption } from "../../../../../_common/react_select/FastReactSelectOption"; +import { Analytics } from "../../../../../../../common/Analytics"; +import { FixedSingleValueSelectOption } from "../../../../../_common/react_select/FixedSingleValueSelectOption"; +import { faMicrophone } from "@fortawesome/pro-duotone-svg-icons"; + +interface Props { + allTtsCategories: TtsCategoryType[]; + allTtsModels: TtsModelListItem[]; + + allTtsCategoriesByTokenMap: Map; + allTtsModelsByTokenMap: Map; + ttsModelsByCategoryToken: Map>; + + dropdownCategories: TtsCategoryType[][]; + selectedCategories: TtsCategoryType[]; + + maybeSelectedTtsModel?: TtsModelListItem; + setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void; + + selectedTtsLanguageScope: string; +} + +export function ScopedVoiceModelOptions(props: Props) { + const { + allTtsModels, + ttsModelsByCategoryToken, + selectedCategories, + maybeSelectedTtsModel, + } = props; + + //const { t } = useTranslation(); + + const handleChange = (option: any, actionMeta: any) => { + const ttsModelToken = option?.value; + const maybeNewTtsModel = props.allTtsModelsByTokenMap.get(ttsModelToken); + if (maybeNewTtsModel !== undefined) { + props.setMaybeSelectedTtsModel(maybeNewTtsModel); + } + }; + + const leafiestCategory = selectedCategories[selectedCategories.length - 1]; + + let leafiestCategoryModels: Array = []; + + if (leafiestCategory !== undefined) { + leafiestCategoryModels = Array.from( + ttsModelsByCategoryToken.get(leafiestCategory.category_token) || new Set() + ); + } else { + leafiestCategoryModels = Array.from(new Set(allTtsModels)); + } + + interface DropdownOption { + label: string; + value: string; + creatorName?: string; + } + + let options: DropdownOption[] = leafiestCategoryModels + .filter((ttsModel) => { + // Scope to currently selected language + if (props.selectedTtsLanguageScope === "*") { + return true; // NB: Sentinel value of "*" means all languages. + } + return ( + ttsModel.ietf_primary_language_subtag === props.selectedTtsLanguageScope + ); + }) + .map((ttsModel) => { + return { + label: ttsModel.title, + value: ttsModel.model_token, + creatorName: ttsModel.creator_display_name, + }; + }); + + let selectedOption = options.find( + (option) => option.value === maybeSelectedTtsModel?.model_token + ); + + if (selectedOption === undefined && options.length > 0) { + // NB: We shouldn't select the first item in the list since that won't update the currently + // selected model. If the user were to close the dialogue, they'd think they had picked a voice, + // when in reality no state would have changed. By forcing the user to choose, the user will set + // the state appropriately. + selectedOption = { + label: "Select voice...", + value: "*", + creatorName: undefined, + }; + } + + let isLoading = false; + + if (props.allTtsModels.length === 0) { + // NB: react-select will cache values, even across different instances (!!!) + // This can cause confusion when initializing a select instance before the data + // is loaded, and the select will never update to show the new data. + // The proper way to change voices after load from a placeholder "Loading..." + // label is to use controlled props / value as is done here: + isLoading = true; + selectedOption = { + label: "Loading...", + value: "*", + creatorName: undefined, + }; + } else if (options.length === 0) { + // NB: Perhaps the user has refined their search to be too narrow (langauge + category) + selectedOption = { + label: "No results (remove some filters)", + value: "*", + creatorName: undefined, + }; + } + + const numberVoices = options.length; + + const canSearchVoices = + numberVoices > 100 || // Always allow search when there are over 100 voices + window.innerWidth >= 1000; // Always allow search when on desktop + + let select; + + // Function to build the options themselves, so we can introduce extra elements. + const formatOptionLabel = ( + data: DropdownOption, + formatOptionLabelMeta: any + ) => { + let creatorName = <>; + if (data.creatorName !== undefined) { + creatorName = — {data.creatorName}; + } + return ( +
    + {data.label} + {creatorName} +
    + ); + }; + + // TODO: Cleanup + + if (canSearchVoices) { + select = ( + { + Analytics.ttsOpenScopedVoiceSelectMenu(); + }} + isLoading={isLoading} + // On mobile, we don't want the onscreen keyboard to take up half the UI. + autoFocus={false} + isSearchable={false} + // NB: The following settings improve upon performance. + // See: https://github.com/JedWatson/react-select/issues/3128 + filterOption={createFilter({ ignoreAccents: false })} + components={{ Option: FastReactSelectOption } as any} + formatOptionLabel={formatOptionLabel} + /> + ); + } + + return ( + <> +
    +
    + + + + + {select} +
    +
    + + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/SearchFieldClass.ts b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/SearchFieldClass.ts new file mode 100644 index 0000000000..5c7ca2b92c --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/SearchFieldClass.ts @@ -0,0 +1,14 @@ +export const SearchFieldClass = { + control: (state: any) => + state.isFocused ? "select-search focused" : "select-search", + option: (state: any) => (state.isFocused ? "select-option" : "select-option"), + input: (state: any) => (state.isFocused ? "select-input" : "select-input"), + placeholder: (state: any) => + state.isFocused ? "select-placeholder" : "select-placeholder", + singleValue: (state: any) => + state.isFocused ? "select-value" : "select-value", + menu: (state: any) => + state.isFocused ? "select-container" : "select-container", + indicatorSeparator: (state: any) => + state.isFocused ? "select-separator" : "select-separator", +}; diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/VoiceCountLabel.tsx b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/VoiceCountLabel.tsx new file mode 100644 index 0000000000..7780d70480 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/components/VoiceCountLabel.tsx @@ -0,0 +1,97 @@ +import React from "react"; +import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels"; +import { TtsCategoryType } from "../../../../../../../AppWrapper"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faShuffle } from "@fortawesome/pro-solid-svg-icons"; +import { Analytics } from "../../../../../../../common/Analytics"; +import { GetRandomArrayValue } from "@storyteller/components/src/utils/GetRandomArrayValue"; +import Tippy from "@tippyjs/react"; +import "tippy.js/dist/tippy.css"; + +interface Props { + allTtsModels: TtsModelListItem[]; + ttsModelsByCategoryToken: Map>; + selectedCategories: TtsCategoryType[]; + selectedTtsLanguageScope: string; + setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void; +} + +// NB/TODO: This duplicates the work of a sister component, but it was the fastest way +// to hack this in without passing callbacks around or moving calculation higher up the +// component tree. + +export function VoiceCountLabel(props: Props) { + const { allTtsModels, ttsModelsByCategoryToken, selectedCategories } = props; + + const leafiestCategory = selectedCategories[selectedCategories.length - 1]; + + let leafiestCategoryModels: Array = []; + + if (leafiestCategory !== undefined) { + leafiestCategoryModels = Array.from( + ttsModelsByCategoryToken.get(leafiestCategory.category_token) || new Set() + ); + } else { + leafiestCategoryModels = Array.from(new Set(allTtsModels)); + } + + let possibleVoices = leafiestCategoryModels.filter((ttsModel) => { + // Scope to currently selected language + if (props.selectedTtsLanguageScope === "*") { + return true; // NB: Sentinel value of "*" means all languages. + } + return ( + ttsModel.ietf_primary_language_subtag === props.selectedTtsLanguageScope + ); + }); + + const selectRandomVoice = () => { + let randomVoice = undefined; + for (let i = 0; i < 10; i++) { + // We're going to try to find a *good* voice. + randomVoice = GetRandomArrayValue(possibleVoices); + if ( + randomVoice.user_ratings.positive_count > + randomVoice.user_ratings.negative_count + ) { + break; // First "mostly good" voice is good. + } + if (i % 3 === 2 && randomVoice.user_ratings.total_count === 0) { + break; // Sometimes we'll return a voice that hasn't been rated. + } + } + if (randomVoice !== undefined) { + props.setMaybeSelectedTtsModel(randomVoice); + } + }; + + const voiceCount = possibleVoices.length; + + return ( + <> +
    + +
    + + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/character/trump/search/filters/CategoryOptions.tsx b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/filters/CategoryOptions.tsx new file mode 100644 index 0000000000..98b91193ed --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/character/trump/search/filters/CategoryOptions.tsx @@ -0,0 +1,197 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faArrowRightLong, faTags } from "@fortawesome/free-solid-svg-icons"; +import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels"; +import { TtsCategoryType } from "../../../../../../../AppWrapper"; +//import { useTranslation } from "react-i18next"; +import Select from "react-select"; +import { SearchFieldClass } from "../components/SearchFieldClass"; +import { Analytics } from "../../../../../../../common/Analytics"; +import { t } from "i18next"; + +interface Props { + allTtsCategories: TtsCategoryType[]; + allTtsModels: TtsModelListItem[]; + + allTtsCategoriesByTokenMap: Map; + allTtsModelsByTokenMap: Map; + ttsModelsByCategoryToken: Map>; + + dropdownCategories: TtsCategoryType[][]; + setDropdownCategories: (dropdownCategories: TtsCategoryType[][]) => void; + + selectedCategories: TtsCategoryType[]; + setSelectedCategories: (selectedCategories: TtsCategoryType[]) => void; + + maybeSelectedTtsModel?: TtsModelListItem; + setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void; + + handleChangeCategory: (level: number, maybeToken?: string) => void; + + selectedTtsLanguageScope: string; +} + +export function CategoryOptions(props: Props) { + const { + ttsModelsByCategoryToken, + dropdownCategories, + selectedCategories, + handleChangeCategory, + } = props; + + //const { t } = useTranslation(); + + let categoryDropdowns = buildDropdowns( + dropdownCategories, + selectedCategories, + ttsModelsByCategoryToken, + handleChangeCategory + ); + + const CATEGORY_SEPARATOR = ( +
    + +
    + ); + + let categoryDropdownsWithSeparators = []; + for (let i = 0; i < categoryDropdowns.length; i++) { + categoryDropdownsWithSeparators.push(categoryDropdowns[i]); + if (i < categoryDropdowns.length - 1) { + categoryDropdownsWithSeparators.push(CATEGORY_SEPARATOR); + } + } + + return ( + <> +
    + {categoryDropdownsWithSeparators} +
    + + ); +} + +// ========= Build dropdowns ======== + +function buildDropdowns( + dropdownCategories: TtsCategoryType[][], + selectedCategories: TtsCategoryType[], + ttsModelsByCategoryToken: Map>, + handleChangeCategory: (i: number, categoryToken?: string) => void +) { + if (dropdownCategories.length === 0 || ttsModelsByCategoryToken.size === 0) { + // While the XHR requests are still completing, we may have nothing to build. + // It's easier to return a fully disabled "loading" +
    , + ]; + } + + let categoryDropdowns = []; + + for (let i = 0; i < dropdownCategories.length; i++) { + const currentDropdownCategories = dropdownCategories[i]; + const selectedCategory = selectedCategories[i]; + + let defaultName = i === 0 ? "All Voices" : "Select..."; + + let dropdownOptions = []; + dropdownOptions.push( + + ); + + // TODO(bt, 2023-01-18): Clean this up + + // Transform into "react-select" library compatible options + const options = currentDropdownCategories + .filter((category) => { + // If there are no models at the leaves, skip the category + const models = ttsModelsByCategoryToken.get(category.category_token); + return !(models === undefined || models.size === 0); + }) + .map((category) => { + return { + value: category.category_token, + label: category.name_for_dropdown, + }; + }); + + currentDropdownCategories.forEach((category) => { + const models = ttsModelsByCategoryToken.get(category.category_token); + if (models === undefined || models.size === 0) { + return; // If there are no models at the leaves, skip + } + dropdownOptions.push( + + ); + }); + + let selectedCategoryOption = undefined; + if (selectedCategory !== undefined) { + selectedCategoryOption = { + value: selectedCategory.category_token, + label: selectedCategory.name_for_dropdown, + }; + } + + if (dropdownOptions.length <= 1) { + // We've run out of subcategories. (1 == "Select...") + // No sense trying to build more. + break; + } + + let selectProps: any = { + options: options, + classNames: SearchFieldClass, + className: "w-100", + autoFocus: false, // On mobile, we don't want the onscreen keyboard to take up half the UI. + isSearchable: false, // On mobile, we don't want the onscreen keyboard to take up half the UI. + onMenuOpen: () => { + Analytics.ttsOpenCategorySelectMenu(); + }, + onChange: (option: any) => handleChangeCategory(i, option?.value), + }; + + if (selectedCategoryOption === undefined) { + // NB(bt, 2023-01-19): I'm not sure why we're having to do this to clear categories. + // If I had more time to spend with this library, I might have a better solution than this hack. + selectProps["value"] = { + value: "*", + label: t("tts.TtsModelListPage.exploreModal.selectCategoryText"), + }; + } else { + selectProps["value"] = selectedCategoryOption; + } + + categoryDropdowns.push( + +
    + + + + { + Analytics.ttsOpenCategorySelectMenu(); + }} + /> +
    + ); +} diff --git a/packages/fakeyou.com/src/v2/view/pages/clone_voice_requests/VoiceCloneRequestPage.tsx b/packages/fakeyou.com/src/v2/view/pages/clone_voice_requests/VoiceCloneRequestPage.tsx index 9a2bb4f0a2..798d9ebc60 100644 --- a/packages/fakeyou.com/src/v2/view/pages/clone_voice_requests/VoiceCloneRequestPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/clone_voice_requests/VoiceCloneRequestPage.tsx @@ -30,7 +30,6 @@ import { usePrefixedDocumentTitle } from "../../../../common/UsePrefixedDocument interface Props {} function VoiceCloneRequestPage(props: Props) { - usePrefixedDocumentTitle("Create a Custom Voice Clone with Deep Fake TTS"); // Contact @@ -262,7 +261,7 @@ function VoiceCloneRequestPage(props: Props) {
    - + Professionally Clone Your Voice diff --git a/packages/fakeyou.com/src/v2/view/pages/contribute/ContributeIndexPage.tsx b/packages/fakeyou.com/src/v2/view/pages/contribute/ContributeIndexPage.tsx index da1eafb0ec..74bbb865ce 100644 --- a/packages/fakeyou.com/src/v2/view/pages/contribute/ContributeIndexPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/contribute/ContributeIndexPage.tsx @@ -44,7 +44,7 @@ function ContributeIndexPage(props: Props) { You make FakeYou better by contributing - {t("pages.contributeIndex.introText")} +
    {t("pages.contributeIndex.introText")}
    ); const titleIcon = ( @@ -55,7 +55,7 @@ function ContributeIndexPage(props: Props) { {/*
    - + {t("pages.contributeIndex.heroTitle")} diff --git a/packages/fakeyou.com/src/v2/view/pages/firehose/FirehoseEventListPage.tsx b/packages/fakeyou.com/src/v2/view/pages/firehose/FirehoseEventListPage.tsx index a4f743372f..e7eaf0d461 100644 --- a/packages/fakeyou.com/src/v2/view/pages/firehose/FirehoseEventListPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/firehose/FirehoseEventListPage.tsx @@ -29,6 +29,9 @@ interface FirehoseEventListResponsePayload { interface FirehoseEvent { event_token: string; event_type: string; + + maybe_target_user_info?: TargetUserInfo; + maybe_target_user_token?: string; maybe_target_username?: string; maybe_target_display_name?: string; @@ -38,6 +41,15 @@ interface FirehoseEvent { updated_at: string; } +interface TargetUserInfo { + user_token: string; + username: string; + display_name: string; + gravatar_hash: string; + default_avatar_index: number; + default_avatar_color_index: number; +} + interface Props { sessionWrapper: SessionWrapper; } @@ -95,7 +107,19 @@ function FirehoseEventListPage(props: Props) { firehoseEvents.slice(0, 16).forEach((event) => { let inner = ; let userLink = Anonymous user; - let gravatar = ; + let gravatar = ( +
    + +
    + ); if ( event.maybe_target_username !== undefined && @@ -106,11 +130,17 @@ function FirehoseEventListPage(props: Props) { let link = `/profile/${event.maybe_target_username}`; userLink = {event.maybe_target_display_name}; gravatar = ( -
    +
    ); @@ -122,7 +152,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  signed up for FakeYou! @@ -133,7 +162,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  got a badge! @@ -144,7 +172,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  started TTS model upload @@ -155,7 +182,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  completed TTS model upload @@ -166,7 +192,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  started TTS @@ -177,7 +202,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  completed TTS @@ -188,7 +212,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  started uploading a lipsync template. @@ -199,7 +222,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  finished uploading a lipsync template. @@ -210,7 +232,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  started a W2L lipsync video @@ -221,7 +242,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  completed a W2L lipsync video @@ -232,7 +252,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  mentioned us on twitter! @@ -243,7 +262,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  retweeted us! @@ -254,7 +272,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  joined discord! @@ -265,7 +282,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  sent a discord message @@ -276,7 +292,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  subscribed to us on twitch! @@ -287,7 +302,6 @@ function FirehoseEventListPage(props: Props) { {gravatar} -   {userLink}  followed us on twitch! @@ -310,7 +324,7 @@ function FirehoseEventListPage(props: Props) {
    - + Firehose Event Feed diff --git a/packages/fakeyou.com/src/v2/view/pages/leaderboard/LeaderboardPage.tsx b/packages/fakeyou.com/src/v2/view/pages/leaderboard/LeaderboardPage.tsx index c3251164f3..411155221e 100644 --- a/packages/fakeyou.com/src/v2/view/pages/leaderboard/LeaderboardPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/leaderboard/LeaderboardPage.tsx @@ -8,7 +8,7 @@ import { GetLeaderboardIsErr, GetLeaderboardIsOk, Leaderboard, - LeaderboardEntryForList, + LeaderboardRow, LeaderboardLookupError, } from "@storyteller/components/src/api/leaderboard/GetLeaderboard"; import { DiscordLink2 } from "@storyteller/components/src/elements/DiscordLink2"; @@ -25,10 +25,10 @@ function LeaderboardPage(props: Props) { undefined ); const [ttsLeaderboard, setTtsLeaderboard] = useState< - Array | undefined + Array | undefined >(undefined); const [w2lLeaderboard, setW2lLeaderboard] = useState< - Array | undefined + Array | undefined >(undefined); const [retryCount, setRetryCount] = useState(0); @@ -70,13 +70,17 @@ function LeaderboardPage(props: Props) { ttsRows.push( - + -   {ttsEntry.display_name} @@ -93,13 +97,17 @@ function LeaderboardPage(props: Props) { w2lRows.push( - + -   {w2lEntry.display_name} @@ -113,7 +121,7 @@ function LeaderboardPage(props: Props) {
    - + Leaderboard diff --git a/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_ip_ban_list/ModerationIpBanListFc.tsx b/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_ip_ban_list/ModerationIpBanListFc.tsx index cb33cfee3e..246b776746 100644 --- a/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_ip_ban_list/ModerationIpBanListFc.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_ip_ban_list/ModerationIpBanListFc.tsx @@ -138,16 +138,13 @@ function ModerationIpBanListFc(props: Props) { return (
    -

    Moderation IP Ban List

    +

    Moderation IP Ban List

    IP Address bans will prevent bad actors from using and abusing the website.

    - +
    diff --git a/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_job_stats/ModerationJobStatsFc.tsx b/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_job_stats/ModerationJobStatsFc.tsx index c8cbe937a6..c98a0176dd 100644 --- a/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_job_stats/ModerationJobStatsFc.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_job_stats/ModerationJobStatsFc.tsx @@ -104,12 +104,9 @@ function ModerationJobStatsFc(props: Props) { return (
    -

    Job Stats

    +

    Job Stats

    - +
    @@ -246,10 +243,7 @@ function ModerationJobStatsFc(props: Props) {
    - +
    ); diff --git a/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_main/ModerationFc.tsx b/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_main/ModerationFc.tsx index 9f58412816..46ce673e69 100644 --- a/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_main/ModerationFc.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/moderation/moderation_main/ModerationFc.tsx @@ -24,7 +24,7 @@ function ModerationFc(props: Props) { return (
    -

    +

    Moderation Controls

    diff --git a/packages/fakeyou.com/src/v2/view/pages/patrons/PatronPage.tsx b/packages/fakeyou.com/src/v2/view/pages/patrons/PatronPage.tsx index 476fc0c8a7..b6e42bd38c 100644 --- a/packages/fakeyou.com/src/v2/view/pages/patrons/PatronPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/patrons/PatronPage.tsx @@ -13,7 +13,6 @@ interface Props { } function PatronPage(props: Props) { - usePrefixedDocumentTitle("Thank you to our Patrons!"); return ( @@ -21,7 +20,7 @@ function PatronPage(props: Props) {
    - + Thanks to our Patrons! diff --git a/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutCancelPage.tsx b/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutCancelPage.tsx index e237422f14..a9e858700a 100644 --- a/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutCancelPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutCancelPage.tsx @@ -29,28 +29,25 @@ function CheckoutCancelPage(props: Props) {
    - + Oh no!
    - It's okay if you don't want to support FakeYou right now, but we'd - appreciate it if you reconsider us in the future. + It's okay if you don't want to support FakeYou right now, but + we'd appreciate it if you reconsider us in the future.
    - Paid plans go directly to helping us afford more GPUs, engineering, - and research talent. + Paid plans go directly to helping us afford more GPUs, + engineering, and research talent.
    - We're trying to build a film and music production system that you - can use to make any content you dream up. Please consider supporting - us monetarily. + We're trying to build a film and music production system that + you can use to make any content you dream up. Please consider + supporting us monetarily.
    @@ -65,14 +62,12 @@ function CheckoutCancelPage(props: Props) {
    - Select a Premium Plan
    - ); } diff --git a/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutSuccessPage.tsx b/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutSuccessPage.tsx index 956fe2e884..f8e872bcb0 100644 --- a/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutSuccessPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/premium/CheckoutSuccessPage.tsx @@ -1,4 +1,3 @@ - import React from "react"; import { Link } from "react-router-dom"; import { motion } from "framer-motion"; @@ -30,20 +29,17 @@ function CheckoutSuccessPage(props: Props) {
    - + Thank you!

    - We're grateful you're helping FakeYou build the future creative - suite. We're building tools for small creators and have an eye - on building a full AI-powered Hollywood and music production - studio. + We're grateful you're helping FakeYou build the future + creative suite. We're building tools for small creators and + have an eye on building a full AI-powered Hollywood and music + production studio.
    @@ -65,7 +61,6 @@ function CheckoutSuccessPage(props: Props) {
    - ); } diff --git a/packages/fakeyou.com/src/v2/view/pages/premium/PortalSuccessPage.tsx b/packages/fakeyou.com/src/v2/view/pages/premium/PortalSuccessPage.tsx index c72df8b19c..346c280a57 100644 --- a/packages/fakeyou.com/src/v2/view/pages/premium/PortalSuccessPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/premium/PortalSuccessPage.tsx @@ -29,10 +29,7 @@ function PortalSuccessPage(props: Props) {
    - + Thank You!
    @@ -55,7 +52,6 @@ function PortalSuccessPage(props: Props) {
    - ); } diff --git a/packages/fakeyou.com/src/v2/view/pages/premium/PricingPage.tsx b/packages/fakeyou.com/src/v2/view/pages/premium/PricingPage.tsx index 4ee53ddd1b..0a6d06e4da 100644 --- a/packages/fakeyou.com/src/v2/view/pages/premium/PricingPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/premium/PricingPage.tsx @@ -38,9 +38,8 @@ function PricingPage(props: Props) { const beginStripeFlow = async ( internal_plan_key: string, - analyticsName: string, + analyticsName: string ): Promise => { - switch (analyticsName) { case "plus": Analytics.premiumSelectPlanPlus(); @@ -64,7 +63,6 @@ function PricingPage(props: Props) { history.push(signupUrl); return false; - } else if (props.sessionSubscriptionsWrapper.hasPaidFeatures()) { Analytics.premiumForwardToStripePortal(); return await beginStripePortalFlow(); // NB: This redirects the user to Stripe @@ -77,16 +75,19 @@ function PricingPage(props: Props) { usePrefixedDocumentTitle("Premium Deep Fake TTS"); const environment = FakeYouFrontendEnvironment.getInstance(); - const planKey = environment.useProductionStripePlans() ? "production" : "development"; + const planKey = environment.useProductionStripePlans() + ? "production" + : "development"; - const userHasPaidPremium = props.sessionSubscriptionsWrapper.hasPaidFeatures(); + const userHasPaidPremium = + props.sessionSubscriptionsWrapper.hasPaidFeatures(); let plusButtonText = "Buy Plus"; let plusButtonDisabled = false; let proButtonText = "Buy Pro"; let proButtonDisabled = false; - let proBorderCss = "rounded panel p-4 h-100" + let proBorderCss = "rounded panel p-4 h-100"; let eliteButtonText = "Buy Elite"; let eliteButtonDisabled = false; @@ -122,10 +123,7 @@ function PricingPage(props: Props) { unsubscribeButton = ( <>
    - +
    @@ -321,7 +319,9 @@ function PricingPage(props: Props) {

    {FYP.pro.tier}

    @@ -446,7 +446,9 @@ function PricingPage(props: Props) { {FYP.elite.tier}
    -
    -
    - {unsubscribeButton} +
    +
    {unsubscribeButton}
    -
    {/* Starter Tier (to show for Latin American countries) */} {/*
    diff --git a/packages/fakeyou.com/src/v2/view/pages/profile/profile_ban/ProfileBanFc.tsx b/packages/fakeyou.com/src/v2/view/pages/profile/profile_ban/ProfileBanFc.tsx index 461c88a5a7..0dcca57dce 100644 --- a/packages/fakeyou.com/src/v2/view/pages/profile/profile_ban/ProfileBanFc.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/profile/profile_ban/ProfileBanFc.tsx @@ -111,7 +111,7 @@ function ProfileBanFc(props: Props) { return (
    - + Profile & Preferences diff --git a/packages/fakeyou.com/src/v2/view/pages/profile/profile_edit/ProfileEditFc.tsx b/packages/fakeyou.com/src/v2/view/pages/profile/profile_edit/ProfileEditFc.tsx index 5819b03dda..4c4d2a36a3 100644 --- a/packages/fakeyou.com/src/v2/view/pages/profile/profile_edit/ProfileEditFc.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/profile/profile_edit/ProfileEditFc.tsx @@ -236,7 +236,7 @@ function ProfileEditFc(props: Props) { return (
    - + Profile & Preferences diff --git a/packages/fakeyou.com/src/v2/view/pages/profile/profile_view/ProfilePage.tsx b/packages/fakeyou.com/src/v2/view/pages/profile/profile_view/ProfilePage.tsx index 06b2e78c81..ebc185c177 100644 --- a/packages/fakeyou.com/src/v2/view/pages/profile/profile_view/ProfilePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/profile/profile_view/ProfilePage.tsx @@ -364,6 +364,8 @@ function ProfilePage(this: any, props: Props) { size={150} username={userData.display_name} email_hash={userEmailHash} + avatarIndex={userData.default_avatar_index} + backgroundIndex={userData.default_avatar_color_index} />
    @@ -371,6 +373,8 @@ function ProfilePage(this: any, props: Props) { size={100} username={userData.display_name} email_hash={userEmailHash} + avatarIndex={userData.default_avatar_index} + backgroundIndex={userData.default_avatar_color_index} />
    diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_edit_categories/TtsEditCategoriesPage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_edit_categories/TtsEditCategoriesPage.tsx index 30cc82d20e..be6a06bd17 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_edit_categories/TtsEditCategoriesPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_edit_categories/TtsEditCategoriesPage.tsx @@ -260,7 +260,7 @@ function TtsEditCategoriesPage(props: Props) {
    - + Edit Categories diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_delete/TtsModelDeletePage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_delete/TtsModelDeletePage.tsx index 65260c6085..9edba49682 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_delete/TtsModelDeletePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_delete/TtsModelDeletePage.tsx @@ -148,9 +148,7 @@ function TtsModelDeletePage(props: Props) { let creatorLink = ; if (!!ttsModel?.creator_display_name) { - const creatorUrl = WebUrl.userProfilePage( - ttsModel?.creator_display_name - ); + const creatorUrl = WebUrl.userProfilePage(ttsModel?.creator_display_name); creatorLink = {ttsModel?.creator_display_name}; } @@ -218,7 +216,7 @@ function TtsModelDeletePage(props: Props) {
    - + {h1Title} diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_edit/TtsModelEditPage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_edit/TtsModelEditPage.tsx index 8d693c9acb..da91b1773b 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_edit/TtsModelEditPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_edit/TtsModelEditPage.tsx @@ -79,10 +79,14 @@ function TtsModelEditPage(props: Props) { // Moderator-only fields (both observable and editable) const [useDefaultMFactor, setUseDefaultMFactor] = useState(false); // NB: The field is an f64, but string is easy to edit - const [maybeCustomMFactor, setMaybeCustomMFactor] = useState(null); + const [maybeCustomMFactor, setMaybeCustomMFactor] = useState( + null + ); // Vocoder config (modern) - const [maybeCustomVocoderToken, setMaybeCustomVocoderToken] = useState(null); + const [maybeCustomVocoderToken, setMaybeCustomVocoderToken] = useState< + string | null + >(null); // Vocoder config (legacy) const [defaultPretrainedVocoder, setDefaultPretrainedVocoder] = useState( @@ -120,12 +124,12 @@ function TtsModelEditPage(props: Props) { model.maybe_moderator_fields?.use_default_m_factor || false ); - let maybeCustomMFactor = (!!model.maybe_moderator_fields?.maybe_custom_m_factor) ? - model.maybe_moderator_fields?.maybe_custom_m_factor.toString() : - null; + let maybeCustomMFactor = !!model.maybe_moderator_fields + ?.maybe_custom_m_factor + ? model.maybe_moderator_fields?.maybe_custom_m_factor.toString() + : null; setMaybeCustomMFactor(maybeCustomMFactor); - } else if (GetTtsModelIsErr(model)) { switch (model) { case TtsModelLookupError.NotFound: @@ -135,7 +139,6 @@ function TtsModelEditPage(props: Props) { } }, []); - const listVocoderModels = useCallback(async () => { const models = await ListVocoderModels(); @@ -144,7 +147,6 @@ function TtsModelEditPage(props: Props) { } }, []); - useEffect(() => { getModel(token); listVocoderModels(); @@ -192,7 +194,6 @@ function TtsModelEditPage(props: Props) { setMaybeCustomVocoderToken((ev.target as HTMLSelectElement).value); }; - const handleIsFrontPageFeaturedChange = ( ev: React.FormEvent ) => { @@ -213,12 +214,16 @@ function TtsModelEditPage(props: Props) { setSuggestedUniqueBotCommand(command); }; - const handleUseDefaultMFactorChange = (ev: React.FormEvent) => { + const handleUseDefaultMFactorChange = ( + ev: React.FormEvent + ) => { const value = (ev.target as HTMLInputElement).checked; setUseDefaultMFactor(value); }; - - const handleMaybeCustomMFactorChange = (ev: React.FormEvent) => { + + const handleMaybeCustomMFactorChange = ( + ev: React.FormEvent + ) => { ev.preventDefault(); const textValue = (ev.target as HTMLInputElement).value.trim(); setMaybeCustomMFactor(textValue); @@ -255,7 +260,10 @@ function TtsModelEditPage(props: Props) { text_pipeline_type: textPipelineType, }; - if (!!maybeCustomVocoderToken && maybeCustomVocoderToken !== UNSET_CUSTOM_VOCODER_SENTINEL) { + if ( + !!maybeCustomVocoderToken && + maybeCustomVocoderToken !== UNSET_CUSTOM_VOCODER_SENTINEL + ) { request.maybe_custom_vocoder_token = maybeCustomVocoderToken; } @@ -266,7 +274,8 @@ function TtsModelEditPage(props: Props) { request.maybe_suggested_unique_bot_command = suggestedUniqueBotCommand; } request.use_default_m_factor = useDefaultMFactor; - request.maybe_custom_m_factor = maybeCustomMFactor === null ? null : Number(maybeCustomMFactor.trim()); + request.maybe_custom_m_factor = + maybeCustomMFactor === null ? null : Number(maybeCustomMFactor.trim()); } fetch(endpointUrl, { @@ -385,33 +394,29 @@ function TtsModelEditPage(props: Props) {
    - +
    -
    - + />
    -
    - ); } - let customVocoderOptions = vocoderModels.map((vocoder) => { + let customVocoderOptions = vocoderModels.map((vocoder) => { return ( - - ) + ); }); let usableTextPipelines = isModerator @@ -468,7 +469,7 @@ function TtsModelEditPage(props: Props) {
    - + Edit Model @@ -612,7 +613,9 @@ function TtsModelEditPage(props: Props) { Public (visible from your profile) - +
    diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_list/TtsPageHero.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_list/TtsPageHero.tsx index 5ace746699..9364f549d4 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_list/TtsPageHero.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_list/TtsPageHero.tsx @@ -40,6 +40,7 @@ export function TtsPageHero(props: Props) { //"mascot/superbowl-PE.webp", //"mascot/valentines.webp", // "mascot/st_patricks.webp", + //"mascot/april_fools.webp", ]; return images[Math.floor(Math.random() * images.length)]; diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_view/TtsModelViewPage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_view/TtsModelViewPage.tsx index 128847172a..e18fa5efd1 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_view/TtsModelViewPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_model_view/TtsModelViewPage.tsx @@ -262,15 +262,14 @@ function TtsModelViewPage(props: Props) { if (!!ttsModel?.creator_display_name) { const creatorUrl = WebUrl.userProfilePage(ttsModel?.creator_username); creatorLink = ( - +
    -   {ttsModel.creator_display_name} - +
    ); } @@ -586,15 +585,16 @@ function TtsModelViewPage(props: Props) { Vocoder created by - -   - - {ttsModel.maybe_custom_vocoder.creator_display_name} - +
    + + + {ttsModel.maybe_custom_vocoder.creator_display_name} + +
    @@ -705,7 +705,7 @@ function TtsModelViewPage(props: Props) {
    - + {title} {/* Rate Voice Model Buttons */} diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_delete/TtsResultDeletePage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_delete/TtsResultDeletePage.tsx index 5b6490eb67..abf34c4070 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_delete/TtsResultDeletePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_delete/TtsResultDeletePage.tsx @@ -133,9 +133,7 @@ function TtsResultDeletePage(props: Props) { return
    ; // Exit rendering until data loads. } - const modelLink = WebUrl.ttsModelPage( - ttsInferenceResult.tts_model_token - ); + const modelLink = WebUrl.ttsModelPage(ttsInferenceResult.tts_model_token); let durationSeconds = ttsInferenceResult?.duration_millis / 1000; let modelName = ttsInferenceResult.tts_model_title; @@ -189,7 +187,7 @@ function TtsResultDeletePage(props: Props) { return (
    - + {h1Title} diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_edit/TtsResultEditPage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_edit/TtsResultEditPage.tsx index fc04413fa8..876adfe0be 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_edit/TtsResultEditPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_edit/TtsResultEditPage.tsx @@ -152,7 +152,7 @@ function TtsResultEditPage(props: Props) { return (
    - + Edit Result Visibility diff --git a/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_view/TtsResultViewPage.tsx b/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_view/TtsResultViewPage.tsx index 9ef12c106c..235a73f4c8 100644 --- a/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_view/TtsResultViewPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/tts/tts_result_view/TtsResultViewPage.tsx @@ -219,17 +219,16 @@ function TtsResultViewPage(props: Props) { if (!!ttsInferenceResult.maybe_creator_user_token) { let creatorLink = `/profile/${ttsInferenceResult.maybe_creator_username}`; creatorDetails = ( - +
    -   {ttsInferenceResult.maybe_creator_display_name} - +
    ); } @@ -237,19 +236,18 @@ function TtsResultViewPage(props: Props) { if (!!ttsInferenceResult.maybe_model_creator_user_token) { let modelCreatorLink = `/profile/${ttsInferenceResult.maybe_model_creator_username}`; modelCreatorDetails = ( - +
    -   {ttsInferenceResult.maybe_model_creator_display_name} - +
    ); } @@ -434,7 +432,7 @@ function TtsResultViewPage(props: Props) {
    - + {headingTitle} {/* Rate Result Buttons */} diff --git a/packages/fakeyou.com/src/v2/view/pages/upload/UploadTtsModelPage.tsx b/packages/fakeyou.com/src/v2/view/pages/upload/UploadTtsModelPage.tsx index 3a8d47133e..7d44385832 100644 --- a/packages/fakeyou.com/src/v2/view/pages/upload/UploadTtsModelPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/upload/UploadTtsModelPage.tsx @@ -113,7 +113,7 @@ function UploadTtsModelPage(props: Props) {
    - + Upload Voice (TTS Model) This works just like YouTube! diff --git a/packages/fakeyou.com/src/v2/view/pages/upload/UploadVocoderPage.tsx b/packages/fakeyou.com/src/v2/view/pages/upload/UploadVocoderPage.tsx index 90e5be4fb2..e2c297c12e 100644 --- a/packages/fakeyou.com/src/v2/view/pages/upload/UploadVocoderPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/upload/UploadVocoderPage.tsx @@ -1,7 +1,10 @@ import React, { useState } from "react"; import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; import { DiscordLink } from "@storyteller/components/src/elements/DiscordLink"; -import { EnqueueRetrieval, EnqueueRetrievalIsOk } from "@storyteller/components/src/api/retrieval/EnqueueRetrieval"; +import { + EnqueueRetrieval, + EnqueueRetrievalIsOk, +} from "@storyteller/components/src/api/retrieval/EnqueueRetrieval"; import { useHistory } from "react-router-dom"; import { v4 as uuidv4 } from "uuid"; import { BackLink } from "../../_common/BackLink"; @@ -69,7 +72,7 @@ function UploadVocoderPage(props: Props) { idempotency_token: idempotencyToken, title: title, download_url: downloadUrl, - generic_download_type: 'hifigan', + generic_download_type: "hifigan", }; const response = await EnqueueRetrieval(request); @@ -86,7 +89,7 @@ function UploadVocoderPage(props: Props) {
    - + Upload Vocoder Model Make your voice sound better! @@ -113,9 +116,9 @@ function UploadVocoderPage(props: Props) {

    - Once your vocoder is successfully uploaded, you'll be able to - add it to your voice models. Others will be able to use it too, and - you'll get credited. + Once your vocoder is successfully uploaded, you'll be able to add it + to your voice models. Others will be able to use it too, and you'll + get credited.

    {/* TODO TEMP (2022-03-08)

    @@ -130,7 +133,8 @@ function UploadVocoderPage(props: Props) {

    {downloadUrlInvalidReason}

    -
    diff --git a/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lPhotoPage.tsx b/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lPhotoPage.tsx index 7cd19df200..691fd605a9 100644 --- a/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lPhotoPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lPhotoPage.tsx @@ -94,7 +94,7 @@ function UploadW2lPhotoPage(props: Props) {
    - + Upload Photo (w2l template) diff --git a/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lVideoPage.tsx b/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lVideoPage.tsx index b9a3e34e99..1e63bd0594 100644 --- a/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lVideoPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/upload/UploadW2lVideoPage.tsx @@ -94,7 +94,7 @@ function UploadW2lVideoPage(props: Props) {
    - + Upload Video (w2l template) diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_delete/W2lResultDeletePage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_delete/W2lResultDeletePage.tsx index 73fa3373b7..f5769fd8fc 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_delete/W2lResultDeletePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_delete/W2lResultDeletePage.tsx @@ -106,7 +106,7 @@ function W2lResultDeletePage(props: Props) { return (
    - + {h1Title} diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_edit/W2lResultEditPage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_edit/W2lResultEditPage.tsx index 598460b209..7ad45995be 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_edit/W2lResultEditPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_edit/W2lResultEditPage.tsx @@ -148,7 +148,7 @@ function W2lResultEditPage(props: Props) { return (
    - + Edit Result Visibility diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_view/W2lResultViewPage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_view/W2lResultViewPage.tsx index 1cb84941ec..c8920479b6 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_view/W2lResultViewPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_result_view/W2lResultViewPage.tsx @@ -264,7 +264,7 @@ function W2lResultViewPage(props: Props) {
    Lipsync Result diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_approve/W2lTemplateApprovePage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_approve/W2lTemplateApprovePage.tsx index 4386180d56..0410726336 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_approve/W2lTemplateApprovePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_approve/W2lTemplateApprovePage.tsx @@ -121,7 +121,7 @@ function W2lTemplateApprovePage(props: Props) {
    - + {h1Title}
    diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_delete/W2lTemplateDeletePage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_delete/W2lTemplateDeletePage.tsx index 8a436b73c0..f0a7a7ea98 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_delete/W2lTemplateDeletePage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_delete/W2lTemplateDeletePage.tsx @@ -172,7 +172,7 @@ function W2lTemplateDeletePage(props: Props) {
    - + {h1Title}
    diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_edit/W2lTemplateEditPage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_edit/W2lTemplateEditPage.tsx index 53a512e6c3..55d79e4fdf 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_edit/W2lTemplateEditPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_edit/W2lTemplateEditPage.tsx @@ -121,7 +121,7 @@ function W2lTemplateEditPage(props: Props) {
    -

    Edit Template

    +

    Edit Template

    diff --git a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_view/W2lTemplateViewPage.tsx b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_view/W2lTemplateViewPage.tsx index ce506e5ccd..ae8eb058d7 100644 --- a/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_view/W2lTemplateViewPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/w2l/w2l_template_view/W2lTemplateViewPage.tsx @@ -412,7 +412,7 @@ function W2lTemplateViewPage(props: Props) { return (
    - + Video Lip Sync Template Template: {w2lTemplate?.title} diff --git a/packages/power.stream-dashboard/src/pages/index/IndexPage.tsx b/packages/power.stream-dashboard/src/pages/index/IndexPage.tsx index 049b516c9f..deca123aca 100644 --- a/packages/power.stream-dashboard/src/pages/index/IndexPage.tsx +++ b/packages/power.stream-dashboard/src/pages/index/IndexPage.tsx @@ -92,7 +92,7 @@ function IndexPage(props: Props) {
    Features
    -

    +

    TTS Features

    @@ -166,7 +166,7 @@ function IndexPage(props: Props) {
    TTS Voices
    -

    +

    Voice Previews

    @@ -206,7 +206,7 @@ function IndexPage(props: Props) {
    Statistics
    -

    +

    Our Insights

    @@ -249,10 +249,10 @@ function IndexPage(props: Props) {

    -

    +

    Frequently Asked Questions

    -

    +

    FAQ

    @@ -362,7 +362,7 @@ function IndexPage(props: Props) {
    -

    +

    Join Our Community

    @@ -388,7 +388,7 @@ function IndexPage(props: Props) {

    -

    +

    Get started with Storyteller Stream!

    diff --git a/packages/power.stream/src/layout/FooterNav.tsx b/packages/power.stream/src/layout/FooterNav.tsx index c5241a8306..a27cfd044e 100644 --- a/packages/power.stream/src/layout/FooterNav.tsx +++ b/packages/power.stream/src/layout/FooterNav.tsx @@ -1,5 +1,4 @@ import { GitSha } from "@storyteller/components/src/elements/GitSha"; -import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; import { Link } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { diff --git a/packages/power.stream/src/layout/TopNav.tsx b/packages/power.stream/src/layout/TopNav.tsx index 1be2b4ab0d..b159543f77 100644 --- a/packages/power.stream/src/layout/TopNav.tsx +++ b/packages/power.stream/src/layout/TopNav.tsx @@ -1,6 +1,5 @@ import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; import React, { useState, useEffect } from "react"; -import { Link } from "react-router-dom"; interface Props { sessionWrapper: SessionWrapper; @@ -26,7 +25,7 @@ function TopNav(props: Props) { aria-label="Offcanvas navbar large" > -

    +

    Frequently Asked Questions

    -

    +

    FAQ

    @@ -362,7 +362,7 @@ function IndexPage(props: Props) {
    -

    +

    Join Our Community

    @@ -404,9 +404,7 @@ function IndexPage(props: Props) { />

    -

    - Get started with Power Stream! -

    +

    Get started with Power Stream!

    -
    +
    +
    + FakeYou +
    +
    -

    FakeYou

    +

    FakeYou

    Used by millions of people every month

    @@ -275,7 +283,7 @@ function IndexPage() {
    -
    +
    +
    + FakeYou +
    +
    -

    PowerStream

    +

    PowerStream

    Twitch Streamers and Creators can engage and monetize

    @@ -720,27 +736,18 @@ function IndexPage() {
    -
    -
    -
    -
    -

    - We're an interdiciplinary team building the one-person cloud - studio -

    -
    -
    -
    -
    -

    - Our dream is to empower anyone to create full feature-length - content without institutional capital, large teams, huge amounts - of time, or a deep reservoir of highly specialized talent. We - want to empower everyone to turn their dreams into physical - form. -

    -
    -
    +
    +

    + We’re building the future production cloud studio +

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis + vehicula odio. Nulla non sem scelerisque, hendrerit libero sagittis, + rhoncus orci. Etiam in molestie augue. Donec lobortis tincidunt + massa, a posuere libero sagittis eget. Vivamus sagittis mauris non + tristique ornare. Pellentesque rhoncus ipsum magna, nec lacinia odio + sagittis et. Nunc aliquet cursus dui fermentum molestie. +

    diff --git a/packages/trumped.com/src/navigation/Footer.tsx b/packages/trumped.com/src/navigation/Footer.tsx index 4ed117ea2f..4cb8e2416e 100644 --- a/packages/trumped.com/src/navigation/Footer.tsx +++ b/packages/trumped.com/src/navigation/Footer.tsx @@ -16,12 +16,12 @@ function Footer(props: Props) {

    */}

    Want more Donald Trump TTS?

    - The best Donald Trump TTS can be found + The best Donald Trump TTS can be found at FakeYou.

    FakeYou is the world's best Text to Speech website and has thousands of - voices. Angry Donald J Trump, Sad DJ Trump, Hillary Clinton, Nixon, and + voices. Angry Donald J Trump AI Voice, Sad DJ Trump, Hillary Clinton, Nixon, and so many others!

    diff --git a/templates/fakeyou/about.html b/templates/fakeyou/about.html index fd0b4f607c..fcc748e8dd 100644 --- a/templates/fakeyou/about.html +++ b/templates/fakeyou/about.html @@ -128,9 +128,7 @@

    -

    - A Glimpse of the Future -

    +

    A Glimpse of the Future

    We're building FakeYou as just one component of a broad set of production and creative tooling. diff --git a/templates/fakeyou/clone.html b/templates/fakeyou/clone.html index d5399d6d96..e013ba7764 100644 --- a/templates/fakeyou/clone.html +++ b/templates/fakeyou/clone.html @@ -128,9 +128,7 @@

    -

    - Professionally Clone Your Voice -

    +

    Professionally Clone Your Voice

    (or any voice) for just $70

    Want a Custom Voice You Can Use?

    diff --git a/templates/fakeyou/contribute.html b/templates/fakeyou/contribute.html index 395e3ffdce..c502e8f25c 100644 --- a/templates/fakeyou/contribute.html +++ b/templates/fakeyou/contribute.html @@ -116,7 +116,7 @@
    -

    Contribute to FakeYou!

    +

    Contribute to FakeYou!

    You make FakeYou better by contributing

    You'll get credited for everything you contribute. You'll also get diff --git a/templates/fakeyou/firehose.html b/templates/fakeyou/firehose.html index 31fd5c9223..5e321277c3 100644 --- a/templates/fakeyou/firehose.html +++ b/templates/fakeyou/firehose.html @@ -116,7 +116,7 @@

    -

    Firehose Event Feed

    +

    Firehose Event Feed

    The latest FakeYou events refreshed every few seconds

    diff --git a/templates/fakeyou/leaderboard.html b/templates/fakeyou/leaderboard.html index 923fbc01fc..3d1a148cbd 100644 --- a/templates/fakeyou/leaderboard.html +++ b/templates/fakeyou/leaderboard.html @@ -116,7 +116,7 @@
    -

    Leaderboard

    +

    Leaderboard

    Our most frequent contributors!

    Want to be on the leaderboard? diff --git a/templates/fakeyou/patrons.html b/templates/fakeyou/patrons.html index 005cff56b8..9b86adf34e 100644 --- a/templates/fakeyou/patrons.html +++ b/templates/fakeyou/patrons.html @@ -119,7 +119,7 @@

    -

    Thanks to our Patrons!

    +

    Thanks to our Patrons!

    Our Patrons help support our work.

    Our Patrons help pay offset (but not completely cover) our diff --git a/templates/fakeyou/terms.html b/templates/fakeyou/terms.html index abab3ea8d1..63a3eaa354 100644 --- a/templates/fakeyou/terms.html +++ b/templates/fakeyou/terms.html @@ -116,7 +116,7 @@

    -

    Terms and Conditions

    +

    Terms and Conditions

    Please use this technology responsibly.

    diff --git a/templates/fakeyou/tts-result.html b/templates/fakeyou/tts-result.html index eedc1e633b..b97773231a 100644 --- a/templates/fakeyou/tts-result.html +++ b/templates/fakeyou/tts-result.html @@ -116,7 +116,7 @@
    -

    Piccolo (Dragonball/Z/GT)

    +

    Piccolo (Dragonball/Z/GT)

    diff --git a/templates/fakeyou/upload-photo.html b/templates/fakeyou/upload-photo.html index 7977d410bf..1e77a19afa 100644 --- a/templates/fakeyou/upload-photo.html +++ b/templates/fakeyou/upload-photo.html @@ -116,7 +116,7 @@
    -

    Upload Photo (w2l template)

    +

    Upload Photo (w2l template)

    The photos you upload can be used for lipsyncing with audio using the Wav2Lip model. In the future, you'll be able to use these for diff --git a/templates/fakeyou/upload-tts.html b/templates/fakeyou/upload-tts.html index 775d4b9d96..73335c8472 100644 --- a/templates/fakeyou/upload-tts.html +++ b/templates/fakeyou/upload-tts.html @@ -116,7 +116,7 @@

    -

    Upload Voice (TTS Model)

    +

    Upload Voice (TTS Model)

    This works just like YouTube!

    Content Creator Rewards!
    As you upload and help us grow, diff --git a/templates/fakeyou/upload-video.html b/templates/fakeyou/upload-video.html index 32129dc089..32a227fd83 100644 --- a/templates/fakeyou/upload-video.html +++ b/templates/fakeyou/upload-video.html @@ -116,7 +116,7 @@
    -

    Upload Video (w2l template)

    +

    Upload Video (w2l template)

    The videos you upload can be used for lipsyncing with audio using the Wav2Lip model. diff --git a/templates/fakeyou/video-template.html b/templates/fakeyou/video-template.html index c8d0430712..10cdc4e120 100644 --- a/templates/fakeyou/video-template.html +++ b/templates/fakeyou/video-template.html @@ -116,7 +116,7 @@

    -

    Video Lipsync Templates

    +

    Video Lipsync Templates

    Template: Anderson Cooper tells the news

    < Back to all templates
    diff --git a/templates/fakeyou/video.html b/templates/fakeyou/video.html index cc77602bc7..3018595112 100644 --- a/templates/fakeyou/video.html +++ b/templates/fakeyou/video.html @@ -116,7 +116,7 @@
    -

    Video Lipsync Templates

    +

    Video Lipsync Templates

    Pick a template, then you can make it lip sync. If you want to use your own video or image, you'll need to create an account. You'll diff --git a/templates/storyteller-stream/dashboard.html b/templates/storyteller-stream/dashboard.html index b535cf6294..6e616797ee 100644 --- a/templates/storyteller-stream/dashboard.html +++ b/templates/storyteller-stream/dashboard.html @@ -174,7 +174,7 @@

    -

    +

    Join us in Discord!

    We'd like to chat with you.
    diff --git a/templates/storyteller-stream/index.html b/templates/storyteller-stream/index.html index 04e536920c..bfcd770a6f 100644 --- a/templates/storyteller-stream/index.html +++ b/templates/storyteller-stream/index.html @@ -172,7 +172,7 @@
    Features
    -

    +

    TTS Features

    @@ -249,7 +249,7 @@
    Statistics
    -

    +

    Our Insights

    @@ -292,10 +292,10 @@

    -

    +

    Frequently Asked Questions

    -

    +

    FAQ

    @@ -407,7 +407,7 @@
    -

    +

    Join Our Community

    @@ -433,9 +433,7 @@

    -

    - Get started with Storyteller Stream! -

    +

    Get started with Storyteller Stream!