Added Men network and Icon Male to MindGeek. Added entropy filter to media module to help filter out generic avatars. Added Pure Taboo. Various logo updates.

This commit is contained in:
2020-01-30 01:14:31 +01:00
parent 04e9d29010
commit ff61094b69
124 changed files with 360 additions and 16 deletions

View File

@@ -36,6 +36,12 @@ function pluckPhotos(photos, specifiedLimit) {
return Array.from(new Set(plucked)).map(photoIndex => photos[photoIndex - 1]); // remove duplicates, may happen when photo total and photo limit are close
}
async function getEntropy(buffer) {
const { entropy } = await sharp(buffer).stats();
return entropy;
}
async function createThumbnail(buffer) {
try {
const thumbnail = sharp(buffer)
@@ -108,19 +114,20 @@ async function fetchPhoto(photoUrl, index, label, attempt = 1) {
try {
const { pathname } = new URL(photoUrl);
const mimetype = mime.getType(pathname);
const res = await bhttp.get(photoUrl);
if (res.statusCode === 200) {
const mimetype = mime.getType(pathname);
const extension = mime.getExtension(mimetype);
const hash = getHash(res.body);
const entropy = await getEntropy(res.body);
return {
photo: res.body,
mimetype,
extension,
hash,
entropy,
source: photoUrl,
};
}
@@ -181,6 +188,7 @@ async function storePhotos(photos, {
targetId,
subpath,
primaryRole, // role to assign to first photo if not already in database, used mainly for avatars
entropy = 2.5, // filter out fallback avatars and other generic clipart
}, label) {
if (!photos || photos.length === 0) {
logger.info(`No ${role}s available for ${label}`);
@@ -192,7 +200,7 @@ async function storePhotos(photos, {
const metaFiles = await Promise.map(sourceOriginals, async (photoUrl, index) => fetchPhoto(photoUrl, index, label), {
concurrency: 10,
}).filter(photo => photo);
}).filter(photo => photo && photo.entropy > entropy);
const metaFilesByHash = metaFiles.reduce((acc, photo) => ({ ...acc, [photo.hash]: photo }), {}); // pre-filter hash duplicates within set; may occur through fallbacks
const [hashDuplicates, hashOriginals] = await findDuplicates(Object.values(metaFilesByHash), 'hash', 'hash', label);