const path = require('path'); const Promise = require('bluebird'); const sharp = require('sharp'); const upsert = require('../src/utils/upsert'); const sfw = Object.entries({ animals: [ ['7WXfIIxVlNo', 'David Boca'], ['aMBhrrveocw', 'Ivan Diaz'], ['LTzbD8lj0kw', 'Lionel HESRY'], ['t2I1PTZEx4E', 'Mohamed Nanabhai'], ['0S1qMPpHbkE', 'Thomas Giotopoulos'], ['UnLcVKt7d7I', 'Fernando @cferdo'], ['reXwAuEdkVM', 'Ryan Al Bishri'], ['Hq5N_iPRkOs', 'Axel Holen'], ['GtXsMqOR3ik', 'Sophie Dale'], ['FYJNmIQk7JA', 'Anastasiya Romanova'], ['pQmu6_4VDaI', 'joel herzog'], ['j0iiByCxGfA', 'Jordan Opel'], ['67rtZAf_Jgw', 'Sean Thoman'], ['2puB0ahKDag', 'K. Mitch Hodge'], ['AM9ZtoUss68', 'Erica Nilsson'], ['7r58deUCN4Q', 'Zuriela Benitez'], ['PQJN_Po0O1U', 'Quaid Lagan'], ['rCkstBJusv4', 'Martin Woortman'], ['Tj4lLm49hhM', 'Saketh Upadhya'], ['SjtR_cCEh0w', 'Patti Black'], ['hmn3ZiTDep4', 'Portuguese Gravity'], ['ZC3LibyQxZQ', 'Narges Pms'], ['l-OYOwN2gpQ', 'Pablo Guerrero'], ['E8LxrpUjW7Q', 'Tamara Bellis'], ['xYVRzube0iM', 'Ricardo Braham'], ['7AzUTGOBeJI', 'Adam Thomas'], ['9Ha6VNNsKAA', 'Thomas Evans'], ['GNvCMZzljr0', 'Hari Nandakumar'], ['51u3WqwzXnQ', 'Grace Evans'], ['X8Sck0T0y8s', 'Mélody P'], ], kittens: [ ['fEK4jvgnApg', 'Kim Davies'], ['FCx5h0erwnA', 'Lorraine Steriopol'], ['RcGUiP9dphM', 'Kym Ellis'], ['gAPXLS1LRVE', 'Olya Kuzovkina'], ['JHf_O0inuHg', 'Prasad Panchakshari'], ['CKsDMYPDgCs', 'Jacalyn Beales'], ['mQquoOszMRM', 'Dimitri Houtteman'], ['MNju0A6EeE0', 'Amy Baugess'], ['emI7VUcvLi0', 'The Lucky Neko'], ['Aq4e2-v7UuQ', 'Mario Peter'], ['6vY_jbV12kQ', 'Kazuky Akayashi'], ['1BfCps2-XjQ', 'Ramiz Dedaković'], ['iNEXVlX-RLs', 'Lucija Ros'], ['b8g-ywrrl5Y', 'Leighann Blackwood'], ['Y3gjv5x38Wc', 'Agustin Fernandez'], ['TYXh7h4QxX0', 'Leighann Blackwood'], ['6EchiwVg7C4', 'Jesse Borovnica'], ['fGh_mgAcKYY', 'Šárka Jonášová'], ['V8o2n1GbMWc', 'Hunt Han'], ['TEnrxLKakgI', 'Diver Zhang'], ['XZuTLRfxwcU', 'Diana Parkhouse'], ['rpvS2T2Tl0c', 'Luiza Braun'], ['1S08ciB6Fy4', 'Екатерина Балабанова'], ['iuBVMDnwaho', 'Shaun Meintjes'], ['02kGh5lGsb8', 'Kym Ellis'], ['8ELEgu78IbU', 'Kristin Wilson'], ['TQ0XD_mGC8c', 'Kamal Bilal'], ['zgvb8Knw_AU', 'Zoë Gayah Jonker'], ['GGb-AyBZhjY', 'Brett Jordan'], ['DyD9hx5lvpg', 'James Pond'], ], dogs: [ ['f7-aL0xQd6A', 'Mark Galer'], ['kOI1RlSGsfo', 'Mark Zamora'], ['7c8z4KEvgds', 'William Daigneault'], ['oWrZoAVOBS0', 'William Daigneault'], ['xwpF_Hts7jA', 'Carolinie Cavalli'], ['72mXoMwCoq4', 'Yuki Dog'], ['7EKROB9iGFc', 'Yuki Dog'], ['cX-KEISwDIw', 'Cole Keister'], ['6v-lTFEoO6E', 'Camilo Fierro'], ['1-sM8xqPFTM', 'Dimitri Bong'], ['uTRtIcwkbGM', 'Lenin Estrada'], ['dpn6K9e1vzY', 'Evan Clark'], ['M8AKGLnbi90', 'Tatiana Rodriguez'], ['sxGJv1SUlew', 'Jon Tyson'], ['pT9TTuuzivQ', 'William Daigneault'], ['KKNxCHLesGc', 'Julio Arcadio Santamaría Reyes'], ['e_Du6fAT5dI', 'Thomas Fryatt'], ['1IqHMmYaQJE', 'Mitchell Orr'], ['BHh-jKrTIoU', 'NICOLAS TESSARI'], ['l6GlfPH-8y4', 'Tatiana Rodriguez'], ['d7TLLuiwm_c', 'Brett Jordan'], ['I_PBuIa3Bm8', 'Karl Bewick'], ['d2hWXEV8J-8', 'Harrison Kugler'], ['AhKXmqa_7yU', 'Yuki Dog'], ['aH79Nc7Npas', 'Irene Garcia'], ['v3-zcCWMjgM', 'James Barker'], ], architecture: [ ['jBanV-D3T-Q', 'Dimitry Anikin'], ['VoQ35NRfZro', 'Dabbas'], ['_u_wI4LaT7o', 'Alex Hudson'], ['oSmn4cbhl8w', 'Jorge Gardner'], ['c8GdokJMjWU', 'Mert Kahveci'], ['nfPguKj20Ac', 'Ilya Panasenko'], ['GGxUyCgfORg', 'photo_comments'], ['oLUPaceKme0', 'Jack Schwartz'], ['bo6oz4m4OXY', 'Vinicius Henrique'], ['7HYbCXD2GSA', 'Theme Inn'], ['6K4hh4VX3T0', 'SaiKrishna Saketh'], ['lTxOZBNZ9yM', '[2Ni]'], ['H3mL3kocOQ4', 'Artur Matosyan'], ['ijxxeMO3c8E', 'Larry Teo'], ['WMrd7-CjyF0', 'Anna Claire Schellenberg'], ['FJIFiUCOTfc', 'Kirsten Drew'], ['9daKXiWx5Eg', 'Anastasia Dulgier'], ['47QjuZBn5dQ', 'Murugavel Oli'], ['yjR2ne1gtAA', 'Marius'], ['y9vO3FWDZb0', 'bckfwd'], ['Ro6CB6x-VUg', 'Andreas NextVoyagePL'], ['2td44mctvmI', 'Cameron Venti'], ['M1uoNRrNrkE', 'Willian Justen de Vasconcellos'], ['L-2jRW74fPY', 'Daryan Shamkhali'], ['Qr5pi1_GlvY', 'Benno Klandt'], ['twruXW0M2Mw', 'sk'], ['B8vwUO2NM9Y', 'Stuart Frisby'], ['p9jBrqMSU6Q', 'Han Leentvaar'], ['4rGlazYAV3I', 'Dmitry Bayer'], ], flowers: [ ['4QLKuXKAy7k', 'BEAUFIGEAU CELINE'], ['DlYzHwAl32g', 'HISANARI KUNIMOTO'], ['3TXuFNun-5Q', 'Erik Andres Reynoso'], ['Rrhfeq9yeQ0', 'NeONBRAND'], ['YaQdJyulJdU', 'Natasha V'], ['wt4u1wNiT9I', 'Teo Zac'], ['HG5RcKEawLA', 'Varshesh Joshi'], ['VBtdWGCQ2yw', 'Vanessa Ochotorena'], ['a-lIQzpvbHs', 'Thomas AE'], ['D5RScffd8WU', 'NeONBRAND'], ['mXQyEcINwa8', 'Thought Catalog'], ['REczfcmwooE', 'Steve Harvey'], ['7pGehyH7o64', 'Leonardo Wong'], ['wvGQYtZ_c08', 'chuttersnap'], ['jjqZ0gvHLYc', 'Suresh Purohit'], ['9wQ-aGu0gBs', 'Joël de Vriend'], ['8ANiHTtHbAQ', 'Nick Karvounis'], ['Ehko8EbURbk', 'Chris Barbalis'], ['Rlxfn__azLQ', 'Annie Spratt'], ['q8I3Jeph4uU', 'Jake Dela Concepcion'], ['wQjjYp8_a0Y', 'Henry Lorenzatto'], ['GnwWHUXBfYI', 'Will Svec'], ['pwFNVBlj5XU', 'Danijela Froki'], ['RWz313DUECo', 'Laura Baker'], ['lffwXgsqChg', 'Nils Schirmer'], ['e1O6NCmhUt4', 'Brian McGowan'], ], food: [ ['1ZTccDpF71k', 'Austin Paquette'], ['4-rmvQRL2nY', 'Annie Spratt'], ['44eKcVXzFoc', 'Alonso Romero'], ['4E0dknSrQVU', 'Matteo Maretto'], ['4PtChDuxsDI', 'Dronile Hiraldo'], ['8JIIoSFtEbo', 'Massimo Virgilio'], ['8Yvwy4Kbd1g', 'Alex Kondratiev'], ['9TWavGempJc', 'Ashleigh Robertson'], ['9cfHdC2Asak', 'cindy fernandez'], ['9vHOhKoNlNw', 'Edrece Stansberry'], ['Au-LzDMd_Cw', 'Stephanie McCabe'], ['BKSntHf8oiU', 'Melissa Walker Horn'], ['DPNrBT1WCMs', 'Egor Lyfar'], ['Hvrm3efPYIA', 'Delaney Van'], ['I2tgHl69Dco', 'Louis Hansel @shotsoflouis'], ['JpbtAb-f3JA', 'Dollar Gill'], ['Mi1SNlsyWAk', 'Louis Hansel @shotsoflouis'], ['U3hCd1S7FQ4', 'Louis Hansel @shotsoflouis'], ['VOpJTnP6S9g', 'Liana Mikah'], ['VpxavZd4S-I', 'Mr. Lemon'], ['XPSXhLx143g', 'Wouter Meijering'], ['Yy-dHQP-Ax0', 'Markus Spiske'], ['asaGSZEyltQ', 'Noora AlHammadi'], ['fCE-pTmFrPI', 'Valeriu Bondarenco'], ['fyQr1T3GE34', 'Petr Sevcovic'], ['gZsgKrNc8es', 'Dan Gold'], ['krNP2ESq-54', 'Joshua Bedford'], ['nn0whk6nzv4', 'Yulia Chinato'], ['pGe5mc4Eip8', 'Daniel Park'], ['uScYRjZ2ol8', 'Donald Modeste'], ], candy: [ ['51AhxwkYyHo', 'Viktor Forgacs'], ['rS1GogPLVHk', 'Eaters Collective'], ['9m6NQHyxk-s', 'Brooke Lark'], ['DOmaKmeCp_8', 'Sarah Takforyan'], ['aCPOKOb4qis', 'Jamie Street'], ['On8Ov1TItnU', 'QooQee'], ['KN7tpVQCmWA', 'Nick Fewings'], ['9lmFbtJ2QzM', 'Tim Gouw'], ['54hUU5pNSvo', 'Erol Ahmed'], ['zYH4SubXCWY', 'Наталья Горох'], ['wJHJY7PcDcg', 'Andrew Itaga'], ['BnusUP5jydc', 'Marc Markstein'], ['NI_fJ15rIfI', 'Szabo Viktor'], ['LymVMRIUwPQ', 'Happy Films'], ['mrNVnLEphdo', 'Greg Nunes'], ['CKLF34baCTQ', 'Willian Justen de Vasconcellos'], ['7uGCN9qshsY', 'Siora Photography'], ['xBTnaTgleQE', 'Glen Carrie'], ['sC_HExGwbhI', 'Erik Mclean'], ['1gViVVlEaPc', 'Sérgio André'], ['k9yY0XZTSnI', 'Fernando Hernandez'], ['h1_R9-o9an0', 'emrecan arık'], ['XB0ha-DSGoU', 'Laura Briedis'], ['ONn4OfAnxZY', 'Monique Carrati'], ['24p9dPeXdFA', 'Frederic Köberl'], ['GL6J_sFYHLw', 'Yuiizaa September'], ['LU_fCezP9-o', 'Amit Lahav'], ['CSkAj_XqOVc', 'Mockaroon'], ['xLvIcAYuuMQ', 'Luis Aguila'], ], fruit: [ ['ZLc9yTIFzNk', 'Kelly Sikkema'], ['DoxGtpAsdYY', 'Sanni Sahil'], ['lyEkpuuIrg0', 'kaouther djouada'], ['fDx4zHpnlOM', 'Nanxi wei'], ['0AXNt5SdeXU', 'Sara Cervera'], ['s05XKB6jK2c', 'Markus Spiske'], ['bPMyJzKhCyA', 'Louis Hansel @shotsoflouis'], ['4jeWN4puDrw', 'Carolyn Leber'], ['8EScigZC6AU', 'MF Evelyn'], ['1QbosWMxOx0', 'elCarito'], ['NWA3s8r-1bc', 'Fli Hi'], ['TfNUmbaIjj8', 'Sophie Dale'], ['duskNBVv420', 'Louis Hansel @shotsoflouis'], ['QYupKZjYDbw', 'Moritz Kindler'], ['ozcHSq3XfVs', 'Callum Blacoe'], ['ucY_-U1dM8U', 'Louis Hansel @shotsoflouis'], ['4WLc_dWE-kc', 'Dmitry Mishin'], ['BTqDasyX62E', 'Priscilla Du Preez'], ['SD5dOSkhQdU', 'Alexander Mils'], ['4pJekgmSmPM', 'Rinck Content Studio'], ['0XGWys_GaFo', 'Toa Heftiba'], ['uTZvsJsylYc', 'Louis Hansel @shotsoflouis'], ['vAHaYh5s_Sc', 'RAPHAEL MAKSIAN'], ['0N4A1c5tJSs', 'Miguel Vaz'], ['VAhUq30sW0c', 'Cody Berg'], ['qbO7Mlhq8PQ', 'JOSHUA COLEMAN'], ['dLB32q_bRs0', 'Jason Leung'], ['66itnKdGlC4', 'Fateme Azimi'], ['_DYRZHbCIq0', 'Will Mcmahon'], ], landscapes: [ ['FuaNmJPLAHg', 'MINSUN KIM'], ['8flZ753v87Q', 'Ken Schlabach'], ['6qdO_nFhYoI', 'Clay Banks'], ['VMmPxFmfwfQ', 'Xiaopeng Ma'], ['DAufF3R8B5Q', 'Sangga Rima Roman Selia'], ['5U9n9gip7VY', 'Annie Spratt'], ['Tot7FLHWotI', 'elCarito'], ['vph4L_OjhuI', 'Marek Piwnicki'], ['Nd8h38tRIlc', 'Kevin Horvat'], ['nACRxCEAut8', 'ALEKSEY KUPRIKOV'], ['PjyfZ-Ujut8', 'Denys Nevozhai'], ['X6utHocVX8w', 'Ian Williams'], ['cq6g1WssaJI', 'Tyler Casey'], ['U1ad7OjdHx8', 'Dave Herring'], ['si5673B4PIE', 'Annie Spratt'], ['shv8H0Dv5iE', 'Aditya Chinchure'], ['hjVrWFVyOqE', 'chuttersnap'], ['_skrrHIcsEk', 'Edward Ma'], ['GMNtcgo-KdA', 'Yoav Hornung'], ['313dueuxHls', 'Jamie Street'], ['SncOlKOY7NY', 'Ward Mercer'], ['7R11NCmOY6k', 'Ivan Bandura'], ['YFwOiSisSLM', 'Krzysztof Kotkowicz'], ['gbO7zCOUJIg', 'Brian Kyed'], ['5iwG4xlUgJ4', 'Jason Leung'], ['G_PSim-dsvU', 'Alexandra Jitariuc'], ['gVl6Hsi_pxo', 'Jean-Philippe Delberghe'], ['p8h0_0pyW9k', 'Bence Balla-Schottner'], ], waterfalls: [ ['Cwd0zYOIClY', 'Thomas Ensley'], ['dGCHAo7mb2Q', 'Jamie Melville'], ['bukitR21NO8', 'Jen Theodore'], ['IKIY5bpd9eM', 'Bruno Kelzer'], ['rrVm3b-uxkk', 'Jamie Melville'], ['UegnUIW76gQ', 'Jamie Melville'], ['d0cvao4fC6Q', 'Forest Simon'], ['N8r2hH1siEY', 'Lester Hine'], ['oRmeWoJx_nY', 'Michael Olsen'], ['jVjwlfyJAkA', 'Tom Wheatley'], ['ar6PYxBFgis', 'Gerald Berliner'], ['9fpK7fPw6Is', 'Jamie Melville'], ['jeXkw2HR1SU', 'Julia Caesar'], ['Evs5MnlmUXY', 'Damian Kamp'], ['phstcH4QKJc', 'Jakob Owens'], ['7dmDlBfB9Vk', 'Spencer Watson'], ['SHhaNnNR1xo', 'SaiKrishna Saketh'], ['_6ghImrDiVU', 'Daniel H. Tong'], ['gfaXzDmMY7M', 'RADIN AHMAD MUJAHID'], ['rFbK1PP9LEA', 'Daniel Hernandez'], ['s6Tv7b4SAoo', 'Miltiadis Fragkidis'], ['ir9RUDjVpPo', 'Clay Banks'], ['7emiteIwfuk', 'yunchuan luo'], ['9tqrKo4B98I', 'Austin Farrington'], ['dfazzUCjMro', 'oakie'], ['4HEuHmA7WfM', 'Ketan Morris'], ['eG1_rPekhTk', 'Jack B'], ['_up7EDGdTqU', 'Hari Nandakumar'], ['MhIPEJmVwaA', 'Karthik Chandran'], ], travel: [ ['gC2Q_Tfub6c', 'James Lee'], ['1Tcu61Qz7c0', 'Payas'], ['eLMJ2x7s9ak', 'Alexandre Chambon'], ['aNrRsB2wLDk', 'Ahmet Yalçınkaya'], ['xu2WYJek5AI', 'Anastasia Petrova'], ['xRoexKKv8fs', 'Robson Hatsukami Morgan'], ['qdIer4A0afE', 'Camille Brodard'], ['0lPZBa6-1J8', 'Torbjorn Sandbakk'], ['CLm3pWXrS9Q', 'Tim Trad'], ['D1fs2x11_jk', 'Raul Taciu'], ['BZ3aE3ouAfc', 'Petr Sevcovic'], ['_OUvt8kLf0s', 'GAWN AUSTRALIA'], ['T_6yJJQ_-wA', 'Square Lab'], ['1Z_mX3zzEBc', 'Andy Pearce'], ['lWHJwoSZf7M', 'Joseph Costa'], ['O6Euhw7NMbQ', 'Cosmic Timetraveler'], ['bs1eqd6zSiU', 'Harley-Davidson'], ['_qkuc1V9Gbg', 'Ken Cheung'], ], cars: [ ['w5SZe8hoqlk', 'Rachel Lynette French'], ['Nwk0ye_Y_As', 'Lex Valishvili'], ['P9yqMy_9ZaY', 'Anastasia Dulgier'], ['aGwBtbncMWo', 'Sandra Kaas'], ['jV_QaRjbhWE', 'Clem Onojeghuo'], ['SwmaJDvasuU', 'Gunnar Ridderström'], ['BsJovWrQ7vE', 'Caroline'], ['3t0Q-GYXE0U', 'Austin Park'], ['tlCzxI2RQAc', 'Vinícius Henrique'], ['fecFQcxsUok', 'Zachary Spears'], ['upttrzCo8-U', 'takahiro taguchi'], ['zoHustBfNxA', 'Lukas Werner'], ['UZH69YA50qY', 'Austin Park'], ['tJwY80NMkhk', 'Hanny Naibaho'], ['esfNTaHsR1c', 'Willian Justen de Vasconcellos'], ['Tas1kF-6aNA', 'Tyler Casey'], ['7nrsVjvALnA', 'Denys Nevozhai'], ['CRf3KYexpCA', 'Will Truettner'], ['B8JpogxOnyw', 'Mike Von'], ['mU5vnpJW_CQ', 'Luke Tanis'], ['GaRPxo9Z86M', 'Court Cook'], ['Orp-VAQ_gNA', 'Angello Lopez'], ['q4UZ53rYYy0', 'Ali Moharami'], ['XA2OEcvrrP8', 'Alexander Pidgeon'], ['hXMv04v_py0', 'Patrick Schöpflin'], ['G7sWGEF8pRc', 'Julian Hochgesang'], ['PUnARRf-rE8', 'jean wimmerlin'], ['UIk-rF4Df60', 'Igor Bumba'], ['0dW-eQVL0WQ', 'Michael Heuser'], ], aviation: [ ['bw1hXT_okL4', 'sayhitobel'], ['ecOXN5jGtaU', 'Alexander Lobanov'], ['rFujmwrNv1w', 'Abe Drzycimski'], ['EKYsla2fER8', 'Paola Aguilar'], ['1uiXp6fXd3w', 'Kevin Hackert'], ['tVzGTraJ4T0', 'Samantha Gades'], ['5h1-cHxJz1I', 'Nikli Nodin'], ['u-1cYIua_aI', 'John Torcasio'], ['l2OusPPMLxs', 'yvette Wynne'], ['SUIvWFHBZas', 'Timothy Newman'], ['Tvrnezn1N6g', 'Daniel Eledut'], ['ZN0469D3v98', 'Jason Hafso'], ['LNmKCmZ2pcI', 'Ricardo Resende'], ['P_ExwnnPGyM', 'Tudose Alexandru'], ['1vyWYdyUDGU', 'Ian Cumming'], ['k102QVrpitQ', 'Jake Blucker'], ['eB8-XtMtqZI', 'Miguel Ángel Sanz'], ['1XDZavWyows', 'Samuel Sianipar'], ['7WHD-pdECGU', 'Miguel Ángel Sanz'], ['CN8HsCUCjUQ', 'Cameron Kitson'], ['q_rNy9pRe78', 'Walter Walraven'], ['a9SA6Zs1L9g', 'Tim Dennert'], ['JW50PRr5UbI', 'Roland O'], ['um_6nrOnPZ4', 'Pascal Meier'], ['EpxT58kpBhc', 'Terence Burke'], ['3fbjHj2k0vE', 'Dušan Smetana'], ['9o4p3eCcRBE', 'Jeremy Bishop'], ['sbfLwfoVX7E', 'Nour Betar'], ['4VCJBAtlnNI', 'sippakorn yamkasikorn'], ['LcbsrFbqwGk', 'Angel Barnes'], ], nature: [ ['io0umElGQwU', 'Fabrizio Forte'], ['lh2sQ_L3GaA', 'Daniel Lord'], ['Gyr7o3BMsSc', 'Dave Francis'], ['lRipDukRpd4', 'Kevin'], ['GxymWkdnl4Y', 'Fernando Jorge'], ['rWnw7JL0LPE', 'Rahul Gupta'], ['YKuYS3ChMyw', 'Yuliya Kosolapova'], ['ZsUjLYqbNz8', 'Pau Morfín'], ['x2o3HX6RKG8', 'Dave'], ['Few073pm6aQ', 'Dennis Bertuch'], ['jP-wvLA7uyg', 'Gary Butterfield'], ['euhs3wanL-I', 'Andrew Stapleton'], ['UHt2TG_CHO0', 'Wolfgang Hasselmann'], ['SAIb5NkbAaE', 'Alexis Gethin'], ['tdNjdIW-_OY', 'Lachlan'], ['0NtjFr0-DwM', 'Jane Carmona'], ['fhg_nm1sufU', 'Pascal Debrunner'], ['HJUDECvtxZE', 'jose alfonso sierra'], ['8vS1CwHIEH8', 'Serge Sustavov'], ['oTTnZcwQ2t4', 'Daniel Radford'], ['TNhs9udas8Q', 'Migsar Navarro'], ['zT9g3crTPcE', 'Devin L'], ['hYuNG1zptM4', 'Roberto Gamito'], ['DfOQRep1LKU', 'Wolfgang Rottmann'], ['2sT_iJhIcEg', 'Anamika Pokharel'], ['Zjcl2vaeGdo', 'Lucas Mitchell'], ['b2T6zgFAW1E', 'Theme Inn'], ['EnFQmcTtsjo', 'Yang Jing'], ['PWI-CDVynhw', 'Thomas Galler'], ['gTvLsDi-Uzo', 'Arun Raj'], ], trees: [ ['aSCx7M1E4Vo', 'Markos Mant'], ['3B9MYDjQ-EQ', 'Firasat Durrani'], ['39oaRqfUacc', 'Nick'], ['Y0NLa_KmEgU', 'Michael Ankes'], ['i6nGVkbbUT4', 'Henry McIntosh'], ['_WITb4g1ImY', 'Mark Basarab'], ['prd5CXMsD68', 'JOHN TOWNER'], ['avxSevmCKfw', 'Marta Pawlik'], ['LZf0HMPg-3I', 'Max Brinton'], ['Ovjx9FsXX9c', 'Andy Fitzsimon'], ['YPtfMXRMUe0', 'Corey Agopian'], ['h3y3XPXKoeY', 'Elke Karin Lugert'], ['qeGC1zrsG8U', 'Tycho Atsma'], ['dAkd3xaSDTA', 'Nick West'], ['Prd-KB7CKo4', 'Austin Neill'], ['klNpWLkgezo', 'Wil Stewart'], ['Pm4U5IqI4dM', 'Lena Derevianko'], ['5i664o1oY4c', 'Yannick Pulver'], ['uoMFPm5_Xg8', 'Yoni Kozminsi'], ['Qr2dZRNdf_M', 'Afifi Zulkifle'], ['jxljuYqn8uU', 'Sebastian Pichler'], ['H3mO3zNlvNU', 'Jonathan Knepper'], ['pEb-Xf_qM0s', 'Martin Reisch'], ['prSogOoFmkw', 'Braden Jarvis'], ['y9csmronT3s', 'Alberto Restifo'], ['R8R9H_xuvBY', 'Andrew Pons'], ['fuT-m1yzUG4', 'Ales Krivec'], ], wildlife: [ ['-I0EgcZdV0E', 'Maarten van den Heuvel'], ['F21zt7_icpo', 'Tevin Trinh'], ['gMxgp-MwCyQ', 'James Wainscoat'], ['FFlb5Uj3vhc', 'Sigmund'], ['hglSMjdh83M', 'Srinivasan Venkataraman'], ['UgWcvfl4q5I', 'NOAA'], ['PZ1nEPFNBJQ', 'Third Idea'], ['f4yYs5P5GbA', 'rigel'], ['e94T5ag-9x0', 'Jayden Brand'], ['6Fcllk7ze_Q', 'Vivian Arcidiacono'], ['O7G3II8E2Eo', 'Erik-Jan Leusink'], ['-6UNL6Ghn_c', 'Silvio Kundt'], ['EyZMGYn1Uj4', 'AGL Fotos'], ['nxR7gvSokH8', 'Waldemar Brandt'], ['sAGXVK6bNFc', 'Amar Yashlaha'], ['8zLCXDWETEg', 'Clément ROY'], ['4nPFQ2sUhUE', 'Justin Porter'], ['mUNDTQrfnSk', 'Zahrin Lukman'], ['VXcX0Joa09k', 'Max Rovensky'], ['F_HycxA2lwc', 'Marthijn Brinks'], ['ss01halnU4I', 'Dušan Smetana'], ['lktWv61WoNI', 'Rory Lindholm'], ['myeQ2RH1PX0', 'Alexander Ross'], ['dhIAyAmfjz8', 'Third Idea'], ['AGprQpF4STo', 'Jeff Lemond'], ['P8pBJQVt4UA', 'Christer Gundersen'], ['nt8Ek7sRgdA', 'Mikell Darling'], ['YHv0BDThVOw', 'Nicholas Doherty'], ], interior: [ ['9wGKENQ-qTI', 'Kunj Parekh'], ['x3BCSWCAtrY', 'yann maignan'], ['EF6z_6R94zQ', 'Orlova Maria'], ['dC8NC2QBFyQ', 'Kari Shea'], ['A_AuirVquQY', 'Abbie Bernet'], ['IJf2v-StB4Y', 'yann maignan'], ['frsN89Tf-1Q', 'Joshua Eckstein'], ['s95oB2n9jng', 'Aaron Huber'], ['n_vdmdtNh6M', 'Tiplada Mekvisan'], ['GbiVL6t4T-o', 'gdtography'], ['xx0oSB1YxRE', 'Joseph Albanese'], ['McaNtoPEEcg', 'Brooke Cagle'], ['s65VlkIYSDw', 'Robert Bye'], ['pEaBEqXXk-M', 'Aw Creative'], ['GaX7QTgs8pg', 'Waldemar Brandt'], ['b75FBg97dU0', 'Bao Menglong'], ['5i0GnoTTjSE', 'Philipp Berndt'], ['buhmhprfo3g', 'Kara Eads'], ['L7EwHkq1B2s', 'Kara Eads'], ['gBdirnalxcQ', 'Nick Fewings'], ['ILgaxpiQu0', 'Matteo Maretto'], ['ydcMwcfY5E0', 'Clark Street Mercantile'], ['zLT3VqWEgOQ', 'Sidekix Media'], ['Yg0Rds6_TsY', 'Sergiu Cindea'], ['gbS_fhrFo10', 'Bekah Russom'], ['o3c-euNd_ZM', 'Alessandra Caretto'], ['IEkMMvdZFc0', 'Nick Hillier'], ['hnhE83RhAWg', 'Stefan Steinbauer'], ], statues: [ ['ig8E7Mlrl7Y', 'Vidar Nordli-Mathisen'], ['1ak3Z7ZmtQA', 'Ryan Lum'], ['ntPF02wcTY', 'Gigi'], ['5_i4OPeOAZU', 'Viktor Forgacs'], ['iRON0g6iO0k', 'Alexandre Chambon'], ['PhQ4CpXLEX4', 'Daniels Joffe'], ['EfHqouvZU2Y', 'Bettina Otott Kovács'], ['kaEhf0eZme8', 'Nils'], ['4-4IDc21Gto', 'K. Mitch Hodge'], ['Y8Xh7ZJFU5A', 'Vidar Nordli-Mathisen'], ['fmawALmMLSA', 'Gabriel TRESCH'], ['DUp4B6M0AMc', 'Sebastien'], ['MFZUY4gqvA4', 'James Yarema'], ['50vvwcNFFzU', 'Robert Anasch'], ['TMRi8cD2umM', 'Frank Eiffert'], ['wLx_WCkWvHg', 'Chris A. Tweten'], ['Twoj21Av-so', 'Arthur Reeder'], ['EiGDn8cwU4Y', 'Tessa Rampersad'], ['fVY6UxZuECA', 'Christine Wehrmeier'], ['uJdTBTJ9rbo', 'Christine Wehrmeier'], ['4eEBFTBKx5E', 'Ralph Spandl'], ['HtQRGemW_40', 'Ivan Bertona'], ['uHBcinxOLhQ', 'K. Mitch Hodge'], ['2TmsyZXMNTE', 'Emma Fabbri'], ['9KkPloRgOUY', 'Matteo Maretto'], ['KzPefInJW58', 'JOSHUA COLEMAN'], ['szVTIkisN1M', 'David Siglin'], ['iRzEPkYSETQ', 'Francois Olwage'], ], technology: [ ['QpTCSHzhWuo', 'Joshua Hoehne'], ['0lMpQaXfOCg', 'Barrett Ward'], ['w33-zg-dNL4', 'Rami Al-zayat'], ['MC5WbGo_bZM', 'Tom Pumford'], ['iHJ7xouUyXs', 'Amith Nair'], ['E3I9thV98kQ', 'Tatiana Lapina'], ['JuUK7Er9nR4', 'Mohamed Boumaiza'], ['Dei5oAC_wJc', 'Kenny Luo'], ['ltwEbf_G9bs', 'Mario Caruso'], ['gWdlDR4WpV4', 'Zarak Khan'], ['0Um6Yr1cyx0', 'Antoine Beauvillain'], ['_8S9nEmCZK0', 'Oliur'], ['etFrnBJS1qc', 'NeONBRAND'], ['ZMVtx_KJtOk', 'Thought Catalog'], ['JNuKyKXLh8U', 'Noiseporn'], ['5gzr-RM-rZM', 'Kenny Luo'], ['eWaXmZsXKDs', 'Zane Lee'], ['4qGbMEZb56c', 'Thomas William'], ['hwqWxHoH2wk', 'Markus Spiske'], ['vZJdYl5JVXY', 'Kaitlyn Baker'], ['Lg8xTZjs6Lg', 'Marc Mueller'], ['M5HQPjXrjlQ', 'Matt Hoffman'], ['A-b37b-CrYE', 'Kenny Luo'], ['Kj2SaNHG-hg', 'Christopher Burns'], ['A1v0-iH3T5A', 'Patrick Hendry'], ['iFBIdX54BOk', 'Keagan Henman'], ], }) .map(([category, photos]) => photos.map(([photo, credit], index) => ({ id: photo, path: `sfw/${category}/${photo}.jpeg`, thumbnail: `sfw/${category}/thumbs/${photo}.jpeg`, lazy: `sfw/${category}/lazy/${photo}.jpeg`, mime: 'image/jpeg', is_sfw: true, sfw_media_id: null, group: category, index, credit, }))) .flat(); const tagMedia = [ ['69', 1, 'Melody Petite'], ['69', 3, 'Anne Amari and Alina Lopez in "Hot Lesbian Seduction"', 'lesbianx'], ['69', 0, 'Abby Lee Brazil and Ramon Nomar', 'wicked'], ['69', 4, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'], ['69', 2, 'Abigail Mac and Kissa Sins in "Lesbian Anal Workout"', 'hardx'], ['airtight', 7, 'Lana Rhoades in "Gangbang Me 3"', 'hardx'], ['airtight', 6, 'Remy Lacroix in "Ass Worship 14"', 'julesjordan'], ['airtight', 11, 'Malena Nazionale in "Rocco\'s Perverted Secretaries 2: Italian Edition"', 'roccosiffredi'], ['airtight', 3, 'Anita Bellini in "Triple Dick Gangbang"', 'handsonhardcore'], ['airtight', 'venera_maxima_legalporno', 'Venera Maxima in LegalPorno SZ2645', 'legalporno'], ['airtight', 'mina_ddfnetwork', 'Remy Lacroix in "Ass Worship 14"', 'julesjordan'], ['airtight', 1, 'Jynx Maze in "Pump My Ass Full of Cum 3"', 'julesjordan'], ['airtight', 10, 'Asa Akira in "Asa Akira To The Limit"', 'julesjordan'], ['airtight', 8, 'Veronica Leal in SZ2520'], ['airtight', 5, 'Chloe Amour in "DP Masters 4"', 'julesjordan'], ['airtight', 9, 'Cindy Shine in GP1658'], ['anal', 5, 'Abella Danger', 'hardx'], ['anal', 'kira_noir_julesjordan', 'Kira Noir in "Kira Noir Opens Her Ass For Manuel"', 'julesjordan'], ['anal', 'jane_wilde_evilangel_2', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'], ['anal', 0, 'Adriana Chechik in "Manuel Creampies Their Asses 3"', 'julesjordan'], ['anal', 'nikki_benz_bigwetbutts', 'Nikki Benz in "Pantyhose Playtime"', 'bigwetbutts'], ['anal', 7, 'Anastasia Brokelyn', 'bangbros'], ['anal', 'gia_derza_julesjordan', 'Gia Derza in "Manuel Opens Their Asses 8"', 'julesjordan'], ['anal', 6, 'Chloe Cherry in "Chloe\'s Big Anal"', 'darkx'], ['anal', 4, 'Lana Roy in "Anal In The Club"', '21naturals'], ['anal', 3, 'Dakota Skye', 'brazzers'], ['anal-creampie', 4, 'Chloe Cherry in "Chloe\'s Big Anal"', 'darkx'], ['anal-creampie', 2, 'Lana Rhoades in "Lana\'s Anal Workout"', 'hardx'], ['anal-creampie', 3, 'Rose Valerie', 'eurosexparties'], ['anal-creampie', 0, 'Gina Valentina and Jane Wilde in "A Very Special Anniversary"', 'tushy'], ['anal-creampie', 1, 'Aleska Diamond in "Aleska Wants More"', 'assholefever'], ['anal-fingering', 0, 'Marry Queen in "Queen of Assholes"', 'assholefever'], ['anal-fingering', 3, 'Rose Valerie', 'pornworld'], ['anal-fingering', 1, 'Cherry Kiss, Veronica Leal and Sybil in "Capture This"', 'lezcuties'], ['anal-fingering', 2, 'Aidra Fox and Cassidy Klein in "Lesbian Anal Yoga"', 'lesbianx'], ['anal-fisting', 1, 'Jane Wilde fisting Alexis Tae in "Jane Wilde is AGAPE"', 'evilangel'], ['asian', 0, 'Vina Sky', 'eroticax', 'eroticax'], ['ass-eating', 2, 'Tina Kay, Lexi Layo and Tiffany Tatum in "Ballerina Beauties"', 'lezcuties'], ['ass-eating', 5, 'Remy LaCroix and Abigail Mac', 'allgirlmassage'], ['ass-eating', 4, 'Vanna Bardot and Isiah Maxwell in "Vanna Craves Isiah\'s Cock!"', 'darkx'], ['ass-eating', 'jane_wilde_evilangel', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'], ['ass-eating', 'zaawaadi_asia_rae_allblackx', 'Zaawaadi and Asia Rae in "All Black Threesome"', 'allblackx'], ['ass-eating', 1, 'Aidra Fox and Cassidy Klein in "Lesbian Anal Yoga"', 'lesbianx'], ['ass-eating', 0, 'Angelica Heart and Leanna Sweet in "ATM Bitches"', 'assholefever'], ['ass-eating', 3, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'], ['atm', 2, 'Jureka Del Mar in "Stretched Out"', 'herlimit'], ['atm', 'rebel_rhyder_analonly_1', 'Rebel Rhyder in "Advanced Anal With Rebel"', 'analonly'], ['atm', 3, 'Natasha Teen in "Work That Ass!"', 'herlimit'], ['atm', 7, 'Mandy Muse in "Mandy\'s Anal Amusement"', 'bigwettbutts'], ['atm', 0, 'Roxy Lips in "Under Her Coat"', '21naturals'], ['atm', 6, 'Jane Wilde in "Teen Anal"', 'evilangel'], ['atogm', 0, 'Alysa Gap and Logan in "Anal Buffet 4"', 'evilangel'], ['bdsm', 0, 'Dani Daniels in "The Traning of Dani Daniels, Day 2"', 'thetrainingofo'], ['black', 2, 'Nia Nacci', 'sweetheartvideo'], ['black', 1, 'Ana Foxxx in "DP Me 4"', 'hardx'], ['black', 'zaawaadi_asia_rae_allblackx', 'Zaawaadi and Asia Rae in "All Black Threesome"', 'allblackx'], ['blindfold', 0, 'Kylie Page in "Natural Blindfolded Beauties"', 'hustler'], ['blonde', 'marry_queen', 'Marry Queen'], ['blonde', 3, 'Kylie Page in "A Juicy Afternoon Delight"', 'newsensations'], ['blonde', 'shawna_lenee_sunrisekings', 'Shawna Lenee', 'sunrisekings'], ['blonde', 2, 'Isabelle Deltore', 'herlimit'], ['blowbang', 'ana_foxxx_hardx', 'Ana Foxxx in "Facialized Vol. 4"', 'hardx'], ['blowbang', 'monika_fox_legalporno', 'Monika Fox in GL479', 'legalporno'], ['blowbang', 0, 'Lacy Lennon in "Lacy Lennon\'s First Blowbang"', 'hardx'], ['blowbang', 'zaawaadi_roccosiffredi_1', 'Zaawaadi in "My Name Is Zaawaadi"', 'roccosiffredi'], ['blowbang', 'gina_gerson_assholefever', 'Gina Gerson in "Oppa Gangbang Style"', 'assholefever'], ['blowbang', 1, 'Nicole Black in GIO1680', 'legalporno'], ['blowjob', 'clanddi_jinkcego_ddfbusty_1', 'Clanddi Jinkcego', 'ddfbusty'], ['blowjob', 4, 'Chloe Cherry in "Chloe\'s Big Anal"', 'darkx'], ['blowjob', 1, 'Kylie Page in "Stepsis Gives Soapy Handjob In Shower"', 'spyfam'], ['blowjob', 'jane_wilde_evilangel', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'], ['blowjob', 'cecilia_lion_wefuckblackgirls', 'Cecilia Lion in "Cecilia Lion\'s Second Appearance"', 'wefuckblackgirls'], ['blowjob', 0, 'Adriana Chechik in "The Dinner Party"', 'realwifestories'], ['blowjob', 5, 'Kaylynn', 'mommyblowsbest'], ['blowjob', 'azul_hermosa_realitykings', 'Azul Hermosa and Scott Nails in "Diva For A Day"', 'brazzers'], ['blowjob', 3, 'Rose Valie', 'handsonhardcore'], ['blowjob', 2, 'Luna Kitsuen in "Gag Reflex"', 'evilangel'], ['bondage', 0, 'Veronica Leal', 'herlimit'], ['brunette', 0, 'Darcie Dolce', 'playboy'], ['bts', '3b', 'Brenna Sparks', 'bangconfessions'], ['bts', 0, 'Janice Griffith in "Day With A Pornstar: Janice"', 'brazzers'], ['bts', 1, 'Madison Ivy in "Day With A Pornstar"', 'brazzers'], ['bts', 2, 'Christy Mack', 'digitalplayground'], ['bukkake', 0, 'Jaye Summers in "Facialized 5"', 'hardx'], ['bukkake', 'ana_foxxx_hardx', 'Ana Foxxx in "Facialized Vol. 4"', 'hardx'], ['bukkake', 'jasmine_byrne_julesjordan', 'Jasmine Byrne in "Flesh Hunter 10"', 'julesjordan'], ['bukkake', 'megan_rain_julesjordan', 'Megan Rain in "Slutty Teen In A 10 Cock Blowbang! It\'s RAINING Cum!"', 'julesjordan'], ['creampie', 1, 'Eveline Dellai', 'nubiles'], ['creampie', 3, 'Silvia Soprina in "Satisfaction"', '5kteens'], ['creampie', 2, 'Natasha Lapiedra in "New and Ready"', '5kporn'], ['creampie', 'poster', 'Alina Lopez in "Making Yourself Unforgettable"', 'blacked'], ['cum-drunk', 0, 'Ashly Anderson in "Rough Love"', 'hookuphotshot'], ['cum-in-mouth', 1, 'Sarah Vandella in "Blow Bang Vandella"', 'hardx'], ['cum-in-mouth', 3, 'Kira Noir', 'hardx'], ['cum-in-mouth', 5, 'Emma Hix in "A Big Dick"', 'darkx'], ['cum-in-mouth', 4, 'Vanna Bardot and Isiah Maxwell in "Vanna Craves Isiah\'s Cock!"', 'darkx'], ['cum-in-mouth', 2, 'Jaye Summers in "Double The Cum"', 'hardx'], ['cum-in-mouth', 'lara_frost_legalporno', 'Lara Frost in NRX059', 'legalporno'], ['cum-in-mouth', 0, 'Vina Sky and Avi Love', 'hardx'], ['cum-on-boobs', 1, 'Kylie Page in "Melt In Your Mouth"', 'twistyshard'], ['cum-on-boobs', 0, 'Alessandra Jane', 'private'], ['cum-on-boobs', 2, 'Blake Blossom in "Naturally Stacked Cutie"', 'hardx'], ['cum-on-butt', 'chloe_temple_macy_meadows_brattysis', 'Chloe Temple and Macy Meadows', 'brattysis'], ['cum-on-butt', 0, 'Jynx Maze in "Don\'t Make Me Beg 4"', 'evilangel'], ['cum-on-pussy', 0, 'Talinka A', 'sexart'], ['da-tp', 7, 'Polly Petrova in YE069', 'legalporno'], ['da-tp', 5, 'Venera Maxima in GIO1287'], ['da-tp', 6, 'Adriana Chechik in "Gangbang Me"', 'hardx'], ['da-tp', 0, 'Natasha Teen in SZ2164'], ['da-tp', 1, 'Francys Belle in SZ1702', 'legalporno'], ['dap', 7, 'Adriana Chechik in "DP Masters 6"', 'julesjordan'], ['dap', 10, 'Kira Noir', 'hardx'], ['dap', 'emily_pink_legalporno', 'Emily Pink', 'legalporno'], ['dap', 9, 'Vicky Sol in GIO1547', 'legalporno'], ['dap', 'cherry_kiss_roccosiffredi', 'Cherry Kiss in "My Name Is Zaawaadi"', 'roccosiffredi'], ['dap', 6, 'Sheena Shaw in "Ass Worship 14"', 'julesjordan'], ['dap', 2, 'Lana Rhoades in "Lana Rhoades Unleashed"', 'hardx'], ['dap', 11, 'Haley Reed in "Young Hot Ass"', 'evilangel'], ['dap', 1, 'Ria Sunn in SZ1801', 'legalporno'], ['dap', 5, 'Riley Reid in "The Gangbang of Riley Reid"', 'julesjordan'], ['dap', 0, 'Nicole Black doing double anal during a gangbang in GIO971', 'legalporno'], ['deepthroat', 2, 'Sarah Vandella', 'throated'], ['deepthroat', 3, 'Kira Noir in "Ebony Throat Vs Monster Cock"', 'throated'], ['deepthroat', 'cathy_heaven_brazzers', 'Cathy Heaven in " 7 Minutes in Mrs. Heaven"', 'brazzers'], ['deepthroat', 4, 'Tammy', 'youngthroats'], ['deepthroat', 1, 'Jynx Maze in "Slutty and Sluttier 13"', 'evilangel'], ['deepthroat', 0, 'Chanel Grey in "Deepthroating Is Fun"', 'throated'], ['doggy-style', 'jane_wilde_evilangel', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'], ['double-blowjob', 1, 'Veronica Rodriguez and Penny Pax in "Fucking Older Guys 5"', 'penthouse'], ['double-blowjob', 0, 'Kira Noir and Kali Roses', 'brazzers'], ['double-blowjob', 'zaawaadi_asia_rae_allblackx', 'Zaawaadi and Asia Rae in "All Black Threesome"', 'allblackx'], ['double-dildo', 3, 'Kelly and Leona in "Sleeping Over"', 'lezcuties'], ['double-dildo', 1, 'Indigo Vanity and Kendall Woods in "My White Stepdad: Part 3"', 'digitalplayground'], ['double-dildo', 9, 'Anissa Kate and Zafira in "Lesbians Play With Double Dong All Day Long"', 'pornworld'], ['double-dildo', 2, 'Jasmine Webb and Aria Alexander in "Homeless Horny"', 'digitalplayground'], ['double-dildo', 7, 'Gina Gerson and Anastasia Brokelyn in "One Double Sided Dildo, Two Cuties"', 'pornworld'], ['double-dildo', 0, 'Kali Roses in "Double Dildo Party"'], ['double-dildo', 4, 'Claudia Macc and Victoria Pure', 'eurogirlsongirls'], ['double-dildo', 8, 'Harmony Wonder, Katie Kush and Jewelz Blu in "Pick Your Pleasure"', 'realitykings'], ['double-dildo', 5, 'Kimber Woods and Mandy Muse in "Big Oiled Asses"', 'naughtyamerica'], ['double-dildo', 6, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'], ['double-dildo-anal', 0, 'Vina Sky and Kenzie Reeves in "Vina Sky\'s 1st Lesbian Anal"', 'hardx'], ['double-dildo-anal', 1, 'Sammie Rhodes and Ainsley Addision in "Tickle Me Pink"', 'welivetogether'], ['double-dildo-anal', 6, 'Anikka Albrite, Jenna Sativa and Tori Black in "Tori Black\'s Lesbian Gangbang"', 'lesbianx'], ['double-dildo-anal', 2, 'Adria Rae and Megan Rain in "Best Friends Anal"', 'holed'], ['double-dildo-anal', 9, 'Veronica Leal, Cherry Kiss and Sybil in "Capture This"', 'lezcuties'], ['double-dildo-anal', 7, 'Alysa and Wildeassholeslut in "Anal Buffet 5"', 'evilangel'], ['double-dildo-anal', 8, 'Tina Kay, Lexi Layo and Tiffany Tatum in "Ballerina Beauties"', 'lezcuties'], ['double-dildo-anal', 3, 'Amber Rayne, Phoenix Marie and Roxy Raye in "Deep Anal Abyss 4"', 'evilangel'], ['double-dildo-anal', 5, 'Jenna Sativa and Tara Morgan in "Little Black Book"', 'digitalplayground'], ['double-dildo-anal', 4, 'Ashley Fires, Sammie Rhodes and Kiara Diane in "Real Romance"', 'realitykings'], ['double-dildo-blowjob', 0, 'Adriana Chechik and Vicki Chase in "Anal Savages"', 'julesjordan'], ['double-dildo-blowjob', 6, 'Indigo Vanity and Kendall Woods in "My White Stepdad: Part 3"', 'digitalplayground'], ['double-dildo-blowjob', 8, 'Morgan Lee and Reena Sky in "Power Play"', 'brazzers'], ['double-dildo-blowjob', 11, 'Anissa Kate and Zafira in "Lesbians Play With Double Dong All Day Long"', 'pornworld'], ['double-dildo-blowjob', 1, 'Aidra Fox and Reena Sky in "Reena\'s Got A Staring Problem"', 'brazzers'], ['double-dildo-blowjob', 7, 'Jasmine Webb and Aria Alexander in "Homeless Horny"', 'digitalplayground'], ['double-dildo-blowjob', 9, 'Kimber Woods and Mandy Muse in "Big Oiled Asses"', 'naughtyamerica'], ['double-dildo-blowjob', 10, 'Kiki Daire and Brittany', 'kenmarcus'], ['double-dildo-blowjob', 3, 'Angela White and Madison Ivy in "Sunbathing Babes"', 'brazzers'], ['double-dildo-blowjob', 4, 'Bonnie Rotten and Gina Valentina in "Scared Un-Straight"', 'brazzers'], ['double-dildo-blowjob', 5, 'Jenna Ivory and Layla Price in "A First Time"', 'brazzers'], ['double-dildo-blowjob', 2, 'Giselle Palmer and Romi Rain in "Punishable Behavior"', 'brazzers'], ['double-dildo-dp', 2, 'Jenna Ivory and Layla Price in "A First Time"', 'brazzers'], ['double-dildo-dp', 0, 'u/LacyCrow "Sometimes you have to do it yourself"'], ['double-dildo-dp', 1, 'Brooklyn Chase and Ana Foxxx', 'zebragirls'], ['double-dildo-kiss', 0, 'Giselle Palmer and Romi Rain in "Punishable Behavior"', 'brazzers'], ['double-dildo-kiss', 1, 'Bonnie Rotten and Gina Valentina in "Scared Un-Straight"', 'brazzers'], ['double-dildo-kiss', 3, 'Kiki Daire and Brittany', 'kenmarcus'], ['double-dildo-kiss', 2, 'Adriana Chechik and Vicki Chase in "Anal Savages"', 'julesjordan'], ['dp', 3, 'Hime Marie in AA047', 'legalporno'], ['dp', 2, 'Megan Rain in "DP Masters 4"', 'julesjordan'], ['dp', 6, 'Kira Noir', 'hardx'], ['dp', 'lara_frost_legalporno', 'Lara Frost in NRX070', 'legalporno'], ['dp', 5, 'Lana Rhoades in "Gangbang Me 3"', 'hardx'], ['dp', 'zaawaadi_roccosiffredi', 'Zaawaadi in "My Name Is Zaawaadi"', 'roccosiffredi'], ['dp', 7, 'Chloe Lamour in "DP Masters 7"', 'julesjordan'], ['dp', 'poster', 'Mia Malkova in "DP Me 8"', 'hardx'], ['dp', 4, 'Rebecca Volpetti', 'handsonhardcore'], ['dvp', 'poster', 'Riley Reid in "Pizza That Ass"', 'reidmylips'], ['dvp', 0, 'Aaliyah Hadid in "Squirting From Double Penetration With Anal"', 'bangbros'], ['dv-tp', 'poster', 'Juelz Ventura in "Gangbanged 5"', 'elegantangel'], ['dv-tp', 1, 'Adriana Chechik in "Adriana\'s Triple Anal Penetration!"'], ['dv-tp', 0, 'Luna Rival in SZ1490'], ['facefucking', 5, 'Mia Moore B', 'throated'], ['facefucking', 6, 'Halle Hayes in "Towering Temptress"', '5kporn'], ['facefucking', 'adria_rae_throated', 'Adria Rae in "Adria Rae Sucks Cock All Day"', 'throated'], ['facefucking', 'cathy_heaven_roccosiffredi', 'Cathy Heaven', 'roccosiffredi'], ['facefucking', 1, 'Paige Owens in "Dark Meat 12"', 'evilangel'], ['facefucking', 7, 'Anya Olsen and Audrey Snow in "Babysitter Busted Giving A BJ"', 'mommyblowsbest'], ['facefucking', 0, 'Ashly Anderson in "Rough Love"', 'hookuphotshot'], ['facefucking', 2, 'Jynx Maze', 'throated'], ['facefucking', 4, 'Brooklyn Gray in "Throats Fucks 6"', 'evilangel'], ['facefucking', 3, 'Adriana Chechik in "Performing Magic Butt Tricks With Jules Jordan. What Will Disappear In Her Ass?"', 'julesjordan'], ['facial', 0, 'Brooklyn Gray in "All About Ass 4"', 'evilangel'], ['facial', 3, 'Paige Owens in "Oral Restraint"', 'babes'], ['facial', 'mia_malkova_manojob_2', 'Mia Malkova in "Covered!"', 'manojob'], ['facial', 'alicia_williams_holed', 'Alicia Wiliams in "Bath and Anal"', 'holed'], ['facial', 'poster', 'Jynx Maze in "Gag Reflex 3"', 'evilangel'], ['facial', 'hope_howell_manojob', 'Hope Howell in "Super Slutty Step-Daugher"', 'manojob'], ['facial', 2, 'Ashly Anderson', 'hookuphotshot'], ['facial', 4, 'Kendra Heart', 'facialsforever'], ['flexible', 'lara_frost_legalporno', 'Lara Frost in NRX059', 'legalporno'], ['enhanced-boobs', 7, 'Charley Atwell', 'icandigirls'], ['enhanced-boobs', 14, 'Rikki Six', 'dreamdolls'], ['enhanced-boobs', 2, 'Gia Milana in "Hot Anal Latina"', 'hardx'], ['enhanced-boobs', 'jenny_poussin_jennypoussinvip', 'Jenny Poussin in "His Shirt"', 'jennypoussinvip'], ['enhanced-boobs', 25, 'Zuleidy', 'private'], ['enhanced-boobs', 17, 'Felina in "With Flowers On The Floor"', 'louisdemirabert'], ['enhanced-boobs', 1, 'Lela Star in "Thick"', 'julesjordan'], ['enhanced-boobs', 18, 'Ebony Godess', 'actiongirls'], ['enhanced-boobs', 'hunter_bryce_penthouse', 'Hunter Bryce in "On The Bed"', 'penthouse'], ['enhanced-boobs', 'clanddi_jinkcego_ddfbusty_5', 'Clanddi Jinkcego & Rebecca Jessop', 'ddfbusty'], ['enhanced-boobs', 'trudy_photodromm_1', 'Trudy', 'photodromm'], ['enhanced-boobs', 'kenzie_anne_playboy', 'Miss Kenzie Anne in "Supercharged"', 'playboy'], ['enhanced-boobs', 9, 'Putri Cinta', 'watch4beauty'], ['enhanced-boobs', 3, 'Ashly Anderson', 'passionhd'], ['enhanced-boobs', 'charlie_atwell_photodromm', 'Charley Atwell', 'photodromm'], ['enhanced-boobs', '23d', 'Lulu Sex Bomb in "Tropical Touch"'], ['enhanced-boobs', 22, 'Sakura Sena'], ['enhanced-boobs', 'mareeva_trudy_photodromm_1', 'Mareeva and Trudy', 'photodromm'], ['enhanced-boobs', 'lara_frost_handsonhardcore', 'Lara Frost in "Handyman & Hubby Try To Satisfy Horny Little Ukrainian Nympho"', 'handsonhardcore'], ['enhanced-boobs', 'shawna_lenee_inthecrack_3', 'Shawna Lenee', 'inthecrack'], ['enhanced-boobs', 'azul_hermosa_pornstarslikeitbig', 'Azul Hermosa in "She Likes Rough Quickies"', 'pornstarslikeitbig'], ['enhanced-boobs', 21, 'Emelie Ekström'], ['enhanced-boobs', 10, 'Tia Cyrus in "Titty-Fucked Yoga Goddess"', 'latinasextapes'], ['enhanced-boobs', 24, 'Shalina Devine in "Rumbling in the Ring, Part 2"', 'pornworld'], ['enhanced-boobs', 20, 'Chloe Lamour', 'ddfbusty'], ['enhanced-boobs', 13, 'Kitana Lure', 'assholefever'], ['enhanced-boobs', 8, 'Amber Alena', 'score'], ['enhanced-boobs', 19, 'Kerrie Lee in "Bricked"', 'studio66tv'], ['enhanced-boobs', 4, 'Capri Cavanni', 'bigtitsinsports'], ['enhanced-butt', '0a', 'Aletta Ocean in "Jerk Off Instructions"', 'alettaoceanlive'], ['fake-cum', 2, 'Mimi Allen', 'fuckedupfacials'], ['fake-cum', 3, 'Alexia Anders in "Thanksgiving Creampies"', 'cum4k'], ['fake-cum', 0, 'Jynx Maze in "Showering Slut Gets Sludged"', 'cumshotsurprise'], ['fake-cum', 'franceska_le_fortyozbounce', 'Franceska Le and Luscious Lopez', 'fortyozbounce'], ['fake-cum', 1, 'Ricki White', 'fuckedupfacials'], ['fake-cum', 4, 'Vina Sky in "Creaming Her Pipes"', 'anal4k'], ['family', 0, 'Teanna Trump in "A Family Appear: Part One"', 'brazzers'], ['femdom', 0, 'Alina Li in "Asian Domination… She Holds Jules Jordan\'s Cock Hostage!"', 'julesjordan'], ['femdom', 1, 'Little Caprice in "Femdom"', 'littlecapricedreams'], ['fingering', 1, 'Marry Queen', 'babespottingtv'], ['fingering', 2, 'Kylie Page and Hadley Viscara in "Busty Blonde Bombshells"', 'lesbianx'], ['fingering', 0, 'Ashly Anderson in "Rough Love"', 'hookuphotshot'], ['fisting', '1a', 'Aletta Ocean in "Solo Fisting"', '21sextury'], ['fisting', 0, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'], ['fisting-dp', 0, 'Janice Griffith and Veronica Avluv in "The Nymphomaniac\'s Apprentice', 'theupperfloor'], ['gangbang', 5, 'Carter Cruise\'s first gangbang in "Slut Puppies 9"', 'julesjordan'], ['gangbang', 'kristen_scott_julesjordan', 'Kristen Scott in "Interracial Gangbang!"', 'julesjordan'], ['gangbang', 'monika_fox_legalporno', 'Monika Fox in GL479', 'legalporno'], ['gangbang', 7, 'Alexa Flexy in GL376', 'legalporno'], ['gangbang', 'lara_frost_legalporno_1', 'Lara Frost in NRX070', 'legalporno'], ['gangbang', 'gina_gerson_assholefever', 'Gina Gerson in "Oppa Gangbang Style"', 'assholefever'], ['gangbang', 0, '"4 On 1 Gangbangs"', 'doghousedigital'], ['gangbang', 4, 'Marley Brinx in "The Gangbang of Marley Brinx"', 'julesjordan'], ['gangbang', 1, 'Ginger Lynn in "Gangbang Mystique", a photoset shot by Suze Randall, 1984. Depicting a woman \'airtight\' pushed the boundaries of pornography at the time.'], ['gaping', 1, 'Vina Sky in "Vina Sky Does Anal"', 'hardx'], ['gaping', 4, 'Nicole Black in GIO1626', 'legalporno'], ['gaping', 'poster', 'Zoey Monroe in "Manuel DPs Them All 5"', 'julesjordan'], ['gaping', 3, 'Jessyka Swan', '21sextury'], ['gaping', 2, 'Alex Grey in "DP Masters 5"', 'julesjordan'], ['handjob', 0, 'Lichelle Marie in "Tug Me Sexy"', 'tugjobs'], ['handjob', 'mia_malkova_manojob', 'Mia Malkova in "Covered!"', 'manojob'], ['handjob', 'hope_howell_manojob', 'Hope Howell in "Super Slutty Step-Daugher"', 'manojob'], ['indian', 0, 'Resha in "Casting Resha"', 'watch4beauty'], ['interracial', 1, 'Caprice and Valerie in "Sexual Attraction"', 'hegre'], ['interracial', 0, 'Jaye Summers and Prince Yahshua in "Platinum Pussy 3"', 'julesjordan'], ['latex', 0, 'Bianca Beauchamp in "Cherry Nun"', 'latexlair'], ['latex', 1, 'Aletta Ocean in "Latex Dream"', 'alettaoceanlive'], ['latina', 3, 'Gina Valentina', 'brazzers'], ['latina', 2, 'Veronica Leal', 'herlimit'], ['latina', 1, 'Jynx Maze in "Big Anal Asses 2"', 'hardx'], ['latina', 0, 'Vienna Black', 'spizoo'], ['lesbian', 0, 'Jenna Sativa and Alina Lopez in "Opposites Attract"', 'girlgirl'], ['maid', 0, 'Whitney Wright in "Dredd Up Your Ass 2"', 'julesjordan'], ['maid', 1, 'Alessandra Jane', 'brazzers'], ['milf', 'nikki_benz_bigwetbutts', 'Nikki Benz in "Pantyhose Playtime"', 'bigwetbutts'], ['milf', 'silvia_saige_ddfnetwork', 'Silvia Saige', 'pornworld'], ['milf', 2, 'Shalina Devine', 'analmom'], ['milf', 1, 'Francesca Le', 'evilangel'], ['mff', 'zaawaadi_asia_rae_allblackx_3', 'Zaawaadi and Asia Rae in "All Black Threesome"', 'allblackx'], ['mff', 0, 'Madison Ivy, Adriana Chechik and Keiran Lee in "Day With A Pornstar"', 'brazzers'], ['mff', 1, 'Anikka Albrite, Kelsi Monroe and Mick Blue', 'hardx'], ['mff', 'azul_hermosa_isis_love_pornstarslikeitbig', 'Azul Hermosa, Isis Love and Zac Wild in "She Likes Rough Quickies"', 'pornstarslikeitbig'], ['mfm', 0, 'Vina Sky in "Jules Jordan\'s Three Ways"', 'julesjordan'], ['mfm', 8, 'Ariana Marie in "DP Masters 7"', 'julesjordan'], ['mfm', 1, 'Lana Rhoades in "Gangbang Me 3"', 'hardx'], ['mfm', 'franceska_jaimes_digitalplayground', 'Franceska Jaimes in "Monarch"', 'digitalplayground'], ['mfm', 'hazel_moore_legalporno', 'Hazel Moore', 'legalporno'], ['mfm', 7, 'Rose Valerie', 'eurosexparties'], ['mfm', 6, 'Honey Gold in "Slut Puppies 12"', 'julesjordan'], ['natural-boobs', 1, 'Nia Nacci', 'firstclasspov'], ['natural-boobs', 4, 'Miela (Marry Queen) in "Pure"', 'femjoy'], ['natural-boobs', 7, 'Layla London', 'inthecrack'], ['natural-boobs', 3, 'Violet Starr in "Violet Starr 1st Lesbian Anal"', 'lesbianx'], ['natural-boobs', 0, 'Valentina Nappi in "Hypnotic Curves"', 'lesbianx'], ['natural-boobs', 6, 'Blake Blossom in "Naturally Stacked Cutie"', 'hardx'], ['natural-boobs', 5, 'Chloe B in "Lamour"', 'metart'], ['natural-boobs', 2, 'Kylie Page', 'allgirlmassage'], ['nun', 0, 'Lady Zee in NF053', 'legalporno'], ['nun', 1, 'Penny Pax and Darcie Dolce in "Confessions Of A Sinful Nun"', 'sweetheartvideo'], ['nun', 3, 'Higurashi Rin in "Naughty Nun"', 'allgravure'], ['nun', 2, 'Lea Lexis in "Confessions Of A Sinful Nun"', 'sweetheartvideo'], ['nurse', 0, 'Sarah Vandella in "Cum"', 'brazzers'], ['nurse', 2, 'Evelina Dellai in "Horny Nurses"', 'private'], ['nurse', 3, 'Lullu Gun in "Hot Nurse Addicted to Anal"', 'private'], ['nurse', 'hunter_bryce_realityjunkies', 'Hunter Bryce', 'realityjunkies'], ['nurse', 1, 'Mia Malkova in "Always Think Happy Thoughts"', 'brazzers'], ['oil', 2, 'Jade Kush', 'passionhd'], ['oil', 1, 'Kissa Sins in "Oil Overload 14"', 'julesjordan'], ['oil', 3, 'Vina Sky', 'lubed'], ['oil', 0, 'Jada Stevens in "Jada Stevens Anal Ass Oiled Up\'s Cock"', 'julesjordan'], ['oral-creampie', 1, 'Valentina Nappi', 'herlimit'], ['oral-creampie', 0, 'Henessy in "B(ass)t Friends"', 'assholefever'], ['orgy', 1, 'Megan Rain (DP), Morgan Lee (anal), Jessa Rhodes, Melissa Moore and Kimmy Granger in "Orgy Masters 8"', 'julesjordan'], ['orgy', 0, 'Vicky Sol and Jolee Love in GIO1550', 'legalporno'], ['orgy', 'zaawaadi_malena_cherry_kiss_roccosiffredi_5', 'Zaawaadi, Cherry Kiss and Malena in "My Name Is Zaawaadi"', 'roccosiffredi'], ['orgy', 'poster', 'Zoey Mornoe (DP), Jillian Janson (sex), Frida Sante, Katerina Kay and Natasha Starr in "Orgy Masters 6"', 'julesjordan'], ['parody', 0, 'Capri Cavanni and Dani Daniels in "The Whore of Wall Street"', 'brazzers'], ['piercings', 0, 'Kaegune in "When The Sun Goes Down"', 'suicidegirls'], ['piss-drinking', 0, 'Scarlet Domingo in GL227', 'legalporno'], ['pussy-eating', 5, 'Claudia Macc and Victoria Pure', 'eurogirlsongirls'], ['pussy-eating', 'lilly_evans_jayme_langford_twistys', 'Jayme Langford and Lilly Evans in "The Morning After"', 'twistys'], ['pussy-eating', 4, 'Anastasia Knight and Jillian Janson in "Teach Me"', 'screwbox'], ['pussy-eating', 'zaawaadi_asia_rae_allblackx', 'Zaawaadi and Asia Rae in "All Black Threesome"', 'allblackx'], ['pussy-eating', 'jane_wilde_evilangel', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'], ['pussy-eating', 2, 'Anikka Albrite and Mia Malkova in "Big Anal Bombshells"', 'lesbianx'], ['pussy-eating', 8, 'Sia Lust and Lacey London in "Naughty Gamer Girls"', 'girlsgonepink'], ['pussy-eating', 7, 'Jewelz Blu and Katie Kush in "Pick Your Pleasure"', 'realitykings'], ['pussy-eating', 3, 'Kylie Page and Kalina Ryu in "Training My Masseuse"', 'allgirlmassage'], ['pussy-eating', 'azul_hermosa_realitykings_1', 'Azul Hermosa and Van Wylde in "Breakup Sex"', 'realitykings'], ['pussy-eating', 0, 'Kali Roses and Emily Willis\' pussy in "Peeping On My Neighbor"', 'girlgirl'], ['pussy-eating', 1, 'Anikka Albrite and Riley Reid', 'inthecrack'], ['pussy-eating', 6, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'], ['redhead', 1, 'Lacy Lennon', 'wicked'], ['redhead', 0, 'Penny Pax in "The Submission of Emma Marx: Boundaries"', 'newsensations'], ['schoolgirl', 2, 'Cindy Shine in "Schoolgirl Stars in Interracial DP Threesome"', 'private'], ['schoolgirl', 1, 'Eliza Ibarra', 'brazzers'], ['sex', 'jane_wilde_evilangel', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'], ['squirting', 0, 'Veronica Rodriguez in "Hot Latina Squirting"', 'julesjordan'], ['squirting', 1, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'], ['swallowing', 0, 'Kira Thorn in GIO1023', 'legalporno'], ['tattoos', 0, 'Tigerlilly in "Wrapped In Blue"', 'suicidegirls'], ['tattoos', 1, 'Joanna Angel', 'joannaangel'], ['teen', 0, 'Alexa Flexy', 'sensualgirl'], ['teen', 1, 'Stalfra aka Precious', 'nubiles'], ['trainbang', 1, 'Ria Sunn', 'private'], ['trainbang', 0, 'Nicole Black in GIO971', 'legalporno'], ['tap', 4, 'Francys Belle in GIO1103', 'legalporno'], ['tap', 3, 'Julia Red in GIO1007', 'legalporno'], ['tap', 1, 'Natasha Teen in SZ2098', 'legalporno'], ['tap', 2, 'Kira Thorn in GIO1018', 'legalporno'], ['titty-fucking', 2, 'Layla London in "Touch Me"', 'bignaturals'], ['titty-fucking', 0, 'Kylie Page in "Stepsis Gives Soapy Handjob In Shower"', 'spyfam'], ['titty-fucking', 4, 'Set 5532', 'tugjobs'], ['titty-fucking', 3, 'Anna Bell Peaks in "Ringing Her Bell"', 'milfvr'], ['titty-fucking', 1, 'Chloe Lamour', 'ddfbusty'], ['toy-anal', 3, 'Kelly and Leona in "Sleeping Over"', 'lezcuties'], ['toy-anal', 'ember_snow_jane_wilde_lesbianx', 'Ember Snow and Jane Wilde in "Ember\'s Wilde Ride"', 'lesbianx'], ['toy-anal', 1, 'Nina North and Cassidy Klein in "Nina\'s First Lesbian Anal"', 'lesbianx'], ['toy-anal', 2, 'Denise, Irina and Laki in "Sexy Slumber"', 'lezcuties'], ['toy-anal', 0, 'Kira Noir in 1225', 'inthecrack'], ['toy-dp', 1, 'Krissy Lynn and London River in "Lesbian DP Workout"', 'lesbianx'], ['toy-dp', 3, 'Tori Black, Ana Foxxx, Anikka Albrite, Jenna Sativa and Abigail Mac in "Tori Black\'s Lesbian Gangbang"', 'lesbianx'], ['toy-dp', 0, 'Marley Brinx, Ivy Lebelle and Lyra Law in "Marley Brinx First GGDP"', 'lesbianx'], ['toys', 1, 'Chloe Lamour in "Curives In All The Right Places"', 'wetandpuffy'], ['toys', 'shawna_lenee_sunrisekings', 'Shawna Lenee', 'sunrisekings'], ['trainbang', 'poster', 'Kali Roses in "Passing Me Around"', 'blacked'], ['trainbang', 'gina_gerson_assholefever', 'Gina Gerson in "Oppa Gangbang Style"', 'assholefever'], ['vr', 0, 'Michelle H', 'metart'], ['vr', '1a', 'Jenna Fox and Tommy Pistol in "Virtual Reality Jenna Fox Fucks So Real"', 'bangbros'], ['white', 2, 'Kenzie Reeves', 'bang'], ['white', 0, 'Remy Lacroix', 'hardx'], ['white', 'jane_wilde_evilangel_1', 'Jane Wilde in "The Cock Hungry Chronicles"', 'evilangel'], ['white', 1, 'Sheena Shaw', 'brazzers'], ] .map(([slug, fileIndex, comment, entitySlug], index) => ({ id: `${slug}-${fileIndex}`, tagSlug: slug, path: `tags/${slug}/${fileIndex}.jpeg`, thumbnail: `tags/${slug}/thumbs/${fileIndex}.jpeg`, lazy: `tags/${slug}/lazy/${fileIndex}.jpeg`, mime: 'image/jpeg', index, comment, entitySlug, })); /* eslint-disable max-len */ exports.seed = knex => Promise.resolve() .then(async () => { await upsert('media', sfw, 'id'); const tags = await knex('tags').whereIn('slug', tagMedia.map(item => item.tagSlug)); const entities = await knex('entities') .whereIn('slug', tagMedia.map(item => item.entitySlug).filter(Boolean)) .orderBy('type', 'DESC'); const entitiesBySlug = entities.reduce((acc, entity) => ({ ...acc, [entity.slug]: entity, }), {}); const tagMediaWithDimensions = await Promise.map(tagMedia, async (media) => { const { width, height } = await sharp(path.join('public/img', media.path)).metadata(); // size not available from filepath return { ...media, width, height, }; }, { concurrency: 20, }); const { inserted, updated } = await upsert('media', tagMediaWithDimensions.map(media => ({ id: media.id, path: media.path, thumbnail: media.thumbnail, lazy: media.lazy, mime: media.mime, index: media.index, width: media.width, height: media.height, comment: media.comment, entity_id: entitiesBySlug[media.entitySlug]?.id, })), 'path', knex); const tagIdsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag.id }), {}); const mediaIdsByPath = inserted.concat(updated).reduce((acc, item) => ({ ...acc, [item.path]: item.id }), {}); const tagMediaBySlug = tagMedia.reduce((acc, tagPhoto) => ({ ...acc, [tagPhoto.tagSlug]: (acc[tagPhoto.tagSlug] || []).concat(tagPhoto), }), {}); const tagPosters = Object.values(tagMediaBySlug).map(tag => tag[0]); const tagPhotos = Object.values(tagMediaBySlug).map(tag => tag.slice(1)).flat(); const tagPosterEntries = tagPosters.map(poster => ({ tag_id: tagIdsBySlug[poster.tagSlug], media_id: mediaIdsByPath[poster.path], })); const tagPhotoEntries = tagPhotos.map(photo => ({ tag_id: tagIdsBySlug[photo.tagSlug], media_id: mediaIdsByPath[photo.path], })); await Promise.all([ upsert('tags_posters', tagPosterEntries, 'tag_id', knex), upsert('tags_photos', tagPhotoEntries, ['tag_id', 'media_id'], knex), ]); // clean up (re)moved tag media await Promise.all([ knex('tags_posters') .whereNotIn('media_id', tagPosters.map(photo => photo.id)) .delete(), knex('tags_photos') .whereNotIn('media_id', tagPhotos.map(photo => photo.id)) .delete(), ]); });