diff --git a/server/core/initializers/constants.ts b/server/core/initializers/constants.ts index be84df974..6b5699130 100644 --- a/server/core/initializers/constants.ts +++ b/server/core/initializers/constants.ts @@ -941,7 +941,7 @@ export const ACTOR_IMAGES_SIZE: { [key in ActorImageType_Type]: { width: number, export const STORYBOARD = { SPRITE_MAX_SIZE: 192, - SPRITES_MAX_EDGE_COUNT: 10 + SPRITES_MAX_EDGE_COUNT: 11 } export const EMBED_SIZE = { diff --git a/server/core/lib/job-queue/handlers/generate-storyboard.ts b/server/core/lib/job-queue/handlers/generate-storyboard.ts index cfbfe24c4..4c0b8a985 100644 --- a/server/core/lib/job-queue/handlers/generate-storyboard.ts +++ b/server/core/lib/job-queue/handlers/generate-storyboard.ts @@ -73,7 +73,7 @@ async function processGenerateStoryboard (job: Job): Promise { logger.debug( 'Generating storyboard from video of %s to %s', video.uuid, destination, - { ...lTags, spritesCount, spriteDuration, videoDuration: video.duration, spriteHeight, spriteWidth } + { ...lTags, totalSprites, spritesCount, spriteDuration, videoDuration: video.duration, spriteHeight, spriteWidth } ) await ffmpeg.generateStoryboardFromVideo({ @@ -148,7 +148,7 @@ function buildSpritesMetadata (options: { // We can generate a single line so we don't need a prime number if (totalSprites <= STORYBOARD.SPRITES_MAX_EDGE_COUNT) return { spriteDuration, totalSprites } - return { spriteDuration, totalSprites: findNearestGridPrime(totalSprites, STORYBOARD.SPRITES_MAX_EDGE_COUNT) } + return { spriteDuration, totalSprites } } function findGridSize (options: { @@ -159,27 +159,9 @@ function findGridSize (options: { for (let i = 1; i <= maxEdgeCount; i++) { for (let j = i; j <= maxEdgeCount; j++) { - if (toFind === i * j) return { width: j, height: i } + if (toFind <= i * j) return { width: j, height: i } } } throw new Error(`Could not find grid size (to find: ${toFind}, max edge count: ${maxEdgeCount}`) } - -function findNearestGridPrime (value: number, maxMultiplier: number) { - for (let i = value; i--; i > 0) { - if (!isPrimeWithin(i, maxMultiplier)) return i - } - - throw new Error('Could not find prime number below ' + value) -} - -function isPrimeWithin (value: number, maxMultiplier: number) { - if (value < 2) return false - - for (let i = 2, end = Math.min(Math.sqrt(value), maxMultiplier); i <= end; i++) { - if (value % i === 0 && value / i <= maxMultiplier) return false - } - - return true -}