diff options
author | Chocobozzz <me@florianbigard.com> | 2023-06-02 15:18:39 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2023-06-29 10:16:57 +0200 |
commit | 9c5cc501335b9f7dba4aa492b8fda68d4881d28d (patch) | |
tree | f4ef0289b9c4d3bd5c8d49514946ce6eaab6d341 /scripts/create-generate-storyboard-job.ts | |
parent | d8f39b126d9fe4bec1c12fb213548cc6edc87867 (diff) | |
download | PeerTube-9c5cc501335b9f7dba4aa492b8fda68d4881d28d.tar.gz PeerTube-9c5cc501335b9f7dba4aa492b8fda68d4881d28d.tar.zst PeerTube-9c5cc501335b9f7dba4aa492b8fda68d4881d28d.zip |
Add script to generate storyboards
Diffstat (limited to 'scripts/create-generate-storyboard-job.ts')
-rw-r--r-- | scripts/create-generate-storyboard-job.ts | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/scripts/create-generate-storyboard-job.ts b/scripts/create-generate-storyboard-job.ts new file mode 100644 index 000000000..47c08edac --- /dev/null +++ b/scripts/create-generate-storyboard-job.ts | |||
@@ -0,0 +1,85 @@ | |||
1 | import { program } from 'commander' | ||
2 | import { toCompleteUUID } from '@server/helpers/custom-validators/misc' | ||
3 | import { initDatabaseModels } from '@server/initializers/database' | ||
4 | import { JobQueue } from '@server/lib/job-queue' | ||
5 | import { VideoModel } from '@server/models/video/video' | ||
6 | import { StoryboardModel } from '@server/models/video/storyboard' | ||
7 | |||
8 | program | ||
9 | .description('Generate videos storyboard') | ||
10 | .option('-v, --video [videoUUID]', 'Generate the storyboard of a specific video') | ||
11 | .option('-a, --all-videos', 'Generate missing storyboards of local videos') | ||
12 | .parse(process.argv) | ||
13 | |||
14 | const options = program.opts() | ||
15 | |||
16 | if (!options['video'] && !options['allVideos']) { | ||
17 | console.error('You need to choose videos for storyboard generation.') | ||
18 | process.exit(-1) | ||
19 | } | ||
20 | |||
21 | run() | ||
22 | .then(() => process.exit(0)) | ||
23 | .catch(err => { | ||
24 | console.error(err) | ||
25 | process.exit(-1) | ||
26 | }) | ||
27 | |||
28 | async function run () { | ||
29 | await initDatabaseModels(true) | ||
30 | |||
31 | JobQueue.Instance.init() | ||
32 | |||
33 | let ids: number[] = [] | ||
34 | |||
35 | if (options['video']) { | ||
36 | const video = await VideoModel.load(toCompleteUUID(options['video'])) | ||
37 | |||
38 | if (!video) { | ||
39 | console.error('Unknown video ' + options['video']) | ||
40 | process.exit(-1) | ||
41 | } | ||
42 | |||
43 | if (video.remote === true) { | ||
44 | console.error('Cannot process a remote video') | ||
45 | process.exit(-1) | ||
46 | } | ||
47 | |||
48 | if (video.isLive) { | ||
49 | console.error('Cannot process live video') | ||
50 | process.exit(-1) | ||
51 | } | ||
52 | |||
53 | ids.push(video.id) | ||
54 | } else { | ||
55 | ids = await listLocalMissingStoryboards() | ||
56 | } | ||
57 | |||
58 | for (const id of ids) { | ||
59 | const videoFull = await VideoModel.load(id) | ||
60 | |||
61 | if (videoFull.isLive) continue | ||
62 | |||
63 | await JobQueue.Instance.createJob({ | ||
64 | type: 'generate-video-storyboard', | ||
65 | payload: { | ||
66 | videoUUID: videoFull.uuid, | ||
67 | federate: true | ||
68 | } | ||
69 | }) | ||
70 | |||
71 | console.log(`Created generate-storyboard job for ${videoFull.name}.`) | ||
72 | } | ||
73 | } | ||
74 | |||
75 | async function listLocalMissingStoryboards () { | ||
76 | const ids = await VideoModel.listLocalIds() | ||
77 | const results: number[] = [] | ||
78 | |||
79 | for (const id of ids) { | ||
80 | const storyboard = await StoryboardModel.loadByVideo(id) | ||
81 | if (!storyboard) results.push(id) | ||
82 | } | ||
83 | |||
84 | return results | ||
85 | } | ||