Repository: SilentByte/selfie2anime-site
Branch: master
Commit: 88186d7d8ac1
Files: 45
Total size: 173.8 KB
Directory structure:
gitextract_zizv086x/
├── .browserslistrc
├── .gitignore
├── .gitmodules
├── LICENSE.txt
├── README.md
├── babel.config.js
├── build-portfolio.js
├── buildspec.yml
├── cdk/
│ ├── .gitignore
│ ├── .npmignore
│ ├── README.md
│ ├── bin/
│ │ └── cdk.ts
│ ├── cdk.json
│ ├── lib/
│ │ └── cdk-stack.ts
│ ├── package.json
│ └── tsconfig.json
├── package.json
├── postcss.config.js
├── public/
│ ├── 9593990f27faca6931121a16d4131090.html
│ ├── ads.txt
│ ├── email/
│ │ └── index.html
│ ├── gen/
│ │ └── .gitkeep
│ ├── index.html
│ ├── privacy/
│ │ └── index.html
│ ├── self-sitemap.xml
│ ├── sitemap.xml
│ ├── terms/
│ │ └── index.html
│ └── vendor/
│ └── magnific-popup.css
├── public_assets/
│ └── md/
│ ├── privacy.md
│ └── terms.md
├── src/
│ ├── App.vue
│ ├── components/
│ │ ├── Cropper.vue
│ │ └── PhotoUploader.vue
│ ├── gen/
│ │ └── .gitkeep
│ ├── i18n.ts
│ ├── main.ts
│ ├── router.ts
│ ├── shims-tsx.d.ts
│ ├── shims-vendor.d.ts
│ ├── shims-vue.d.ts
│ ├── vendor/
│ │ └── creative.js
│ └── views/
│ └── Home.vue
├── tsconfig.json
├── tslint.json
└── vue.config.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .browserslistrc
================================================
> 1%
last 2 versions
================================================
FILE: .gitignore
================================================
.idea/
.vscode/
node_modules/
dist/
src/gen/*.gen.*
public/**/*.gen.*
.env.local
.env.*.local
================================================
FILE: .gitmodules
================================================
[submodule "blog"]
path = blog
url = git@github.com:SilentByte/selfie2anime-blog.git
================================================
FILE: LICENSE.txt
================================================
MIT License
Copyright (c) 2019 SilentByte <https://www.silentbyte.com/>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================

[](https://selfie2anime.com)
[](https://selfie2anime.com)
[](https://selfie2anime.com)
# Selfie2Anime
*What do YOU look like in ANIME?*
This repository contains the source code for the [selfie2anime.com](https://selfie2anime.com) website. Upload a selfie and find out what you look like as an anime character!
# How Does it Work?
Using machine learning techniques combined with a [Generative Adversarial Network (GAN)](https://en.wikipedia.org/wiki/Generative_adversarial_network) makes it possible to generate anime-style characters based on real people. With this website, you can generate your own anime alter ego!
The GAN we are using is based on original work by *Junho Kim*, *Minjae Kim*, *Hyeonwoo Kang*, and *Kwanghee Lee*. More information can be found in their awesome repository, which is [available here](https://github.com/taki0112/UGATIT), or in [their research paper](https://arxiv.org/abs/1907.10830).
# Sample Photos
Recent anime selfies are being published on Twitter [@RicoBeti](https://twitter.com/RicoBeti).
### Here is a bunch of images that have been generated...

### ...and here are some of Australia's Prime Ministers

# Development

*(More detailed instructions will follow later)*
* Install dependencies:
```bash
npm install
```
* Pull submodules (the blog):
```bash
git submodule update --init --recursive
```
* Set correct values for environment variables in the `.env` files.
* Run a quick build to generate all assets needed for development:
```bash
DISABLE_IMAGE_OPTIMIZATION=1 npm run build
```
* Run development server:
```bash
npm run serve
```
* Alternatively, build the release version:
```bash
npm run build
```
Building a release version may take a long time due to generation of the portfolio and due to image optimizations being performed. In case the portfolio has not changed, set `DISABLE_PORTFOLIO_BUILD=1` to suppress regeneration of the images.
For development and testing, set `DISABLE_IMAGE_OPTIMIZATION=1` to avoid wasting time on image compression.
# License
MIT, see [LICENSE.txt](LICENSE.txt).
================================================
FILE: babel.config.js
================================================
module.exports = {
presets: [
"@vue/app",
],
};
================================================
FILE: build-portfolio.js
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
// Builds portfolio images and generates composites for the portfolio lightbox.
const fs = require("fs").promises;
const path = require("path");
const crypto = require("crypto");
const glob = require("glob");
const del = require("del");
const fx = require("mkdir-recursive");
const Jimp = require("jimp");
const guetzli = require("imagemin-guetzli");
const PORTFOLIO_SRC_DIR = "./public_assets/portfolio/";
const PORTFOLIO_DST_DIR = "./public/gen/portfolio/";
const PORTFOLIO_TREE_DST_DIR = "./src/gen/portfolio-tree.gen.json";
const COMPOSITE_SIZE = 256;
const PORTFOLIO_SIZE = 160;
const QUALITY = 90;
function sha1(buffer) {
const hash = crypto.createHash("sha1");
hash.update(buffer);
return hash.digest("hex");
}
function rgbToCssHex(r, g, b) {
return "#" + r.toString(16).padStart(2, "0")
+ g.toString(16).padStart(2, "0")
+ b.toString(16).padStart(2, "0");
}
async function generate() {
fx.mkdirSync(PORTFOLIO_DST_DIR, undefined);
del.sync(path.join(PORTFOLIO_DST_DIR, "*.gen.jpg"));
const dirs = glob.sync(path.join(PORTFOLIO_SRC_DIR, "*"));
const font = await Jimp.loadFont(Jimp.FONT_SANS_16_WHITE);
const box = new Jimp(135, 40, "#000000aa");
let counter = 0;
const portfolioTree = [];
for(const filename of dirs) {
let progress = ++counter / dirs.length * 100;
console.log(`PROCESSING (${progress.toFixed(1).padStart(5)}%) ${filename}`);
const compositeImage = new Jimp(COMPOSITE_SIZE * 2, COMPOSITE_SIZE);
const [originalImage, ganImage] = await Promise.all([
Jimp.read(path.join(filename, "original.jpg")),
Jimp.read(path.join(filename, "gan.jpg")),
]);
let [compositeBuffer, originalBuffer, ganBuffer] = await Promise.all([
compositeImage
.blit(new Jimp(originalImage).resize(COMPOSITE_SIZE, COMPOSITE_SIZE), 0, 0)
.blit(new Jimp(ganImage).resize(COMPOSITE_SIZE, COMPOSITE_SIZE), COMPOSITE_SIZE, 0)
.blit(box, 2 * COMPOSITE_SIZE - 135, COMPOSITE_SIZE - 18)
.print(font, 2 * COMPOSITE_SIZE - 129, COMPOSITE_SIZE - 18, "selfie2anime.com")
.getBufferAsync(Jimp.MIME_JPEG),
originalImage
.resize(PORTFOLIO_SIZE, PORTFOLIO_SIZE)
.getBufferAsync(Jimp.MIME_JPEG),
ganImage
.resize(PORTFOLIO_SIZE, PORTFOLIO_SIZE)
.getBufferAsync(Jimp.MIME_JPEG),
]);
if(!process.env.DISABLE_IMAGE_OPTIMIZATION) {
[compositeBuffer, originalBuffer, ganBuffer] = await Promise.all([
guetzli({quality: QUALITY})(compositeBuffer),
guetzli({quality: QUALITY})(originalBuffer),
guetzli({quality: QUALITY})(ganBuffer),
]);
}
const originalSha1 = sha1(originalBuffer);
const ganSha1 = sha1(ganBuffer);
const compositeSha1 = sha1(compositeBuffer);
const originalDst = path.join(PORTFOLIO_DST_DIR, originalSha1 + ".gen.jpg");
const ganDst = path.join(PORTFOLIO_DST_DIR, ganSha1 + ".gen.jpg");
const compositeDst = path.join(PORTFOLIO_DST_DIR, compositeSha1 + ".gen.jpg");
await Promise.all([
fs.writeFile(originalDst, originalBuffer),
fs.writeFile(ganDst, ganBuffer),
fs.writeFile(compositeDst, compositeBuffer),
]);
const thumb = Jimp.intToRGBA(ganImage.resize(1, 1).getPixelColor(0, 0));
portfolioTree.push({
original: originalDst.replace("public/", ""),
gan: ganDst.replace("public/", ""),
composite: compositeDst.replace("public/", ""),
size: PORTFOLIO_SIZE,
thumb: rgbToCssHex(thumb.r, thumb.g, thumb.b),
});
}
await fs.writeFile(PORTFOLIO_TREE_DST_DIR, JSON.stringify(portfolioTree, null, 4));
}
if(process.env.DISABLE_PORTFOLIO_BUILD) {
console.log("SKIPPING PORTFOLIO BUILD");
} else {
generate().then(() => {
console.log("DONE");
});
}
================================================
FILE: buildspec.yml
================================================
version: 0.2
phases:
pre_build:
commands:
- npm install
build:
commands:
- npm run build
post_build:
commands:
- aws s3 sync "./dist/" s3://$S3_BUCKET --delete --acl public-read
================================================
FILE: cdk/.gitignore
================================================
*.js
*.d.ts
node_modules
# CDK asset staging directory
.cdk.staging
cdk.out
================================================
FILE: cdk/.npmignore
================================================
*.ts
!*.d.ts
# CDK asset staging directory
.cdk.staging
cdk.out
================================================
FILE: cdk/README.md
================================================
# Useful commands
- `npm run build` compile typescript to js
- `npm run watch` watch for changes and compile
- `cdk deploy` deploy this stack to your default AWS account/region
- `cdk diff` compare deployed stack with current state
- `cdk synth` emits the synthesized CloudFormation template
================================================
FILE: cdk/bin/cdk.ts
================================================
#!/usr/bin/env node
import cdk = require('@aws-cdk/core');
import { CdkStack } from '../lib/cdk-stack';
const app = new cdk.App();
new CdkStack(app, 'selfie2anime-stack');
================================================
FILE: cdk/cdk.json
================================================
{
"app": "npx ts-node bin/cdk.ts"
}
================================================
FILE: cdk/lib/cdk-stack.ts
================================================
import cdk = require('@aws-cdk/core');
import codebuild = require("@aws-cdk/aws-codebuild");
import iam = require("@aws-cdk/aws-iam");
export class CdkStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// CloudWatch Log Read/Write Access
const log_policy = new iam.PolicyStatement({
actions: [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
],
resources: [
`arn:aws:logs:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:/aws/codebuild/*`,
]
});
const s3_policy = new iam.PolicyStatement({
actions: [
"s3:*",
],
resources: [
"arn:aws:s3:::selfie2anime.com",
"arn:aws:s3:::selfie2anime.com/*"
]
});
//
// Source - (GitHub_Source)
//
const gitHubSource = codebuild.Source.gitHub({
owner: "SilentByte",
repo: "selfie2anime-site",
reportBuildStatus: true
});
//
// CodeBuild - Build
//
const buildProject = new codebuild.Project(this, "selfie2anime-build", {
badge: true,
projectName: "selfie2anime-build",
buildSpec: codebuild.BuildSpec.fromSourceFilename("buildspec.yml"),
source: gitHubSource,
environment: {
buildImage: codebuild.LinuxBuildImage.UBUNTU_14_04_NODEJS_10_14_1,
environmentVariables: {
S3_BUCKET: {
type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
value: "selfie2anime.com"
}
}
},
});
buildProject.addToRolePolicy(log_policy);
buildProject.addToRolePolicy(s3_policy);
}
}
================================================
FILE: cdk/package.json
================================================
{
"name": "cdk",
"version": "0.1.0",
"bin": {
"cdk": "bin/cdk.js"
},
"scripts": {
"build": "tsc",
"watch": "tsc -w",
"cdk": "cdk"
},
"devDependencies": {
"@types/node": "8.10.45",
"typescript": "^3.3.3333",
"ts-node": "^8.1.0",
"aws-cdk": "^1.4.0"
},
"dependencies": {
"@aws-cdk/aws-codebuild": "^1.4.0",
"@aws-cdk/aws-iam": "^1.4.0",
"@aws-cdk/core": "^1.4.0"
}
}
================================================
FILE: cdk/tsconfig.json
================================================
{
"compilerOptions": {
"target": "ES2018",
"module": "commonjs",
"lib": ["es2016", "es2017.object", "es2017.string"],
"declaration": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": false,
"inlineSourceMap": true,
"inlineSources": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false
},
"exclude": ["cdk.out"]
}
================================================
FILE: package.json
================================================
{
"name": "selfie2anime-site",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "npm run build-blog && node build-portfolio.js && vue-cli-service build && cp -R blog/.deploy/dist dist/blog",
"lint": "vue-cli-service lint",
"build-blog": "git submodule update --init --recursive --remote && (cd blog; ./s2a.sh build)",
"dev": "vue-cli-service serve",
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'"
},
"dependencies": {
"axios": "^0.19.2",
"blueimp-load-image": "^2.23.0",
"core-js": "^2.6.5",
"croppr": "^2.3.1",
"vue": "^2.6.10",
"vue-class-component": "^7.0.2",
"vue-i18n": "^8.0.0",
"vue-property-decorator": "^8.1.0",
"vue-router": "^3.0.3"
},
"devDependencies": {
"@kazupon/vue-i18n-loader": "^0.3.0",
"@types/blueimp-load-image": "^2.23.1",
"@types/webpack": "^4.4.0",
"@vue/cli-plugin-babel": "^3.10.0",
"@vue/cli-plugin-typescript": "^3.10.0",
"@vue/cli-service": "^4.1.1",
"del": "^5.0.0",
"glob": "^7.1.4",
"imagemin": "^7.0.0",
"imagemin-guetzli": "^2.0.0",
"jimp": "^0.10.3",
"mkdir-recursive": "^0.4.0",
"sass": "^1.18.0",
"sass-loader": "^7.1.0",
"typescript": "^3.4.3",
"vue-cli-plugin-i18n": "^0.6.0",
"vue-template-compiler": "^2.6.10",
"yaml-loader": "^0.5.0"
}
}
================================================
FILE: postcss.config.js
================================================
module.exports = {
plugins: {
autoprefixer: {},
},
};
================================================
FILE: public/9593990f27faca6931121a16d4131090.html
================================================
site-verification: 9593990f27faca6931121a16d4131090
================================================
FILE: public/ads.txt
================================================
google.com, pub-9169830803956537, DIRECT, f08c47fec0942fa0
================================================
FILE: public/email/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta property="og:url" content="{{viewer_url_escaped}}" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Selfie2Anime | It's Me!" />
<meta property="og:description" content="What do YOU look like in Anime?" />
<meta property="og:image" content="{{image_url_escaped}}" />
<link rel="image_src" type="image/jpg" href="{{image_url_escaped}}" />
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-9169830803956537",
enable_page_level_ads: true,
});
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-71336829-28"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "UA-71336829-28");
</script>
<link rel="icon" href="https://selfie2anime.com/favicon.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Merriweather+Sans:400,400i,700,700i">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
<title>Selfie2Anime | It's Me!</title>
<style>
* {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
html,
body {
margin: 0 auto !important;
padding: 0 !important;
height: 100% !important;
width: 100% !important;
background: #f1f1f1;
}
div[style*="margin: 16px 0"] {
margin: 0 !important;
}
table,
td {
mso-table-lspace: 0 !important;
mso-table-rspace: 0 !important;
}
table {
border-spacing: 0 !important;
border-collapse: collapse !important;
table-layout: fixed !important;
margin: 0 auto !important;
}
img {
-ms-interpolation-mode: bicubic;
}
a {
text-decoration: none;
}
.bg_primary {
background: #f06292;
}
.text_primary {
color: #f06292;
font-weight: bold;
}
.bg_white {
background: #fff;
}
.bg_dark {
background: rgba(0, 0, 0, .8);
}
.email-section {
padding: 2.5em;
}
h1,
h2 {
font-family: 'Merriweather Sans', sans-serif;
color: #000;
margin-top: 0;
}
body {
font-family: 'Merriweather Sans', sans-serif;
font-weight: 400;
font-size: 18px;
line-height: 1.8;
color: rgba(0, 0, 0, .7);
}
a {
color: #f06292;
font-weight: bold;
}
.logo h1 {
margin: 0;
}
.logo h1 a {
color: #000;
font-size: 24px;
font-weight: 700;
text-transform: uppercase;
font-family: 'Merriweather Sans', sans-serif;
}
.navigation li {
list-style: none;
display: inline-block;
margin-left: 5px;
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
}
.navigation li a {
color: rgba(0, 0, 0, .6);
}
.heading-section h2 {
color: #000;
font-size: 28px;
margin-top: 0;
line-height: 1.4;
font-weight: 700;
}
.heading-section .subheading {
margin-bottom: 20px !important;
display: inline-block;
font-size: 13px;
text-transform: uppercase;
letter-spacing: 2px;
color: rgba(0, 0, 0, .4);
position: relative;
}
.heading-section .subheading::after {
position: absolute;
left: 0;
right: 0;
bottom: -10px;
content: '';
width: 100%;
height: 2px;
background: #f5564e;
margin: 0 auto;
}
.heading-section-white {
color: rgba(255, 255, 255, .8);
}
.heading-section-white h2 {
line-height: 1em;
padding-bottom: 0;
}
.heading-section-white h2 {
color: #fff;
}
.heading-section-white .subheading {
margin-bottom: 0;
display: inline-block;
font-size: 13px;
text-transform: uppercase;
letter-spacing: 2px;
color: rgba(255, 255, 255, .4);
}
.spinner-container {
position: absolute;
display: flex;
flex-direction: row;
flex-wrap: wrap;
width: 100%;
height: 100%;
justify-content: center;
align-items: center;
background-color: rgba(240, 98, 146, 0.5);
}
.spinner {
border: 10px solid #fff;
border-top: 10px solid transparent;
border-radius: 50%;
width: 50px;
height: 50px;
animation: spinner 2s both infinite;
}
@keyframes spinner {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
</head>
<body width="100%" style="margin: 0; padding: 0 !important; mso-line-height-rule: exactly; background-color: #222;">
<center style="width: 100%; background-color: #f1f1f1;">
<div style="max-width: 600px; margin: 0 auto;" class="email-container">
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%"
style="margin: auto;">
<tr>
<td valign="top" class="bg_white" style="padding: 1em 2.5em;">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="60%" class="logo" style="text-align: left;">
<h1>
<a href="https://selfie2anime.com">
Selfie<span class="text_primary">2</span>Anime <span
class="text_primary">アニメ</span>
</a>
</h1>
</td>
<td width="40%" class="logo" style="text-align: right;">
<a href="https://www.facebook.com/sharer/sharer.php?u={{viewer_url_escaped}}">
<img width="32" height="32" src="https://selfie2anime.com/email/facebook.png"
alt="Share on Facebook">
</a>
<a href="https://twitter.com/intent/tweet?url={{viewer_url_escaped}}&text=Hey, this is me as an anime character!&hashtags=selfie2anime"
target="_blank">
<img width="32" height="32" src="https://selfie2anime.com/email/twitter.png"
alt="Share on Twitter">
</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="middle" class="bg_primary" style="line-height: 0; position: relative;">
<div id="spinner-container" class="spinner-container">
<div id="spinner" class="spinner"></div>
<div id="error"
style="display: none; color: white; font-size: 20pt; line-height: 1.5em; text-align: center;">
<b>Oh No! There was an error!<br> Please try again.</b>
</div>
</div>
<a href="https://selfie2anime.com/" title="Create your own selfie!">
<img id="selfie" width="600" height="600" src="https://selfie2anime.com/email/frame.jpg" alt="Your Anime Selfie!"
style="max-width: 100%; height: auto">
</a>
</td>
</tr>
<tr>
<td class="bg_white email-section">
<div class="heading-section" style="text-align: center; padding: 0 30px;">
<h2>Enjoying Your Selfie?</h2>
<p><b>Share it</b> on social media and <a href="https://selfie2anime.com/">create your
own!</a></p>
</div>
<table width="50%">
<tr>
<td>
<div class="text" style="text-align: center">
<a href="https://www.facebook.com/sharer/sharer.php?u={{viewer_url_escaped}}">
<img width="64" height="64"
src="https://selfie2anime.com/email/facebook.png"
alt="Share on Facebook">
</a>
</div>
</td>
<td>
<div class="text" style="text-align: center">
<a href="https://twitter.com/intent/tweet?url={{viewer_url_escaped}}&text=Hey, this is me as an anime character!&hashtags=selfie2anime"
target="_blank">
<img width="64" height="64" src="https://selfie2anime.com/email/twitter.png"
alt="Share on Twitter">
</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="middle" class="bg_primary"
style="background-image: url(https://selfie2anime.com/email/wall.jpg); background-size: cover; height: 480px;">
</td>
</tr>
<tr>
<td class="bg_dark email-section" style="text-align:center;">
<div class="heading-section heading-section-white">
<p>
Copyright © 2019-2020 by
<a href="https://selfie2anime.com">Selfie2Anime.com</a>
</p>
</div>
</td>
</tr>
</table>
</div>
</center>
<script>
const FRAME_URL = "https://selfie2anime.com/email/frame.jpg";
const SELFIE_URL = "{{image_url_escaped}}";
function fetchImage(url) {
return new Promise((resolve, reject) => {
const image = new Image();
image.crossOrigin = "anonymous";
image.onerror = () => reject(new Error("Failed to load frame/selfie"));
image.onload = () => resolve(image);
image.src = url;
});
}
function generateFrame() {
const canvas = window.document.createElement("canvas");
const frameImage = fetchImage(FRAME_URL);
const selfieImage = fetchImage(SELFIE_URL);
const context = canvas.getContext("2d");
Promise.all([frameImage, selfieImage])
.then(images => {
canvas.width = 600;
canvas.height = 600;
context.drawImage(images[0], 0, 0, 600, 600);
context.drawImage(images[1], 93, 113, 407, 407);
document.getElementById("selfie").src = canvas.toDataURL("image/jpeg", 1.0);
document.getElementById("spinner-container").style.display = "none";
})
.catch(() => {
document.getElementById("spinner").style.display = "none";
document.getElementById("error").style.display = "inline";
});
}
window.addEventListener("load", function () {
generateFrame();
});
</script>
</body>
</html>
================================================
FILE: public/gen/.gitkeep
================================================
================================================
FILE: public/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta property="og:url" content="https://selfie2anime.com" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Selfie2Anime" />
<meta property="og:description" content="What do YOU look like in Anime?" />
<meta property="og:image" content="https://selfie2anime.com/og.jpg" />
<link rel="image_src" type="image/png" href="https://selfie2anime.com/og.jpg" />
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "<%= VUE_APP_ADSENSE_CODE %>",
enable_page_level_ads: true,
});
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-71336829-28"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "<%= VUE_APP_ANALYTICS_CODE %>");
</script>
<script async src="https://platform.twitter.com/widgets.js"></script>
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Merriweather+Sans:400,400i,700,700i">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css"
integrity="sha256-PZLhE6wwMbg4AB3d35ZdBF9HD/dI/y4RazA3iRDurss="
crossorigin="anonymous" />
<link rel="stylesheet" href="./vendor/creative.min.css">
<title>Selfie2Anime</title>
</head>
<body>
<noscript>
Oh Noes! JavaScript is required for this site! :-(
</noscript>
<div id="app"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"
integrity="sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"
integrity="sha256-H3cjtrm/ztDeuhCN9I4yh4iN2Ybx/y1RM7rMmAesA0k="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/jquery.magnific-popup.min.js"
integrity="sha256-P93G0oq6PBPWTP1IR8Mz/0jHHUpaWL0aBJTKauisG7Q="
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/lazyload@2.0.0-rc.2/lazyload.min.js"
integrity="sha256-WzuqEKxV9O7ODH5mbq3dUYcrjOknNnFia8zOyPhurXg="
crossorigin="anonymous"></script>
</body>
</html>
================================================
FILE: public/privacy/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta property="og:url" content="https://selfie2anime.com" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Selfie2Anime" />
<meta property="og:description" content="What do YOU look like in Anime?" />
<meta property="og:image" content="https://selfie2anime.com/og.jpg" />
<link rel="image_src" type="image/png" href="https://selfie2anime.com/og.jpg" />
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-71336829-28"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "UA-71336829-28");
</script>
<link rel="icon" href="https://selfie2anime.com/favicon.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Merriweather+Sans:400,400i,700,700i">
<title>Privacy | Selfie2Anime</title>
<style>
body {
margin: 1em 2em 1em 2em;
font-family: "Merriweather Sans", sans-serif;
font-size: 12pt;
line-height: 1.5em;
}
@media (min-width: 1200px) {
body {
margin: 2em 3em 4em 3em;
font-size: 18pt;
}
}
@media (min-width: 1600px) {
body {
margin: 4em 12em 4em 12em;
}
}
h1, h2 {
text-transform: uppercase;
color: #f06292;
}
h1 {
font-size: 2em;
}
h2 {
margin: 1.5em 0 0.5em 0;
font-size: 1.5em;
}
ol ol {
list-style-type: lower-roman;
}
a {
color: #f06292;
font-weight: bold;
text-decoration: none;
}
.content {
text-align: justify;
}
</style>
</head>
<body>
<div class="content">
<h1>PRIVACY POLICY</h1>
<small>Effective Date: 22 August 2019</small>
<ol>
<li>
<p>This Privacy Policy explains how we and some of the companies we work with collect, use, share and
protect information in relation to our mobile services, web site, and any software provided on or in
connection with Selfie2Anime services (collectively, the “Service”), and your choices about the
collection and use of your information.</p>
</li>
<li>
<p>By using our Service, you understand and agree that we are providing a platform for you to process
your content.</p>
</li>
<li>
<p>Our Policy applies to all visitors, users, and others who access the Service (“Users”).</p>
</li>
</ol>
<h2>INFORMATION WE COLLECT</h2>
<ol start="4">
<li>
<p>We collect the following types of information.</p>
</li>
<li>
<p>Information you provide us directly:</p>
<ol>
<li>User Content (e.g., photos and other materials) that you post through the Service.
Communications between you and Selfie2Anime. For example, we may send you Service-related emails
(e.g., changes/updates to features of the Service, technical and security notices). Note that
you may not opt out of Service-related e-mails.
</li>
</ol>
</li>
<li>
<p>Analytics information:</p>
<ol>
<li>We use third-party analytics tools to help us measure traffic and usage trends for the Service.
These tools collect information sent by your device or our Service, including the web pages you
visit, add-ons, and other information that assists us in improving the Service. We collect and
use this analytics information with analytics information from other Users so that it cannot
reasonably be used to identify any individual User.
</li>
</ol>
</li>
<li>
<p>Cookies and similar technologies:</p>
<ol>
<li>
<p>When you visit the Service, we may use cookies and similar technologies like pixels, web
beacons, and local storage to collect information about how you use Selfie2Anime and provide
features to you.</p>
</li>
<li>
<p>We may ask advertisers or other partners to serve ads or services to your devices, which may
use cookies or similar technologies placed by us or the third party.</p>
</li>
</ol>
</li>
<li>
<p>Log file information:</p>
<ol>
<li>
<p>Log file information is automatically reported by your browser each time you make a request
to access (i.e., visit) a web page or app. It can also be provided when the content of the
webpage or app is downloaded to your browser or device.</p>
</li>
<li>
<p>When you use our Service, our servers automatically record certain log file information,
including your web request, Internet Protocol (“IP”) address, browser type, referring / exit
pages and URLs, number of clicks and how you interact with links on the Service, domain
names, landing pages, pages viewed, and other such information. We may also collect similar
information from emails sent to our Users which then help us track which emails are opened
and which links are clicked by recipients. The information allows for more accurate
reporting and improvement of the Service.</p>
</li>
</ol>
</li>
<li>
<p>Device identifiers:</p>
<ol>
<li>
<p>When you use a mobile device like a tablet or phone to access our Service, we may access,
collect, monitor, store on your device, and/or remotely store one or more “device
identifiers”. Device identifiers are small data files or similar data structures stored on
or associated with your mobile device, which uniquely identify your mobile device. A device
identifier may be data stored in connection with the device hardware, data stored in
connection with the device’s operating system or other software, or data sent to the device
by Selfie2Anime.</p>
</li>
<li>
<p>A device identifier may deliver information to us or to a third-party partner about how you
browse and use the Service and may help us or others provide reports or personalized content
and ads. Some features of the Service may not function properly if use or availability of
device identifiers is impaired or disabled.</p>
</li>
</ol>
</li>
<li>
<p>Metadata:</p>
<ol>
<li>
<p>Metadata is usually technical data that is associated with User Content. For example,
Metadata can describe how, when and by whom a piece of User Content was collected and how
that content is formatted.</p>
</li>
<li>
<p>Users can add or may have Metadata added to their User Content including a hashtag (e.g., to
mark keywords when you share a photo) or other data.</p>
</li>
</ol>
</li>
</ol>
<h2>HOW WE USE YOUR INFORMATION</h2>
<ol start="11">
<li>
<p>In addition to some of the specific uses of information we describe in this Privacy Policy, we may
use information that we receive to:</p>
<ol>
<li>
<p>provide personalized content and information to you and others, which could include online
ads or other forms of marketing</p>
</li>
<li>
<p>provide, improve, test, and monitor the effectiveness of our Service</p>
</li>
<li>
<p>develop and test new products and features</p>
</li>
<li>
<p>monitor metrics such as total number of visitors, traffic, and demographic patterns</p>
</li>
<li>
<p>diagnose or fix technology problems</p>
</li>
<li>
<p>automatically update the Selfie2Anime application on your device</p>
</li>
</ol>
</li>
</ol>
<h2>SHARING OF YOUR INFORMATION</h2>
<ol start="12">
<li>
<p>We will not rent or sell your information to third parties outside Selfie2Anime (or the group of
companies of which Selfie2Anime is a part) without your consent, except as Parties with whom we may
share your information in this Policy.</p>
</li>
<li>
<p>Parties with whom we may share your information:</p>
<ol>
<li>
<p>We may share User Content and your information (including but not limited to, information
from cookies, log files, device identifiers, location data, and usage data) with businesses
that are legally part of the same group of companies that Selfie2Anime is part of, or that
become part of that group (“Affiliates”).</p>
</li>
<li>
<p>Affiliates may use this information to help provide, understand, and improve the Service
(including by providing analytics) and Affiliates’ own services (including by providing you
with better and more relevant experiences). But these Affiliates will honour the choices you
make about who can see your photos.</p>
</li>
<li>
<p>We also may share your information as well as information from tools like cookies, log files,
and device identifiers and location data, with third-party organizations that help us
provide the Service to you (“Service Providers”).</p>
</li>
<li>
<p>Our Service Providers will be given access to your information as is reasonably necessary to
provide the Service under reasonable confidentiality terms.</p>
</li>
<li>
<p>We may also share certain information such as cookie data with third-party advertising
partners. This information would allow third-party ad networks to, among other things,
deliver targeted advertisements that they believe will be of most interest to you.</p>
</li>
<li>
<p>We may remove parts of data that can identify you and share anonymized data with other
parties.</p>
</li>
<li>
<p>We may also combine your information with other information in a way that it is no longer
associated with you and share that aggregated information.</p>
</li>
</ol>
</li>
<li>
<p>Parties with whom you may choose to share your User Content:<br>
i. Any information or content that you voluntarily process with the Service, such as User Content,
becomes available to the Selfie2Anime anonymously.</p>
</li>
<li>
<p>If we sell or otherwise transfer part or the whole of Selfie2Anime or our assets to another
organization (e.g., in the course of a transaction like a merger, acquisition, bankruptcy,
dissolution, liquidation), your information such as User Content and any other information collected
through the Service may be among the items sold or transferred. You will continue to own your User
Content. The buyer or transferee will have to honour the commitments we have made in this Privacy
Policy.</p>
</li>
<li>
<p>We may access, preserve, and share your information in response to a legal request (like a search
warrant, court order or subpoena) if we have a good faith belief that the law requires us to do so.
This may include responding to legal requests from jurisdictions outside of Australia where we have
a good faith belief that the response is required by law in that jurisdiction, affects users in that
jurisdiction, and is consistent with internationally recognized standards.</p>
</li>
<li>
<p>We may also access, preserve, and share information when we have a good faith belief it is necessary
to:</p>
<ol>
<li>
<p>detect, prevent, and address fraud and other illegal activity;</p>
</li>
<li>
<p>to protect ourselves, you, and others, including as part of investigations; and</p>
</li>
<li>
<p>to prevent death or imminent bodily harm.</p>
</li>
<li>
<p>Information we receive about you may be accessed, processed, and retained for an extended
period when it is the subject of a legal request or obligation, governmental investigation,
or investigations concerning possible violations of our terms or policies, or otherwise to
prevent harm.</p>
</li>
</ol>
</li>
</ol>
<h2>HOW WE STORE YOUR INFORMATION</h2>
<ol start="18">
<li>
<p>Your information collected through the Service may be stored and processed in Australia or any other
country in which Selfie2Anime, its Affiliates or Service Providers maintain facilities.</p>
</li>
<li>
<p>Selfie2Anime, its Affiliates, or Service Providers may transfer information that we collect about
you, including personal information across borders and from your country or jurisdiction to other
countries or jurisdictions around the world. If you are located in the European Union or other
regions with laws governing data collection and use that may differ from Australian law, please note
that we may transfer information, including personal information, to a country and jurisdiction that
does not have the same data protection laws as your jurisdiction.</p>
</li>
<li>
<p>By registering for and using the Service you consent to the transfer of information to Australia or
to any other country in which Selfie2Anime, its Affiliates or Service Providers maintain facilities
and the use and disclosure of information about you as described in this Privacy Policy.</p>
</li>
<li>
<p>We use commercially reasonable safeguards to help keep the information collected through the Service
secure. However, Selfie2Anime cannot ensure the security of any information you transmit to
Selfie2Anime or guarantee that information on the Service may not be accessed, disclosed, altered,
or destroyed.</p>
</li>
</ol>
<h2>CHILDREN’S PRIVACY</h2>
<ol start="22">
<li>Selfie2Anime does not knowingly collect or solicit any information from anyone under the age of 13. The
Service and its content are not directed at children under the age of 13. If we learn that we have
collected personal information from a child under age 13 without parental consent, we will delete that
information as quickly as possible. If you believe that we might have any information from or about a
child under 13, please contact us.
</li>
</ol>
<h2>OTHER WEB SITES AND SERVICES</h2>
<ol start="23">
<li>We are not responsible for the practices employed by any websites or services linked to or from our
Service, including the information or content contained within them.
</li>
</ol>
<h2>HOW TO CONTACT US</h2>
<ol start="24">
<li>If you have any questions about this Privacy Policy or the Service, please contact us through the email
<a href="mailto:legal@selfie2anime.com">legal@selfie2anime.com</a>.
</li>
</ol>
<h2>CHANGES TO OUR PRIVACY POLICY</h2>
<ol start="25">
<li>Selfie2Anime may modify or update this Privacy Policy from time to time, so please review it
periodically. We may provide you additional forms of notice of modifications or updates as appropriate
under the circumstances. Your continued use of Selfie2Anime or the Service after any modification to
this Privacy Policy will constitute your acceptance of such modification.
</li>
</ol>
</div>
</body>
</html>
================================================
FILE: public/self-sitemap.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://selfie2anime.com/</loc>
<changefreq>daily</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://selfie2anime.com/blog/</loc>
<changefreq>daily</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://selfie2anime.com/terms/</loc>
<changefreq>monthly</changefreq>
<priority>0.1</priority>
</url>
<url>
<loc>https://selfie2anime.com/privacy/</loc>
<changefreq>monthly</changefreq>
<priority>0.1</priority>
</url>
</urlset>
================================================
FILE: public/sitemap.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://selfie2anime.com/self-sitemap.xml</loc>
<lastmod>2019-08-26T00:00:00.000Z</lastmod>
</sitemap>
<sitemap>
<loc>https://selfie2anime.com/blog/sitemap.xml</loc>
</sitemap>
</sitemapindex>
================================================
FILE: public/terms/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta property="og:url" content="https://selfie2anime.com" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Selfie2Anime" />
<meta property="og:description" content="What do YOU look like in Anime?" />
<meta property="og:image" content="https://selfie2anime.com/og.jpg" />
<link rel="image_src" type="image/png" href="https://selfie2anime.com/og.jpg" />
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-71336829-28"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "UA-71336829-28");
</script>
<link rel="icon" href="https://selfie2anime.com/favicon.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Merriweather+Sans:400,400i,700,700i">
<title>Terms of Service | Selfie2Anime</title>
<style>
body {
margin: 1em 2em 1em 2em;
font-family: "Merriweather Sans", sans-serif;
font-size: 12pt;
line-height: 1.5em;
}
@media (min-width: 1200px) {
body {
margin: 2em 3em 4em 3em;
font-size: 18pt;
}
}
@media (min-width: 1600px) {
body {
margin: 4em 12em 4em 12em;
}
}
h1, h2 {
text-transform: uppercase;
color: #f06292;
}
h1 {
font-size: 2em;
}
h2 {
margin: 1.5em 0 0.5em 0;
font-size: 1.5em;
}
ol ol {
list-style-type: lower-roman;
}
a {
color: #f06292;
font-weight: bold;
text-decoration: none;
}
.content {
text-align: justify;
}
</style>
</head>
<body>
<div class="content">
<h1>Terms of Use</h1>
<p><em>Last Updated: 22 August 2019</em></p>
<ol>
<li>
<p>These Terms of Use (“Terms”) apply to your access and use of this website, or the applications and
other online products and services (collectively, our “Services”) provided by Selfie2Anime
(“Selfie2Anime” or “we”).</p>
</li>
<li>
<p>By accessing the Selfie2Anime website, you agree to these Terms. If you do not agree to these Terms,
including the mandatory arbitration provision and class action waiver in Section 15, do not access
or use our Services.</p>
</li>
<li>
<p>If you have any questions about these Terms or our Services, please contact us at <a
href="mailto:legal@selfie2anime.com">legal@selfie2anime.com</a>.</p>
</li>
</ol>
<h2>Description of Services</h2>
<ol start="4">
<li>Selfie2Anime is a webservice software that uses artificial intelligence algorithms to transform your
photos or videos into works of art. The artificial intelligence algorithms use styles inspired by
various artists within the animation industry. The webservice allows you to upload photographs onto the
application which will then run through Selfie2Anime’s algorithms, transforming the photo. You can then
share the photos through social media sites or store them for personal use.
</li>
</ol>
<h2>Eligibility</h2>
<ol start="5">
<li>
<p>You must be at least 13 years of age to access or use our Services. If you are under 18 years of age
(or the age of legal majority where you live), you may only access or use our Services under the
supervision of a parent or legal guardian who agrees to be bound by these Terms.</p>
</li>
<li>
<p>If you are a parent or legal guardian of a user under the age of 18 (or the age of legal majority),
you agree to be fully responsible for the acts or omissions of such user in connection with our
Services.</p>
</li>
<li>
<p>If you are accessing or using our Services on behalf of another person or entity, you represent that
you are authorised to accept these Terms on that person or entity’s behalf and that the person or
entity agrees to be responsible to us if you or the other person or entity violates these Terms.</p>
</li>
</ol>
<h2>User Accounts and Account Security</h2>
<ol start="8">
<li>
<p>As Selfie2Anime is an image transformation webservice, no user account or credentials are store by us
or a third party.</p>
</li>
<li>
<p>If you do use a third-party account in conjunction with Selfie2Anime you must maintain the security
of your third-party account and promptly notify us if you discover or suspect that someone has
accessed your account without your permission. If you permit others to use your account credentials,
you are responsible for the activities of such users that occur in connection with your account.</p>
</li>
</ol>
<h2>Privacy</h2>
<ol start="10">
<li>Please refer to our Privacy Policy for information about how we collect, use, and disclose information
about you.
</li>
</ol>
<h2>User Content</h2>
<ol start="11">
<li>
<p>Our Services may allow you and other users to create, post, store and share content, including
messages, text, photos, videos, software, and other materials (collectively, “User Content”).</p>
</li>
<li>
<p>Except for the license you grant below, you retain all rights in and to your User Content, as between
you and Selfie2Anime.</p>
</li>
<li>
<p>Selfie2Anime does not claim ownership of any User Content that you post on or through the
Services.</p>
</li>
<li>
<p>You grant Selfie2Anime a perpetual, irrevocable, nonexclusive, royalty-free, worldwide, fully-paid,
transferable sub-licensable license to use, reproduce, modify, adapt, publish, translate, create
derivative works from, distribute, publicly perform and display your User Content and any name,
username or likeness provided in connection with your User Content in all media formats and channels
now known or later developed, without compensation to you.</p>
</li>
<li>
<p>When you post or otherwise share User Content on or through our Services, you understand that your
User Content and any associated information (such as your location or photographs) will be visible
to the public.</p>
</li>
<li>
<p>You grant Selfie2Anime consent to use the User Content, regardless of whether it includes an
individual’s name, likeness, voice, or persona, sufficient to indicate the individual’s
identity.</p>
</li>
<li>
<p>By using the Services, you agree that the User Content may be used for commercial purposes. You
further acknowledge that Selfie2Anime’s use of the User Content for commercial purposes will not
result in any injury to you or to any person you authorised to act on its behalf.</p>
</li>
<li>
<p>You acknowledge that some of the Services are supported by advertising revenue and may display
advertisements and promotions, and you hereby agree that Selfie2Anime may place such advertising and
promotions on the Services or on, about, or in conjunction with your User Content.</p>
</li>
<li>
<p>The manner, mode and extent of such advertising and promotions are subject to change without specific
notice to you. You acknowledge that we may not always identify paid services, sponsored content, or
commercial communications as such.</p>
</li>
<li>
<p>You represent and warrant that:</p>
<ol>
<li>
<p>you own the User Content modified by you on or through the Services or otherwise have the
right to grant the rights and licenses set forth in these Terms;</p>
</li>
<li>
<p>you agree to pay for all royalties, fees, and any other monies owed by reason of User Content
you stylize on or through the Services; and</p>
</li>
<li>
<p>you have the legal right and capacity to enter into these Terms in your jurisdiction.</p>
</li>
</ol>
</li>
<li>
<p>You may not create, post, store or share any User Content that violates these Terms or for which you
do not have all the rights necessary to grant us the license described above.</p>
</li>
<li>
<p>Although we have no obligation to screen, edit or monitor User Content, we may delete or remove User
Content at any time and for any reason.</p>
</li>
<li>
<p>User Content removed from the Services may continue to be stored by Selfie2Anime, including, without
limitation, to comply with certain legal obligations.</p>
</li>
<li>
<p>Selfie2Anime is not a backup service and you agree that you will not rely on the Services for the
purposes of User Content backup or storage. Selfie2Anime will not be liable to you for any
modification, suspension, or discontinuation of the Services, or the loss of any User Content.</p>
</li>
</ol>
<h2>Prohibited Conduct and Content</h2>
<ol start="25">
<li>
<p>You will not violate any applicable law, contract, intellectual property, or other third-party right
or commit a tort, and you are solely responsible for your conduct while accessing or using our
Services.</p>
</li>
<li>
<p>You will not:</p>
<ol>
<li>
<p>Engage in any harassing, threatening, intimidating, predatory or stalking conduct;</p>
</li>
<li>
<p>Use or attempt to use another user’s account without authorization from that user and
Selfie2Anime;</p>
</li>
<li>
<p>Use our Services in any manner that could interfere with, disrupt, negatively affect, or
inhibit other users from fully enjoying our Services or that could damage, disable,
overburden, or impair the functioning of our Services in any manner;</p>
</li>
<li>
<p>Reverse engineer any aspect of our Services or do anything that might discover source code or
bypass or circumvent measures employed to prevent or limit access to any part of our
Services;</p>
</li>
<li>
<p>Attempt to circumvent any content-filtering techniques we employ or attempt to access any
feature or area of our Services that you are not authorised to access;</p>
</li>
<li>
<p>Develop or use any third-party applications that interact with our Services without our prior
written consent, including any scripts designed to scrape or extract data from our
Services;</p>
</li>
<li>
<p>Use our Services for any illegal or unauthorised purpose, or engage in, encourage, or promote
any activity that violates these Terms.</p>
</li>
</ol>
</li>
<li>
<p>You may also only post or otherwise share User Content that is non-confidential and you have all
necessary rights to disclose. You may not create, post, store or share any User Content that:</p>
<ol>
<li>
<p>Is unlawful, libellous, defamatory, obscene, pornographic, indecent, lewd, suggestive,
harassing, threatening, invasive of privacy or publicity rights, abusive, inflammatory, or
fraudulent;</p>
</li>
<li>
<p>Would constitute, encourage, or provide instructions for a criminal offense, violate the
rights of any party, or otherwise create liability or violate any local, state, national or
international law;</p>
</li>
<li>
<p>May infringe any patent, trademark, trade secret, copyright or other intellectual or
proprietary right of any party;</p>
</li>
<li>
<p>Contains or depicts any statements, remarks, or claims that do not reflect your honest views
and experiences;</p>
</li>
<li>
<p>Impersonates, or misrepresents your affiliation with, any person or entity;</p>
</li>
<li>
<p>Contains any unsolicited promotions, political campaigning, advertising, or
solicitations;</p>
</li>
<li>
<p>Contains any private or personal information of a third party without such third party’s
consent;</p>
</li>
<li>
<p>Contains any viruses, corrupted data or other harmful, disruptive, or destructive files or
content; or</p>
</li>
<li>
<p>Is, in our sole judgment, objectionable or that restricts or inhibits any other person from
using or enjoying our Services, or that may expose Selfie2Anime or others to any harm or
liability of any type.</p>
</li>
</ol>
</li>
<li>
<p>In addition, although we have no obligation to screen, edit or monitor User Content, we may delete or
remove User Content at any time and for any reason.</p>
</li>
</ol>
<h2>Limited License; Copyright and Trademark</h2>
<ol start="29">
<li>
<p>Our Services and the text, graphics, images, photographs, videos, illustrations, trademarks, trade
dress, trade names, page headers, button icons, scripts, service marks, logos, slogans, filters,
user generated filters and other content contained therein (collectively, the “Selfie2Anime
Content”) are owned by or licensed to Selfie2Anime and are protected under both Australian and
foreign laws. Except as explicitly stated in these Terms, Selfie2Anime and our licensors reserve all
rights in and to our Services and the Selfie2Anime Content.</p>
</li>
<li>
<p>You are hereby granted a limited, non-exclusive, non-transferable, non-sublicensable, revocable
license to access and use our Services and Selfie2Anime Content for your own personal use; however,
such license is subject to these Terms and does not include any right to:</p>
<ol>
<li>
<p>sell, resell, or commercially use our Services or Selfie2Anime Content;</p>
</li>
<li>
<p>copy, reproduce, distribute, publicly perform, or publicly display Selfie2Anime Content,
except as expressly permitted by us or our licensors;</p>
</li>
<li>
<p>modify the Selfie2Anime Content, remove any proprietary rights notices or markings, or
otherwise make any derivative uses of our Services or Selfie2Anime Content, except as
expressly set forth in these Terms;</p>
</li>
<li>
<p>use any data mining, robots or similar data gathering or extraction methods; or</p>
</li>
<li>
<p>use our Services or Selfie2Anime Content other than as expressly provided in these Terms.</p>
</li>
</ol>
</li>
<li>
<p>Any use of our Services or Selfie2Anime Content other than as specifically authorised herein, without
our prior written permission, is strictly prohibited and will terminate the license granted under
these Terms. You will not remove, alter, or conceal any copyright, trademark, service mark or other
proprietary rights notices incorporated in or accompanying the Selfie2Anime Content.</p>
</li>
</ol>
<h2>Feedback</h2>
<ol start="32">
<li>Any questions, comments, suggestions, ideas, original or creative materials or other information you
submit about Selfie2Anime or our products or Services (collectively, “Feedback”), is non-confidential
and will become the sole property of Selfie2Anime. We will own exclusive rights, including, without
limitation, all intellectual property rights, in and to Feedback and will be entitled to the
unrestricted use and dissemination of Feedback for any purpose, commercial or otherwise, without
acknowledgment or compensation to you.
</li>
</ol>
<h2>Copyright Complaints</h2>
<ol start="33">
<li>
<p>We have a policy of limiting access to our Services and terminating the accounts of users who
infringe the intellectual property rights of others. If you believe that anything on our Services
infringes any copyright that you own or control, you may notify Selfie2Anime’s Designated Agent by
e-mail: <a href="mailto:legal@selfie2anime.com">legal@selfie2anime.com</a>.</p>
</li>
<li>
<p>Please see Schedule 2 of the Australian Copyright Regulations 2017 (Cth) for the requirements of a
proper notification.</p>
</li>
<li>
<p>If you knowingly misrepresent any activity or material on our Services as infringing, you may be
liable to Selfie2Anime for certain costs and damages.</p>
</li>
</ol>
<h2>Indemnification</h2>
<ol start="36">
<li>
<p>To the fullest extent permitted by applicable law, you will indemnify, defend, and hold harmless
Selfie2Anime and each of our respective officers, directors, agents, partners and employees
(individually and collectively, the “Selfie2Anime Parties”) from and against any loss, liability,
claim, demand, damages, expenses or costs (“Claims”) arising out of or related to</p>
<ol>
<li>
<p>your access to or use of our Services;</p>
</li>
<li>
<p>your User Content or Feedback;</p>
</li>
<li>
<p>your violation of these Terms;</p>
</li>
<li>
<p>your violation, misappropriation, or infringement of any rights of another (including
intellectual property rights or privacy rights); or</p>
</li>
<li>
<p>your conduct in connection with our Services.</p>
</li>
</ol>
</li>
<li>
<p>You agree to promptly notify Selfie2Anime Parties of any third-party Claims, cooperate with
Selfie2Anime Parties in defending such Claims and pay all fees, costs and expenses associated with
defending such Claims (including, but not limited to, our chosen law firms’ professional costs and
disbursements).</p>
</li>
<li>
<p>You also agree that the Selfie2Anime Parties will have control of the defence or settlement of any
third-party Claims. This indemnity is in addition to, and not in lieu of, any other indemnities set
forth in a written agreement between you and Selfie2Anime or the other Selfie2Anime Parties.</p>
</li>
</ol>
<h2>Disclaimers</h2>
<ol start="39">
<li>
<p>We do not control, endorse, or take responsibility for any User Content or third-party content
available on or linked to by our Services.</p>
</li>
<li>
<p>Your use of our Services is at your sole risk. Our Services are provided “as is” and “as available”
without warranties of any kind, either express or implied, including, but not limited to, implied
warranties of merchantability, fitness for a particular purpose, title, and non-infringement.</p>
</li>
<li>
<p>In addition, Selfie2Anime does not represent or warrant that our Services are accurate, complete,
reliable, current, or error-free. While Selfie2Anime attempts to make your access to and use of our
Services safe, we cannot and do not represent or warrant that our Services or servers are free of
viruses or other harmful components. You assume the entire risk as to the quality and performance of
the Services.</p>
</li>
</ol>
<h2>Limitation of Liability</h2>
<ol start="42">
<li>
<p>Selfie2Anime and the other Selfie2Anime Parties will not be liable to you under any theory of
liability—whether based in contract, tort, negligence, strict liability, warranty, or otherwise—for
any indirect, consequential, exemplary, incidental, punitive or special damages or lost profits,
even if Selfie2Anime or the other Selfie2Anime Parties have been advised of the possibility of such
damages.</p>
</li>
<li>
<p>The total liability of Selfie2Anime and the other Selfie2Anime Parties, for any claim arising out of
or relating to these Terms or our Services, regardless of the form of the action, is limited to the
amount paid, if any, by you to access or use our Services.</p>
</li>
<li>
<p>The limitations set forth in this section will not limit or exclude liability for the gross
negligence, fraud, or intentional misconduct of Selfie2Anime or the other Selfie2Anime Parties or
for any other matters in which liability cannot be excluded or limited under applicable law.
Additionally, some jurisdictions do not allow the exclusion or limitation of incidental or
consequential damages, so the above limitations or exclusions may not apply to you.</p>
</li>
</ol>
<h2>Release</h2>
<ol start="45">
<li>
<p>To the fullest extent permitted by applicable law, you release Selfie2Anime and the other
Selfie2Anime Parties from responsibility, liability, claims, demands, and/or damages (actual and
consequential) of every kind and nature, known and unknown (including, but not limited to, claims of
negligence), arising out of or related to disputes between users and the acts or omissions of third
parties.</p>
</li>
<li>
<p>You expressly waive any rights you may have under the Australian Consumer Law as established under
Schedule 2 of the Australian Competition and Consumer Act 2010 (Cth) as well as any other statute or
common law principles that would otherwise limit the coverage of this release to include only those
claims which you may know or suspect to exist in your favour at the time of agreeing to this
release.</p>
</li>
</ol>
<h2>Transfer and Processing Data</h2>
<ol start="47">
<li>By accessing or using our Services, you consent to the processing, transfer, and storage of information
about you in and to Australia and other countries, where you may not have the same rights and
protections as you do under local law.
</li>
</ol>
<h2>Dispute Resolution; Binding Arbitration</h2>
<ol start="48">
<li>
<p>Please read the following section carefully because it requires you to arbitrate certain disputes and
claims with Selfie2Anime and limits the way you can seek relief from us.</p>
</li>
<li>
<p>Except for small claims disputes in which you or Selfie2Anime seek to bring an individual action in
small claims court located in the state of your billing address or disputes in which you or
Selfie2Anime seeks injunctive or other equitable relief for the alleged unlawful use of intellectual
property, you and Selfie2Anime waive your rights to a trial and to have any dispute arising out of
or related to these Terms or our Services resolved in court.</p>
</li>
<li>
<p>Instead, all disputes arising out of or relating to these Terms or our Services will be resolved
through confidential binding arbitration held in Western Australia in accordance with the
International Chamber of Commerce (“ICC”) Rules of Arbitration (“ICC Rules”), which are available on
the ICC website and hereby incorporated by reference. You either acknowledge and agree that you have
read and understand the ICC Rules or waive your opportunity to read the ICC Rules and any claim that
the ICC Rules are unfair or should not apply for any reason.</p>
</li>
<li>
<p>You and Selfie2Anime agree that any dispute arising out of or related to these Terms or our Services
is personal to you and Selfie2Anime and that any dispute will be resolved solely through individual
arbitration and will not be brought as a class arbitration, class action or any other type of
representative proceeding.</p>
</li>
<li>
<p>You and Selfie2Anime agree that these Terms affect interstate commerce and that the enforceability of
this agreement will be substantively and procedurally governed by the Australian International
Arbitration Act 1974 (Cth) (“Arbitration Act”) to the maximum extent permitted by applicable
law.</p>
</li>
<li>
<p>As limited by the Arbitration Act, these Terms and the ICC Rules, the arbitrator will have exclusive
authority to make all procedural and substantive decisions regarding any dispute and to grant any
remedy that would otherwise be available in court; provided, however, that the arbitrator does not
have the authority to conduct a class arbitration or a representative action, which is prohibited by
these Terms.</p>
</li>
<li>
<p>The arbitrator may only conduct an individual arbitration and may not consolidate more than one
individual’s claims, preside over any type of class or representative proceeding, or preside over
any proceeding involving more than one individual.</p>
</li>
<li>
<p>You and Selfie2Anime agree that for any arbitration you initiate, you will pay the will fees and
costs of Arbitration. For any arbitration initiated by Selfie2Anime, Selfie2Anime will pay the fees
and costs of Arbitration.</p>
</li>
<li>
<p>You and Selfie2Anime agree that the Federal Courts of Australia of have exclusive jurisdiction over
any appeals and the enforcement of an arbitration award.</p>
</li>
<li>
<p>ANY CLAIM ARISING OUT OF OR RELATED TO THESE TERMS OR OUR SERVICES MUST BE FILED WITHIN ONE YEAR
AFTER SUCH CLAIM AROSE; OTHERWISE, THE CLAIM IS PERMANENTLY BARRED, WHICH MEANS THAT YOU AND
SELFIE2ANIME WILL NOT HAVE THE RIGHT TO ASSERT THE CLAIM.</p>
</li>
<li>
<p>You have the right to opt out of binding arbitration within 30 days of the date you first accepted
the terms of this Section 15 by notifying Selfie2Anime in writing. The notification must be sent to:
<a href="mailto:legal@selfie2anime.com">legal@selfie2anime.com</a></p>
</li>
<li>
<p>To be effective, the opt out notice must include your full name and clearly indicate your intent to
opt out of binding arbitration. By opting out of binding arbitration, you are agreeing to resolve
Disputes in accordance with Section 16.</p>
</li>
</ol>
<h2>Governing Law and Venue</h2>
<ol start="60">
<li>
<p>These Terms and your access to and use of our Services will be governed by and construed and enforced
in accordance with the laws of Western Australia, without regard to conflict of law rules or
principles (whether of Western Australia or any other jurisdiction) that would cause the application
of the laws of any other jurisdiction.</p>
</li>
<li>
<p>Any dispute between the parties that is not subject to arbitration or cannot be heard in small claims
court will be resolved in the Federal Courts of Australia, sitting in Perth, Western Australia.</p>
</li>
</ol>
<h2>Changes to these Terms</h2>
<ol start="62">
<li>
<p>We may make changes to these Terms from time to time. If we make changes, we will post the amended
Terms to our Services and update the “Last Updated” date above.</p>
</li>
<li>
<p>We may also attempt to notify you by sending an email notification to the address associated with
your account, if any, or providing notice through our Services.</p>
</li>
<li>
<p>Unless we say otherwise in our notice, the amended Terms will be effective immediately and your
continued access to and use of our Services after we provide notice will confirm your acceptance of
the changes.</p>
</li>
<li>
<p>If you do not agree to the amended Terms, you must stop accessing and using our Services.</p>
</li>
</ol>
<h2>Electronic Communications</h2>
<ol start="66">
<li>
<p>By accessing or using the Services, you also consent to receive electronic communications from
Selfie2Anime (e.g., via email or by posting notices on our Services). These communications may
include notices about your account (e.g., payment authorizations, password changes and other
transactional information) and are part of your relationship with us.</p>
</li>
<li>
<p>You agree that any notices, agreements, disclosures, or other communications that we send to you
electronically will satisfy any legal communication requirements, including, but not limited to,
that such communications be in writing.</p>
</li>
</ol>
<h2>Termination</h2>
<ol start="68">
<li>We reserve the right, without notice and in our sole discretion, to terminate your right to access or
use our Services. We are not responsible for any loss or harm related to your inability to access or use
our Services.
</li>
</ol>
<h2>Severability</h2>
<ol start="69">
<li>If any provision or part of a provision of these Terms is unlawful, void, or unenforceable, that
provision or part of the provision is deemed severable from these Terms and does not affect the validity
and enforceability of any remaining provisions.
</li>
</ol>
<h2>Legal Compliance</h2>
<ol start="70">
<li>
<p>You represent and warrant that:</p>
<ol>
<li>
<p>you are not located in a country that is subject to an Australian Government embargo, or that
has been designated by the Australian Government as a “terrorist supporting” country,
and</p>
</li>
<li>
<p>you are not listed on any Australian Government list of prohibited or restricted parties.</p>
</li>
</ol>
</li>
</ol>
<h2>Miscellaneous</h2>
<ol start="71">
<li>
<p>These Terms constitute the entire agreement between you and Selfie2Anime relating to your access to
and use of our Services. The failure of Selfie2Anime to exercise or enforce any right or provision
of these Terms will not operate as a waiver of such right or provision.</p>
</li>
<li>
<p>The section titles in these Terms are for convenience only and have no legal or contractual effect.
Except as otherwise provided herein, these Terms are intended solely for the benefit of the parties
and are not intended to confer third party beneficiary rights upon any other person or entity.</p>
</li>
</ol>
</div>
</body>
</html>
================================================
FILE: public/vendor/magnific-popup.css
================================================
/* Magnific Popup CSS */
.mfp-bg {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1042;
overflow: hidden;
position: fixed;
background: #0b0b0b;
opacity: 0.8; }
.mfp-wrap {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1043;
position: fixed;
outline: none !important;
-webkit-backface-visibility: hidden; }
.mfp-container {
text-align: center;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
padding: 0 8px;
box-sizing: border-box; }
.mfp-container:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle; }
.mfp-align-top .mfp-container:before {
display: none; }
.mfp-content {
position: relative;
display: inline-block;
vertical-align: middle;
margin: 0 auto;
text-align: left;
z-index: 1045; }
.mfp-inline-holder .mfp-content,
.mfp-ajax-holder .mfp-content {
width: 100%;
cursor: auto; }
.mfp-ajax-cur {
cursor: progress; }
.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
cursor: -moz-zoom-out;
cursor: -webkit-zoom-out;
cursor: zoom-out; }
.mfp-zoom {
cursor: pointer;
cursor: -webkit-zoom-in;
cursor: -moz-zoom-in;
cursor: zoom-in; }
.mfp-auto-cursor .mfp-content {
cursor: auto; }
.mfp-close,
.mfp-arrow,
.mfp-preloader,
.mfp-counter {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none; }
.mfp-loading.mfp-figure {
display: none; }
.mfp-hide {
display: none !important; }
.mfp-preloader {
color: #CCC;
position: absolute;
top: 50%;
width: auto;
text-align: center;
margin-top: -0.8em;
left: 8px;
right: 8px;
z-index: 1044; }
.mfp-preloader a {
color: #CCC; }
.mfp-preloader a:hover {
color: #FFF; }
.mfp-s-ready .mfp-preloader {
display: none; }
.mfp-s-error .mfp-content {
display: none; }
button.mfp-close,
button.mfp-arrow {
overflow: visible;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
display: block;
outline: none;
padding: 0;
z-index: 1046;
box-shadow: none;
touch-action: manipulation; }
button::-moz-focus-inner {
padding: 0;
border: 0; }
.mfp-close {
width: 44px;
height: 44px;
line-height: 44px;
position: absolute;
right: 0;
top: 0;
text-decoration: none;
text-align: center;
opacity: 0.65;
padding: 0 0 18px 10px;
color: #FFF;
font-style: normal;
font-size: 28px;
font-family: Arial, Baskerville, monospace; }
.mfp-close:hover,
.mfp-close:focus {
opacity: 1; }
.mfp-close:active {
top: 1px; }
.mfp-close-btn-in .mfp-close {
color: #333; }
.mfp-image-holder .mfp-close,
.mfp-iframe-holder .mfp-close {
color: #FFF;
right: -6px;
text-align: right;
padding-right: 6px;
width: 100%; }
.mfp-counter {
position: absolute;
top: 0;
right: 0;
color: #CCC;
font-size: 12px;
line-height: 18px;
white-space: nowrap; }
.mfp-arrow {
position: absolute;
opacity: 0.65;
margin: 0;
top: 50%;
margin-top: -55px;
padding: 0;
width: 90px;
height: 110px;
-webkit-tap-highlight-color: transparent; }
.mfp-arrow:active {
margin-top: -54px; }
.mfp-arrow:hover,
.mfp-arrow:focus {
opacity: 1; }
.mfp-arrow:before,
.mfp-arrow:after {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
left: 0;
top: 0;
margin-top: 35px;
margin-left: 35px;
border: medium inset transparent; }
.mfp-arrow:after {
border-top-width: 13px;
border-bottom-width: 13px;
top: 8px; }
.mfp-arrow:before {
border-top-width: 21px;
border-bottom-width: 21px;
opacity: 0.7; }
.mfp-arrow-left {
left: 0; }
.mfp-arrow-left:after {
border-right: 17px solid #FFF;
margin-left: 31px; }
.mfp-arrow-left:before {
margin-left: 25px;
border-right: 27px solid #3F3F3F; }
.mfp-arrow-right {
right: 0; }
.mfp-arrow-right:after {
border-left: 17px solid #FFF;
margin-left: 39px; }
.mfp-arrow-right:before {
border-left: 27px solid #3F3F3F; }
.mfp-iframe-holder {
padding-top: 40px;
padding-bottom: 40px; }
.mfp-iframe-holder .mfp-content {
line-height: 0;
width: 100%;
max-width: 900px; }
.mfp-iframe-holder .mfp-close {
top: -40px; }
.mfp-iframe-scaler {
width: 100%;
height: 0;
overflow: hidden;
padding-top: 56.25%; }
.mfp-iframe-scaler iframe {
position: absolute;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #000; }
/* Main image in popup */
img.mfp-img {
width: auto;
max-width: 100%;
height: auto;
display: block;
line-height: 0;
box-sizing: border-box;
padding: 40px 0 40px;
margin: 0 auto; }
/* The shadow behind the image */
.mfp-figure {
line-height: 0; }
.mfp-figure:after {
content: '';
position: absolute;
left: 0;
top: 40px;
bottom: 40px;
display: block;
right: 0;
width: auto;
height: auto;
z-index: -1;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #444; }
.mfp-figure small {
color: #BDBDBD;
display: block;
font-size: 12px;
line-height: 14px; }
.mfp-figure figure {
margin: 0; }
.mfp-bottom-bar {
margin-top: -36px;
position: absolute;
top: 100%;
left: 0;
width: 100%;
cursor: auto; }
.mfp-title {
text-align: left;
line-height: 18px;
color: #F3F3F3;
word-wrap: break-word;
padding-right: 36px; }
.mfp-image-holder .mfp-content {
max-width: 100%; }
.mfp-gallery .mfp-image-holder .mfp-figure {
cursor: pointer; }
@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
/**
* Remove all paddings around the image on small screen
*/
.mfp-img-mobile .mfp-image-holder {
padding-left: 0;
padding-right: 0; }
.mfp-img-mobile img.mfp-img {
padding: 0; }
.mfp-img-mobile .mfp-figure:after {
top: 0;
bottom: 0; }
.mfp-img-mobile .mfp-figure small {
display: inline;
margin-left: 5px; }
.mfp-img-mobile .mfp-bottom-bar {
background: rgba(0, 0, 0, 0.6);
bottom: 0;
margin: 0;
top: auto;
padding: 3px 5px;
position: fixed;
box-sizing: border-box; }
.mfp-img-mobile .mfp-bottom-bar:empty {
padding: 0; }
.mfp-img-mobile .mfp-counter {
right: 5px;
top: 3px; }
.mfp-img-mobile .mfp-close {
top: 0;
right: 0;
width: 35px;
height: 35px;
line-height: 35px;
background: rgba(0, 0, 0, 0.6);
position: fixed;
text-align: center;
padding: 0; } }
@media all and (max-width: 900px) {
.mfp-arrow {
-webkit-transform: scale(0.75);
transform: scale(0.75); }
.mfp-arrow-left {
-webkit-transform-origin: 0;
transform-origin: 0; }
.mfp-arrow-right {
-webkit-transform-origin: 100%;
transform-origin: 100%; }
.mfp-container {
padding-left: 6px;
padding-right: 6px; } }
================================================
FILE: public_assets/md/privacy.md
================================================
# PRIVACY POLICY
*Effective Date: 22 August 2019*
1. This Privacy Policy explains how we and some of the companies we work with collect, use, share and protect information in relation to our mobile services, web site, and any software provided on or in connection with Selfie2Anime services (collectively, the “Service”), and your choices about the collection and use of your information.
2. By using our Service, you understand and agree that we are providing a platform for you to process your content.
3. Our Policy applies to all visitors, users, and others who access the Service (“Users”).
## INFORMATION WE COLLECT
4. We collect the following types of information.
5. Information you provide us directly:
1. User Content (e.g., photos and other materials) that you post through the Service. Communications between you and Selfie2Anime. For example, we may send you Service-related emails (e.g., changes/updates to features of the Service, technical and security notices). Note that you may not opt out of Service-related e-mails.
6. Analytics information:
1. We use third-party analytics tools to help us measure traffic and usage trends for the Service. These tools collect information sent by your device or our Service, including the web pages you visit, add-ons, and other information that assists us in improving the Service. We collect and use this analytics information with analytics information from other Users so that it cannot reasonably be used to identify any individual User.
7. Cookies and similar technologies:
1. When you visit the Service, we may use cookies and similar technologies like pixels, web beacons, and local storage to collect information about how you use Selfie2Anime and provide features to you.
2. We may ask advertisers or other partners to serve ads or services to your devices, which may use cookies or similar technologies placed by us or the third party.
8. Log file information:
1. Log file information is automatically reported by your browser each time you make a request to access (i.e., visit) a web page or app. It can also be provided when the content of the webpage or app is downloaded to your browser or device.
2. When you use our Service, our servers automatically record certain log file information, including your web request, Internet Protocol (“IP”) address, browser type, referring / exit pages and URLs, number of clicks and how you interact with links on the Service, domain names, landing pages, pages viewed, and other such information. We may also collect similar information from emails sent to our Users which then help us track which emails are opened and which links are clicked by recipients. The information allows for more accurate reporting and improvement of the Service.
9. Device identifiers:
1. When you use a mobile device like a tablet or phone to access our Service, we may access, collect, monitor, store on your device, and/or remotely store one or more “device identifiers”. Device identifiers are small data files or similar data structures stored on or associated with your mobile device, which uniquely identify your mobile device. A device identifier may be data stored in connection with the device hardware, data stored in connection with the device’s operating system or other software, or data sent to the device by Selfie2Anime.
2. A device identifier may deliver information to us or to a third-party partner about how you browse and use the Service and may help us or others provide reports or personalized content and ads. Some features of the Service may not function properly if use or availability of device identifiers is impaired or disabled.
10. Metadata:
1. Metadata is usually technical data that is associated with User Content. For example, Metadata can describe how, when and by whom a piece of User Content was collected and how that content is formatted.
2. Users can add or may have Metadata added to their User Content including a hashtag (e.g., to mark keywords when you share a photo) or other data.
## HOW WE USE YOUR INFORMATION
11. In addition to some of the specific uses of information we describe in this Privacy Policy, we may use information that we receive to:
1. provide personalized content and information to you and others, which could include online ads or other forms of marketing
2. provide, improve, test, and monitor the effectiveness of our Service
3. develop and test new products and features
4. monitor metrics such as total number of visitors, traffic, and demographic patterns
5. diagnose or fix technology problems
6. automatically update the Selfie2Anime application on your device
## SHARING OF YOUR INFORMATION
12. We will not rent or sell your information to third parties outside Selfie2Anime (or the group of companies of which Selfie2Anime is a part) without your consent, except as Parties with whom we may share your information in this Policy.
13. Parties with whom we may share your information:
1. We may share User Content and your information (including but not limited to, information from cookies, log files, device identifiers, location data, and usage data) with businesses that are legally part of the same group of companies that Selfie2Anime is part of, or that become part of that group (“Affiliates”).
2. Affiliates may use this information to help provide, understand, and improve the Service (including by providing analytics) and Affiliates’ own services (including by providing you with better and more relevant experiences). But these Affiliates will honour the choices you make about who can see your photos.
3. We also may share your information as well as information from tools like cookies, log files, and device identifiers and location data, with third-party organizations that help us provide the Service to you (“Service Providers”).
4. Our Service Providers will be given access to your information as is reasonably necessary to provide the Service under reasonable confidentiality terms.
5. We may also share certain information such as cookie data with third-party advertising partners. This information would allow third-party ad networks to, among other things, deliver targeted advertisements that they believe will be of most interest to you.
6. We may remove parts of data that can identify you and share anonymized data with other parties.
7. We may also combine your information with other information in a way that it is no longer associated with you and share that aggregated information.
14. Parties with whom you may choose to share your User Content:
i. Any information or content that you voluntarily process with the Service, such as User Content, becomes available to the Selfie2Anime anonymously.
15. If we sell or otherwise transfer part or the whole of Selfie2Anime or our assets to another organization (e.g., in the course of a transaction like a merger, acquisition, bankruptcy, dissolution, liquidation), your information such as User Content and any other information collected through the Service may be among the items sold or transferred. You will continue to own your User Content. The buyer or transferee will have to honour the commitments we have made in this Privacy Policy.
16. We may access, preserve, and share your information in response to a legal request (like a search warrant, court order or subpoena) if we have a good faith belief that the law requires us to do so. This may include responding to legal requests from jurisdictions outside of Australia where we have a good faith belief that the response is required by law in that jurisdiction, affects users in that jurisdiction, and is consistent with internationally recognized standards.
17. We may also access, preserve, and share information when we have a good faith belief it is necessary to:
1. detect, prevent, and address fraud and other illegal activity;
2. to protect ourselves, you, and others, including as part of investigations; and
3. to prevent death or imminent bodily harm.
4. Information we receive about you may be accessed, processed, and retained for an extended period when it is the subject of a legal request or obligation, governmental investigation, or investigations concerning possible violations of our terms or policies, or otherwise to prevent harm.
## HOW WE STORE YOUR INFORMATION
18. Your information collected through the Service may be stored and processed in Australia or any other country in which Selfie2Anime, its Affiliates or Service Providers maintain facilities.
19. Selfie2Anime, its Affiliates, or Service Providers may transfer information that we collect about you, including personal information across borders and from your country or jurisdiction to other countries or jurisdictions around the world. If you are located in the European Union or other regions with laws governing data collection and use that may differ from Australian law, please note that we may transfer information, including personal information, to a country and jurisdiction that does not have the same data protection laws as your jurisdiction.
20. By registering for and using the Service you consent to the transfer of information to Australia or to any other country in which Selfie2Anime, its Affiliates or Service Providers maintain facilities and the use and disclosure of information about you as described in this Privacy Policy.
21. We use commercially reasonable safeguards to help keep the information collected through the Service secure. However, Selfie2Anime cannot ensure the security of any information you transmit to Selfie2Anime or guarantee that information on the Service may not be accessed, disclosed, altered, or destroyed.
## CHILDREN’S PRIVACY
22. Selfie2Anime does not knowingly collect or solicit any information from anyone under the age of 13. The Service and its content are not directed at children under the age of 13. If we learn that we have collected personal information from a child under age 13 without parental consent, we will delete that information as quickly as possible. If you believe that we might have any information from or about a child under 13, please contact us.
## OTHER WEB SITES AND SERVICES
23. We are not responsible for the practices employed by any websites or services linked to or from our Service, including the information or content contained within them.
## HOW TO CONTACT US
24. If you have any questions about this Privacy Policy or the Service, please contact us through the email [info@selfie2anime.com](mailto:info@selfie2anime.com).
## CHANGES TO OUR PRIVACY POLICY
25. Selfie2Anime may modify or update this Privacy Policy from time to time, so please review it periodically. We may provide you additional forms of notice of modifications or updates as appropriate under the circumstances. Your continued use of Selfie2Anime or the Service after any modification to this Privacy Policy will constitute your acceptance of such modification.
================================================
FILE: public_assets/md/terms.md
================================================
# Terms of Use
*Last Updated: 22 August 2019*
1. These Terms of Use (“Terms”) apply to your access and use of this website, or the applications and other online products and services (collectively, our “Services”) provided by Selfie2Anime (“Selfie2Anime” or “we”).
2. By accessing the Selfie2Anime website, you agree to these Terms. If you do not agree to these Terms, including the mandatory arbitration provision and class action waiver in Section 15, do not access or use our Services.
3. If you have any questions about these Terms or our Services, please contact us at [info@selfie2anime.com](mailto:info@selfie2anime.com).
## Description of Services
4. Selfie2Anime is a webservice software that uses artificial intelligence algorithms to transform your photos or videos into works of art. The artificial intelligence algorithms use styles inspired by various artists within the animation industry. The webservice allows you to upload photographs onto the application which will then run through Selfie2Anime’s algorithms, transforming the photo. You can then share the photos through social media sites or store them for personal use.
## Eligibility
5. You must be at least 13 years of age to access or use our Services. If you are under 18 years of age (or the age of legal majority where you live), you may only access or use our Services under the supervision of a parent or legal guardian who agrees to be bound by these Terms.
6. If you are a parent or legal guardian of a user under the age of 18 (or the age of legal majority), you agree to be fully responsible for the acts or omissions of such user in connection with our Services.
7. If you are accessing or using our Services on behalf of another person or entity, you represent that you are authorised to accept these Terms on that person or entity’s behalf and that the person or entity agrees to be responsible to us if you or the other person or entity violates these Terms.
## User Accounts and Account Security
8. As Selfie2Anime is an image transformation webservice, no user account or credentials are store by us or a third party.
9. If you do use a third-party account in conjunction with Selfie2Anime you must maintain the security of your third-party account and promptly notify us if you discover or suspect that someone has accessed your account without your permission. If you permit others to use your account credentials, you are responsible for the activities of such users that occur in connection with your account.
## Privacy
10. Please refer to our Privacy Policy for information about how we collect, use, and disclose information about you.
## User Content
11. Our Services may allow you and other users to create, post, store and share content, including messages, text, photos, videos, software, and other materials (collectively, “User Content”).
12. Except for the license you grant below, you retain all rights in and to your User Content, as between you and Selfie2Anime.
13. Selfie2Anime does not claim ownership of any User Content that you post on or through the Services.
14. You grant Selfie2Anime a perpetual, irrevocable, nonexclusive, royalty-free, worldwide, fully-paid, transferable sub-licensable license to use, reproduce, modify, adapt, publish, translate, create derivative works from, distribute, publicly perform and display your User Content and any name, username or likeness provided in connection with your User Content in all media formats and channels now known or later developed, without compensation to you.
15. When you post or otherwise share User Content on or through our Services, you understand that your User Content and any associated information (such as your location or photographs) will be visible to the public.
16. You grant Selfie2Anime consent to use the User Content, regardless of whether it includes an individual’s name, likeness, voice, or persona, sufficient to indicate the individual’s identity.
17. By using the Services, you agree that the User Content may be used for commercial purposes. You further acknowledge that Selfie2Anime’s use of the User Content for commercial purposes will not result in any injury to you or to any person you authorised to act on its behalf.
18. You acknowledge that some of the Services are supported by advertising revenue and may display advertisements and promotions, and you hereby agree that Selfie2Anime may place such advertising and promotions on the Services or on, about, or in conjunction with your User Content.
19. The manner, mode and extent of such advertising and promotions are subject to change without specific notice to you. You acknowledge that we may not always identify paid services, sponsored content, or commercial communications as such.
20. You represent and warrant that:
1. you own the User Content modified by you on or through the Services or otherwise have the right to grant the rights and licenses set forth in these Terms;
2. you agree to pay for all royalties, fees, and any other monies owed by reason of User Content you stylize on or through the Services; and
3. you have the legal right and capacity to enter into these Terms in your jurisdiction.
21. You may not create, post, store or share any User Content that violates these Terms or for which you do not have all the rights necessary to grant us the license described above.
22. Although we have no obligation to screen, edit or monitor User Content, we may delete or remove User Content at any time and for any reason.
23. User Content removed from the Services may continue to be stored by Selfie2Anime, including, without limitation, to comply with certain legal obligations.
24. Selfie2Anime is not a backup service and you agree that you will not rely on the Services for the purposes of User Content backup or storage. Selfie2Anime will not be liable to you for any modification, suspension, or discontinuation of the Services, or the loss of any User Content.
## Prohibited Conduct and Content
25. You will not violate any applicable law, contract, intellectual property, or other third-party right or commit a tort, and you are solely responsible for your conduct while accessing or using our Services.
26. You will not:
1. Engage in any harassing, threatening, intimidating, predatory or stalking conduct;
2. Use or attempt to use another user’s account without authorization from that user and Selfie2Anime;
3. Use our Services in any manner that could interfere with, disrupt, negatively affect, or inhibit other users from fully enjoying our Services or that could damage, disable, overburden, or impair the functioning of our Services in any manner;
4. Reverse engineer any aspect of our Services or do anything that might discover source code or bypass or circumvent measures employed to prevent or limit access to any part of our Services;
5. Attempt to circumvent any content-filtering techniques we employ or attempt to access any feature or area of our Services that you are not authorised to access;
6. Develop or use any third-party applications that interact with our Services without our prior written consent, including any scripts designed to scrape or extract data from our Services;
7. Use our Services for any illegal or unauthorised purpose, or engage in, encourage, or promote any activity that violates these Terms.
27. You may also only post or otherwise share User Content that is non-confidential and you have all necessary rights to disclose. You may not create, post, store or share any User Content that:
1. Is unlawful, libellous, defamatory, obscene, pornographic, indecent, lewd, suggestive, harassing, threatening, invasive of privacy or publicity rights, abusive, inflammatory, or fraudulent;
2. Would constitute, encourage, or provide instructions for a criminal offense, violate the rights of any party, or otherwise create liability or violate any local, state, national or international law;
3. May infringe any patent, trademark, trade secret, copyright or other intellectual or proprietary right of any party;
4. Contains or depicts any statements, remarks, or claims that do not reflect your honest views and experiences;
5. Impersonates, or misrepresents your affiliation with, any person or entity;
6. Contains any unsolicited promotions, political campaigning, advertising, or solicitations;
7. Contains any private or personal information of a third party without such third party’s consent;
8. Contains any viruses, corrupted data or other harmful, disruptive, or destructive files or content; or
9. Is, in our sole judgment, objectionable or that restricts or inhibits any other person from using or enjoying our Services, or that may expose Selfie2Anime or others to any harm or liability of any type.
28. In addition, although we have no obligation to screen, edit or monitor User Content, we may delete or remove User Content at any time and for any reason.
## Limited License; Copyright and Trademark
29. Our Services and the text, graphics, images, photographs, videos, illustrations, trademarks, trade dress, trade names, page headers, button icons, scripts, service marks, logos, slogans, filters, user generated filters and other content contained therein (collectively, the “Selfie2Anime Content”) are owned by or licensed to Selfie2Anime and are protected under both Australian and foreign laws. Except as explicitly stated in these Terms, Selfie2Anime and our licensors reserve all rights in and to our Services and the Selfie2Anime Content.
30. You are hereby granted a limited, non-exclusive, non-transferable, non-sublicensable, revocable license to access and use our Services and Selfie2Anime Content for your own personal use; however, such license is subject to these Terms and does not include any right to:
1. sell, resell, or commercially use our Services or Selfie2Anime Content;
2. copy, reproduce, distribute, publicly perform, or publicly display Selfie2Anime Content, except as expressly permitted by us or our licensors;
3. modify the Selfie2Anime Content, remove any proprietary rights notices or markings, or otherwise make any derivative uses of our Services or Selfie2Anime Content, except as expressly set forth in these Terms;
4. use any data mining, robots or similar data gathering or extraction methods; or
5. use our Services or Selfie2Anime Content other than as expressly provided in these Terms.
31. Any use of our Services or Selfie2Anime Content other than as specifically authorised herein, without our prior written permission, is strictly prohibited and will terminate the license granted under these Terms. You will not remove, alter, or conceal any copyright, trademark, service mark or other proprietary rights notices incorporated in or accompanying the Selfie2Anime Content.
## Feedback
32. Any questions, comments, suggestions, ideas, original or creative materials or other information you submit about Selfie2Anime or our products or Services (collectively, “Feedback”), is non-confidential and will become the sole property of Selfie2Anime. We will own exclusive rights, including, without limitation, all intellectual property rights, in and to Feedback and will be entitled to the unrestricted use and dissemination of Feedback for any purpose, commercial or otherwise, without acknowledgment or compensation to you.
## Copyright Complaints
33. We have a policy of limiting access to our Services and terminating the accounts of users who infringe the intellectual property rights of others. If you believe that anything on our Services infringes any copyright that you own or control, you may notify Selfie2Anime’s Designated Agent by e-mail: [info@selfie2anime.com](mailto:info@selfie2anime.com).
34. Please see Schedule 2 of the Australian Copyright Regulations 2017 (Cth) for the requirements of a proper notification.
35. If you knowingly misrepresent any activity or material on our Services as infringing, you may be liable to Selfie2Anime for certain costs and damages.
## Indemnification
36. To the fullest extent permitted by applicable law, you will indemnify, defend, and hold harmless Selfie2Anime and each of our respective officers, directors, agents, partners and employees (individually and collectively, the “Selfie2Anime Parties”) from and against any loss, liability, claim, demand, damages, expenses or costs (“Claims”) arising out of or related to
1. your access to or use of our Services;
2. your User Content or Feedback;
3. your violation of these Terms;
4. your violation, misappropriation, or infringement of any rights of another (including intellectual property rights or privacy rights); or
5. your conduct in connection with our Services.
37. You agree to promptly notify Selfie2Anime Parties of any third-party Claims, cooperate with Selfie2Anime Parties in defending such Claims and pay all fees, costs and expenses associated with defending such Claims (including, but not limited to, our chosen law firms’ professional costs and disbursements).
38. You also agree that the Selfie2Anime Parties will have control of the defence or settlement of any third-party Claims. This indemnity is in addition to, and not in lieu of, any other indemnities set forth in a written agreement between you and Selfie2Anime or the other Selfie2Anime Parties.
## Disclaimers
39. We do not control, endorse, or take responsibility for any User Content or third-party content available on or linked to by our Services.
40. Your use of our Services is at your sole risk. Our Services are provided “as is” and “as available” without warranties of any kind, either express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, title, and non-infringement.
41. In addition, Selfie2Anime does not represent or warrant that our Services are accurate, complete, reliable, current, or error-free. While Selfie2Anime attempts to make your access to and use of our Services safe, we cannot and do not represent or warrant that our Services or servers are free of viruses or other harmful components. You assume the entire risk as to the quality and performance of the Services.
## Limitation of Liability
42. Selfie2Anime and the other Selfie2Anime Parties will not be liable to you under any theory of liability—whether based in contract, tort, negligence, strict liability, warranty, or otherwise—for any indirect, consequential, exemplary, incidental, punitive or special damages or lost profits, even if Selfie2Anime or the other Selfie2Anime Parties have been advised of the possibility of such damages.
43. The total liability of Selfie2Anime and the other Selfie2Anime Parties, for any claim arising out of or relating to these Terms or our Services, regardless of the form of the action, is limited to the amount paid, if any, by you to access or use our Services.
44. The limitations set forth in this section will not limit or exclude liability for the gross negligence, fraud, or intentional misconduct of Selfie2Anime or the other Selfie2Anime Parties or for any other matters in which liability cannot be excluded or limited under applicable law. Additionally, some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitations or exclusions may not apply to you.
## Release
45. To the fullest extent permitted by applicable law, you release Selfie2Anime and the other Selfie2Anime Parties from responsibility, liability, claims, demands, and/or damages (actual and consequential) of every kind and nature, known and unknown (including, but not limited to, claims of negligence), arising out of or related to disputes between users and the acts or omissions of third parties.
46. You expressly waive any rights you may have under the Australian Consumer Law as established under Schedule 2 of the Australian Competition and Consumer Act 2010 (Cth) as well as any other statute or common law principles that would otherwise limit the coverage of this release to include only those claims which you may know or suspect to exist in your favour at the time of agreeing to this release.
## Transfer and Processing Data
47. By accessing or using our Services, you consent to the processing, transfer, and storage of information about you in and to Australia and other countries, where you may not have the same rights and protections as you do under local law.
## Dispute Resolution; Binding Arbitration
48. Please read the following section carefully because it requires you to arbitrate certain disputes and claims with Selfie2Anime and limits the way you can seek relief from us.
49. Except for small claims disputes in which you or Selfie2Anime seek to bring an individual action in small claims court located in the state of your billing address or disputes in which you or Selfie2Anime seeks injunctive or other equitable relief for the alleged unlawful use of intellectual property, you and Selfie2Anime waive your rights to a trial and to have any dispute arising out of or related to these Terms or our Services resolved in court.
50. Instead, all disputes arising out of or relating to these Terms or our Services will be resolved through confidential binding arbitration held in Western Australia in accordance with the International Chamber of Commerce (“ICC”) Rules of Arbitration (“ICC Rules”), which are available on the ICC website and hereby incorporated by reference. You either acknowledge and agree that you have read and understand the ICC Rules or waive your opportunity to read the ICC Rules and any claim that the ICC Rules are unfair or should not apply for any reason.
51. You and Selfie2Anime agree that any dispute arising out of or related to these Terms or our Services is personal to you and Selfie2Anime and that any dispute will be resolved solely through individual arbitration and will not be brought as a class arbitration, class action or any other type of representative proceeding.
52. You and Selfie2Anime agree that these Terms affect interstate commerce and that the enforceability of this agreement will be substantively and procedurally governed by the Australian International Arbitration Act 1974 (Cth) (“Arbitration Act”) to the maximum extent permitted by applicable law.
53. As limited by the Arbitration Act, these Terms and the ICC Rules, the arbitrator will have exclusive authority to make all procedural and substantive decisions regarding any dispute and to grant any remedy that would otherwise be available in court; provided, however, that the arbitrator does not have the authority to conduct a class arbitration or a representative action, which is prohibited by these Terms.
54. The arbitrator may only conduct an individual arbitration and may not consolidate more than one individual’s claims, preside over any type of class or representative proceeding, or preside over any proceeding involving more than one individual.
55. You and Selfie2Anime agree that for any arbitration you initiate, you will pay the will fees and costs of Arbitration. For any arbitration initiated by Selfie2Anime, Selfie2Anime will pay the fees and costs of Arbitration.
56. You and Selfie2Anime agree that the Federal Courts of Australia of have exclusive jurisdiction over any appeals and the enforcement of an arbitration award.
57. ANY CLAIM ARISING OUT OF OR RELATED TO THESE TERMS OR OUR SERVICES MUST BE FILED WITHIN ONE YEAR AFTER SUCH CLAIM AROSE; OTHERWISE, THE CLAIM IS PERMANENTLY BARRED, WHICH MEANS THAT YOU AND SELFIE2ANIME WILL NOT HAVE THE RIGHT TO ASSERT THE CLAIM.
58. You have the right to opt out of binding arbitration within 30 days of the date you first accepted the terms of this Section 15 by notifying Selfie2Anime in writing. The notification must be sent to: [info@selfie2anime.com](mailto:info@selfie2anime.com)
59. To be effective, the opt out notice must include your full name and clearly indicate your intent to opt out of binding arbitration. By opting out of binding arbitration, you are agreeing to resolve Disputes in accordance with Section 16.
## Governing Law and Venue
60. These Terms and your access to and use of our Services will be governed by and construed and enforced in accordance with the laws of Western Australia, without regard to conflict of law rules or principles (whether of Western Australia or any other jurisdiction) that would cause the application of the laws of any other jurisdiction.
61. Any dispute between the parties that is not subject to arbitration or cannot be heard in small claims court will be resolved in the Federal Courts of Australia, sitting in Perth, Western Australia.
## Changes to these Terms
62. We may make changes to these Terms from time to time. If we make changes, we will post the amended Terms to our Services and update the “Last Updated” date above.
63. We may also attempt to notify you by sending an email notification to the address associated with your account, if any, or providing notice through our Services.
64. Unless we say otherwise in our notice, the amended Terms will be effective immediately and your continued access to and use of our Services after we provide notice will confirm your acceptance of the changes.
65. If you do not agree to the amended Terms, you must stop accessing and using our Services.
## Electronic Communications
66. By accessing or using the Services, you also consent to receive electronic communications from Selfie2Anime (e.g., via email or by posting notices on our Services). These communications may include notices about your account (e.g., payment authorizations, password changes and other transactional information) and are part of your relationship with us.
67. You agree that any notices, agreements, disclosures, or other communications that we send to you electronically will satisfy any legal communication requirements, including, but not limited to, that such communications be in writing.
## Termination
68. We reserve the right, without notice and in our sole discretion, to terminate your right to access or use our Services. We are not responsible for any loss or harm related to your inability to access or use our Services.
## Severability
69. If any provision or part of a provision of these Terms is unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms and does not affect the validity and enforceability of any remaining provisions.
## Legal Compliance
70. You represent and warrant that:
1. you are not located in a country that is subject to an Australian Government embargo, or that has been designated by the Australian Government as a “terrorist supporting” country, and
2. you are not listed on any Australian Government list of prohibited or restricted parties.
## Miscellaneous
71. These Terms constitute the entire agreement between you and Selfie2Anime relating to your access to and use of our Services. The failure of Selfie2Anime to exercise or enforce any right or provision of these Terms will not operate as a waiver of such right or provision.
72. The section titles in these Terms are for convenience only and have no legal or contractual effect. Except as otherwise provided herein, these Terms are intended solely for the benefit of the parties and are not intended to confer third party beneficiary rights upon any other person or entity.
================================================
FILE: src/App.vue
================================================
<!--
Selfie2Anime <https://selfie2anime.com>
Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
-->
<template>
<div id="app">
<router-view />
</div>
</template>
<style lang="scss">
body {
font-size: 16pt;
line-height: 1.75em;
}
.social-container .btn {
min-width: 160px;
text-transform: uppercase;
white-space: nowrap;
color: #fff;
.fa {
margin-right: 0.25em;
}
&.facebook {
background-color: #3b5998;
&:hover {
background-color: #556fbb;
}
}
&.twitter {
background-color: #38a1f3;
&:hover {
background-color: #269ce5;
}
}
&.email {
background-color: #444;
&:hover {
background-color: #555;
}
}
}
</style>
================================================
FILE: src/components/Cropper.vue
================================================
<!--
Selfie2Anime <https://selfie2anime.com>
Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
-->
<!--suppress HtmlUnknownTarget -->
<template>
<div class="col container">
<img ref="image"
class="img-fluid"
alt="Crop Image"
src="@/assets/anonymous.png" />
</div>
</template>
<!--suppress JSMethodCanBeStatic, JSUnusedGlobalSymbols -->
<script lang="ts">
import {
Component,
Prop,
Watch,
Vue,
} from "vue-property-decorator";
import Croppr from "croppr";
@Component
export default class Cropper extends Vue {
@Prop(String) readonly photoUrl: string | undefined;
cropper!: Croppr;
getCropCoordinates() {
return this.cropper.getValue();
}
@Watch("photoUrl", {deep: true})
onPhotoUrlChanged(value: string) {
this.cropper.destroy();
this.$nextTick(() => {
(this.$refs.image as any).src = value;
this.$nextTick(() => {
this.cropper = new Croppr(this.$refs.image as HTMLElement, {
aspectRatio: 1.0,
minSize: [50, 50],
startSize: [75, 75, "%"],
});
});
});
}
mounted() {
this.cropper = new Croppr(this.$refs.image as HTMLElement, {
aspectRatio: 1.0,
minSize: [50, 50],
});
}
beforeDestroy() {
this.cropper.destroy();
}
}
</script>
<style lang="scss">
.container .croppr-container .croppr img {
max-height: 600px;
}
.croppr-handle {
width: 20px;
height: 20px;
}
</style>
================================================
FILE: src/components/PhotoUploader.vue
================================================
<!--
Selfie2Anime <https://selfie2anime.com>
Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
-->
<!--suppress HtmlFormInputWithoutLabel, HtmlUnknownTag -->
<template>
<div ref="photo-uploader"
class="photo-uploader shadow-sm">
<div class="row text-center small d-block py-1">
<a href="#" @click="$root.$i18n.locale = 'en'">English</a>
/
<a href="#" @click="$root.$i18n.locale = 'zh'">中文</a>
</div>
<div style="height: 200px !important">
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9169830803956537"
data-ad-slot="4855067513"
data-ad-format="auto"
data-full-width-responsive="true">
</ins>
</div>
<div style="display: none">
<a ref="it" href="http://deloplen.com/afu.php?zoneid=2793856" target="_blank">It</a>
</div>
<div class="row">
<div v-show="step === 'drop'"
class="drop-container col-sm">
<div class="drop-container-inner">
<input id="photo-input"
type="file"
accept="image/*"
class="photo-input"
@change="onPhotoSelected" />
<label for="photo-input">
<h1 class="d-block text-uppercase mx-3 px-2 mx-lg-5 px-lg-4"
v-html="$th('intro')">
</h1>
<i class="fa fa-cloud-upload fa-5x mt-4 mb-2 text-primary"></i>
<span class="d-block mb-4 text-primary">
{{ $t("upload-selfie") }}
</span>
<!--
<div role="alert"
class="alert alert-info mt-3 mx-5 small"
style="font-size: 11pt">
<strong>Heads up!</strong> Due to extremely high demand, we are
currently unable to send e-mails. ಥ_ಥ You can still upload your selfie now and
it'll be processed as soon as possible.
</div>
-->
<!-- <ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9169830803956537"
data-ad-slot="4855067513"
data-ad-format="auto"
data-full-width-responsive="true">
</ins> -->
<span class="text-muted"
style="font-size: 11pt;"
v-html="$th('photo-privacy')">
</span>
</label>
</div>
</div>
<div v-show="step === 'crop'" class="crop-container col-sm">
<div class="crop-container-inner text-center">
<div class="mt-5 mb-5"
style="font-size: 1.2em"
v-html="$th('crop')">
</div>
<Cropper ref="cropper"
class="mb-3"
:photoUrl="photoDataUrl" />
<button type="button"
class="btn btn-primary btn-lg p-3 mb-4 text-uppercase"
v-html="$th('crop-submit')"
@click="onPhotoCropped">
</button>
</div>
</div>
<div v-show="step === 'email'"
class="email-container col-sm">
<div class="mx-3 my-5">
<form class="my-md-5 py-md-4"
@submit.prevent="onUploadPhoto">
<div class="form-row mb-4 align-items-center justify-content-center">
<div class="col col-10 text-center">
<div style="font-size: 1.2em; line-height: 1.8em"
v-html="$th('upload-heading')">
</div>
</div>
</div>
<!-- <div class="form-row mb-4 align-items-center justify-content-center"
style="display: block; min-height: 80px">
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9169830803956537"
data-ad-slot="4346681492"
data-ad-format="auto"
data-full-width-responsive="true">
</ins>
</div> -->
<div class="form-row justify-content-center text-center">
<div class="col-12 mb-2 col-md-8">
<input required
type="email"
class="form-control form-control-lg"
:placeholder="$t('upload-email')"
v-model="email" />
</div>
<div class="col-12 col-md-2">
<button type="submit"
:class="['btn btn-primary btn-lg btn-block text-uppercase',
canSubmit ? '' : 'disabled']">
{{ $t("upload-submit") }}
</button>
</div>
<div class="col-12 mt-2 col-md-10 mt-md-0">
<div class="progress" style="height: 4px">
<div class="progress-bar"
role="progressbar"
:style="{width: progress + '%'}">
</div>
</div>
</div>
</div>
<div class="form-row mt-4 align-items-center justify-content-center">
<div class="col col-10 text-muted text-center" style="line-height: 1.5em">
<i18n path="upload-notice" tag="small">
<a slot="tos"
class="text-nowrap"
href="/terms/"
target="_blank">
{{ $t("upload-tos") }}
</a>
<a slot="privacy"
class="text-nowrap"
href="/privacy/"
target="_blank">
{{ $t("upload-privacy") }}
</a>
</i18n>
</div>
</div>
</form>
</div>
</div>
<div v-show="step === 'done'" class="col-sm">
<div class="text-center m-3 pt-5 pb-4 mx-1">
<div v-if="hasUploadError">
<div style="font-size: 2em; line-height: 1.8em">
<span class="text-primary font-weight-bold">
Oh Noes!
</span>
<span class="text-nowrap"> ಥ_ಥ</span>
</div>
<div class="mt-4 mb-5 pt-2"
v-html="$th('done-error')">
</div>
<div class="my-3">
<a ref="provider"
href="http://deloplen.com/afu.php?zoneid=2792497"
target="_blank">
Sponsored Content: Click to help us out! UwU
</a>
</div>
<a href="/"
class="btn btn-primary btn-lg p-3 text-uppercase"
role="button"
aria-pressed="true">
{{ $t("done-again") }}
</a>
</div>
<div v-else>
<div style="font-size: 2em; line-height: 1.8em"
v-html="$th('done-heading')">
</div>
<div class="mt-4 mb-4 pt-2 mx-1"
v-html="$th('done-notice', {email})">
</div>
<!--
<div class="alert alert-info mt-3 small" role="alert">
<strong>Heads up!</strong> Due to extremely high demand, we are
currently unable to send e-mails. ಥ_ಥ Please be patient while we are processing your
request.
</div>
-->
<div class="my-3">
<a ref="provider"
href="http://deloplen.com/afu.php?zoneid=2792497"
target="_blank">
Sponsored Content: Click to help us out! UwU
</a>
</div>
<a href="/"
class="btn btn-primary p-3 text-uppercase"
role="button"
aria-pressed="true">
{{ $t("done-again") }}
</a>
</div>
</div>
</div>
</div>
<!-- Social Links -->
<div v-if="step === 'drop'"
class="row justify-content-center">
<div class="row mt-2 mb-3 social-container text-center">
<div class="col-12 my-1 col-md-4">
<a href="https://www.facebook.com/sharer/sharer.php?u=https://selfie2anime.com"
class="btn btn-lg facebook"
target="_blank"
rel="noopener">
<i class="fa fa-facebook-square"></i>
Share
</a>
</div>
<div class="col-12 my-1 col-md-4">
<a href="https://twitter.com/intent/tweet?url=https://selfie2anime.com&text=What do YOU look like in Anime?&hashtags=selfie2anime"
class="btn btn-lg twitter"
target="_blank"
rel="noopener">
<i class="fa fa-twitter"></i>
Tweet
</a>
</div>
<div class="col-12 my-1 col-md-4">
<a href="mailto:?subject=What do YOU look like in Anime?&body=Check out https://selfie2anime.com to find out!"
class="btn btn-lg email"
rel="noopener">
<i class="fa fa-envelope"></i>
Send
</a>
</div>
</div>
</div>
</div>
</template>
<-- @formatter:off -->
<i18n>
en:
intro: What do [@ YOU @] look like in [@ ANIME @]?
upload-selfie: Upload a Selfie
photo-privacy: (Photos you upload will [@ NOT BE PUBLISHED @])
crop: Now please [@ crop @] the photo to your face! :-)
crop-submit: Turn Me Into Anime!
upload-heading: >
This is going to take a while! [@ (◠‿◠) @]
We'll send [@ your anime selfie @] to [@ your email @] once it's ready.
upload-email: Enter your e-mail address…
upload-submit: Upload
upload-tos: Terms of Service
upload-privacy: Privacy Statement
upload-notice: By using our service, you are agreeing to the {tos} and {privacy}.
done-heading: '[@ All Done! @] (づ。◕‿‿◕。)づ'
done-notice: >
We've started processing your selfie and will send the result
to [@ {email} @] as soon as it's available!
done-again: Upload another one!
done-error: >
Something has gone [@ terribly wrong @]!
Please try uploading your selfie again.
zh:
intro: '[@您@]在[@动漫@]里长这么样?'
upload-selfie: 上传一张自拍
photo-privacy: (您上传的照片[@绝对不会被公开@])
crop: 现在请把照片裁剪到您的脸上!
crop-submit: 改造我的照片
upload-heading: >
这需要一段时间! [@ (◠‿◠) @]
upload-email: 请输入您的电子邮件地址…
upload-submit: 上传
upload-tos: 服务条款
upload-privacy: 隐私政策
upload-notice: 使用我们的服务即表示您同意{tos}和{privacy}。
done-heading: '[@ 全部完成! @] (づ。◕‿‿◕。)づ'
done-notice: 我们已开始处理您的自拍,并会在结果可用后立即将结果发送到您的电子邮件中[@ {email} @]!
done-again: 上传另一张照片
done-error: 出了点问题! 请尝试重新上传自拍。
</i18n>
<-- @formatter:on -->
<!--suppress JSMethodCanBeStatic, JSUnusedGlobalSymbols, -->
<script lang="ts">
declare let adsbygoogle: any;
import {
Component,
Vue,
} from "vue-property-decorator";
import axios from "axios";
import loadImage from "blueimp-load-image";
import Cropper from "@/components/Cropper.vue";
@Component({
components: {
Cropper,
},
})
export default class PhotoUploader extends Vue {
step: "drop" | "crop" | "email" | "done" = "drop";
photoDataUrl = "";
cropCoordinates: { x: number, y: number, width: number; height: number } = {x: 0, y: 0, width: 0, height: 0};
email = "";
progress = 0;
submitted = false;
hasUploadError = false;
popIt() {
// (this.$refs.it as any).click();
}
get canSubmit() {
return /\S+@\S+\.\S+/.test(this.email) && !this.submitted;
}
$th(key: string, values?: any) {
return this.$t(key, values)
.toString()
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'")
.replace(/\[@\s*/g, "<span class=\"text-primary\">")
.replace(/\s*@\]/g, "</span>");
}
scrollToTop() {
const element = this.$refs["photo-uploader"] as HTMLElement;
window.scrollTo(0, element.offsetTop);
}
async onPhotoSelected(e: Event) {
const file: File = (e.target as any).files[0];
loadImage(file, (canvas: HTMLCanvasElement) => {
this.photoDataUrl = canvas.toDataURL("image/jpeg");
this.step = "crop";
}, {
canvas: true,
orientation: false,
maxWidth: 3840,
maxHeight: 3840,
},
);
}
onPhotoCropped() {
this.cropCoordinates = (this.$refs.cropper as any).getCropCoordinates();
this.step = "email";
this.$nextTick(() => {
this.scrollToTop();
this.popIt();
});
}
onUploadProgress(e: ProgressEvent) {
this.progress = e.loaded / e.total * 100;
}
async onUploadPhoto() {
if(!this.canSubmit) {
return;
}
this.submitted = true;
try {
await axios.post(process.env.VUE_APP_API_URL || "", {
email: this.email,
crop: this.cropCoordinates,
photo: this.photoDataUrl,
}, {
onUploadProgress: this.onUploadProgress,
});
} catch(e) {
this.hasUploadError = true;
// tslint:disable-next-line
console.log(e);
} finally {
this.step = "done";
setTimeout(() => this.popIt(), 1200);
}
}
mounted() {
(adsbygoogle = (window as any).adsbygoogle || []).push({});
}
}
</script>
<style lang="scss" scoped>
$border-radius: 20px;
$background-color: rgba(255, 255, 255, 0.9);
.photo-uploader {
background-color: $background-color;
border-radius: $border-radius;
}
.drop-container-inner {
margin: 0 20px;
}
.photo-input {
width: 0.1px;
height: 0.1px;
opacity: 0;
overflow: hidden;
position: absolute;
z-index: -1;
}
.photo-input + label {
width: 100%;
height: 100%;
padding: 100px 0 60px 0;
font-size: 1.25em;
text-align: center;
border: 2px dotted #f06292;
border-radius: $border-radius;
cursor: pointer;
}
.photo-input:focus + label,
.photo-input + label:hover {
background-color: darken($background-color, 5%);
}
.photo-input:focus + label {
border: 2px solid #f06292;
}
.crop-container {
margin: 0;
}
</style>
================================================
FILE: src/gen/.gitkeep
================================================
================================================
FILE: src/i18n.ts
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
import Vue from "vue";
import VueI18n from "vue-i18n";
Vue.use(VueI18n);
export default new VueI18n({
locale: process.env.VUE_APP_I18N_LOCALE || "en",
fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || "en",
});
================================================
FILE: src/main.ts
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
import "croppr/dist/croppr.min.css";
import Vue from "vue";
import App from "@/App.vue";
import router from "@/router";
import i18n from "@/i18n";
Vue.config.productionTip = false;
new Vue({
router,
i18n,
render: (h) => h(App),
}).$mount("#app");
================================================
FILE: src/router.ts
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
import Vue from "vue";
import Router from "vue-router";
import Home from "@/views/Home.vue";
Vue.use(Router);
export default new Router({
mode: "history",
base: process.env.BASE_URL,
routes: [
{
path: "/",
name: "home",
component: Home,
},
],
});
================================================
FILE: src/shims-tsx.d.ts
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
import Vue, { VNode } from "vue";
declare global {
namespace JSX {
// tslint:disable no-empty-interface
interface Element extends VNode {
//
}
// tslint:disable no-empty-interface
interface ElementClass extends Vue {
//
}
interface IntrinsicElements {
[elem: string]: any;
}
}
}
================================================
FILE: src/shims-vendor.d.ts
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
declare const jQuery: any;
================================================
FILE: src/shims-vue.d.ts
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
declare module "*.vue" {
import Vue from "vue";
export default Vue;
}
================================================
FILE: src/vendor/creative.js
================================================
export function init($) {
// Smooth scrolling using jQuery easing
$("a.js-scroll-trigger[href*=\"#\"]:not([href=\"#\"])").click(function() {
if(location.pathname.replace(/^\//, "") == this.pathname.replace(/^\//, "") && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $("[name=" + this.hash.slice(1) + "]");
if(target.length) {
$("html, body").animate({
scrollTop: (target.offset().top - 72),
}, 1000, "easeInOutExpo");
return false;
}
}
});
// Closes responsive menu when a scroll trigger link is clicked
$(".js-scroll-trigger").click(function() {
$(".navbar-collapse").collapse("hide");
});
// Activate scrollspy to add active class to navbar items on scroll
$("body").scrollspy({
target: "#mainNav",
offset: 75,
});
// Collapse Navbar
var navbarCollapse = function() {
if($("#mainNav").offset().top > 100) {
$("#mainNav").addClass("navbar-scrolled");
} else {
$("#mainNav").removeClass("navbar-scrolled");
}
};
// Collapse now if page is not at top
navbarCollapse();
// Collapse the navbar when page is scrolled
$(window).scroll(navbarCollapse);
// Magnific popup calls
$("#portfolio").magnificPopup({
delegate: "a",
type: "image",
tLoading: "Loading image #%curr%...",
mainClass: "mfp-img-mobile",
gallery: {
enabled: true,
navigateByImgClick: true,
preload: [0, 1],
},
image: {
tError: "<a href=\"%url%\">The image #%curr%</a> could not be loaded.",
},
});
window.lazyload();
}
================================================
FILE: src/views/Home.vue
================================================
<!--
Selfie2Anime <https://selfie2anime.com>
Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
-->
<!--suppress HtmlUnknownAnchorTarget, CheckEmptyScriptTag -->
<template>
<div id="home">
<!-- Navigation -->
<nav id="mainNav"
class="navbar navbar-expand-lg navbar-light fixed-top py-3">
<div class="container">
<a href="#home" class="navbar-brand js-scroll-trigger">
<span class="navbar-brand-inverted">Selfie</span>2<span class="navbar-brand-inverted">Anime</span>
アニメ
</a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto my-2 my-lg-0">
<li class="nav-item">
<a href="#home" class="nav-link js-scroll-trigger">
{{ $t("home") }}
</a>
</li>
<li class="nav-item">
<a href="/blog/" class="nav-link">
{{ $t("blog") }}
</a>
</li>
<li class="nav-item">
<a href="#about" class="nav-link js-scroll-trigger">
{{ $t("about") }}
</a>
</li>
<li class="nav-item">
<a href="#portfolio" class="nav-link js-scroll-trigger">
{{ $t("portfolio") }}
</a>
</li>
<li class="nav-item">
<a href="#contact" class="nav-link js-scroll-trigger">
{{ $t("contact") }}
</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Masthead -->
<header class="masthead">
<div class="container h-100">
<div class="row h-100 align-items-center justify-content-center">
<div class="col-lg-10 align-self-center">
<PhotoUploader />
</div>
</div>
</div>
</header>
<!-- About Section -->
<section id="about" class="page-section">
<div class="container carousel-container text-center">
<h2 class="mt-0">
Here's a <span class="text-primary font-weight-bold">quick</span> overview
</h2>
<div class="my-5 text-muted" style="line-height: 2em">
Using machine learning techniques combined with a
<a href="https://en.wikipedia.org/wiki/Generative_adversarial_network">
Generative Adversarial Network (GAN)
</a> makes it possible to generate <span class="text-primary font-weight-bold">anime-style</span>
characters based on real people. Using this website, you can generate your own
<span class="text-primary font-weight-bold">anime alter ego</span>!
Here are a few examples for you to check out.
</div>
<!-- Carousel -->
<div class="row justify-content-center m-0">
<div class="col col-sm-12 col-md-8 col-lg-6">
<div class="card shadow-lg">
<div class="card-body p-2">
<div id="carousel"
class="carousel slide carousel-fade"
data-ride="carousel">
<ol class="carousel-indicators">
<li v-for="i in carouselImageCount"
data-target="#carousel"
:data-slide-to="i"
class="active" />
</ol>
<div class="carousel-inner justify-content-center align-content-center text-center">
<div v-for="i in carouselImageCount"
:key="`carousel-image-${i}`"
:class="['carousel-item', i === 1? 'active':'']">
<img class="d-block w-100 lazyload"
:src="i <= 2 ? `./img/carousel/${i}.jpg` : ''"
:data-src="`./img/carousel/${i}.jpg`"
:alt="`Example Image #${i}`">
</div>
</div>
<a class="carousel-control-prev" href="#carousel" role="button"
data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carousel" role="button"
data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="my-5 text-muted" style="line-height: 2em">
Be sure to <a href="#contact" class="js-scroll-trigger">follow us on social media</a>
for further updates! If you are interested in how this works, we have made the source code
available on Github for both the
<a href="https://github.com/SilentByte/selfie2anime-site" target="_blank">front-end</a>
and the
<a href="https://github.com/t04glovern/selfie2anime" target="_blank">back-end</a>.
Head over to <a href="/blog/">our blog</a> where we discuss the technical aspects
of this website.
</div>
<div class="mt-5">
<div class="large-caption text-primary">
<div class="spinner-grow" style="width: 0.5em; height: 0.5em; margin-bottom: 0.25em;"></div>
{{ estimateCounter.toLocaleString() }}
<div class="spinner-grow" style="width: 0.5em; height: 0.5em; margin-bottom: 0.25em;"></div>
</div>
<div class="text-primary text-uppercase mt-4">selfies & counting</div>
</div>
<div class="mt-4">
<a href="https://www.producthunt.com/posts/selfie2anime?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-selfie2anime"
target="_blank">
<img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=164770&theme=light"
alt="Selfie2Anime - Ever wondered what you'd look like as an Anime character? | Product Hunt Embed"
style="width: 250px; height: 54px;" width="250px" height="54px" />
</a>
</div>
<div class="my-5 text-muted" style="line-height: 2em">
The GAN we are using is based on original work by Junho Kim, Minjae Kim, Hyeonwoo Kang, and
Kwanghee Lee. Their repository is <a href="https://github.com/taki0112/UGATIT">available here</a>.
</div>
</div>
<div class="container pt-5 text-center">
<hr />
<h2 class="my-5 text-primary text-lowercase text-break">
<a href="https://twitter.com/intent/tweet?url=https://selfie2anime.com&text=What do YOU look like in Anime?&hashtags=selfie2anime"
target="_blank"
rel="noopener">
#selfie2anime
</a>
</h2>
<div class="row mt-2 mb-5 social-container text-center justify-content-center">
<div class="col-12 my-1 col-md-3">
<a href="https://www.facebook.com/sharer/sharer.php?u=https://selfie2anime.com"
class="btn btn-lg facebook"
target="_blank"
rel="noopener">
<i class="fa fa-facebook-square"></i>
Share
</a>
</div>
<div class="col-12 my-1 col-md-3">
<a href="https://twitter.com/intent/tweet?url=https://selfie2anime.com&text=What do YOU look like in Anime?&hashtags=selfie2anime"
class="btn btn-lg twitter"
target="_blank"
rel="noopener">
<i class="fa fa-twitter"></i>
Tweet
</a>
</div>
<div class="col-12 my-1 col-md-3">
<a href="mailto:?subject=What do YOU look like in Anime?&body=Check out https://selfie2anime.com to find out!"
class="btn btn-lg email"
rel="noopener">
<i class="fa fa-envelope"></i>
Send
</a>
</div>
</div>
<div class="row pt-3">
<div class="col-12 col-sm-12 col-md-12 offset-md-0 col-lg-6">
<a class="twitter-timeline"
data-theme="light"
data-link-color="#f06292"
data-chrome="noheader nofooter noborders"
data-tweet-limit="1"
data-show-replies="true"
href="https://twitter.com/RicoBeti/timelines/1163354787154259970?ref_src=twsrc%5Etfw">
Selfie2Anime Tweets by @RicoBeti
</a>
</div>
<div class="col-12 col-sm-12 col-md-12 offset-md-0 col-lg-6">
<iframe src="https://cards.producthunt.com/cards/posts/164770?v=1"
allowfullscreen
style="border: none;"
width="100%"
height="500"
frameborder="0"
scrolling="no">
</iframe>
</div>
<!--
<div class="col-12 col-sm-12 col-md-12 offset-md-0 col-lg-6">
<a class="twitter-timeline"
data-theme="light"
data-link-color="#f06292"
data-chrome="noheader nofooter noborders"
data-tweet-limit="1"
data-show-replies="true"
href="https://twitter.com/RicoBeti/timelines/1163362875022274560?ref_src=twsrc%5Etfw">
Selfie2Anime Tweets by @RicoBeti
</a>
</div>
-->
</div>
</div>
</section>
<!-- Action Section -->
<section id="action" class="page-section bg-dark">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 text-center text-light py-5">
<h2 class="mt-0">
What do <span class="text-primary font-weight-bold">YOU</span>
look like in <span class="text-primary font-weight-bold">anime</span>?
</h2>
<a href="#home"
class="mt-5 btn btn-primary px-5 btn-xl js-scroll-trigger"
style="font-size: 2rem">
Give it a try!
</a>
</div>
</div>
</div>
</section>
<!-- Portfolio Section -->
<section id="portfolio" class="bg-dark">
<div class="container-fluid portfolio-container p-0">
<div class="row no-gutters">
<div v-for="p in portfolio"
class="col-lg-1 col-md-2 col-sm-3 col-4">
<a class="portfolio-box" :href="p.composite">
<img class="img-fluid mx-auto d-block lazyload"
alt="Generated by GAN"
:style="{'background-color': p.thumb}"
:width="p.size"
:height="p.size"
:src="transparent1x1"
:data-src="p.gan">
<div class="portfolio-box-caption">
<img class="img-fluid lazyload"
src=""
alt="Original"
:style="{'background-color': p.thumb}"
:width="p.size"
:height="p.size"
:src="transparent1x1"
:data-src="p.original">
</div>
</a>
</div>
</div>
</div>
</section>
<!-- Contact Section -->
<section id="contact" class="page-section">
<div class="container">
<div class="row justify-content-center mb-4">
<div class="col-lg-8 text-center">
<h2 class="mt-0">Want to get in touch?</h2>
<hr class="divider my-4">
<p class="text-muted mb-5">
Follow us on Twitter and Github to find out what other
projects we're working and feel free to drop us a message
if you have any questions!
</p>
</div>
</div>
<div class="row text-center">
<div class="col-12 col-sm-6">
<i style="color: #38a1f3" class="fa fa-twitter fa-5x mb-3"></i>
<a class="d-block" href="https://twitter.com/RicoBeti" target="_blank">@RicoBeti</a>
<a class="d-block" href="https://twitter.com/nathangloverAUS"
target="_blank">@nathangloverAUS</a>
</div>
<div class="col-12 col-sm-6">
<i style="color: #211f1f" class="fa fa-github fa-5x mb-3"></i>
<a class="d-block" href="https://github.com/SilentByte" target="_blank">@SilentByte</a>
<a class="d-block" href="https://github.com/t04glovern" target="_blank">@t04glovern</a>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="bg-light py-5">
<div class="container">
<div class="small text-center text-muted">
<a href="/blog/">
Blog
</a>
•
<a href="/terms/" target="_blank">
Terms of Service
</a>
•
<a href="/privacy/" target="_blank">
Privacy Statement
</a>
</div>
<hr />
<div class="small text-center text-muted">
Copyright © 2019-{{ new Date().getFullYear() }} by
<a href="https://twitter.com/RicoBeti">Rico Beti</a>
&
<a href="https://twitter.com/nathangloverAUS">Nathan Glover</a>
</div>
</div>
</footer>
</div>
</template>
<-- @formatter:off -->
<i18n>
en:
home: Home
blog: Blog
about: About
portfolio: Portfolio
contact: Contact
zh:
home: 首页
blog: 博客
about: 我们
portfolio: 看看
contact: 联系
</i18n>
<-- @formatter:on -->
<!--suppress JSMethodCanBeStatic, JSUnusedGlobalSymbols, TypeScriptCheckImport -->
<script lang="ts">
import {
Component,
Vue,
} from "vue-property-decorator";
import * as creative from "@/vendor/creative";
import PhotoUploader from "@/components/PhotoUploader.vue";
import PORTFOLIO_TREE from "@/gen/portfolio-tree.gen.json";
@Component({
components: {
PhotoUploader,
},
})
export default class Home extends Vue {
carouselImageCount = 22;
counter = 0;
estimateCounter = 0;
counterTimestamp = 0;
selfiesPerSecond = 0;
counterIntervalHandle = 0;
transparent1x1 = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
get portfolio() {
// Number of images must be multiple of 12 for proper alignment.
const tree = PORTFOLIO_TREE.slice(0, Math.floor(PORTFOLIO_TREE.length / 12) * 12);
// Shuffle order of portfolio images.
for(let i = tree.length - 1; i > 0; i--) {
const swapIndex = Math.floor(Math.random() * (i + 1));
[tree[i], tree[swapIndex]] = [tree[swapIndex], tree[i]];
}
return tree;
}
$th(key: string, values: any | undefined) {
return this.$t(key, values)
.toString()
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'")
.replace(/\[@\s*/g, "<span class=\"text-primary font-weight-bold\">")
.replace(/\s*@\]/g, "</span>");
}
onUpdateCounter() {
this.estimateCounter = Math.ceil(
this.counter
+ (Date.now() / 1000 - this.counterTimestamp)
* this.selfiesPerSecond,
);
}
async fetchStats() {
// TODO: Replace current manually calculated estimates with actual real-time numbers once back-end is done.
this.counter = 2105442;
this.selfiesPerSecond = 0.0275;
this.counterTimestamp = 1590746693;
this.estimateCounter = this.counter;
if(this.counterIntervalHandle) {
clearInterval(this.counterIntervalHandle);
}
this.onUpdateCounter();
this.counterIntervalHandle = window.setInterval(this.onUpdateCounter, 4000);
}
mounted() {
this.fetchStats();
creative.init(jQuery);
if(navigator.language === "zh"
|| navigator.language === "zh-CN"
|| (navigator.languages && navigator.languages.includes("zh"))) {
this.$root.$i18n.locale = "zh";
}
}
beforeDestroy() {
if(this.counterIntervalHandle) {
clearInterval(this.counterIntervalHandle);
}
}
}
</script>
<style lang="scss" scoped>
$carousel-size: 100px;
section h2, .large-caption {
font-size: 2.8em;
line-height: 1.25;
@media (max-width: 576px) {
font-size: 2.0em;
}
}
.masthead {
height: auto;
padding-bottom: 40px;
}
.nav-item, .page-section h2 {
text-transform: uppercase;
}
.nav-item .nav-link {
font-size: 1.2rem !important;
}
#mainNav .navbar-brand {
font-size: 1.7rem !important;
color: rgba(255, 255, 255, 0.7);
}
#mainNav .navbar-brand-inverted {
color: #f06292;
}
#mainNav {
background: rgba(30, 30, 30, 0.8);
}
#mainNav.navbar-scrolled {
background: #fff;
.navbar-brand {
color: #f06292;
}
.navbar-brand-inverted {
color: #212529;
}
}
#portfolio .container-fluid {
max-width: 12 * 160px;
}
.portfolio-box-caption {
-webkit-transition: opacity 0.75s ease !important;
transition: opacity 0.75s ease !important;;
}
</style>
================================================
FILE: tsconfig.json
================================================
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"resolveJsonModule": true,
"strict": true,
"jsx": "preserve",
"allowJs": true,
"importHelpers": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"sourceMap": true,
"baseUrl": ".",
"types": [
"webpack",
"webpack-env"
],
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.js",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx"
],
"exclude": [
"node_modules/**"
]
}
================================================
FILE: tslint.json
================================================
{
"defaultSeverity": "warning",
"extends": [
"tslint:recommended"
],
"linterOptions": {
"exclude": [
"node_modules/**",
"src/gen/**",
"**/*.js"
]
},
"rules": {
"indent": [true, "spaces", 4],
"interface-name": false,
"no-consecutive-blank-lines": false,
"object-literal-sort-keys": false,
"ordered-imports": false,
"quotemark": [true, "double"],
"member-access": [true, "no-public"],
"whitespace": false
}
}
================================================
FILE: vue.config.js
================================================
/**
* Selfie2Anime <https://selfie2anime.com>
* Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>
*/
module.exports = {
productionSourceMap: false,
pluginOptions: {
i18n: {
locale: "en",
fallbackLocale: "en",
localeDir: "locales",
enableInSFC: true,
},
},
chainWebpack: config => {
config.module
.rule("i18n")
.resourceQuery(/blockType=i18n/)
.type("javascript/auto")
.use("i18n")
.loader("@kazupon/vue-i18n-loader")
.end()
.use("yaml")
.loader("yaml-loader")
.end();
},
};
gitextract_zizv086x/ ├── .browserslistrc ├── .gitignore ├── .gitmodules ├── LICENSE.txt ├── README.md ├── babel.config.js ├── build-portfolio.js ├── buildspec.yml ├── cdk/ │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── bin/ │ │ └── cdk.ts │ ├── cdk.json │ ├── lib/ │ │ └── cdk-stack.ts │ ├── package.json │ └── tsconfig.json ├── package.json ├── postcss.config.js ├── public/ │ ├── 9593990f27faca6931121a16d4131090.html │ ├── ads.txt │ ├── email/ │ │ └── index.html │ ├── gen/ │ │ └── .gitkeep │ ├── index.html │ ├── privacy/ │ │ └── index.html │ ├── self-sitemap.xml │ ├── sitemap.xml │ ├── terms/ │ │ └── index.html │ └── vendor/ │ └── magnific-popup.css ├── public_assets/ │ └── md/ │ ├── privacy.md │ └── terms.md ├── src/ │ ├── App.vue │ ├── components/ │ │ ├── Cropper.vue │ │ └── PhotoUploader.vue │ ├── gen/ │ │ └── .gitkeep │ ├── i18n.ts │ ├── main.ts │ ├── router.ts │ ├── shims-tsx.d.ts │ ├── shims-vendor.d.ts │ ├── shims-vue.d.ts │ ├── vendor/ │ │ └── creative.js │ └── views/ │ └── Home.vue ├── tsconfig.json ├── tslint.json └── vue.config.js
SYMBOL INDEX (15 symbols across 4 files)
FILE: build-portfolio.js
constant PORTFOLIO_SRC_DIR (line 17) | const PORTFOLIO_SRC_DIR = "./public_assets/portfolio/";
constant PORTFOLIO_DST_DIR (line 18) | const PORTFOLIO_DST_DIR = "./public/gen/portfolio/";
constant PORTFOLIO_TREE_DST_DIR (line 19) | const PORTFOLIO_TREE_DST_DIR = "./src/gen/portfolio-tree.gen.json";
constant COMPOSITE_SIZE (line 21) | const COMPOSITE_SIZE = 256;
constant PORTFOLIO_SIZE (line 22) | const PORTFOLIO_SIZE = 160;
constant QUALITY (line 24) | const QUALITY = 90;
function sha1 (line 26) | function sha1(buffer) {
function rgbToCssHex (line 32) | function rgbToCssHex(r, g, b) {
function generate (line 38) | async function generate() {
FILE: cdk/lib/cdk-stack.ts
class CdkStack (line 5) | class CdkStack extends cdk.Stack {
method constructor (line 6) | constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
FILE: src/shims-tsx.d.ts
type Element (line 11) | interface Element extends VNode {
type ElementClass (line 16) | interface ElementClass extends Vue {
type IntrinsicElements (line 20) | interface IntrinsicElements {
FILE: src/vendor/creative.js
function init (line 1) | function init($) {
Condensed preview — 45 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (187K chars).
[
{
"path": ".browserslistrc",
"chars": 21,
"preview": "> 1%\nlast 2 versions\n"
},
{
"path": ".gitignore",
"chars": 97,
"preview": ".idea/\n.vscode/\n\nnode_modules/\ndist/\n\nsrc/gen/*.gen.*\npublic/**/*.gen.*\n\n.env.local\n.env.*.local\n"
},
{
"path": ".gitmodules",
"chars": 87,
"preview": "[submodule \"blog\"]\n\tpath = blog\n\turl = git@github.com:SilentByte/selfie2anime-blog.git\n"
},
{
"path": "LICENSE.txt",
"chars": 1097,
"preview": "MIT License\n\nCopyright (c) 2019 SilentByte <https://www.silentbyte.com/>\n\nPermission is hereby granted, free of charge, "
},
{
"path": "README.md",
"chars": 2818,
"preview": "\n \n\n[ 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\n//"
},
{
"path": "buildspec.yml",
"chars": 215,
"preview": "version: 0.2\n\nphases:\n pre_build:\n commands:\n - npm install\n build:\n commands:\n - npm run build\n post"
},
{
"path": "cdk/.gitignore",
"chars": 77,
"preview": "*.js\n*.d.ts\nnode_modules\n\n# CDK asset staging directory\n.cdk.staging\ncdk.out\n"
},
{
"path": "cdk/.npmignore",
"chars": 65,
"preview": "*.ts\n!*.d.ts\n\n# CDK asset staging directory\n.cdk.staging\ncdk.out\n"
},
{
"path": "cdk/README.md",
"chars": 293,
"preview": "# Useful commands\n\n- `npm run build` compile typescript to js\n- `npm run watch` watch for changes and compile\n- `cdk dep"
},
{
"path": "cdk/bin/cdk.ts",
"chars": 173,
"preview": "#!/usr/bin/env node\nimport cdk = require('@aws-cdk/core');\nimport { CdkStack } from '../lib/cdk-stack';\n\nconst app = new"
},
{
"path": "cdk/cdk.json",
"chars": 38,
"preview": "{\n \"app\": \"npx ts-node bin/cdk.ts\"\n}\n"
},
{
"path": "cdk/lib/cdk-stack.ts",
"chars": 1677,
"preview": "import cdk = require('@aws-cdk/core');\nimport codebuild = require(\"@aws-cdk/aws-codebuild\");\nimport iam = require(\"@aws-"
},
{
"path": "cdk/package.json",
"chars": 429,
"preview": "{\n \"name\": \"cdk\",\n \"version\": \"0.1.0\",\n \"bin\": {\n \"cdk\": \"bin/cdk.js\"\n },\n \"scripts\": {\n \"build\": \"tsc\",\n "
},
{
"path": "cdk/tsconfig.json",
"chars": 588,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2018\",\n \"module\": \"commonjs\",\n \"lib\": [\"es2016\", \"es2017.object\", \"es201"
},
{
"path": "package.json",
"chars": 1438,
"preview": "{\n \"name\": \"selfie2anime-site\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"serve\": \"vue-cli-service s"
},
{
"path": "postcss.config.js",
"chars": 70,
"preview": "module.exports = {\n plugins: {\n autoprefixer: {},\n },\n};\n"
},
{
"path": "public/9593990f27faca6931121a16d4131090.html",
"chars": 51,
"preview": "site-verification: 9593990f27faca6931121a16d4131090"
},
{
"path": "public/ads.txt",
"chars": 58,
"preview": "google.com, pub-9169830803956537, DIRECT, f08c47fec0942fa0"
},
{
"path": "public/email/index.html",
"chars": 13436,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-widt"
},
{
"path": "public/gen/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "public/index.html",
"chars": 3077,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width"
},
{
"path": "public/privacy/index.html",
"chars": 19380,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width"
},
{
"path": "public/self-sitemap.xml",
"chars": 942,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns:image"
},
{
"path": "public/sitemap.xml",
"chars": 354,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n <sitemap>\n"
},
{
"path": "public/terms/index.html",
"chars": 37052,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width"
},
{
"path": "public/vendor/magnific-popup.css",
"chars": 6951,
"preview": "/* Magnific Popup CSS */\n.mfp-bg {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1042;\n overflow: hidd"
},
{
"path": "public_assets/md/privacy.md",
"chars": 11197,
"preview": "\n# PRIVACY POLICY\n\n*Effective Date: 22 August 2019*\n\n1. This Privacy Policy explains how we and some of the companies we"
},
{
"path": "public_assets/md/terms.md",
"chars": 23723,
"preview": "\n# Terms of Use\n\n*Last Updated: 22 August 2019*\n\n1. These Terms of Use (“Terms”) apply to your access and use of this we"
},
{
"path": "src/App.vue",
"chars": 948,
"preview": "<!--\n Selfie2Anime <https://selfie2anime.com>\n Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n-->\n"
},
{
"path": "src/components/Cropper.vue",
"chars": 1809,
"preview": "<!--\n Selfie2Anime <https://selfie2anime.com>\n Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n-->\n"
},
{
"path": "src/components/PhotoUploader.vue",
"chars": 17808,
"preview": "<!--\n Selfie2Anime <https://selfie2anime.com>\n Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n-->\n"
},
{
"path": "src/gen/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/i18n.ts",
"chars": 349,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nim"
},
{
"path": "src/main.ts",
"chars": 380,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nim"
},
{
"path": "src/router.ts",
"chars": 435,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nim"
},
{
"path": "src/shims-tsx.d.ts",
"chars": 508,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nim"
},
{
"path": "src/shims-vendor.d.ts",
"chars": 145,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nde"
},
{
"path": "src/shims-vue.d.ts",
"chars": 196,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nde"
},
{
"path": "src/vendor/creative.js",
"chars": 1836,
"preview": "export function init($) {\n // Smooth scrolling using jQuery easing\n $(\"a.js-scroll-trigger[href*=\\\"#\\\"]:not([href="
},
{
"path": "src/views/Home.vue",
"chars": 21901,
"preview": "<!--\n Selfie2Anime <https://selfie2anime.com>\n Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n-->\n"
},
{
"path": "tsconfig.json",
"chars": 800,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"esnext\",\n \"module\": \"esnext\",\n \"resolveJsonModule\": true,\n \"strict\": tr"
},
{
"path": "tslint.json",
"chars": 483,
"preview": "{\n \"defaultSeverity\": \"warning\",\n \"extends\": [\n \"tslint:recommended\"\n ],\n \"linterOptions\": {\n \"exclude\": [\n "
},
{
"path": "vue.config.js",
"chars": 693,
"preview": "/**\n * Selfie2Anime <https://selfie2anime.com>\n * Copyright (c) 2019 by SilentByte <https://www.silentbyte.com/>\n */\n\nmo"
}
]
About this extraction
This page contains the full source code of the SilentByte/selfie2anime-site GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 45 files (173.8 KB), approximately 40.0k tokens, and a symbol index with 15 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.