12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import Bluebird from 'bluebird'
- import { program } from 'commander'
- import { pathExists, remove } from 'fs-extra/esm'
- import { generateImageFilename, processImage } from '@server/helpers/image-utils.js'
- import { THUMBNAILS_SIZE } from '@server/initializers/constants.js'
- import { initDatabaseModels } from '@server/initializers/database.js'
- import { VideoModel } from '@server/models/video/video.js'
- 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 ids = await VideoModel.listLocalIds()
- await Bluebird.map(ids, id => {
- return processVideo(id)
- .catch(err => console.error('Cannot process video %d.', id, err))
- }, { concurrency: 20 })
- }
- async function processVideo (id: number) {
- const video = await VideoModel.loadWithFiles(id)
- console.log('Processing video %s.', video.name)
- const thumbnail = video.getMiniature()
- const preview = video.getPreview()
- const previewPath = preview.getPath()
- if (!await pathExists(previewPath)) {
- throw new Error(`Preview ${previewPath} does not exist on disk`)
- }
- const size = {
- width: THUMBNAILS_SIZE.width,
- height: THUMBNAILS_SIZE.height
- }
- const oldPath = thumbnail.getPath()
- // Update thumbnail
- thumbnail.filename = generateImageFilename()
- thumbnail.width = size.width
- thumbnail.height = size.height
- const thumbnailPath = thumbnail.getPath()
- await processImage({ path: previewPath, destination: thumbnailPath, newSize: size, keepOriginal: true })
- // Save new attributes
- await thumbnail.save()
- // Remove old thumbnail
- await remove(oldPath)
- // Don't federate, remote instances will refresh the thumbnails after a while
- }
|