upd: add config option to enable builtin video thumbnail generator

This commit is contained in:
ShittyKopper 2024-01-04 20:52:50 +03:00
parent a3c302e756
commit 634259d600
5 changed files with 34 additions and 17 deletions

View File

@ -198,6 +198,11 @@ proxyRemoteFiles: true
# https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4 # https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4
#videoThumbnailGenerator: https://example.com #videoThumbnailGenerator: https://example.com
# Enables the built-in thumbnail generator for remote videos. (default: false)
# Only useful if "Cache remote files" is disabled, and "videoThumbnailGenerator" is unset.
# Without it, remote video files that are not cached will not have any thumbnails.
#enableBuiltinVideoThumbnailGenerator: false
# Sign to ActivityPub GET request (default: true) # Sign to ActivityPub GET request (default: true)
signToActivityPubGet: true signToActivityPubGet: true
# check that inbound ActivityPub GET requests are signed ("authorized fetch") # check that inbound ActivityPub GET requests are signed ("authorized fetch")

View File

@ -213,6 +213,11 @@ proxyRemoteFiles: true
# https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4 # https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4
#videoThumbnailGenerator: https://example.com #videoThumbnailGenerator: https://example.com
# Enables the built-in thumbnail generator for remote videos. (default: false)
# Only useful if "Cache remote files" is disabled, and "videoThumbnailGenerator" is unset.
# Without it, remote video files that are not cached will not have any thumbnails.
#enableBuiltinVideoThumbnailGenerator: false
# Sign to ActivityPub GET request (default: true) # Sign to ActivityPub GET request (default: true)
signToActivityPubGet: true signToActivityPubGet: true
# check that inbound ActivityPub GET requests are signed ("authorized fetch") # check that inbound ActivityPub GET requests are signed ("authorized fetch")

View File

@ -86,6 +86,7 @@ type Source = {
mediaProxy?: string; mediaProxy?: string;
proxyRemoteFiles?: boolean; proxyRemoteFiles?: boolean;
videoThumbnailGenerator?: string; videoThumbnailGenerator?: string;
enableBuiltinVideoThumbnailGenerator?: boolean;
customMOTD?: string[]; customMOTD?: string[];
@ -167,6 +168,7 @@ export type Config = {
mediaProxy: string; mediaProxy: string;
externalMediaProxyEnabled: boolean; externalMediaProxyEnabled: boolean;
videoThumbnailGenerator: string | null; videoThumbnailGenerator: string | null;
enableBuiltinVideoThumbnailGenerator: boolean;
redis: RedisOptions & RedisOptionsSource; redis: RedisOptions & RedisOptionsSource;
redisForPubsub: RedisOptions & RedisOptionsSource; redisForPubsub: RedisOptions & RedisOptionsSource;
redisForJobQueue: RedisOptions & RedisOptionsSource; redisForJobQueue: RedisOptions & RedisOptionsSource;
@ -272,6 +274,7 @@ export function loadConfig(): Config {
videoThumbnailGenerator: config.videoThumbnailGenerator ? videoThumbnailGenerator: config.videoThumbnailGenerator ?
config.videoThumbnailGenerator.endsWith('/') ? config.videoThumbnailGenerator.substring(0, config.videoThumbnailGenerator.length - 1) : config.videoThumbnailGenerator config.videoThumbnailGenerator.endsWith('/') ? config.videoThumbnailGenerator.substring(0, config.videoThumbnailGenerator.length - 1) : config.videoThumbnailGenerator
: null, : null,
enableBuiltinVideoThumbnailGenerator: config.enableBuiltinVideoThumbnailGenerator ?? false,
userAgent: `Misskey/${version} (${config.url})`, userAgent: `Misskey/${version} (${config.url})`,
clientEntry: clientManifest['src/_boot_.ts'], clientEntry: clientManifest['src/_boot_.ts'],
clientManifestExists: clientManifestExists, clientManifestExists: clientManifestExists,

View File

@ -51,14 +51,16 @@ export class VideoProcessingService {
@bindThis @bindThis
public getExternalVideoThumbnailUrl(url: string): string | null { public getExternalVideoThumbnailUrl(url: string): string | null {
if (this.config.videoThumbnailGenerator == null) { if (this.config.videoThumbnailGenerator == null) {
if (this.config.enableBuiltinVideoThumbnailGenerator) {
return appendQuery( return appendQuery(
`${this.config.url}/proxy/thumbnail.webp`, `${this.config.url}/proxy/thumbnail.webp`,
query({ query({ url }),
url,
}),
); );
} }
return null;
}
return appendQuery( return appendQuery(
`${this.config.videoThumbnailGenerator}/thumbnail.webp`, `${this.config.videoThumbnailGenerator}/thumbnail.webp`,
query({ query({

View File

@ -83,12 +83,14 @@ export class FileServerService {
.catch(err => this.errorHandler(request, reply, err)); .catch(err => this.errorHandler(request, reply, err));
}); });
if (this.config.enableBuiltinVideoThumbnailGenerator) {
fastify.get<{ fastify.get<{
Querystring: { url: string; }; Querystring: { url: string; };
}>('/proxy/thumbnail.webp', async (request, reply) => { }>('/proxy/thumbnail.webp', async (request, reply) => {
return await this.videoThumbnailHandler(request, reply) return await this.videoThumbnailHandler(request, reply)
.catch(err => this.errorHandler(request, reply, err)); .catch(err => this.errorHandler(request, reply, err));
}); });
}
fastify.get<{ fastify.get<{
Params: { url: string; }; Params: { url: string; };
@ -395,7 +397,7 @@ export class FileServerService {
if (file === '404') { if (file === '404') {
reply.code(404); reply.code(404);
reply.header('Cache-Control', 'max-age=86400'); reply.header('Cache-Control', 'max-age=86400');
return reply.sendFile('/dummy.png', assets); // TODO: return webp return reply.sendFile('/dummy.png', assets);
} }
if (file === '204') { if (file === '204') {