-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.yaml
138 lines (120 loc) · 4.15 KB
/
extension.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Copyright 2023 Nick Schaefer
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: storage-generate-thumbnails # Identifier for your extension
version: 0.0.1 # Follow semver versioning
specVersion: v1beta # Version of the Firebase Extensions specification
displayName: Generate Thumbnails
description: >-
Create thumbnails from uploaded videos
tags: [utilities]
icon: icon.png
author:
authorName: Nick Schaefer
url: https://www.nschaefer.com
license: Apache-2.0
sourceUrl: https://github.com/naturalnick/firebase-extension-generate-thumbnails
billingRequired: true
apis:
- apiName: storage-component.googleapis.com
reason: Needed to use Cloud Storage
roles:
- role: storage.objectAdmin
reason: Allows this extension to access videos and add images to Cloud Storage
resources:
- name: generateThumbnail
type: firebaseextensions.v1beta.function
description: >-
Storage-upload triggered function that responds by creating a thumbnail if the file is a video
properties:
eventTrigger:
eventType: google.storage.object.finalize
resource: projects/_/buckets/${param:YOUR_BUCKET}
runtime: "nodejs18"
availableMemoryMb: 1024
params:
- param: YOUR_BUCKET
label: Storage Bucket
description: >-
Your cloud storage bucket
default: ${STORAGE_BUCKET}
type: selectResource
resourceType: storage.googleapis.com/Bucket
required: true
immutable: true
- param: VIDEO_PATH
label: Video Path
description: >-
The folder that's monitored for new videos. Enter '~' for all directories. Enter '/' for root directory.
type: string
default: /
required: true
- param: THUMBNAIL_PATH
label: Thumbnail Path
description: >-
Path to store thumbnails in the bucket. Enter '~' for same directory as the video. Enter '/' for root directory.
type: string
default: /
required: true
- param: THUMBNAIL_PREFIX
label: Thumbnail Prefix
description: >-
String to append to the front of the image name
type: string
required: false
default: thumbnail_
validationRegex: "^[a-zA-Z0-9_-]+$"
validationErrorMessage: Can only contain numbers, letters, underscores and hyphens
- param: THUMBNAIL_SUFFIX
label: Thumbnail Suffix
description: >-
String to append to the end of the image name
type: string
required: false
validationRegex: "^[a-zA-Z0-9_-]+$"
validationErrorMessage: Can only contain numbers, letters, underscores and hyphens
- param: IMAGE_TYPE
label: Thumbnail File Format
description: >-
Image file format to save the thumbnails as
type: select
default: png
required: true
options:
- label: png
value: png
- label: jpeg
value: jpeg
- param: ASPECT_RATIO
label: Aspect ratio
description: >-
Aspect ratio to capture the thumbnail. Should match or be as close to video aspect ratio as possible. Otherwise the thumbnail make be distorted.
default: 16:9
type: select
options:
- label: 16:9 (widescreen/hd)
value: "16:9"
- label: 4:3 (fullscreen/standard)
value: "4:3"
- label: 1:1 (square)
value: "1:1"
- label: 9:16 (mobile/social media)
value: "9:16"
- label: 21:9 (ultra-wide)
value: "21:9"
- param: TIMESTAMP
label: Timestamp
description: >-
Number of seconds into video to generate timestamp
type: string
default: 1
required: true
validationRegex: "^[0-9]+$"
validationErrorMessage: Must be a whole, positive number