From c2bd7a6fcff652b149b24a642314c88e56a07f48 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 12 Mar 2021 17:04:49 +0100 Subject: Add regenrate thumbnails scripts --- scripts/regenerate-thumbnails.ts | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 scripts/regenerate-thumbnails.ts (limited to 'scripts/regenerate-thumbnails.ts') diff --git a/scripts/regenerate-thumbnails.ts b/scripts/regenerate-thumbnails.ts new file mode 100644 index 000000000..b0071efe0 --- /dev/null +++ b/scripts/regenerate-thumbnails.ts @@ -0,0 +1,54 @@ +import { registerTSPaths } from '../server/helpers/register-ts-paths' +registerTSPaths() + +import * as Bluebird from 'bluebird' +import * as program from 'commander' +import { pathExists } from 'fs-extra' +import { processImage } from '@server/helpers/image-utils' +import { THUMBNAILS_SIZE } from '@server/initializers/constants' +import { VideoModel } from '@server/models/video/video' +import { MVideo } from '@server/types/models' +import { initDatabaseModels } from '@server/initializers/database' + +program + .description('Regenerate local thumbnails using preview files') + .parse(process.argv) + +run() + .then(() => process.exit(0)) + .catch(err => console.error(err)) + +async function run () { + await initDatabaseModels(true) + + const videos = await VideoModel.listLocal() + + await Bluebird.map(videos, v => { + return processVideo(v) + .catch(err => console.error('Cannot process video %s.', v.url, err)) + }, { concurrency: 20 }) +} + +async function processVideo (videoArg: MVideo) { + const video = await VideoModel.loadWithFiles(videoArg.id) + + const thumbnail = video.getMiniature() + const preview = video.getPreview() + + const thumbnailPath = thumbnail.getPath() + const previewPath = preview.getPath() + + if (!await pathExists(thumbnailPath)) { + throw new Error(`Thumbnail ${thumbnailPath} does not exist on disk`) + } + + if (!await pathExists(previewPath)) { + throw new Error(`Preview ${previewPath} does not exist on disk`) + } + + const size = { + width: THUMBNAILS_SIZE.width, + height: THUMBNAILS_SIZE.height + } + await processImage(previewPath, thumbnailPath, size, true) +} -- cgit v1.2.3