mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-02 00:18:17 +00:00
1 parent
cb3870c53b
commit
09080dc7ab
6 files changed
+380
-521
No files matched your search
@@ -26,7 +26,6 @@
|
||||
"bulma": "^0.9.0",
|
||||
"craco": "^0.0.3",
|
||||
"date-fns": "^2.22.1",
|
||||
"framer-motion": "^6.5.1",
|
||||
"howler": "^2.2.0",
|
||||
"i18next": "^21.6.11",
|
||||
"js-cookie": "^3.0.1",
|
||||
|
||||
@@ -169,20 +169,20 @@ class App extends React.Component<Props, State> {
|
||||
|
||||
componentWillMount() {
|
||||
// Handle redesign
|
||||
console.log("componentWillMount", "useRefresh?", USE_REFRESH);
|
||||
console.log('componentWillMount', 'useRefresh?', USE_REFRESH);
|
||||
|
||||
if (USE_REFRESH) {
|
||||
// Redesign-specific CSS
|
||||
// NB(echelon): Despite the branches here, scss is all combined together at compile time
|
||||
// in staging and production (not development). To handle those environments, styles are
|
||||
// additionally applied based on the root "fakeyou-refresh" class, which may have changed
|
||||
// NB(echelon): Despite the branches here, scss is all combined together at compile time
|
||||
// in staging and production (not development). To handle those environments, styles are
|
||||
// additionally applied based on the root "fakeyou-refresh" class, which may have changed
|
||||
// some of the specificity rules of Bootstrap.
|
||||
require("./AppNew.scss");
|
||||
} else {
|
||||
// Old design CSS
|
||||
// NB(echelon): Despite the branches here, scss is all combined together at compile time
|
||||
// in staging and production (not development). To handle those environments, styles are
|
||||
// additionally applied based on the root "fakeyou-old" class, which may have changed some
|
||||
// in staging and production (not development). To handle those environments, styles are
|
||||
// additionally applied based on the root "fakeyou-old" class, which may have changed some
|
||||
// of the specificity rules of Bulma.
|
||||
require("./AppOld.scss");
|
||||
require("./v2/view/_css/footer.scss");
|
||||
@@ -542,11 +542,7 @@ class App extends React.Component<Props, State> {
|
||||
let mainClassNames = USE_REFRESH ? "bg-gradient" : "";
|
||||
let particlesBg = <></>;
|
||||
if (USE_REFRESH) {
|
||||
particlesBg = (
|
||||
<>
|
||||
<ParticlesBG></ParticlesBG>
|
||||
</>
|
||||
);
|
||||
particlesBg = <><ParticlesBG></ParticlesBG></>
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -8,28 +8,3 @@ export const duration = "400";
|
||||
export const pricing1 = "0";
|
||||
export const pricing2 = "100";
|
||||
export const pricing3 = "200";
|
||||
|
||||
export const container = {
|
||||
visible: {
|
||||
opacity: 1,
|
||||
transition: {
|
||||
staggerChildren: 0.05,
|
||||
},
|
||||
},
|
||||
hidden: { opacity: 0 },
|
||||
};
|
||||
|
||||
export const item = {
|
||||
visible: { opacity: 1, y: 0 },
|
||||
hidden: { opacity: 0, y: 50 },
|
||||
};
|
||||
|
||||
export const image = {
|
||||
visible: { opacity: 1, x: 0, transition: { delay: 0.1 } },
|
||||
hidden: { opacity: 0, x: 100 },
|
||||
};
|
||||
|
||||
export const panel = {
|
||||
visible: { opacity: 1, y: 0, transition: { delay: 0.25 } },
|
||||
hidden: { opacity: 0, y: 50 },
|
||||
};
|
||||
@@ -1,8 +1,8 @@
|
||||
import React from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { container, item, image, panel } from "../../../../data/animation";
|
||||
import { motion } from "framer-motion";
|
||||
import { distance, delay, delay2, duration } from "../../../../data/animation";
|
||||
import { USE_REFRESH } from "../../../../Refresh";
|
||||
const Fade = require("react-reveal/Fade");
|
||||
|
||||
interface Props {}
|
||||
|
||||
@@ -272,289 +272,291 @@ function AboutPage(props: Props) {
|
||||
}
|
||||
|
||||
return (
|
||||
<motion.div initial="hidden" animate="visible" variants={container}>
|
||||
<div>
|
||||
<div className="container mb-4">
|
||||
<div className="row gx-3 flex-lg-row-reverse align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div className="d-flex justify-content-center">
|
||||
<motion.img
|
||||
src="/mascot/kitsune_pose3.webp"
|
||||
className="img-fluid"
|
||||
width="520"
|
||||
alt="FakeYou Kitsune Mascot!"
|
||||
variants={image}
|
||||
/>
|
||||
<Fade right distance={distance} delay={delay} duration={duration}>
|
||||
<img
|
||||
src="/mascot/kitsune_pose3.webp"
|
||||
className="img-fluid"
|
||||
width="520"
|
||||
alt="FakeYou Kitsune Mascot!"
|
||||
/>
|
||||
</Fade>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 px-md-2 ps-lg-5 ps-xl-2">
|
||||
<div className="text-center text-lg-start">
|
||||
<div>
|
||||
<motion.h1
|
||||
className="display-5 fw-bold lh-1 mb-4"
|
||||
variants={item}
|
||||
>
|
||||
A Glimpse of the Future
|
||||
</motion.h1>
|
||||
<Fade bottom cascade duration={duration} distance={distance}>
|
||||
<div className="text-center text-lg-start">
|
||||
<div>
|
||||
<h1 className="display-5 fw-bold lh-1 mb-4">
|
||||
A Glimpse of the Future
|
||||
</h1>
|
||||
</div>
|
||||
<div>
|
||||
<p className="lead">
|
||||
We're building FakeYou as just one component of a broad set
|
||||
of production and creative tooling.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<motion.p className="lead" variants={item}>
|
||||
We're building FakeYou as just one component of a broad set of
|
||||
production and creative tooling.
|
||||
</motion.p>
|
||||
</div>
|
||||
</div>
|
||||
</Fade>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<motion.div className="container-panel pt-4 pb-5" variants={panel}>
|
||||
<div className="panel p-3 p-lg-4 load-hidden mt-5 mt-lg-0">
|
||||
<h1 className="panel-title fw-bold">About FakeYou</h1>
|
||||
<div className="py-6 d-flex flex-column gap-4">
|
||||
<p>
|
||||
Your brain was already capable of imagining things spoken in other
|
||||
people's voices. This is a demonstration of how far computers have
|
||||
caught up. One day computers will be able to bring all of the rich
|
||||
and vivid imagery of your hopes and dreams to life. There's never
|
||||
been a better time throughout all history to be a creative than
|
||||
now.
|
||||
</p>
|
||||
<div>
|
||||
<h2 className="mb-4">Technology disclosure</h2>
|
||||
<div className="container-panel pt-4 pb-5">
|
||||
<Fade bottom distance={distance} delay={delay2} duration={duration}>
|
||||
<div className="panel p-3 p-lg-4 load-hidden mt-5 mt-lg-0">
|
||||
<h1 className="panel-title fw-bold">About FakeYou</h1>
|
||||
<div className="py-6 d-flex flex-column gap-4">
|
||||
<p>
|
||||
<em>
|
||||
We'll be happy to remove any of the voices featured here for
|
||||
any reason. See our <Link to="/terms">terms page</Link> for
|
||||
more info.
|
||||
</em>
|
||||
Your brain was already capable of imagining things spoken in
|
||||
other people's voices. This is a demonstration of how far
|
||||
computers have caught up. One day computers will be able to
|
||||
bring all of the rich and vivid imagery of your hopes and dreams
|
||||
to life. There's never been a better time throughout all history
|
||||
to be a creative than now.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
”Deep fakes” are kind of like Photoshop when it
|
||||
first came out. They're impressive, maybe a little bit scary,
|
||||
but they're about to become the new norm. People will become
|
||||
accustomed to the technology, and the results will be used
|
||||
mostly for creative good, unlocking previously costly and
|
||||
unattainable high production values for individual creators.
|
||||
It's our belief that the next Hollywood will be <em>you</em>.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
The technology to clone voices is already out in the open, and
|
||||
the voices here are built by a community of contributors. We're
|
||||
not the only website doing this, and plenty of people are
|
||||
producing these same results on their own at home, independent
|
||||
of our work. You can see thousands of examples on YouTube and
|
||||
social media.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
Even if the United States chooses to ban this technology,
|
||||
institutions in China, Japan, Canada, and other countries all
|
||||
over the world are rapidly conducting and publishing research on
|
||||
this topic. People everywhere have access to this easy-to-use
|
||||
technology. State actors probably have even more sophisiticated
|
||||
versions available.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
As an interesting point, most if not all of the voices produced
|
||||
by this website are actually
|
||||
<em> Linda Johnson</em> with a little bit layered on top.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a
|
||||
href="https://github.com/NVIDIA/tacotron2"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
NVIDIA makes these tools publicly available for you to make
|
||||
your own voice models
|
||||
</a>
|
||||
. Check it out!
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">FakeYou was previously Vocodes</h2>
|
||||
<p>
|
||||
FakeYou.com was previously known as{" "}
|
||||
<strong>https://vo.codes</strong>, but has been rebranded to
|
||||
better reflect its purpose and direction. (Not many people know
|
||||
what a <em>vocoder</em> is anyway, so it didn't make sense to
|
||||
keep the name.)
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">Thanks</h2>
|
||||
<p>
|
||||
Thanks to the following individuals (in no particular order) for
|
||||
help with data gathering and annotation, Discord moderation, ML
|
||||
advice, etc.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
Vegito1089, Shin, Ashurath, MakaveliGH, Blutarch Mann, Yahia,
|
||||
Tim Squid, Seuneramet, Matt, Seth, CookiePPP,{" "}
|
||||
<a
|
||||
href="https://twitter.com/r9y9/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@r9y9
|
||||
</a>
|
||||
, BFlat, Raisin.
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
<p>
|
||||
The following papers, models, and resources were used:
|
||||
<div>
|
||||
<h2 className="mb-4">Technology disclosure</h2>
|
||||
<p>
|
||||
<em>
|
||||
We'll be happy to remove any of the voices featured here for
|
||||
any reason. See our <Link to="/terms">terms page</Link> for
|
||||
more info.
|
||||
</em>
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
”Deep fakes” are kind of like Photoshop when it
|
||||
first came out. They're impressive, maybe a little bit scary,
|
||||
but they're about to become the new norm. People will become
|
||||
accustomed to the technology, and the results will be used
|
||||
mostly for creative good, unlocking previously costly and
|
||||
unattainable high production values for individual creators.
|
||||
It's our belief that the next Hollywood will be <em>you</em>.
|
||||
</p>
|
||||
<br />
|
||||
<a
|
||||
href="https://github.com/NVIDIA/tacotron2"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Tacotron2
|
||||
</a>{" "}
|
||||
(BSD-3 license),{" "}
|
||||
<a
|
||||
href="https://github.com/jaywalnut310/glow-tts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
glow-tts
|
||||
</a>{" "}
|
||||
(MIT license), {/* MIT */}
|
||||
<a
|
||||
href="https://github.com/seungwonpark/melgan"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
MelGAN
|
||||
</a>{" "}
|
||||
(BSD-3 license), {/* BSD3 */}
|
||||
<a
|
||||
href="https://arxiv.org/pdf/2005.05106.pdf"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Multi-band MelGAN
|
||||
</a>{" "}
|
||||
(paper),{" "}
|
||||
<a
|
||||
href="https://arxiv.org/abs/2010.05646"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
HiFi-GAN
|
||||
</a>{" "}
|
||||
(paper),{" "}
|
||||
<a
|
||||
href="https://github.com/Rudrabha/Wav2Lip"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Wav2Lip
|
||||
</a>{" "}
|
||||
(MIT license), {/* Non-commercial */}
|
||||
<a
|
||||
href="http://www.speech.cs.cmu.edu/cgi-bin/cmudict"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
CMUDict
|
||||
</a>{" "}
|
||||
(BSD-2 license),{" "}
|
||||
<a
|
||||
href="https://keithito.com/LJ-Speech-Dataset/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
LJSpeech
|
||||
</a>{" "}
|
||||
(public domain),{" "}
|
||||
<a
|
||||
href="https://datashare.is.ed.ac.uk/handle/10283/3443"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
VCTK
|
||||
</a>{" "}
|
||||
(CC BY 4.0).
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
Videos are generated by the amazing Wav2Lip system{" "}
|
||||
<a
|
||||
href="https://doi.org/10.1145/3394171.3413532"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
(paper)
|
||||
</a>
|
||||
, by Prajwal{" "}
|
||||
<a
|
||||
href="https://twitter.com/prajwalkr14"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
(@prajwalkr14)
|
||||
</a>
|
||||
, K R and Mukhopadhyay, Rudrabha and Namboodiri, Vinay P. and
|
||||
Jawahar, C.V.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">Contact</h2>
|
||||
<p>
|
||||
Reach out to "echelon" on{" "}
|
||||
<a
|
||||
href="https://twitter.com/echelon"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Twitter
|
||||
</a>
|
||||
and Hacker News. Say hi.
|
||||
</p>
|
||||
<p>
|
||||
The technology to clone voices is already out in the open, and
|
||||
the voices here are built by a community of contributors.
|
||||
We're not the only website doing this, and plenty of people
|
||||
are producing these same results on their own at home,
|
||||
independent of our work. You can see thousands of examples on
|
||||
YouTube and social media.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
Even if the United States chooses to ban this technology,
|
||||
institutions in China, Japan, Canada, and other countries all
|
||||
over the world are rapidly conducting and publishing research
|
||||
on this topic. People everywhere have access to this
|
||||
easy-to-use technology. State actors probably have even more
|
||||
sophisiticated versions available.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
As an interesting point, most if not all of the voices
|
||||
produced by this website are actually
|
||||
<em> Linda Johnson</em> with a little bit layered on top.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Storyteller Company (registered as Learning Machines, LLC)
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">Built With</h2>
|
||||
<div className="row gx-3 gx-lg-4">
|
||||
<div className="col-4 col-md-3">
|
||||
<img
|
||||
className="rounded img-fluid"
|
||||
src="/logos/pytorch.png"
|
||||
alt="models are written in pytorch"
|
||||
/>
|
||||
</div>
|
||||
<div className="col-4 col-md-3">
|
||||
<img
|
||||
className="rounded img-fluid"
|
||||
src="/logos/rust.png"
|
||||
alt="core server components are written in Rust"
|
||||
/>
|
||||
</div>
|
||||
<div className="col-4 col-md-3">
|
||||
<img
|
||||
className="rounded img-fluid"
|
||||
src="/logos/kubernetes.png"
|
||||
alt="the cluster scales with k8s"
|
||||
/>
|
||||
<p>
|
||||
<a
|
||||
href="https://github.com/NVIDIA/tacotron2"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
NVIDIA makes these tools publicly available for you to make
|
||||
your own voice models
|
||||
</a>
|
||||
. Check it out!
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">FakeYou was previously Vocodes</h2>
|
||||
<p>
|
||||
FakeYou.com was previously known as{" "}
|
||||
<strong>https://vo.codes</strong>, but has been rebranded to
|
||||
better reflect its purpose and direction. (Not many people
|
||||
know what a <em>vocoder</em> is anyway, so it didn't make
|
||||
sense to keep the name.)
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">Thanks</h2>
|
||||
<p>
|
||||
Thanks to the following individuals (in no particular order)
|
||||
for help with data gathering and annotation, Discord
|
||||
moderation, ML advice, etc.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
Vegito1089, Shin, Ashurath, MakaveliGH, Blutarch Mann, Yahia,
|
||||
Tim Squid, Seuneramet, Matt, Seth, CookiePPP,{" "}
|
||||
<a
|
||||
href="https://twitter.com/r9y9/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@r9y9
|
||||
</a>
|
||||
, BFlat, Raisin.
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
<p>
|
||||
The following papers, models, and resources were used:
|
||||
<br />
|
||||
<br />
|
||||
<a
|
||||
href="https://github.com/NVIDIA/tacotron2"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Tacotron2
|
||||
</a>{" "}
|
||||
(BSD-3 license),{" "}
|
||||
<a
|
||||
href="https://github.com/jaywalnut310/glow-tts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
glow-tts
|
||||
</a>{" "}
|
||||
(MIT license), {/* MIT */}
|
||||
<a
|
||||
href="https://github.com/seungwonpark/melgan"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
MelGAN
|
||||
</a>{" "}
|
||||
(BSD-3 license), {/* BSD3 */}
|
||||
<a
|
||||
href="https://arxiv.org/pdf/2005.05106.pdf"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Multi-band MelGAN
|
||||
</a>{" "}
|
||||
(paper),{" "}
|
||||
<a
|
||||
href="https://arxiv.org/abs/2010.05646"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
HiFi-GAN
|
||||
</a>{" "}
|
||||
(paper),{" "}
|
||||
<a
|
||||
href="https://github.com/Rudrabha/Wav2Lip"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Wav2Lip
|
||||
</a>{" "}
|
||||
(MIT license), {/* Non-commercial */}
|
||||
<a
|
||||
href="http://www.speech.cs.cmu.edu/cgi-bin/cmudict"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
CMUDict
|
||||
</a>{" "}
|
||||
(BSD-2 license),{" "}
|
||||
<a
|
||||
href="https://keithito.com/LJ-Speech-Dataset/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
LJSpeech
|
||||
</a>{" "}
|
||||
(public domain),{" "}
|
||||
<a
|
||||
href="https://datashare.is.ed.ac.uk/handle/10283/3443"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
VCTK
|
||||
</a>{" "}
|
||||
(CC BY 4.0).
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
Videos are generated by the amazing Wav2Lip system{" "}
|
||||
<a
|
||||
href="https://doi.org/10.1145/3394171.3413532"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
(paper)
|
||||
</a>
|
||||
, by Prajwal{" "}
|
||||
<a
|
||||
href="https://twitter.com/prajwalkr14"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
(@prajwalkr14)
|
||||
</a>
|
||||
, K R and Mukhopadhyay, Rudrabha and Namboodiri, Vinay P. and
|
||||
Jawahar, C.V.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">Contact</h2>
|
||||
<p>
|
||||
Reach out to "echelon" on{" "}
|
||||
<a
|
||||
href="https://twitter.com/echelon"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Twitter
|
||||
</a>
|
||||
and Hacker News. Say hi.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Storyteller Company (registered as Learning Machines, LLC)
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="mb-4">Built With</h2>
|
||||
<div className="row gx-3 gx-lg-4">
|
||||
<div className="col-4 col-md-3">
|
||||
<img
|
||||
className="rounded img-fluid"
|
||||
src="/logos/pytorch.png"
|
||||
alt="models are written in pytorch"
|
||||
/>
|
||||
</div>
|
||||
<div className="col-4 col-md-3">
|
||||
<img
|
||||
className="rounded img-fluid"
|
||||
src="/logos/rust.png"
|
||||
alt="core server components are written in Rust"
|
||||
/>
|
||||
</div>
|
||||
<div className="col-4 col-md-3">
|
||||
<img
|
||||
className="rounded img-fluid"
|
||||
src="/logos/kubernetes.png"
|
||||
alt="the cluster scales with k8s"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</motion.div>
|
||||
</Fade>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import { t } from "i18next";
|
||||
import { Trans } from "react-i18next";
|
||||
import { TwitchTtsNotice } from "./notices/TwitchTtsNotice";
|
||||
import { PleaseFollowNotice } from "./notices/PleaseFollowNotice";
|
||||
import { distance, delay, delay2, duration } from "../../../../data/animation";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import {
|
||||
faTrash,
|
||||
@@ -43,8 +44,8 @@ import {
|
||||
faVolumeUp,
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
import { USE_REFRESH } from "../../../../Refresh";
|
||||
import { motion } from "framer-motion";
|
||||
import { container, item, image, panel } from "../../../../data/animation";
|
||||
|
||||
const Fade = require("react-reveal/Fade");
|
||||
|
||||
export interface EnqueueJobResponsePayload {
|
||||
success: boolean;
|
||||
@@ -433,7 +434,7 @@ function TtsModelListFc(props: Props) {
|
||||
}
|
||||
|
||||
return (
|
||||
<motion.div initial="hidden" animate="visible" variants={container}>
|
||||
<div>
|
||||
{pleaseFollowNotice}
|
||||
|
||||
{languageNotice}
|
||||
@@ -446,123 +447,123 @@ function TtsModelListFc(props: Props) {
|
||||
<div className="row gx-3 flex-lg-row-reverse align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div className="d-flex justify-content-center">
|
||||
<motion.img
|
||||
src="mascot/kitsune_pose2.webp"
|
||||
className="img-fluid"
|
||||
width="560"
|
||||
alt="FakeYou Mascot"
|
||||
variants={image}
|
||||
/>
|
||||
<Fade right distance={distance} delay={delay} duration={duration}>
|
||||
<img
|
||||
src="mascot/kitsune_pose2.webp"
|
||||
className="img-fluid"
|
||||
width="560"
|
||||
alt="FakeYou Mascot"
|
||||
/>
|
||||
</Fade>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 px-md-2 px-lg-5 px-xl-2">
|
||||
<div>
|
||||
<motion.h1
|
||||
className="display-3 fw-bold lh-1 mb-3 text-center text-lg-start"
|
||||
variants={item}
|
||||
>
|
||||
Text to Speech
|
||||
</motion.h1>
|
||||
<motion.p
|
||||
className="lead mb-5 text-center text-lg-start pe-xl-2"
|
||||
variants={item}
|
||||
>
|
||||
<Trans i18nKey="pages.ttsList.heroSubtitle">
|
||||
Use FakeYou's deepfake tech to say stuff with your favorite
|
||||
characters.
|
||||
</Trans>
|
||||
</motion.p>
|
||||
</div>
|
||||
<Fade bottom cascade duration={duration} distance={distance}>
|
||||
<div>
|
||||
<h1 className="display-3 fw-bold lh-1 mb-3 text-center text-lg-start">
|
||||
Text to Speech
|
||||
</h1>
|
||||
<p className="lead mb-5 text-center text-lg-start pe-xl-2">
|
||||
<Trans i18nKey="pages.ttsList.heroSubtitle">
|
||||
Use FakeYou's deepfake tech to say stuff with your favorite
|
||||
characters.
|
||||
</Trans>
|
||||
</p>
|
||||
</div>
|
||||
</Fade>
|
||||
|
||||
<motion.div
|
||||
className="d-flex flex-column flex-md-row gap-3 justify-content-center justify-content-lg-start mb-5 mb-lg-4"
|
||||
variants={item}
|
||||
>
|
||||
{signUpButton}
|
||||
<Link to="/clone">
|
||||
<button type="button" className="btn btn-secondary w-100">
|
||||
Clone My Voice!
|
||||
</button>
|
||||
</Link>
|
||||
</motion.div>
|
||||
<Fade bottom delay={delay} duration={duration} distance={distance}>
|
||||
<div className="d-flex flex-column flex-md-row gap-3 justify-content-center justify-content-lg-start mb-5 mb-lg-4">
|
||||
{signUpButton}
|
||||
<Link to="/clone">
|
||||
<button type="button" className="btn btn-secondary w-100">
|
||||
Clone My Voice!
|
||||
</button>
|
||||
</Link>
|
||||
</div>
|
||||
</Fade>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<motion.div className="container-panel pt-4 pb-5 mb-4" variants={panel}>
|
||||
<div className="panel p-3 p-lg-4 mt-5 mt-lg-0">
|
||||
<i className="fas fa-volume-high"></i>
|
||||
<h1 className="panel-title fw-bold">
|
||||
<FontAwesomeIcon icon={faVolumeUp} className="me-3" />
|
||||
Create TTS
|
||||
</h1>
|
||||
<div className="py-6">
|
||||
<div className="d-flex gap-4">
|
||||
<form
|
||||
className="w-100 d-flex flex-column gap-4"
|
||||
onSubmit={handleFormSubmit}
|
||||
>
|
||||
<MultiDropdownSearch
|
||||
allTtsCategories={props.allTtsCategories}
|
||||
allTtsModels={props.ttsModels}
|
||||
allTtsCategoriesByTokenMap={props.allTtsCategoriesByTokenMap}
|
||||
allTtsModelsByTokenMap={props.allTtsModelsByTokenMap}
|
||||
ttsModelsByCategoryToken={props.ttsModelsByCategoryToken}
|
||||
dropdownCategories={props.dropdownCategories}
|
||||
setDropdownCategories={props.setDropdownCategories}
|
||||
selectedCategories={props.selectedCategories}
|
||||
setSelectedCategories={props.setSelectedCategories}
|
||||
maybeSelectedTtsModel={props.maybeSelectedTtsModel}
|
||||
setMaybeSelectedTtsModel={props.setMaybeSelectedTtsModel}
|
||||
/>
|
||||
<div className="container-panel pt-4 pb-5 mb-4">
|
||||
<Fade bottom distance={distance} delay={delay2} duration={duration}>
|
||||
<div className="panel p-3 p-lg-4 mt-5 mt-lg-0">
|
||||
<i className="fas fa-volume-high"></i>
|
||||
<h1 className="panel-title fw-bold">
|
||||
<FontAwesomeIcon icon={faVolumeUp} className="me-3" />
|
||||
Create TTS
|
||||
</h1>
|
||||
<div className="py-6">
|
||||
<div className="d-flex gap-4">
|
||||
<form
|
||||
className="w-100 d-flex flex-column gap-4"
|
||||
onSubmit={handleFormSubmit}
|
||||
>
|
||||
<MultiDropdownSearch
|
||||
allTtsCategories={props.allTtsCategories}
|
||||
allTtsModels={props.ttsModels}
|
||||
allTtsCategoriesByTokenMap={
|
||||
props.allTtsCategoriesByTokenMap
|
||||
}
|
||||
allTtsModelsByTokenMap={props.allTtsModelsByTokenMap}
|
||||
ttsModelsByCategoryToken={props.ttsModelsByCategoryToken}
|
||||
dropdownCategories={props.dropdownCategories}
|
||||
setDropdownCategories={props.setDropdownCategories}
|
||||
selectedCategories={props.selectedCategories}
|
||||
setSelectedCategories={props.setSelectedCategories}
|
||||
maybeSelectedTtsModel={props.maybeSelectedTtsModel}
|
||||
setMaybeSelectedTtsModel={props.setMaybeSelectedTtsModel}
|
||||
/>
|
||||
|
||||
<AutocompleteSearch
|
||||
allTtsCategories={props.allTtsCategories}
|
||||
allTtsModels={props.ttsModels}
|
||||
allTtsModelsByTokenMap={props.allTtsModelsByTokenMap}
|
||||
dropdownCategories={props.dropdownCategories}
|
||||
setDropdownCategories={props.setDropdownCategories}
|
||||
selectedCategories={props.selectedCategories}
|
||||
setSelectedCategories={props.setSelectedCategories}
|
||||
maybeSelectedTtsModel={props.maybeSelectedTtsModel}
|
||||
setMaybeSelectedTtsModel={props.setMaybeSelectedTtsModel}
|
||||
/>
|
||||
<AutocompleteSearch
|
||||
allTtsCategories={props.allTtsCategories}
|
||||
allTtsModels={props.ttsModels}
|
||||
allTtsModelsByTokenMap={props.allTtsModelsByTokenMap}
|
||||
dropdownCategories={props.dropdownCategories}
|
||||
setDropdownCategories={props.setDropdownCategories}
|
||||
selectedCategories={props.selectedCategories}
|
||||
setSelectedCategories={props.setSelectedCategories}
|
||||
maybeSelectedTtsModel={props.maybeSelectedTtsModel}
|
||||
setMaybeSelectedTtsModel={props.setMaybeSelectedTtsModel}
|
||||
/>
|
||||
|
||||
{directViewLink}
|
||||
{directViewLink}
|
||||
|
||||
<div className="text-input">
|
||||
<textarea
|
||||
onChange={handleChangeText}
|
||||
className="form-control fs-5"
|
||||
style={{ minHeight: "200px" }}
|
||||
value={props.textBuffer}
|
||||
placeholder={t("pages.ttsList.placeholderTextGoesHere")}
|
||||
></textarea>
|
||||
</div>
|
||||
<div className="text-input">
|
||||
<textarea
|
||||
onChange={handleChangeText}
|
||||
className="form-control fs-5"
|
||||
style={{ minHeight: "200px" }}
|
||||
value={props.textBuffer}
|
||||
placeholder={t("pages.ttsList.placeholderTextGoesHere")}
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
{maybeError}
|
||||
{maybeError}
|
||||
|
||||
<div className="d-flex flex-column flex-md-row w-100 gap-3 mt-3">
|
||||
<button
|
||||
className="btn btn-primary w-100"
|
||||
disabled={remainingCharactersButtonDisabled}
|
||||
>
|
||||
<FontAwesomeIcon icon={faVolumeHigh} className="me-2" />
|
||||
{t("pages.ttsList.buttonSpeak")}
|
||||
</button>
|
||||
<button
|
||||
className="btn btn-destructive w-100"
|
||||
onClick={handleClearClick}
|
||||
>
|
||||
<FontAwesomeIcon icon={faTrash} className="me-2" />
|
||||
{t("pages.ttsList.buttonClear")}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<div className="d-flex flex-column flex-md-row w-100 gap-3 mt-3">
|
||||
<button
|
||||
className="btn btn-primary w-100"
|
||||
disabled={remainingCharactersButtonDisabled}
|
||||
>
|
||||
<FontAwesomeIcon icon={faVolumeHigh} className="me-2" />
|
||||
{t("pages.ttsList.buttonSpeak")}
|
||||
</button>
|
||||
<button
|
||||
className="btn btn-destructive w-100"
|
||||
onClick={handleClearClick}
|
||||
>
|
||||
<FontAwesomeIcon icon={faTrash} className="me-2" />
|
||||
{t("pages.ttsList.buttonClear")}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</Fade>
|
||||
</div>
|
||||
|
||||
<SessionTtsInferenceResultListFc
|
||||
ttsInferenceJobs={props.ttsInferenceJobs}
|
||||
@@ -580,7 +581,7 @@ function TtsModelListFc(props: Props) {
|
||||
modelUploadJobs={props.ttsModelUploadJobs}
|
||||
/>
|
||||
<br />
|
||||
</motion.div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1143,18 +1143,6 @@
|
||||
dependencies:
|
||||
postcss-value-parser "^4.2.0"
|
||||
|
||||
"@emotion/is-prop-valid@^0.8.2":
|
||||
version "0.8.8"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
|
||||
integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
|
||||
dependencies:
|
||||
"@emotion/memoize" "0.7.4"
|
||||
|
||||
"@emotion/memoize@0.7.4":
|
||||
version "0.7.4"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
|
||||
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
|
||||
|
||||
"@eslint/eslintrc@^1.0.5":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318"
|
||||
@@ -2140,59 +2128,6 @@
|
||||
npmlog "^4.1.2"
|
||||
write-file-atomic "^3.0.3"
|
||||
|
||||
"@motionone/animation@^10.12.0":
|
||||
version "10.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.13.1.tgz#ebacb50df4b7eb4957cf398c221ae10852f28520"
|
||||
integrity sha512-dxQ+1wWxL6iFHDy1uv6hhcPjIdOg36eDT56jN4LI7Z5HZRyLpq8x1t7JFQclo/IEIb+6Bk4atmyinGFdXVECuA==
|
||||
dependencies:
|
||||
"@motionone/easing" "^10.13.1"
|
||||
"@motionone/types" "^10.13.0"
|
||||
"@motionone/utils" "^10.13.1"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@motionone/dom@10.12.0":
|
||||
version "10.12.0"
|
||||
resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed"
|
||||
integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==
|
||||
dependencies:
|
||||
"@motionone/animation" "^10.12.0"
|
||||
"@motionone/generators" "^10.12.0"
|
||||
"@motionone/types" "^10.12.0"
|
||||
"@motionone/utils" "^10.12.0"
|
||||
hey-listen "^1.0.8"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@motionone/easing@^10.13.1":
|
||||
version "10.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.13.1.tgz#7927b7fe96135989e37c2cda957e4101a4b85aa8"
|
||||
integrity sha512-INEsInHHDHVgx0dp5qlXi1lMXBqYicgLMMSn3zfGzaIvcaEbI1Uz8BoyNV4BiclTupG7RYIh+T6BU83ZcEe74g==
|
||||
dependencies:
|
||||
"@motionone/utils" "^10.13.1"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@motionone/generators@^10.12.0":
|
||||
version "10.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.13.1.tgz#d4989d887b864e0aefbbec63eed35ce298a73773"
|
||||
integrity sha512-+HK5u2YcNJCckTTqfOLgSVcrWv2z1dVwrSZEMVJuAh0EnWEWGDJRvMBoPc0cFf/osbkA2Rq9bH2+vP0Ex/D8uw==
|
||||
dependencies:
|
||||
"@motionone/types" "^10.13.0"
|
||||
"@motionone/utils" "^10.13.1"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@motionone/types@^10.12.0", "@motionone/types@^10.13.0":
|
||||
version "10.13.0"
|
||||
resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.13.0.tgz#b22c549931ebd88ed5528158b5d611dc9dbb3756"
|
||||
integrity sha512-qegk4qg8U1N9ZwAJ187BG3TkZz1k9LP/pvNtCSlqdq/PMUDKlCFG4ZnjJ481P0IOH/vIw1OzIbKIuyg0A3rk9g==
|
||||
|
||||
"@motionone/utils@^10.12.0", "@motionone/utils@^10.13.1":
|
||||
version "10.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.13.1.tgz#14919dfcda36b54b184fff690bc0125d554f60cd"
|
||||
integrity sha512-TjDPTIppaf3ofBXQv4ZzAketJgN0sclALXfZ6mfrkjJkOy83mLls9744F+6S+VKCpBmvbZcBY4PQfrfhAfeMtA==
|
||||
dependencies:
|
||||
"@motionone/types" "^10.13.0"
|
||||
hey-listen "^1.0.8"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
|
||||
@@ -6949,27 +6884,6 @@ fragment-cache@^0.2.1:
|
||||
dependencies:
|
||||
map-cache "^0.2.2"
|
||||
|
||||
framer-motion@^6.5.1:
|
||||
version "6.5.1"
|
||||
resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7"
|
||||
integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==
|
||||
dependencies:
|
||||
"@motionone/dom" "10.12.0"
|
||||
framesync "6.0.1"
|
||||
hey-listen "^1.0.8"
|
||||
popmotion "11.0.3"
|
||||
style-value-types "5.0.0"
|
||||
tslib "^2.1.0"
|
||||
optionalDependencies:
|
||||
"@emotion/is-prop-valid" "^0.8.2"
|
||||
|
||||
framesync@6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20"
|
||||
integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==
|
||||
dependencies:
|
||||
tslib "^2.1.0"
|
||||
|
||||
fresh@0.5.2:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||
@@ -7464,11 +7378,6 @@ he@^1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||
|
||||
hey-listen@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68"
|
||||
integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==
|
||||
|
||||
history@^4.9.0:
|
||||
version "4.10.1"
|
||||
resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
|
||||
@@ -10733,16 +10642,6 @@ pkg-up@^3.1.0:
|
||||
dependencies:
|
||||
find-up "^3.0.0"
|
||||
|
||||
popmotion@11.0.3:
|
||||
version "11.0.3"
|
||||
resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9"
|
||||
integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==
|
||||
dependencies:
|
||||
framesync "6.0.1"
|
||||
hey-listen "^1.0.8"
|
||||
style-value-types "5.0.0"
|
||||
tslib "^2.1.0"
|
||||
|
||||
portfinder@^1.0.28:
|
||||
version "1.0.28"
|
||||
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
|
||||
@@ -13108,14 +13007,6 @@ style-loader@^3.3.1:
|
||||
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
|
||||
integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==
|
||||
|
||||
style-value-types@5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad"
|
||||
integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==
|
||||
dependencies:
|
||||
hey-listen "^1.0.8"
|
||||
tslib "^2.1.0"
|
||||
|
||||
stylehacks@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.2.tgz#fa10e5181c6e8dc0bddb4a3fb372e9ac42bba2ad"
|
||||
@@ -13596,11 +13487,6 @@ tslib@^2.0.3:
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
|
||||
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
|
||||
|
||||
tslib@^2.1.0, tslib@^2.3.1:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
||||
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
||||
|
||||
tsparticles-engine@^2.0.6, tsparticles-engine@^2.1.3:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/tsparticles-engine/-/tsparticles-engine-2.1.3.tgz#d8922cf7811c40e5e9b87b18f9cc86043af8e900"
|
||||
|
||||
Reference in new issue
Block a user