diff --git a/migrations/20190325001339_releases.js b/migrations/20190325001339_releases.js index 2b6921e8..d3ba12bc 100644 --- a/migrations/20190325001339_releases.js +++ b/migrations/20190325001339_releases.js @@ -26,8 +26,11 @@ exports.up = knex => Promise.resolve() table.string('mime'); table.string('hash'); - table.string('type'); - table.string('quality', 6); + + table.integer('size', 12); + table.integer('quality', 6); + table.integer('width', 6); + table.integer('height', 6); table.float('entropy'); table.text('comment'); diff --git a/public/img/logos/kink/boundgangbangs.png b/public/img/logos/kink/boundgangbangs.png index 895affb0..db7ef052 100644 Binary files a/public/img/logos/kink/boundgangbangs.png and b/public/img/logos/kink/boundgangbangs.png differ diff --git a/public/img/logos/kink/boundgods.png b/public/img/logos/kink/boundgods.png index d2fc9614..ffec458b 100644 Binary files a/public/img/logos/kink/boundgods.png and b/public/img/logos/kink/boundgods.png differ diff --git a/public/img/logos/kink/boundinpublic.png b/public/img/logos/kink/boundinpublic.png index 4d04779d..0e8d48e6 100644 Binary files a/public/img/logos/kink/boundinpublic.png and b/public/img/logos/kink/boundinpublic.png differ diff --git a/public/img/logos/kink/brutalsessions.png b/public/img/logos/kink/brutalsessions.png index 6859d5f7..70047088 100644 Binary files a/public/img/logos/kink/brutalsessions.png and b/public/img/logos/kink/brutalsessions.png differ diff --git a/public/img/logos/kink/buttmachineboys.png b/public/img/logos/kink/buttmachineboys.png index 073c98ba..ddb76098 100644 Binary files a/public/img/logos/kink/buttmachineboys.png and b/public/img/logos/kink/buttmachineboys.png differ diff --git a/public/img/logos/kink/devicebondage.png b/public/img/logos/kink/devicebondage.png index f08868fb..b4c5f5cd 100644 Binary files a/public/img/logos/kink/devicebondage.png and b/public/img/logos/kink/devicebondage.png differ diff --git a/public/img/logos/kink/divinebitches.png b/public/img/logos/kink/divinebitches.png index da22645e..d4f86c08 100644 Binary files a/public/img/logos/kink/divinebitches.png and b/public/img/logos/kink/divinebitches.png differ diff --git a/public/img/logos/kink/electrosluts.png b/public/img/logos/kink/electrosluts.png index 18fd4014..4ec701ba 100644 Binary files a/public/img/logos/kink/electrosluts.png and b/public/img/logos/kink/electrosluts.png differ diff --git a/public/img/logos/kink/everythingbutt.png b/public/img/logos/kink/everythingbutt.png index d007e80a..b87a5b02 100644 Binary files a/public/img/logos/kink/everythingbutt.png and b/public/img/logos/kink/everythingbutt.png differ diff --git a/public/img/logos/kink/familiestied.png b/public/img/logos/kink/familiestied.png index baece587..fe7b515b 100644 Binary files a/public/img/logos/kink/familiestied.png and b/public/img/logos/kink/familiestied.png differ diff --git a/public/img/logos/kink/favicon.png b/public/img/logos/kink/favicon.png index 65d5d8f8..568c3e75 100644 Binary files a/public/img/logos/kink/favicon.png and b/public/img/logos/kink/favicon.png differ diff --git a/public/img/logos/kink/filthyfemdom.png b/public/img/logos/kink/filthyfemdom.png new file mode 100644 index 00000000..e6e8a5f9 Binary files /dev/null and b/public/img/logos/kink/filthyfemdom.png differ diff --git a/public/img/logos/kink/footworship.png b/public/img/logos/kink/footworship.png index 70de82e9..01311eda 100644 Binary files a/public/img/logos/kink/footworship.png and b/public/img/logos/kink/footworship.png differ diff --git a/public/img/logos/kink/fuckedandbound.png b/public/img/logos/kink/fuckedandbound.png index b1a73aa4..08f70124 100644 Binary files a/public/img/logos/kink/fuckedandbound.png and b/public/img/logos/kink/fuckedandbound.png differ diff --git a/public/img/logos/kink/fuckingmachines.png b/public/img/logos/kink/fuckingmachines.png index 073fb7ea..f26ac696 100644 Binary files a/public/img/logos/kink/fuckingmachines.png and b/public/img/logos/kink/fuckingmachines.png differ diff --git a/public/img/logos/kink/hardcoregangbang.png b/public/img/logos/kink/hardcoregangbang.png index 7912c5fb..6df6bef2 100644 Binary files a/public/img/logos/kink/hardcoregangbang.png and b/public/img/logos/kink/hardcoregangbang.png differ diff --git a/public/img/logos/kink/hogtied.png b/public/img/logos/kink/hogtied.png index d8b57db0..0bca5064 100644 Binary files a/public/img/logos/kink/hogtied.png and b/public/img/logos/kink/hogtied.png differ diff --git a/public/img/logos/kink/kink-dvd.png b/public/img/logos/kink/kink-dvd.png index bfec6502..9056370f 100644 Binary files a/public/img/logos/kink/kink-dvd.png and b/public/img/logos/kink/kink-dvd.png differ diff --git a/public/img/logos/kink/kinkfeatures.png b/public/img/logos/kink/kinkfeatures.png index e5cb66e4..56891e1e 100644 Binary files a/public/img/logos/kink/kinkfeatures.png and b/public/img/logos/kink/kinkfeatures.png differ diff --git a/public/img/logos/kink/kinkuniversity.png b/public/img/logos/kink/kinkuniversity.png index 709c03b4..6bcbe890 100644 Binary files a/public/img/logos/kink/kinkuniversity.png and b/public/img/logos/kink/kinkuniversity.png differ diff --git a/public/img/logos/kink/meninpain.png b/public/img/logos/kink/meninpain.png index c3812f5e..cb47dc3f 100644 Binary files a/public/img/logos/kink/meninpain.png and b/public/img/logos/kink/meninpain.png differ diff --git a/public/img/logos/kink/menonedge.png b/public/img/logos/kink/menonedge.png index ba775429..df8e3b28 100644 Binary files a/public/img/logos/kink/menonedge.png and b/public/img/logos/kink/menonedge.png differ diff --git a/public/img/logos/kink/nakedkombat.png b/public/img/logos/kink/nakedkombat.png index ecb2283a..2ab49f7b 100644 Binary files a/public/img/logos/kink/nakedkombat.png and b/public/img/logos/kink/nakedkombat.png differ diff --git a/public/img/logos/kink/network.png b/public/img/logos/kink/network.png index d2829778..f3a57d4b 100644 Binary files a/public/img/logos/kink/network.png and b/public/img/logos/kink/network.png differ diff --git a/public/img/logos/kink/publicdisgrace.png b/public/img/logos/kink/publicdisgrace.png index 1abadb0c..04e31e64 100644 Binary files a/public/img/logos/kink/publicdisgrace.png and b/public/img/logos/kink/publicdisgrace.png differ diff --git a/public/img/logos/kink/sadisticrope.png b/public/img/logos/kink/sadisticrope.png index 4a9ec7d9..7d716b32 100644 Binary files a/public/img/logos/kink/sadisticrope.png and b/public/img/logos/kink/sadisticrope.png differ diff --git a/public/img/logos/kink/sexandsubmission.png b/public/img/logos/kink/sexandsubmission.png index 91d09187..d771b9f9 100644 Binary files a/public/img/logos/kink/sexandsubmission.png and b/public/img/logos/kink/sexandsubmission.png differ diff --git a/public/img/logos/kink/strugglingbabes.png b/public/img/logos/kink/strugglingbabes.png index 0181bfb4..1b01d738 100644 Binary files a/public/img/logos/kink/strugglingbabes.png and b/public/img/logos/kink/strugglingbabes.png differ diff --git a/public/img/logos/kink/thetrainingofo.png b/public/img/logos/kink/thetrainingofo.png index c7e0e12b..5513a21d 100644 Binary files a/public/img/logos/kink/thetrainingofo.png and b/public/img/logos/kink/thetrainingofo.png differ diff --git a/public/img/logos/kink/theupperfloor.png b/public/img/logos/kink/theupperfloor.png index 22ff8b54..50a1866b 100644 Binary files a/public/img/logos/kink/theupperfloor.png and b/public/img/logos/kink/theupperfloor.png differ diff --git a/public/img/logos/kink/thirtyminutesoftorment.png b/public/img/logos/kink/thirtyminutesoftorment.png index 6e548941..fd4772a0 100644 Binary files a/public/img/logos/kink/thirtyminutesoftorment.png and b/public/img/logos/kink/thirtyminutesoftorment.png differ diff --git a/public/img/logos/kink/tspussyhunters.png b/public/img/logos/kink/tspussyhunters.png index eb71c7b9..94df021c 100644 Binary files a/public/img/logos/kink/tspussyhunters.png and b/public/img/logos/kink/tspussyhunters.png differ diff --git a/public/img/logos/kink/tsseduction.png b/public/img/logos/kink/tsseduction.png index 2e0da335..3225d485 100644 Binary files a/public/img/logos/kink/tsseduction.png and b/public/img/logos/kink/tsseduction.png differ diff --git a/public/img/logos/kink/ultimatesurrender.png b/public/img/logos/kink/ultimatesurrender.png index 1adfb0ef..2a4f5a8b 100644 Binary files a/public/img/logos/kink/ultimatesurrender.png and b/public/img/logos/kink/ultimatesurrender.png differ diff --git a/public/img/logos/kink/waterbondage.png b/public/img/logos/kink/waterbondage.png index 20910932..73d53ab3 100644 Binary files a/public/img/logos/kink/waterbondage.png and b/public/img/logos/kink/waterbondage.png differ diff --git a/public/img/logos/kink/whippedass.png b/public/img/logos/kink/whippedass.png index 875e9546..0e741512 100644 Binary files a/public/img/logos/kink/whippedass.png and b/public/img/logos/kink/whippedass.png differ diff --git a/public/img/logos/kink/wiredpussy.png b/public/img/logos/kink/wiredpussy.png index cefc3025..d27fc618 100644 Binary files a/public/img/logos/kink/wiredpussy.png and b/public/img/logos/kink/wiredpussy.png differ diff --git a/seeds/02_sites.js b/seeds/02_sites.js index dfc12a56..a4e5900b 100644 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -2169,7 +2169,7 @@ const sites = [ slug: 'boundgangbangs', name: 'Bound Gangbangs', url: 'https://www.kink.com/channel/boundgangbangs', - description: 'Poweless whores tied in bondage and stuffed with a cock in every hole. At BoundGangbangs women get surprise extreme gangbangs, blindfolds, deepthroat blowjobs, sex punishment, bondage, double penetration and interracial sex.', + description: 'Powerless whores tied in bondage and stuffed with a cock in every hole. At BoundGangbangs women get surprise extreme gangbangs, blindfolds, deepthroat blowjobs, sex punishment, bondage, double penetration and interracial sex.', network: 'kink', }, { @@ -2231,6 +2231,14 @@ const sites = [ description: 'Gaping Anal Holes Are Stuffed & Stretched To The Max. Anal Fisting, Enemas & Rimming Has Never Tasted So Good. EverythingButt.com explores the extreme limits of FemDom lesbian anal. Watch asses get destroyed by brutal fistings, huge insertions, double anal & more!', network: 'kink', }, + { + slug: 'filthyfemdom', + name: 'Filthy Femdom', + url: 'https://www.kink.com/channel/filthyfemdom', + description: 'Powerful women dominate your dirty dreams of sweet pain, seductive bondage, and sexual servitude.', + tags: ['femdom'], + network: 'kink', + }, { slug: 'familiestied', name: 'Families Tied', diff --git a/src/media.js b/src/media.js index f4da2465..5fb15259 100644 --- a/src/media.js +++ b/src/media.js @@ -62,11 +62,17 @@ function pickQuality(items) { return item || items[0]; } -async function getEntropy(buffer) { +async function getMeta(buffer) { try { const { entropy } = await sharp(buffer).stats(); + const { width, height, size } = await sharp(buffer).metadata(); - return entropy; + return { + width, + height, + size, + entropy, + }; } catch (error) { logger.warn(`Failed to retrieve image entropy, using 7.5: ${error.message}`); @@ -125,7 +131,7 @@ async function fetchItem(source, index, existingItemsBySource, domain, role, att const mimetype = mime.getType(pathname); const extension = mime.getExtension(mimetype); const hash = getHash(res.body); - const entropy = /image/.test(mimetype) ? await getEntropy(res.body) : null; + const { entropy, size, width, height } = /image/.test(mimetype) ? await getMeta(res.body) : {}; logger.verbose(`Fetched media item from ${source.src || source}`); @@ -135,6 +141,9 @@ async function fetchItem(source, index, existingItemsBySource, domain, role, att extension, hash, entropy, + size, + width, + height, quality: source.quality || null, source: originalSource?.src || originalSource || source.src || source, scraper: source.scraper, @@ -192,10 +201,13 @@ async function saveItems(items, domain, role) { mimetype: item.mimetype, extension: item.extension, hash: item.hash, + size: item.size, + width: item.width, + height: item.height, + quality: item.quality, entropy: item.entropy, scraper: item.scraper, copyright: item.copyright, - quality: item.quality, source: item.source, }; } @@ -207,9 +219,12 @@ async function saveItems(items, domain, role) { mimetype: item.mimetype, extension: item.extension, hash: item.hash, + size: item.size, + width: item.width, + height: item.height, + quality: item.quality, entropy: item.entropy, scraper: item.scraper, - quality: item.quality, copyright: item.copyright, source: item.source, }; @@ -226,6 +241,10 @@ function curateItemEntries(items) { thumbnail: item.thumbpath, mime: item.mimetype, hash: item.hash, + size: item.size, + width: item.width, + height: item.height, + quality: item.quality, entropy: item.entropy, source: item.source, scraper: item.scraper, @@ -317,17 +336,21 @@ function associateTargetMedia(targetId, sources, mediaBySource, domain, role, pr if (!sources) return { [role]: null, [primaryRole]: null }; const mediaIds = sources - .filter(Boolean) .map((source) => { + if (!source) return null; + const mediaItem = Array.isArray(source) ? source.reduce((acc, sourceX) => acc || mediaBySource[sourceX.src || sourceX], null) : mediaBySource[source.src || source]; // return mediaItem && { [`${domain}_id`]: targetId, media_id: mediaItem.id }; - return mediaItem && mediaItem.id; - }); + return mediaItem; + }) + .filter(Boolean) + // .sort((mediaItemA, mediaItemB) => mediaItemB.height - mediaItemA.height) // prefer high res images for primary item + .map(mediaItem => mediaItem.id); - const uniqueMediaIds = Array.from(new Set(mediaIds.filter(Boolean))); + const uniqueMediaIds = Array.from(new Set(mediaIds)); const associations = uniqueMediaIds.map(mediaId => ({ [`${domain}_id`]: targetId, media_id: mediaId })); logger.silly(`Associating ${associations.length} ${role}s to ${domain} ${targetId}`);