From ac37f13452139a211b614c3865bf35efeffbcc2b Mon Sep 17 00:00:00 2001 From: diced Date: Wed, 27 Aug 2025 21:18:46 -0700 Subject: [PATCH] feat: thumbnails output format (jpg, png, webp) --- .../migration.sql | 2 + prisma/schema.prisma | 1 + .../pages/serverSettings/parts/Features.tsx | 19 +++++++- src/lib/config/read/db.ts | 1 + src/lib/config/read/env.ts | 4 ++ src/lib/config/read/index.ts | 2 + src/lib/config/validate.ts | 1 + src/offload/thumbnails.ts | 45 +++++++++++-------- .../routes/api/server/settings/index.ts | 1 + 9 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 prisma/migrations/20250828035734_features_thumbnails_format/migration.sql diff --git a/prisma/migrations/20250828035734_features_thumbnails_format/migration.sql b/prisma/migrations/20250828035734_features_thumbnails_format/migration.sql new file mode 100644 index 00000000..0ab8367f --- /dev/null +++ b/prisma/migrations/20250828035734_features_thumbnails_format/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "public"."Zipline" ADD COLUMN "featuresThumbnailsFormat" TEXT NOT NULL DEFAULT 'jpg'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2e7c1db3..d2e2cbb4 100755 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -56,6 +56,7 @@ model Zipline { featuresThumbnailsEnabled Boolean @default(true) featuresThumbnailsNumberThreads Int @default(4) + featuresThumbnailsFormat String @default("jpg") featuresMetricsEnabled Boolean @default(true) featuresMetricsAdminOnly Boolean @default(false) diff --git a/src/components/pages/serverSettings/parts/Features.tsx b/src/components/pages/serverSettings/parts/Features.tsx index 6824a615..6522421e 100644 --- a/src/components/pages/serverSettings/parts/Features.tsx +++ b/src/components/pages/serverSettings/parts/Features.tsx @@ -5,6 +5,7 @@ import { LoadingOverlay, NumberInput, Paper, + Select, SimpleGrid, Switch, TextInput, @@ -33,6 +34,7 @@ export default function Features({ featuresDeleteOnMaxViews: true, featuresThumbnailsEnabled: true, featuresThumbnailsNumberThreads: 4, + featuresThumbnailsFormat: 'jpg', featuresMetricsEnabled: true, featuresMetricsAdminOnly: false, featuresMetricsShowUserSpecific: true, @@ -58,6 +60,7 @@ export default function Features({ featuresDeleteOnMaxViews: data.settings.featuresDeleteOnMaxViews ?? true, featuresThumbnailsEnabled: data.settings.featuresThumbnailsEnabled ?? true, featuresThumbnailsNumberThreads: data.settings.featuresThumbnailsNumberThreads ?? 4, + featuresThumbnailsFormat: data.settings.featuresThumbnailsFormat ?? 'jpg', featuresMetricsEnabled: data.settings.featuresMetricsEnabled ?? true, featuresMetricsAdminOnly: data.settings.featuresMetricsAdminOnly ?? false, featuresMetricsShowUserSpecific: data.settings.featuresMetricsShowUserSpecific ?? true, @@ -82,7 +85,7 @@ export default function Features({ @@ -143,6 +146,20 @@ export default function Features({ {...form.getInputProps('featuresThumbnailsNumberThreads')} /> +