├── LICENSE.txt ├── README.md ├── docs └── search │ ├── asset-manifest.json │ ├── favicon.png │ ├── ffhq-dataset-v1-processed.json │ ├── index.html │ ├── manifest.json │ ├── precache-manifest.d5e29510a2069c4ce4aaafff8ab19b02.js │ ├── service-worker.js │ └── static │ ├── css │ ├── main.48ff51cb.chunk.css │ └── main.48ff51cb.chunk.css.map │ └── js │ ├── 2.f9cc10ee.chunk.js │ ├── 2.f9cc10ee.chunk.js.map │ ├── main.3ccdce75.chunk.js │ ├── main.3ccdce75.chunk.js.map │ ├── runtime~main.e5de1b36.js │ └── runtime~main.e5de1b36.js.map ├── download_ffhq.py ├── ffhq-piecharts.png └── ffhq-teaser.png /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Flickr-Faces-HQ (FFHQ) is a high-quality image dataset of human faces, 2 | originally created as a benchmark for generative adversarial networks (GAN): 3 | 4 | A Style-Based Generator Architecture for Generative Adversarial Networks 5 | Tero Karras (NVIDIA), Samuli Laine (NVIDIA), Timo Aila (NVIDIA) 6 | http://stylegan.xyz/paper 7 | 8 | The individual images were published in Flickr by their respective authors 9 | under either Creative Commons BY 2.0, Creative Commons BY-NC 2.0, 10 | Public Domain Mark 1.0, Public Domain CC0 1.0, or U.S. Government Works 11 | license. All of these licenses allow free use, redistribution, and adaptation 12 | for non-commercial purposes. However, some of them require giving appropriate 13 | credit to the original author, as well as indicating any changes that were 14 | made to the images. The license and original author of each image are 15 | indicated in the metadata. 16 | 17 | https://creativecommons.org/licenses/by/2.0/ 18 | https://creativecommons.org/licenses/by-nc/2.0/ 19 | https://creativecommons.org/publicdomain/mark/1.0/ 20 | https://creativecommons.org/publicdomain/zero/1.0/ 21 | http://www.usa.gov/copyright.shtml 22 | 23 | The dataset itself (including JSON metadata, download script, and 24 | documentation) is made available under Creative Commons BY-NC-SA 4.0 license 25 | by NVIDIA Corporation. You can use, redistribute, and adapt it for 26 | non-commercial purposes, as long as you (a) give appropriate credit by 27 | citing our paper, (b) indicate any changes that you've made, and 28 | (c) distribute any derivative works under the same license. 29 | 30 | https://creativecommons.org/licenses/by-nc-sa/4.0/ 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Flickr-Faces-HQ Dataset (FFHQ) 2 | ![Python 3.6](https://img.shields.io/badge/python-3.6-green.svg?style=plastic) 3 | ![License CC](https://img.shields.io/badge/license-CC-green.svg?style=plastic) 4 | ![Format PNG](https://img.shields.io/badge/format-PNG-green.svg?style=plastic) 5 | ![Resolution 1024×1024](https://img.shields.io/badge/resolution-1024×1024-green.svg?style=plastic) 6 | ![Images 70000](https://img.shields.io/badge/images-70,000-green.svg?style=plastic) 7 | 8 | ![Teaser image](./ffhq-teaser.png) 9 | 10 | Flickr-Faces-HQ (FFHQ) is a high-quality image dataset of human faces, originally created as a benchmark for generative adversarial networks (GAN): 11 | 12 | > **A Style-Based Generator Architecture for Generative Adversarial Networks**
13 | > Tero Karras (NVIDIA), Samuli Laine (NVIDIA), Timo Aila (NVIDIA)
14 | > https://arxiv.org/abs/1812.04948 15 | 16 | The dataset consists of 70,000 high-quality PNG images at 1024×1024 resolution and contains considerable variation in terms of age, ethnicity and image background. It also has good coverage of accessories such as eyeglasses, sunglasses, hats, etc. The images were crawled from [Flickr](https://www.flickr.com/), thus inheriting all the biases of that website, and automatically aligned and cropped using [dlib](http://dlib.net/). Only images under permissive licenses were collected. Various automatic filters were used to prune the set, and finally [Amazon Mechanical Turk](https://www.mturk.com/) was used to remove the occasional statues, paintings, or photos of photos. 17 | 18 | Please note that this dataset is not intended for, and should not be used for, development or improvement of facial recognition technologies. For business inquiries, please visit our website and submit the form: [NVIDIA Research Licensing](https://www.nvidia.com/en-us/research/inquiries/) 19 | 20 | ## Licenses 21 | 22 | The individual images were published in Flickr by their respective authors under either [Creative Commons BY 2.0](https://creativecommons.org/licenses/by/2.0/), [Creative Commons BY-NC 2.0](https://creativecommons.org/licenses/by-nc/2.0/), [Public Domain Mark 1.0](https://creativecommons.org/publicdomain/mark/1.0/), [Public Domain CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/), or [U.S. Government Works](http://www.usa.gov/copyright.shtml) license. All of these licenses allow **free use, redistribution, and adaptation for non-commercial purposes**. However, some of them require giving **appropriate credit** to the original author, as well as **indicating any changes** that were made to the images. The license and original author of each image are indicated in the metadata. 23 | 24 | * [https://creativecommons.org/licenses/by/2.0/](https://creativecommons.org/licenses/by/2.0/) 25 | * [https://creativecommons.org/licenses/by-nc/2.0/](https://creativecommons.org/licenses/by-nc/2.0/) 26 | * [https://creativecommons.org/publicdomain/mark/1.0/](https://creativecommons.org/publicdomain/mark/1.0/) 27 | * [https://creativecommons.org/publicdomain/zero/1.0/](https://creativecommons.org/publicdomain/zero/1.0/) 28 | * [http://www.usa.gov/copyright.shtml](http://www.usa.gov/copyright.shtml) 29 | 30 | The dataset itself (including JSON metadata, download script, and documentation) is made available under [Creative Commons BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) license by NVIDIA Corporation. You can **use, redistribute, and adapt it for non-commercial purposes**, as long as you (a) give appropriate credit by **citing our paper**, (b) **indicate any changes** that you've made, and (c) distribute any derivative works **under the same license**. 31 | 32 | * [https://creativecommons.org/licenses/by-nc-sa/4.0/](https://creativecommons.org/licenses/by-nc-sa/4.0/) 33 | 34 | ## Overview 35 | 36 | All data is hosted on Google Drive: 37 | 38 | | Path | Size | Files | Format | Description 39 | | :--- | :--: | ----: | :----: | :---------- 40 | | [ffhq-dataset](https://drive.google.com/open?id=1u2xu7bSrWxrbUxk-dT-UvEJq8IjdmNTP) | 2.56 TB | 210,014 | | Main folder 41 | | ├  [ffhq-dataset-v2.json](https://drive.google.com/open?id=16N0RV4fHI6joBuKbQAoG34V_cQk7vxSA) | 255 MB | 1 | JSON | Metadata including copyright info, URLs, etc. 42 | | ├  [images1024x1024](https://drive.google.com/open?id=1tZUcXDBeOibC6jcMCtgRRz67pzrAHeHL) | 89.1 GB | 70,000 | PNG | Aligned and cropped images at 1024×1024 43 | | ├  [thumbnails128x128](https://drive.google.com/open?id=1tg-Ur7d4vk1T8Bn0pPpUSQPxlPGBlGfv) | 1.95 GB | 70,000 | PNG | Thumbnails at 128×128 44 | | ├  [in-the-wild-images](https://drive.google.com/open?id=1ZX7QOy6LZuTLTnsOtQk-kmKq2-69l5hu) | 955 GB | 70,000 | PNG | Original images from Flickr 45 | | ├  [tfrecords](https://drive.google.com/open?id=1LTBpJ0W_WLjqza3zdayligS8Dh1V1gA6) | 273 GB | 9 | tfrecords | Multi-resolution data for [StyleGAN](https://github.com/NVlabs/stylegan) and [StyleGAN2](https://github.com/NVlabs/stylegan2) 46 | | └  [zips](https://drive.google.com/open?id=1WocxvZ4GEZ1DI8dOz30aSj2zT6pkATYS) | 1.28 TB | 4 | ZIP | Contents of each folder as a ZIP archive. 47 | 48 | High-level statistics: 49 | 50 | ![Pie charts](./ffhq-piecharts.png) 51 | 52 | For use cases that require separate training and validation sets, we have appointed the first 60,000 images to be used for training and the remaining 10,000 for validation. In the [StyleGAN paper](https://arxiv.org/abs/1812.04948), however, we used all 70,000 images for training. 53 | 54 | We have explicitly made sure that there are no duplicate images in the dataset itself. However, please note that the `in-the-wild` folder may contain multiple copies of the same image in cases where we extracted several different faces from the same image. 55 | 56 | ## Download script 57 | 58 | You can either grab the data directly from Google Drive or use the provided [download script](./download_ffhq.py). The script makes things considerably easier by automatically downloading all the requested files, verifying their checksums, retrying each file several times on error, and employing multiple concurrent connections to maximize bandwidth. 59 | 60 | ``` 61 | > python download_ffhq.py -h 62 | usage: download_ffhq.py [-h] [-j] [-s] [-i] [-t] [-w] [-r] [-a] 63 | [--num_threads NUM] [--status_delay SEC] 64 | [--timing_window LEN] [--chunk_size KB] 65 | [--num_attempts NUM] 66 | 67 | Download Flickr-Face-HQ (FFHQ) dataset to current working directory. 68 | 69 | optional arguments: 70 | -h, --help show this help message and exit 71 | -j, --json download metadata as JSON (254 MB) 72 | -s, --stats print statistics about the dataset 73 | -i, --images download 1024x1024 images as PNG (89.1 GB) 74 | -t, --thumbs download 128x128 thumbnails as PNG (1.95 GB) 75 | -w, --wilds download in-the-wild images as PNG (955 GB) 76 | -r, --tfrecords download multi-resolution TFRecords (273 GB) 77 | -a, --align recreate 1024x1024 images from in-the-wild images 78 | --num_threads NUM number of concurrent download threads (default: 32) 79 | --status_delay SEC time between download status prints (default: 0.2) 80 | --timing_window LEN samples for estimating download eta (default: 50) 81 | --chunk_size KB chunk size for each download thread (default: 128) 82 | --num_attempts NUM number of download attempts per file (default: 10) 83 | --random-shift SHIFT standard deviation of random crop rectangle jitter 84 | --retry-crops retry random shift if crop rectangle falls outside image (up to 1000 85 | times) 86 | --no-rotation keep the original orientation of images 87 | --no-padding do not apply blur-padding outside and near the image borders 88 | --source-dir DIR where to find already downloaded FFHQ source data 89 | ``` 90 | 91 | ``` 92 | > python ..\download_ffhq.py --json --images 93 | Downloading JSON metadata... 94 | \ 100.00% done 2/2 files 0.25/0.25 GB 43.21 MB/s ETA: done 95 | Parsing JSON metadata... 96 | Downloading 70000 files... 97 | | 100.00% done 70001/70001 files 89.19 GB/89.19 GB 59.87 MB/s ETA: done 98 | ``` 99 | 100 | The script also serves as a reference implementation of the automated scheme that we used to align and crop the images. Once you have downloaded the in-the-wild images with `python download_ffhq.py --wilds`, you can run `python download_ffhq.py --align` to reproduce exact replicas of the aligned 1024×1024 images using the facial landmark locations included in the metadata. 101 | 102 | ### Reproducing the unaligned FFHQ 103 | 104 | To reproduce the "unaligned FFHQ" dataset as used in the [Alias-Free Generative Adversarial Networks](https://arxiv.org/abs/2106.12423) paper, use the following options: 105 | 106 | ``` 107 | python download_ffhq.py \ 108 | --source-dir \ 109 | --align --no-rotation --random-shift 0.2 --no-padding --retry-crops 110 | ``` 111 | 112 | 113 | ## Metadata 114 | 115 | The `ffhq-dataset-v2.json` file contains the following information for each image in a machine-readable format: 116 | 117 | ``` 118 | { 119 | "0": { # Image index 120 | "category": "training", # Training or validation 121 | "metadata": { # Info about the original Flickr photo: 122 | "photo_url": "https://www.flickr.com/photos/...", # - Flickr URL 123 | "photo_title": "DSCF0899.JPG", # - File name 124 | "author": "Jeremy Frumkin", # - Author 125 | "country": "", # - Country where the photo was taken 126 | "license": "Attribution-NonCommercial License", # - License name 127 | "license_url": "https://creativecommons.org/...", # - License detail URL 128 | "date_uploaded": "2007-08-16", # - Date when the photo was uploaded to Flickr 129 | "date_crawled": "2018-10-10" # - Date when the photo was crawled from Flickr 130 | }, 131 | "image": { # Info about the aligned 1024x1024 image: 132 | "file_url": "https://drive.google.com/...", # - Google Drive URL 133 | "file_path": "images1024x1024/00000/00000.png", # - Google Drive path 134 | "file_size": 1488194, # - Size of the PNG file in bytes 135 | "file_md5": "ddeaeea6ce59569643715759d537fd1b", # - MD5 checksum of the PNG file 136 | "pixel_size": [1024, 1024], # - Image dimensions 137 | "pixel_md5": "47238b44dfb87644460cbdcc4607e289", # - MD5 checksum of the raw pixel data 138 | "face_landmarks": [...] # - 68 face landmarks reported by dlib 139 | }, 140 | "thumbnail": { # Info about the 128x128 thumbnail: 141 | "file_url": "https://drive.google.com/...", # - Google Drive URL 142 | "file_path": "thumbnails128x128/00000/00000.png", # - Google Drive path 143 | "file_size": 29050, # - Size of the PNG file in bytes 144 | "file_md5": "bd3e40b2ba20f76b55dc282907b89cd1", # - MD5 checksum of the PNG file 145 | "pixel_size": [128, 128], # - Image dimensions 146 | "pixel_md5": "38d7e93eb9a796d0e65f8c64de8ba161" # - MD5 checksum of the raw pixel data 147 | }, 148 | "in_the_wild": { # Info about the in-the-wild image: 149 | "file_url": "https://drive.google.com/...", # - Google Drive URL 150 | "file_path": "in-the-wild-images/00000/00000.png", # - Google Drive path 151 | "file_size": 3991569, # - Size of the PNG file in bytes 152 | "file_md5": "1dc0287e73e485efb0516a80ce9d42b4", # - MD5 checksum of the PNG file 153 | "pixel_size": [2016, 1512], # - Image dimensions 154 | "pixel_md5": "86b3470c42e33235d76b979161fb2327", # - MD5 checksum of the raw pixel data 155 | "face_rect": [667, 410, 1438, 1181], # - Axis-aligned rectangle of the face region 156 | "face_landmarks": [...], # - 68 face landmarks reported by dlib 157 | "face_quad": [...] # - Aligned quad of the face region 158 | } 159 | }, 160 | ... 161 | } 162 | ``` 163 | 164 | ## Acknowledgements 165 | 166 | We thank Jaakko Lehtinen, David Luebke, and Tuomas Kynkäänniemi for in-depth discussions and helpful comments; Janne Hellsten, Tero Kuosmanen, and Pekka Jänis for compute infrastructure and help with the code release. 167 | 168 | We also thank Vahid Kazemi and Josephine Sullivan for their work on automatic face detection and alignment that enabled us to collect the data in the first place: 169 | 170 | > **One Millisecond Face Alignment with an Ensemble of Regression Trees**
171 | > Vahid Kazemi, Josephine Sullivan
172 | > Proc. CVPR 2014
173 | > https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Kazemi_One_Millisecond_Face_2014_CVPR_paper.pdf 174 | 175 | ## Privacy 176 | 177 | When collecting the data, we were careful to only include photos that – to the best of our knowledge – were intended for free use and redistribution by their respective authors. That said, we are committed to protecting the privacy of individuals who do not wish their photos to be included. 178 | 179 | To find out whether your photo is included in the Flickr-Faces-HQ dataset, please [click this link](https://nvlabs.github.io/ffhq-dataset/search/) to search the dataset with your Flickr username. 180 | 181 | To get your photo removed from the Flickr-Faces-HQ dataset: 182 | 183 | 1. Go to Flickr and do one of the following: 184 | - Tag the photo with `no_cv` to indicate that you do not wish it to be used for computer vision research. 185 | - Change the license of the photo to `None` (All rights reserved) or any Creative Commons license with `NoDerivs` to indicate that you do not want it to be redistributed. 186 | - Make the photo private, i.e., only visible to you and your friends/family. 187 | - Get the photo removed from Flickr altogether. 188 | 2. Contact [researchinquiries@nvidia.com](mailto:researchinquiries@nvidia.com). Please include your Flickr username in the email. 189 | 3. We will check the status of all photos from the particular user and update the dataset accordingly. 190 | -------------------------------------------------------------------------------- /docs/search/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "main.css": "/ffhq-dataset/search/static/css/main.48ff51cb.chunk.css", 3 | "main.js": "/ffhq-dataset/search/static/js/main.3ccdce75.chunk.js", 4 | "main.js.map": "/ffhq-dataset/search/static/js/main.3ccdce75.chunk.js.map", 5 | "runtime~main.js": "/ffhq-dataset/search/static/js/runtime~main.e5de1b36.js", 6 | "runtime~main.js.map": "/ffhq-dataset/search/static/js/runtime~main.e5de1b36.js.map", 7 | "static/js/2.f9cc10ee.chunk.js": "/ffhq-dataset/search/static/js/2.f9cc10ee.chunk.js", 8 | "static/js/2.f9cc10ee.chunk.js.map": "/ffhq-dataset/search/static/js/2.f9cc10ee.chunk.js.map", 9 | "index.html": "/ffhq-dataset/search/index.html", 10 | "precache-manifest.d5e29510a2069c4ce4aaafff8ab19b02.js": "/ffhq-dataset/search/precache-manifest.d5e29510a2069c4ce4aaafff8ab19b02.js", 11 | "service-worker.js": "/ffhq-dataset/search/service-worker.js", 12 | "static/css/main.48ff51cb.chunk.css.map": "/ffhq-dataset/search/static/css/main.48ff51cb.chunk.css.map" 13 | } -------------------------------------------------------------------------------- /docs/search/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/ffhq-dataset/4826aa6ea77aa7f1a7802b938ed7c40afb985cda/docs/search/favicon.png -------------------------------------------------------------------------------- /docs/search/index.html: -------------------------------------------------------------------------------- 1 | FFHQ dataset search form
-------------------------------------------------------------------------------- /docs/search/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /docs/search/precache-manifest.d5e29510a2069c4ce4aaafff8ab19b02.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = [ 2 | { 3 | "revision": "094ecdea28debf254d73", 4 | "url": "/ffhq-dataset/search/static/js/runtime~main.e5de1b36.js" 5 | }, 6 | { 7 | "revision": "a8f2095efa3f224440e1", 8 | "url": "/ffhq-dataset/search/static/js/main.3ccdce75.chunk.js" 9 | }, 10 | { 11 | "revision": "a48068256375f306d831", 12 | "url": "/ffhq-dataset/search/static/js/2.f9cc10ee.chunk.js" 13 | }, 14 | { 15 | "revision": "a8f2095efa3f224440e1", 16 | "url": "/ffhq-dataset/search/static/css/main.48ff51cb.chunk.css" 17 | }, 18 | { 19 | "revision": "8fa34a93b159b02845a3a8198209fc1e", 20 | "url": "/ffhq-dataset/search/index.html" 21 | } 22 | ]; -------------------------------------------------------------------------------- /docs/search/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welcome to your Workbox-powered service worker! 3 | * 4 | * You'll need to register this file in your web app and you should 5 | * disable HTTP caching for this file too. 6 | * See https://goo.gl/nhQhGp 7 | * 8 | * The rest of the code is auto-generated. Please don't update this file 9 | * directly; instead, make changes to your Workbox build configuration 10 | * and re-run your build process. 11 | * See https://goo.gl/2aRDsh 12 | */ 13 | 14 | importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js"); 15 | 16 | importScripts( 17 | "/ffhq-dataset/search/precache-manifest.d5e29510a2069c4ce4aaafff8ab19b02.js" 18 | ); 19 | 20 | workbox.clientsClaim(); 21 | 22 | /** 23 | * The workboxSW.precacheAndRoute() method efficiently caches and responds to 24 | * requests for URLs in the manifest. 25 | * See https://goo.gl/S9QRab 26 | */ 27 | self.__precacheManifest = [].concat(self.__precacheManifest || []); 28 | workbox.precaching.suppressWarnings(); 29 | workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); 30 | 31 | workbox.routing.registerNavigationRoute("/ffhq-dataset/search/index.html", { 32 | 33 | blacklist: [/^\/_/,/\/[^\/]+\.[^\/]+$/], 34 | }); 35 | -------------------------------------------------------------------------------- /docs/search/static/css/main.48ff51cb.chunk.css: -------------------------------------------------------------------------------- 1 | :root{--main-dark-color:#333;--main-darker-color:#545454}body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.6}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}h3{color:#333;color:var(--main-dark-color)}.App_App__2gdlJ{margin:2em}.App_App-link__2b3Co{color:#61dafb}.App_loading__fEdJi{font-size:.95em;color:var(--main-darker-color)}.App_resultContainer__3Z2SS{margin-top:14px;font-size:1.1em}.App_details__d3YpQ,a.App_flickrUrl__Z9Hlv{color:var(--main-darker-color)}.App_details__d3YpQ{margin-top:0;font-size:.8em}.App_loading__fEdJi:after{overflow:hidden;display:inline-block;vertical-align:bottom;-webkit-animation:App_ellipsis__2pdXV .9s steps(4) infinite;animation:App_ellipsis__2pdXV .9s steps(4) infinite;content:"\2026";width:0}@keyframes App_ellipsis__2pdXV{to{width:1.25em}}@-webkit-keyframes App_ellipsis__2pdXV{to{width:1.25em}}form.App_search__2F63v{font-weight:500} 2 | /*# sourceMappingURL=main.48ff51cb.chunk.css.map */ -------------------------------------------------------------------------------- /docs/search/static/css/main.48ff51cb.chunk.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["/home/jhellsten/dev/ffhq-dataset/search-form/src/index.css","main.48ff51cb.chunk.css","/home/jhellsten/dev/ffhq-dataset/search-form/src/App.module.css"],"names":[],"mappings":"AACA,MACE,sBAAA,CACA,2BCCF,CDEA,KACE,QAAA,CACA,SAAA,CACA,mICEY,CDCZ,kCAAA,CACA,iCAAA,CACA,eCCF,CDEA,KACE,uECEF,CDEA,GACE,UAAA,CAAA,4BCEF,CCvBA,gBACE,UD4BF,CCzBA,qBACE,aD4BF,CCzBA,oBACE,eAAA,CACA,8BD4BF,CCzBA,4BACE,eAAA,CACA,eD4BF,CCrBA,2CAHE,8BDkCF,CC/BA,oBACE,YAAA,CAEA,cD4BF,CCzBA,0BACE,eAAA,CACA,oBAAA,CACA,qBAAA,CACA,2DAAA,CACA,mDAAA,CACA,eAAA,CACA,OD4BF,CCzBA,+BACE,GACE,YD4BF,CACF,CCzBA,uCACE,GACE,YD4BF,CACF,CCzBA,uBACE,eD4BF","file":"main.48ff51cb.chunk.css","sourcesContent":["\n:root {\n --main-dark-color: #333;\n --main-darker-color: #545454;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n line-height: 1.6;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\nh3 {\n color: var(--main-dark-color);\n}\n","\n:root {\n --main-dark-color: #333;\n --main-darker-color: #545454;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n line-height: 1.6;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\nh3 {\n color: #333;\n color: var(--main-dark-color);\n}\n\n\n\n.App_App__2gdlJ {\n margin: 2em;\n}\n\n.App_App-link__2b3Co {\n color: #61dafb;\n}\n\n.App_loading__fEdJi {\n font-size: 0.95em;\n color: var(--main-darker-color);\n}\n\n.App_resultContainer__3Z2SS {\n margin-top: 14px;\n font-size: 1.1em;\n}\n\na.App_flickrUrl__Z9Hlv {\n color: var(--main-darker-color);\n}\n\n.App_details__d3YpQ {\n margin-top: 0px;\n color: var(--main-darker-color);\n font-size: 0.8em;\n}\n\n.App_loading__fEdJi:after {\n overflow: hidden;\n display: inline-block;\n vertical-align: bottom;\n -webkit-animation: App_ellipsis__2pdXV steps(4,end) 900ms infinite;\n animation: App_ellipsis__2pdXV steps(4,end) 900ms infinite;\n content: \"\\2026\"; /* ascii code for the ellipsis character */\n width: 0px;\n}\n\n@keyframes App_ellipsis__2pdXV {\n to {\n width: 1.25em;\n }\n}\n\n@-webkit-keyframes App_ellipsis__2pdXV {\n to {\n width: 1.25em;\n }\n}\n\nform.App_search__2F63v {\n font-weight: 500;\n}\n","\n\n.App {\n margin: 2em;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n.loading {\n font-size: 0.95em;\n color: var(--main-darker-color);\n}\n\n.resultContainer {\n margin-top: 14px;\n font-size: 1.1em;\n}\n\na.flickrUrl {\n color: var(--main-darker-color);\n}\n\n.details {\n margin-top: 0px;\n color: var(--main-darker-color);\n font-size: 0.8em;\n}\n\n.loading:after {\n overflow: hidden;\n display: inline-block;\n vertical-align: bottom;\n -webkit-animation: ellipsis steps(4,end) 900ms infinite;\n animation: ellipsis steps(4,end) 900ms infinite;\n content: \"\\2026\"; /* ascii code for the ellipsis character */\n width: 0px;\n}\n\n@keyframes ellipsis {\n to {\n width: 1.25em;\n }\n}\n\n@-webkit-keyframes ellipsis {\n to {\n width: 1.25em;\n }\n}\n\nform.search {\n font-weight: 500;\n}"]} -------------------------------------------------------------------------------- /docs/search/static/js/2.f9cc10ee.chunk.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(11)},,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",function(){return r})},function(e,t,n){"use strict";function r(e,t){for(var n=0;nz.length&&z.push(e)}function U(e,t,n){return null==e?0:function e(t,n,r,l){var a=typeof t;"undefined"!==a&&"boolean"!==a||(t=null);var u=!1;if(null===t)u=!0;else switch(a){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case o:u=!0}}if(u)return r(l,t,""===n?"."+D(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cthis.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=ce,e.release=se}l(ue.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=oe)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=oe)},persist:function(){this.isPersistent=oe},isPersistent:ae,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=ae,this._dispatchInstances=this._dispatchListeners=null}}),ue.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ue.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return l(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=l({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(ue);var de=ue.extend({data:null}),pe=ue.extend({data:null}),me=[9,13,27,32],he=$&&"CompositionEvent"in window,ye=null;$&&"documentMode"in document&&(ye=document.documentMode);var ve=$&&"TextEvent"in window&&!ye,ge=$&&(!he||ye&&8=ye),be=String.fromCharCode(32),ke={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},we=!1;function xe(e,t){switch(e){case"keyup":return-1!==me.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Te(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var Se=!1;var _e={eventTypes:ke,extractEvents:function(e,t,n,r){var l=void 0,i=void 0;if(he)e:{switch(e){case"compositionstart":l=ke.compositionStart;break e;case"compositionend":l=ke.compositionEnd;break e;case"compositionupdate":l=ke.compositionUpdate;break e}l=void 0}else Se?xe(e,n)&&(l=ke.compositionEnd):"keydown"===e&&229===n.keyCode&&(l=ke.compositionStart);return l?(ge&&"ko"!==n.locale&&(Se||l!==ke.compositionStart?l===ke.compositionEnd&&Se&&(i=ie()):(re="value"in(ne=r)?ne.value:ne.textContent,Se=!0)),l=de.getPooled(l,t,n,r),i?l.data=i:null!==(i=Te(n))&&(l.data=i),H(l),i=l):i=null,(e=ve?function(e,t){switch(e){case"compositionend":return Te(t);case"keypress":return 32!==t.which?null:(we=!0,be);case"textInput":return(e=t.data)===be&&we?null:e;default:return null}}(e,n):function(e,t){if(Se)return"compositionend"===e||!he&&xe(e,t)?(e=ie(),le=re=ne=null,Se=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1