@remotion/cloudrun 4.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.turbo/turbo-build.log +13 -0
  2. package/LICENSE.md +41 -0
  3. package/dist/admin/bundle-installer.d.ts +1 -0
  4. package/dist/admin/bundle-installer.js +32 -0
  5. package/dist/admin/bundle-renderLogic.d.ts +1 -0
  6. package/dist/admin/bundle-renderLogic.js +39 -0
  7. package/dist/api/check-if-service-exists.d.ts +18 -0
  8. package/dist/api/check-if-service-exists.js +46 -0
  9. package/dist/api/create-bucket.d.ts +13 -0
  10. package/dist/api/create-bucket.js +18 -0
  11. package/dist/api/delete-service.d.ts +12 -0
  12. package/dist/api/delete-service.js +19 -0
  13. package/dist/api/delete-site.d.ts +13 -0
  14. package/dist/api/delete-site.js +30 -0
  15. package/dist/api/deploy-service.d.ts +28 -0
  16. package/dist/api/deploy-service.js +90 -0
  17. package/dist/api/deploy-site.d.ts +35 -0
  18. package/dist/api/deploy-site.js +78 -0
  19. package/dist/api/download-file.d.ts +12 -0
  20. package/dist/api/download-file.js +29 -0
  21. package/dist/api/get-buckets.d.ts +10 -0
  22. package/dist/api/get-buckets.js +23 -0
  23. package/dist/api/get-or-create-bucket.d.ts +17 -0
  24. package/dist/api/get-or-create-bucket.js +42 -0
  25. package/dist/api/get-regions.d.ts +7 -0
  26. package/dist/api/get-regions.js +13 -0
  27. package/dist/api/get-service-info.d.ts +23 -0
  28. package/dist/api/get-service-info.js +34 -0
  29. package/dist/api/get-services.d.ts +14 -0
  30. package/dist/api/get-services.js +49 -0
  31. package/dist/api/get-sites.d.ts +23 -0
  32. package/dist/api/get-sites.js +49 -0
  33. package/dist/api/helpers/IService.d.ts +2 -0
  34. package/dist/api/helpers/IService.js +2 -0
  35. package/dist/api/helpers/construct-service-deploy-request.d.ts +32 -0
  36. package/dist/api/helpers/construct-service-deploy-request.js +36 -0
  37. package/dist/api/helpers/extract-mem-from-url.d.ts +1 -0
  38. package/dist/api/helpers/extract-mem-from-url.js +9 -0
  39. package/dist/api/helpers/extract-time-from-url.d.ts +1 -0
  40. package/dist/api/helpers/extract-time-from-url.js +13 -0
  41. package/dist/api/helpers/get-auth-client-for-url.d.ts +1 -0
  42. package/dist/api/helpers/get-auth-client-for-url.js +15 -0
  43. package/dist/api/helpers/get-cloud-logging-client.d.ts +1 -0
  44. package/dist/api/helpers/get-cloud-logging-client.js +15 -0
  45. package/dist/api/helpers/get-cloud-run-client.d.ts +2 -0
  46. package/dist/api/helpers/get-cloud-run-client.js +15 -0
  47. package/dist/api/helpers/get-cloud-storage-client.d.ts +2 -0
  48. package/dist/api/helpers/get-cloud-storage-client.js +14 -0
  49. package/dist/api/helpers/get-cloudrun-endpoint.d.ts +6 -0
  50. package/dist/api/helpers/get-cloudrun-endpoint.js +28 -0
  51. package/dist/api/helpers/get-resource-manager-client.d.ts +2 -0
  52. package/dist/api/helpers/get-resource-manager-client.js +15 -0
  53. package/dist/api/helpers/parse-service-name.d.ts +8 -0
  54. package/dist/api/helpers/parse-service-name.js +24 -0
  55. package/dist/api/iam-validation/testPermissions.d.ts +20 -0
  56. package/dist/api/iam-validation/testPermissions.js +48 -0
  57. package/dist/api/render-media-on-cloudrun.d.ts +78 -0
  58. package/dist/api/render-media-on-cloudrun.js +144 -0
  59. package/dist/api/render-still-on-cloudrun.d.ts +49 -0
  60. package/dist/api/render-still-on-cloudrun.js +76 -0
  61. package/dist/api/speculate-service-name.d.ts +13 -0
  62. package/dist/api/speculate-service-name.js +20 -0
  63. package/dist/api/test/service-names.test.d.ts +1 -0
  64. package/dist/api/test/service-names.test.js +28 -0
  65. package/dist/api/upload-dir.d.ts +18 -0
  66. package/dist/api/upload-dir.js +81 -0
  67. package/dist/cli/args.d.ts +19 -0
  68. package/dist/cli/args.js +11 -0
  69. package/dist/cli/commands/permissions.d.ts +2 -0
  70. package/dist/cli/commands/permissions.js +23 -0
  71. package/dist/cli/commands/regions.d.ts +2 -0
  72. package/dist/cli/commands/regions.js +10 -0
  73. package/dist/cli/commands/render/helpers/renderArgsCheck.d.ts +9 -0
  74. package/dist/cli/commands/render/helpers/renderArgsCheck.js +75 -0
  75. package/dist/cli/commands/render/index.d.ts +2 -0
  76. package/dist/cli/commands/render/index.js +227 -0
  77. package/dist/cli/commands/render/renderMedia.d.ts +2 -0
  78. package/dist/cli/commands/render/renderMedia.js +156 -0
  79. package/dist/cli/commands/render/renderStill.d.ts +2 -0
  80. package/dist/cli/commands/render/renderStill.js +123 -0
  81. package/dist/cli/commands/services/deploy.d.ts +2 -0
  82. package/dist/cli/commands/services/deploy.js +129 -0
  83. package/dist/cli/commands/services/index.d.ts +5 -0
  84. package/dist/cli/commands/services/index.js +64 -0
  85. package/dist/cli/commands/services/ls.d.ts +2 -0
  86. package/dist/cli/commands/services/ls.js +40 -0
  87. package/dist/cli/commands/services/rm.d.ts +2 -0
  88. package/dist/cli/commands/services/rm.js +63 -0
  89. package/dist/cli/commands/services/rmall.d.ts +2 -0
  90. package/dist/cli/commands/services/rmall.js +52 -0
  91. package/dist/cli/commands/sites/create.d.ts +2 -0
  92. package/dist/cli/commands/sites/create.js +138 -0
  93. package/dist/cli/commands/sites/index.d.ts +4 -0
  94. package/dist/cli/commands/sites/index.js +60 -0
  95. package/dist/cli/commands/sites/ls.d.ts +2 -0
  96. package/dist/cli/commands/sites/ls.js +40 -0
  97. package/dist/cli/commands/sites/rm.d.ts +2 -0
  98. package/dist/cli/commands/sites/rm.js +59 -0
  99. package/dist/cli/commands/sites/rmall.d.ts +2 -0
  100. package/dist/cli/commands/sites/rmall.js +38 -0
  101. package/dist/cli/commands/still.d.ts +2 -0
  102. package/dist/cli/commands/still.js +129 -0
  103. package/dist/cli/get-gcp-region.d.ts +2 -0
  104. package/dist/cli/get-gcp-region.js +19 -0
  105. package/dist/cli/help.d.ts +1 -0
  106. package/dist/cli/help.js +38 -0
  107. package/dist/cli/helpers/confirm.d.ts +4 -0
  108. package/dist/cli/helpers/confirm.js +12 -0
  109. package/dist/cli/helpers/date-string.d.ts +1 -0
  110. package/dist/cli/helpers/date-string.js +9 -0
  111. package/dist/cli/helpers/progress-bar.d.ts +23 -0
  112. package/dist/cli/helpers/progress-bar.js +81 -0
  113. package/dist/cli/helpers/quit.d.ts +1 -0
  114. package/dist/cli/helpers/quit.js +7 -0
  115. package/dist/cli/helpers/yes-or-no.d.ts +4 -0
  116. package/dist/cli/helpers/yes-or-no.js +44 -0
  117. package/dist/cli/index.d.ts +1 -0
  118. package/dist/cli/index.js +56 -0
  119. package/dist/cli/log.d.ts +26 -0
  120. package/dist/cli/log.js +5 -0
  121. package/dist/defaults.d.ts +1 -0
  122. package/dist/defaults.js +17 -0
  123. package/dist/functions/helpers/get-composition-from-body.d.ts +2 -0
  124. package/dist/functions/helpers/get-composition-from-body.js +27 -0
  125. package/dist/functions/helpers/io.d.ts +11 -0
  126. package/dist/functions/helpers/io.js +17 -0
  127. package/dist/functions/helpers/payloads.d.ts +300 -0
  128. package/dist/functions/helpers/payloads.js +104 -0
  129. package/dist/functions/index.d.ts +3 -0
  130. package/dist/functions/index.js +39 -0
  131. package/dist/functions/render-media-single-thread.d.ts +3 -0
  132. package/dist/functions/render-media-single-thread.js +103 -0
  133. package/dist/functions/render-still-single-thread.d.ts +3 -0
  134. package/dist/functions/render-still-single-thread.js +82 -0
  135. package/dist/index.d.ts +20 -0
  136. package/dist/index.js +31 -0
  137. package/dist/internals.d.ts +3 -0
  138. package/dist/internals.js +7 -0
  139. package/dist/pricing/gcp-regions.d.ts +2 -0
  140. package/dist/pricing/gcp-regions.js +40 -0
  141. package/dist/regions.d.ts +2 -0
  142. package/dist/regions.js +5 -0
  143. package/dist/shared/bundle-site.d.ts +2 -0
  144. package/dist/shared/bundle-site.js +5 -0
  145. package/dist/shared/constants.d.ts +13 -0
  146. package/dist/shared/constants.js +18 -0
  147. package/dist/shared/convert-to-serve-url.d.ts +4 -0
  148. package/dist/shared/convert-to-serve-url.js +14 -0
  149. package/dist/shared/docs-url.d.ts +1 -0
  150. package/dist/shared/docs-url.js +4 -0
  151. package/dist/shared/generate-service-name.d.ts +5 -0
  152. package/dist/shared/generate-service-name.js +20 -0
  153. package/dist/shared/get-etag.d.ts +1 -0
  154. package/dist/shared/get-etag.js +24 -0
  155. package/dist/shared/get-storage-operations.d.ts +10 -0
  156. package/dist/shared/get-storage-operations.js +36 -0
  157. package/dist/shared/make-storage-key.d.ts +1 -0
  158. package/dist/shared/make-storage-key.js +11 -0
  159. package/dist/shared/make-storage-url.d.ts +4 -0
  160. package/dist/shared/make-storage-url.js +7 -0
  161. package/dist/shared/random-hash.d.ts +3 -0
  162. package/dist/shared/random-hash.js +14 -0
  163. package/dist/shared/read-dir.d.ts +9 -0
  164. package/dist/shared/read-dir.js +57 -0
  165. package/dist/shared/sa-permissions.json +64 -0
  166. package/dist/shared/service-version-string.d.ts +1 -0
  167. package/dist/shared/service-version-string.js +8 -0
  168. package/dist/shared/validate-bucketname.d.ts +8 -0
  169. package/dist/shared/validate-bucketname.js +35 -0
  170. package/dist/shared/validate-cloudrun-url.d.ts +1 -0
  171. package/dist/shared/validate-cloudrun-url.js +10 -0
  172. package/dist/shared/validate-gcp-codec.d.ts +4 -0
  173. package/dist/shared/validate-gcp-codec.js +29 -0
  174. package/dist/shared/validate-gcp-region.d.ts +2 -0
  175. package/dist/shared/validate-gcp-region.js +10 -0
  176. package/dist/shared/validate-image-remotion-version.d.ts +1 -0
  177. package/dist/shared/validate-image-remotion-version.js +26 -0
  178. package/dist/shared/validate-privacy.d.ts +2 -0
  179. package/dist/shared/validate-privacy.js +12 -0
  180. package/dist/shared/validate-project-id.d.ts +1 -0
  181. package/dist/shared/validate-project-id.js +17 -0
  182. package/dist/shared/validate-region.d.ts +1 -0
  183. package/dist/shared/validate-region.js +15 -0
  184. package/dist/shared/validate-retries.d.ts +1 -0
  185. package/dist/shared/validate-retries.js +21 -0
  186. package/dist/shared/validate-serveurl.d.ts +1 -0
  187. package/dist/shared/validate-serveurl.js +30 -0
  188. package/dist/shared/validate-service-name.d.ts +1 -0
  189. package/dist/shared/validate-service-name.js +9 -0
  190. package/dist/shared/validate-site-name.d.ts +1 -0
  191. package/dist/shared/validate-site-name.js +17 -0
  192. package/package.json +56 -0
  193. package/readme.md +3 -0
@@ -0,0 +1,11 @@
1
+ import type { File } from '@google-cloud/storage';
2
+ export type CloudrunLSInput = {
3
+ bucketName: string;
4
+ prefix: string;
5
+ };
6
+ export type CloudrunLsReturnType = Promise<File[]>;
7
+ export declare const cloudrunLs: ({ bucketName, prefix, }: CloudrunLSInput) => CloudrunLsReturnType;
8
+ export declare const cloudrunDeleteFile: ({ bucketName, key, }: {
9
+ bucketName: string;
10
+ key: string;
11
+ }) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloudrunDeleteFile = exports.cloudrunLs = void 0;
4
+ const get_cloud_storage_client_1 = require("../../api/helpers/get-cloud-storage-client");
5
+ const cloudrunLs = async ({ bucketName, prefix, }) => {
6
+ const cloudStorageClient = (0, get_cloud_storage_client_1.getCloudStorageClient)();
7
+ const [files] = await cloudStorageClient
8
+ .bucket(bucketName)
9
+ .getFiles({ prefix, autoPaginate: true });
10
+ return files;
11
+ };
12
+ exports.cloudrunLs = cloudrunLs;
13
+ const cloudrunDeleteFile = async ({ bucketName, key, }) => {
14
+ const cloudStorageClient = (0, get_cloud_storage_client_1.getCloudStorageClient)();
15
+ await cloudStorageClient.bucket(bucketName).file(key).delete();
16
+ };
17
+ exports.cloudrunDeleteFile = cloudrunDeleteFile;
@@ -0,0 +1,300 @@
1
+ import { z } from 'zod';
2
+ export declare const CloudRunPayload: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
3
+ type: z.ZodLiteral<"media">;
4
+ serveUrl: z.ZodString;
5
+ composition: z.ZodString;
6
+ forceHeight: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
7
+ forceWidth: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
8
+ codec: z.ZodEnum<["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"]>;
9
+ serializedInputPropsWithCustomSchema: z.ZodString;
10
+ jpegQuality: z.ZodNumber;
11
+ audioCodec: z.ZodNullable<z.ZodEnum<["pcm-16", "aac", "mp3", "opus"]>>;
12
+ audioBitrate: z.ZodNullable<z.ZodString>;
13
+ videoBitrate: z.ZodNullable<z.ZodString>;
14
+ crf: z.ZodNullable<z.ZodNumber>;
15
+ pixelFormat: z.ZodEnum<["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"]>;
16
+ imageFormat: z.ZodEnum<["png", "jpeg", "none"]>;
17
+ scale: z.ZodNumber;
18
+ proResProfile: z.ZodNullable<z.ZodEnum<["4444-xq", "4444", "hq", "standard", "light", "proxy"]>>;
19
+ everyNthFrame: z.ZodNumber;
20
+ numberOfGifLoops: z.ZodNullable<z.ZodNumber>;
21
+ frameRange: z.ZodNullable<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodNumber]>>;
22
+ envVariables: z.ZodRecord<z.ZodString, z.ZodString>;
23
+ chromiumOptions: z.ZodOptional<z.ZodObject<{
24
+ ignoreCertificateErrors: z.ZodOptional<z.ZodBoolean>;
25
+ disableWebSecurity: z.ZodOptional<z.ZodBoolean>;
26
+ gl: z.ZodNullable<z.ZodOptional<z.ZodEnum<["swangle", "angle", "egl", "swiftshader"]>>>;
27
+ headless: z.ZodOptional<z.ZodBoolean>;
28
+ userAgent: z.ZodNullable<z.ZodOptional<z.ZodString>>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ ignoreCertificateErrors?: boolean | undefined;
31
+ disableWebSecurity?: boolean | undefined;
32
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
33
+ headless?: boolean | undefined;
34
+ userAgent?: string | null | undefined;
35
+ }, {
36
+ ignoreCertificateErrors?: boolean | undefined;
37
+ disableWebSecurity?: boolean | undefined;
38
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
39
+ headless?: boolean | undefined;
40
+ userAgent?: string | null | undefined;
41
+ }>>;
42
+ muted: z.ZodBoolean;
43
+ outputBucket: z.ZodString;
44
+ outName: z.ZodOptional<z.ZodString>;
45
+ privacy: z.ZodOptional<z.ZodEnum<["public", "private"]>>;
46
+ logLevel: z.ZodEnum<["verbose", "info", "warn", "error"]>;
47
+ delayRenderTimeoutInMilliseconds: z.ZodNumber;
48
+ concurrency: z.ZodNullable<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
49
+ enforceAudioTrack: z.ZodBoolean;
50
+ preferLossless: z.ZodBoolean;
51
+ }, "strip", z.ZodTypeAny, {
52
+ type: "media";
53
+ serveUrl: string;
54
+ composition: string;
55
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
56
+ serializedInputPropsWithCustomSchema: string;
57
+ jpegQuality: number;
58
+ audioCodec: "mp3" | "aac" | "pcm-16" | "opus" | null;
59
+ audioBitrate: string | null;
60
+ videoBitrate: string | null;
61
+ crf: number | null;
62
+ pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
63
+ imageFormat: "png" | "jpeg" | "none";
64
+ scale: number;
65
+ proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | null;
66
+ everyNthFrame: number;
67
+ numberOfGifLoops: number | null;
68
+ frameRange: ((number | [number, number]) & (number | [number, number] | undefined)) | null;
69
+ envVariables: Record<string, string>;
70
+ muted: boolean;
71
+ outputBucket: string;
72
+ logLevel: "error" | "verbose" | "info" | "warn";
73
+ delayRenderTimeoutInMilliseconds: number;
74
+ concurrency: string | number | null;
75
+ enforceAudioTrack: boolean;
76
+ preferLossless: boolean;
77
+ forceHeight?: number | null | undefined;
78
+ forceWidth?: number | null | undefined;
79
+ chromiumOptions?: {
80
+ ignoreCertificateErrors?: boolean | undefined;
81
+ disableWebSecurity?: boolean | undefined;
82
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
83
+ headless?: boolean | undefined;
84
+ userAgent?: string | null | undefined;
85
+ } | undefined;
86
+ outName?: string | undefined;
87
+ privacy?: "public" | "private" | undefined;
88
+ }, {
89
+ type: "media";
90
+ serveUrl: string;
91
+ composition: string;
92
+ codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
93
+ serializedInputPropsWithCustomSchema: string;
94
+ jpegQuality: number;
95
+ audioCodec: "mp3" | "aac" | "pcm-16" | "opus" | null;
96
+ audioBitrate: string | null;
97
+ videoBitrate: string | null;
98
+ crf: number | null;
99
+ pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
100
+ imageFormat: "png" | "jpeg" | "none";
101
+ scale: number;
102
+ proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | null;
103
+ everyNthFrame: number;
104
+ numberOfGifLoops: number | null;
105
+ frameRange: ((number | [number, number]) & (number | [number, number] | undefined)) | null;
106
+ envVariables: Record<string, string>;
107
+ muted: boolean;
108
+ outputBucket: string;
109
+ logLevel: "error" | "verbose" | "info" | "warn";
110
+ delayRenderTimeoutInMilliseconds: number;
111
+ concurrency: string | number | null;
112
+ enforceAudioTrack: boolean;
113
+ preferLossless: boolean;
114
+ forceHeight?: number | null | undefined;
115
+ forceWidth?: number | null | undefined;
116
+ chromiumOptions?: {
117
+ ignoreCertificateErrors?: boolean | undefined;
118
+ disableWebSecurity?: boolean | undefined;
119
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
120
+ headless?: boolean | undefined;
121
+ userAgent?: string | null | undefined;
122
+ } | undefined;
123
+ outName?: string | undefined;
124
+ privacy?: "public" | "private" | undefined;
125
+ }>, z.ZodObject<{
126
+ type: z.ZodLiteral<"still">;
127
+ serveUrl: z.ZodString;
128
+ composition: z.ZodString;
129
+ forceHeight: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
130
+ forceWidth: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
131
+ serializedInputPropsWithCustomSchema: z.ZodString;
132
+ jpegQuality: z.ZodOptional<z.ZodNumber>;
133
+ imageFormat: z.ZodEnum<["png", "jpeg", "pdf", "webp"]>;
134
+ scale: z.ZodNumber;
135
+ privacy: z.ZodEnum<["public", "private"]>;
136
+ envVariables: z.ZodRecord<z.ZodString, z.ZodString>;
137
+ chromiumOptions: z.ZodOptional<z.ZodObject<{
138
+ ignoreCertificateErrors: z.ZodOptional<z.ZodBoolean>;
139
+ disableWebSecurity: z.ZodOptional<z.ZodBoolean>;
140
+ gl: z.ZodNullable<z.ZodOptional<z.ZodEnum<["swangle", "angle", "egl", "swiftshader"]>>>;
141
+ headless: z.ZodOptional<z.ZodBoolean>;
142
+ userAgent: z.ZodNullable<z.ZodOptional<z.ZodString>>;
143
+ }, "strip", z.ZodTypeAny, {
144
+ ignoreCertificateErrors?: boolean | undefined;
145
+ disableWebSecurity?: boolean | undefined;
146
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
147
+ headless?: boolean | undefined;
148
+ userAgent?: string | null | undefined;
149
+ }, {
150
+ ignoreCertificateErrors?: boolean | undefined;
151
+ disableWebSecurity?: boolean | undefined;
152
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
153
+ headless?: boolean | undefined;
154
+ userAgent?: string | null | undefined;
155
+ }>>;
156
+ outputBucket: z.ZodString;
157
+ outName: z.ZodOptional<z.ZodString>;
158
+ frame: z.ZodNumber;
159
+ delayRenderTimeoutInMilliseconds: z.ZodNumber;
160
+ logLevel: z.ZodEnum<["verbose", "info", "warn", "error"]>;
161
+ }, "strip", z.ZodTypeAny, {
162
+ type: "still";
163
+ serveUrl: string;
164
+ composition: string;
165
+ serializedInputPropsWithCustomSchema: string;
166
+ imageFormat: "png" | "jpeg" | "pdf" | "webp";
167
+ scale: number;
168
+ envVariables: Record<string, string>;
169
+ outputBucket: string;
170
+ privacy: "public" | "private";
171
+ logLevel: "error" | "verbose" | "info" | "warn";
172
+ delayRenderTimeoutInMilliseconds: number;
173
+ frame: number;
174
+ forceHeight?: number | null | undefined;
175
+ forceWidth?: number | null | undefined;
176
+ jpegQuality?: number | undefined;
177
+ chromiumOptions?: {
178
+ ignoreCertificateErrors?: boolean | undefined;
179
+ disableWebSecurity?: boolean | undefined;
180
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
181
+ headless?: boolean | undefined;
182
+ userAgent?: string | null | undefined;
183
+ } | undefined;
184
+ outName?: string | undefined;
185
+ }, {
186
+ type: "still";
187
+ serveUrl: string;
188
+ composition: string;
189
+ serializedInputPropsWithCustomSchema: string;
190
+ imageFormat: "png" | "jpeg" | "pdf" | "webp";
191
+ scale: number;
192
+ envVariables: Record<string, string>;
193
+ outputBucket: string;
194
+ privacy: "public" | "private";
195
+ logLevel: "error" | "verbose" | "info" | "warn";
196
+ delayRenderTimeoutInMilliseconds: number;
197
+ frame: number;
198
+ forceHeight?: number | null | undefined;
199
+ forceWidth?: number | null | undefined;
200
+ jpegQuality?: number | undefined;
201
+ chromiumOptions?: {
202
+ ignoreCertificateErrors?: boolean | undefined;
203
+ disableWebSecurity?: boolean | undefined;
204
+ gl?: "swangle" | "angle" | "egl" | "swiftshader" | null | undefined;
205
+ headless?: boolean | undefined;
206
+ userAgent?: string | null | undefined;
207
+ } | undefined;
208
+ outName?: string | undefined;
209
+ }>]>;
210
+ declare const renderFailResponsePayload: z.ZodObject<{
211
+ status: z.ZodLiteral<"error">;
212
+ error: z.ZodString;
213
+ stack: z.ZodString;
214
+ }, "strip", z.ZodTypeAny, {
215
+ status: "error";
216
+ error: string;
217
+ stack: string;
218
+ }, {
219
+ status: "error";
220
+ error: string;
221
+ stack: string;
222
+ }>;
223
+ declare const renderStillOnCloudrunResponsePayload: z.ZodObject<{
224
+ status: z.ZodLiteral<"success">;
225
+ publicUrl: z.ZodNullable<z.ZodOptional<z.ZodString>>;
226
+ cloudStorageUri: z.ZodString;
227
+ size: z.ZodNumber;
228
+ bucketName: z.ZodString;
229
+ renderId: z.ZodString;
230
+ privacy: z.ZodEnum<["public-read", "project-private"]>;
231
+ }, "strip", z.ZodTypeAny, {
232
+ status: "success";
233
+ privacy: "public-read" | "project-private";
234
+ cloudStorageUri: string;
235
+ size: number;
236
+ bucketName: string;
237
+ renderId: string;
238
+ publicUrl?: string | null | undefined;
239
+ }, {
240
+ status: "success";
241
+ privacy: "public-read" | "project-private";
242
+ cloudStorageUri: string;
243
+ size: number;
244
+ bucketName: string;
245
+ renderId: string;
246
+ publicUrl?: string | null | undefined;
247
+ }>;
248
+ declare const renderMediaOnCloudrunResponsePayload: z.ZodObject<{
249
+ status: z.ZodLiteral<"success">;
250
+ publicUrl: z.ZodNullable<z.ZodOptional<z.ZodString>>;
251
+ cloudStorageUri: z.ZodString;
252
+ size: z.ZodNumber;
253
+ bucketName: z.ZodString;
254
+ renderId: z.ZodString;
255
+ privacy: z.ZodEnum<["public-read", "project-private"]>;
256
+ }, "strip", z.ZodTypeAny, {
257
+ status: "success";
258
+ privacy: "public-read" | "project-private";
259
+ cloudStorageUri: string;
260
+ size: number;
261
+ bucketName: string;
262
+ renderId: string;
263
+ publicUrl?: string | null | undefined;
264
+ }, {
265
+ status: "success";
266
+ privacy: "public-read" | "project-private";
267
+ cloudStorageUri: string;
268
+ size: number;
269
+ bucketName: string;
270
+ renderId: string;
271
+ publicUrl?: string | null | undefined;
272
+ }>;
273
+ declare const cloudRunCrashResponse: z.ZodObject<{
274
+ status: z.ZodLiteral<"crash">;
275
+ cloudRunEndpoint: z.ZodString;
276
+ message: z.ZodLiteral<"Service crashed without sending a response. Check the logs in GCP console.">;
277
+ requestStartTime: z.ZodString;
278
+ requestCrashTime: z.ZodString;
279
+ requestElapsedTimeInSeconds: z.ZodNumber;
280
+ }, "strip", z.ZodTypeAny, {
281
+ message: "Service crashed without sending a response. Check the logs in GCP console.";
282
+ status: "crash";
283
+ cloudRunEndpoint: string;
284
+ requestStartTime: string;
285
+ requestCrashTime: string;
286
+ requestElapsedTimeInSeconds: number;
287
+ }, {
288
+ message: "Service crashed without sending a response. Check the logs in GCP console.";
289
+ status: "crash";
290
+ cloudRunEndpoint: string;
291
+ requestStartTime: string;
292
+ requestCrashTime: string;
293
+ requestElapsedTimeInSeconds: number;
294
+ }>;
295
+ export type CloudRunPayloadType = z.infer<typeof CloudRunPayload>;
296
+ export type RenderStillOnCloudrunOutput = z.infer<typeof renderStillOnCloudrunResponsePayload>;
297
+ export type RenderMediaOnCloudrunOutput = z.infer<typeof renderMediaOnCloudrunResponsePayload>;
298
+ export type ErrorResponsePayload = z.infer<typeof renderFailResponsePayload>;
299
+ export type CloudRunCrashResponse = z.infer<typeof cloudRunCrashResponse>;
300
+ export {};
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudRunPayload = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const client_1 = require("@remotion/renderer/client");
6
+ const zod_1 = require("zod");
7
+ const codec = zod_1.z.enum(renderer_1.RenderInternals.validCodecs);
8
+ const audioCodec = zod_1.z.enum(renderer_1.RenderInternals.validAudioCodecs);
9
+ const pixelFormat = zod_1.z.enum(renderer_1.RenderInternals.validPixelFormats);
10
+ const videoImageFormat = zod_1.z.enum(renderer_1.RenderInternals.validVideoImageFormats);
11
+ const stillImageFormat = zod_1.z.enum(renderer_1.RenderInternals.validStillImageFormats);
12
+ const proResProfile = zod_1.z.enum(client_1.BrowserSafeApis.proResProfileOptions).nullable();
13
+ const chromiumOptions = zod_1.z.object({
14
+ ignoreCertificateErrors: zod_1.z.boolean().optional(),
15
+ disableWebSecurity: zod_1.z.boolean().optional(),
16
+ gl: zod_1.z.enum(renderer_1.RenderInternals.validOpenGlRenderers).optional().nullable(),
17
+ headless: zod_1.z.boolean().optional(),
18
+ userAgent: zod_1.z.string().optional().nullable(),
19
+ });
20
+ const logLevel = zod_1.z.enum(renderer_1.RenderInternals.logLevels);
21
+ exports.CloudRunPayload = zod_1.z.discriminatedUnion('type', [
22
+ zod_1.z.object({
23
+ type: zod_1.z.literal('media'),
24
+ serveUrl: zod_1.z.string(),
25
+ composition: zod_1.z.string(),
26
+ forceHeight: zod_1.z.number().optional().nullable(),
27
+ forceWidth: zod_1.z.number().optional().nullable(),
28
+ codec,
29
+ serializedInputPropsWithCustomSchema: zod_1.z.string(),
30
+ jpegQuality: zod_1.z.number(),
31
+ audioCodec: audioCodec.nullable(),
32
+ audioBitrate: zod_1.z.string().nullable(),
33
+ videoBitrate: zod_1.z.string().nullable(),
34
+ crf: zod_1.z.number().nullable(),
35
+ pixelFormat,
36
+ imageFormat: videoImageFormat,
37
+ scale: zod_1.z.number(),
38
+ proResProfile,
39
+ everyNthFrame: zod_1.z.number(),
40
+ numberOfGifLoops: zod_1.z.number().nullable(),
41
+ frameRange: zod_1.z.tuple([zod_1.z.number(), zod_1.z.number()]).or(zod_1.z.number()).nullable(),
42
+ envVariables: zod_1.z.record(zod_1.z.string()),
43
+ chromiumOptions: chromiumOptions.optional(),
44
+ muted: zod_1.z.boolean(),
45
+ outputBucket: zod_1.z.string(),
46
+ outName: zod_1.z.string().optional(),
47
+ privacy: zod_1.z.enum(['public', 'private']).optional(),
48
+ logLevel,
49
+ delayRenderTimeoutInMilliseconds: zod_1.z.number(),
50
+ concurrency: zod_1.z.number().or(zod_1.z.string()).nullable(),
51
+ enforceAudioTrack: zod_1.z.boolean(),
52
+ preferLossless: zod_1.z.boolean(),
53
+ }),
54
+ zod_1.z.object({
55
+ type: zod_1.z.literal('still'),
56
+ serveUrl: zod_1.z.string(),
57
+ composition: zod_1.z.string(),
58
+ forceHeight: zod_1.z.number().optional().nullable(),
59
+ forceWidth: zod_1.z.number().optional().nullable(),
60
+ serializedInputPropsWithCustomSchema: zod_1.z.string(),
61
+ jpegQuality: zod_1.z.number().optional(),
62
+ imageFormat: stillImageFormat,
63
+ scale: zod_1.z.number(),
64
+ privacy: zod_1.z.enum(['public', 'private']),
65
+ envVariables: zod_1.z.record(zod_1.z.string()),
66
+ chromiumOptions: chromiumOptions.optional(),
67
+ outputBucket: zod_1.z.string(),
68
+ outName: zod_1.z.string().optional(),
69
+ frame: zod_1.z.number(),
70
+ delayRenderTimeoutInMilliseconds: zod_1.z.number(),
71
+ logLevel,
72
+ }),
73
+ ]);
74
+ const renderFailResponsePayload = zod_1.z.object({
75
+ status: zod_1.z.literal('error'),
76
+ error: zod_1.z.string(),
77
+ stack: zod_1.z.string(),
78
+ });
79
+ const renderStillOnCloudrunResponsePayload = zod_1.z.object({
80
+ status: zod_1.z.literal('success'),
81
+ publicUrl: zod_1.z.string().optional().nullable(),
82
+ cloudStorageUri: zod_1.z.string(),
83
+ size: zod_1.z.number(),
84
+ bucketName: zod_1.z.string(),
85
+ renderId: zod_1.z.string(),
86
+ privacy: zod_1.z.enum(['public-read', 'project-private']),
87
+ });
88
+ const renderMediaOnCloudrunResponsePayload = zod_1.z.object({
89
+ status: zod_1.z.literal('success'),
90
+ publicUrl: zod_1.z.string().optional().nullable(),
91
+ cloudStorageUri: zod_1.z.string(),
92
+ size: zod_1.z.number(),
93
+ bucketName: zod_1.z.string(),
94
+ renderId: zod_1.z.string(),
95
+ privacy: zod_1.z.enum(['public-read', 'project-private']),
96
+ });
97
+ const cloudRunCrashResponse = zod_1.z.object({
98
+ status: zod_1.z.literal('crash'),
99
+ cloudRunEndpoint: zod_1.z.string(),
100
+ message: zod_1.z.literal('Service crashed without sending a response. Check the logs in GCP console.'),
101
+ requestStartTime: zod_1.z.string().datetime(),
102
+ requestCrashTime: zod_1.z.string().datetime(),
103
+ requestElapsedTimeInSeconds: zod_1.z.number(),
104
+ });
@@ -0,0 +1,3 @@
1
+ import type * as ff from '@google-cloud/functions-framework';
2
+ declare const renderOnCloudRun: (req: ff.Request, res: ff.Response) => Promise<void>;
3
+ export { renderOnCloudRun };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderOnCloudRun = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const log_1 = require("../cli/log");
6
+ const payloads_1 = require("./helpers/payloads");
7
+ const render_media_single_thread_1 = require("./render-media-single-thread");
8
+ const render_still_single_thread_1 = require("./render-still-single-thread");
9
+ const renderOnCloudRun = async (req, res) => {
10
+ var _a;
11
+ try {
12
+ log_1.Log.info('renderOnCloudRun', req.body);
13
+ const body = payloads_1.CloudRunPayload.parse(req.body);
14
+ const renderType = body.type;
15
+ renderer_1.RenderInternals.setLogLevel(body.logLevel);
16
+ switch (renderType) {
17
+ case 'media':
18
+ await (0, render_media_single_thread_1.renderMediaSingleThread)(body, res);
19
+ break;
20
+ case 'still':
21
+ await (0, render_still_single_thread_1.renderStillSingleThread)(body, res);
22
+ break;
23
+ default:
24
+ res
25
+ .status(400)
26
+ .send('Invalid render type, must be either "media" or "still"');
27
+ }
28
+ }
29
+ catch (err) {
30
+ log_1.Log.error('Error while rendering', err);
31
+ const response = {
32
+ error: err.message,
33
+ status: 'error',
34
+ stack: (_a = err.stack) !== null && _a !== void 0 ? _a : '',
35
+ };
36
+ res.status(500).send(JSON.stringify(response));
37
+ }
38
+ };
39
+ exports.renderOnCloudRun = renderOnCloudRun;
@@ -0,0 +1,3 @@
1
+ import type * as ff from '@google-cloud/functions-framework';
2
+ import type { CloudRunPayloadType } from './helpers/payloads';
3
+ export declare const renderMediaSingleThread: (body: CloudRunPayloadType, res: ff.Response) => Promise<void>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderMediaSingleThread = void 0;
4
+ const storage_1 = require("@google-cloud/storage");
5
+ const renderer_1 = require("@remotion/renderer");
6
+ const remotion_1 = require("remotion");
7
+ const random_hash_1 = require("../shared/random-hash");
8
+ const get_composition_from_body_1 = require("./helpers/get-composition-from-body");
9
+ const renderMediaSingleThread = async (body, res) => {
10
+ var _a, _b, _c, _d, _e, _f, _g;
11
+ if (body.type !== 'media') {
12
+ throw new Error('expected type media');
13
+ }
14
+ const composition = await (0, get_composition_from_body_1.getCompositionFromBody)(body);
15
+ const defaultOutName = `out.${renderer_1.RenderInternals.getFileExtensionFromCodec(body.codec, body.audioCodec)}`;
16
+ const tempFilePath = `/tmp/${defaultOutName}`;
17
+ const renderId = (0, random_hash_1.randomHash)({ randomInTests: true });
18
+ let previousProgress = 2;
19
+ const onProgress = ({ progress }) => {
20
+ if (previousProgress !== progress) {
21
+ res.write(JSON.stringify({ onProgress: progress }) + '\n');
22
+ previousProgress = progress;
23
+ }
24
+ };
25
+ res.writeHead(200, { 'Content-Type': 'text/html' });
26
+ const actualChromiumOptions = {
27
+ ...body.chromiumOptions,
28
+ // Override the `null` value, which might come from CLI with swANGLE
29
+ gl: (_b = (_a = body.chromiumOptions) === null || _a === void 0 ? void 0 : _a.gl) !== null && _b !== void 0 ? _b : 'swangle',
30
+ };
31
+ await renderer_1.RenderInternals.internalRenderMedia({
32
+ composition: {
33
+ ...composition,
34
+ height: (_c = body.forceHeight) !== null && _c !== void 0 ? _c : composition.height,
35
+ width: (_d = body.forceWidth) !== null && _d !== void 0 ? _d : composition.width,
36
+ },
37
+ serveUrl: body.serveUrl,
38
+ codec: body.codec,
39
+ outputLocation: tempFilePath,
40
+ serializedInputPropsWithCustomSchema: body.serializedInputPropsWithCustomSchema,
41
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
42
+ data: composition.props,
43
+ indent: undefined,
44
+ staticBase: null,
45
+ }).serializedString,
46
+ jpegQuality: body.jpegQuality,
47
+ audioCodec: body.audioCodec,
48
+ audioBitrate: body.audioBitrate,
49
+ videoBitrate: body.videoBitrate,
50
+ crf: body.crf,
51
+ pixelFormat: body.pixelFormat,
52
+ imageFormat: body.imageFormat,
53
+ scale: body.scale,
54
+ proResProfile: (_e = body.proResProfile) !== null && _e !== void 0 ? _e : undefined,
55
+ everyNthFrame: body.everyNthFrame,
56
+ numberOfGifLoops: body.numberOfGifLoops,
57
+ onProgress,
58
+ frameRange: body.frameRange,
59
+ envVariables: body.envVariables,
60
+ chromiumOptions: actualChromiumOptions,
61
+ muted: body.muted,
62
+ logLevel: body.logLevel,
63
+ browserExecutable: null,
64
+ timeoutInMilliseconds: body.delayRenderTimeoutInMilliseconds,
65
+ cancelSignal: undefined,
66
+ concurrency: (_f = body.concurrency) !== null && _f !== void 0 ? _f : '100%',
67
+ disallowParallelEncoding: false,
68
+ enforceAudioTrack: body.enforceAudioTrack,
69
+ ffmpegOverride: undefined,
70
+ indent: false,
71
+ onBrowserLog: null,
72
+ onCtrlCExit: () => undefined,
73
+ onDownload: () => undefined,
74
+ onStart: () => undefined,
75
+ overwrite: true,
76
+ port: null,
77
+ preferLossless: body.preferLossless,
78
+ puppeteerInstance: undefined,
79
+ server: undefined,
80
+ });
81
+ const storage = new storage_1.Storage();
82
+ const publicUpload = body.privacy === 'public' || !body.privacy;
83
+ const uploadedResponse = await storage
84
+ .bucket(body.outputBucket)
85
+ .upload(tempFilePath, {
86
+ destination: `renders/${renderId}/${(_g = body.outName) !== null && _g !== void 0 ? _g : defaultOutName}`,
87
+ predefinedAcl: publicUpload ? 'publicRead' : 'projectPrivate',
88
+ });
89
+ const uploadedFile = uploadedResponse[0];
90
+ const renderMetadata = await uploadedFile.getMetadata();
91
+ const responseData = {
92
+ status: 'success',
93
+ publicUrl: publicUpload ? uploadedFile.publicUrl() : null,
94
+ cloudStorageUri: uploadedFile.cloudStorageURI.href,
95
+ size: renderMetadata[0].size,
96
+ bucketName: body.outputBucket,
97
+ renderId,
98
+ privacy: publicUpload ? 'public-read' : 'project-private',
99
+ };
100
+ renderer_1.RenderInternals.Log.info('Render Completed:', responseData);
101
+ res.end(JSON.stringify({ response: responseData }));
102
+ };
103
+ exports.renderMediaSingleThread = renderMediaSingleThread;
@@ -0,0 +1,3 @@
1
+ import type * as ff from '@google-cloud/functions-framework';
2
+ import type { CloudRunPayloadType } from './helpers/payloads';
3
+ export declare const renderStillSingleThread: (body: CloudRunPayloadType, res: ff.Response) => Promise<void>;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderStillSingleThread = void 0;
4
+ const storage_1 = require("@google-cloud/storage");
5
+ const renderer_1 = require("@remotion/renderer");
6
+ const remotion_1 = require("remotion");
7
+ const log_1 = require("../cli/log");
8
+ const random_hash_1 = require("../shared/random-hash");
9
+ const get_composition_from_body_1 = require("./helpers/get-composition-from-body");
10
+ const renderStillSingleThread = async (body, res) => {
11
+ var _a, _b, _c, _d, _e, _f;
12
+ if (body.type !== 'still') {
13
+ throw new Error('expected type still');
14
+ }
15
+ log_1.Log.verbose('Rendering still frame', body);
16
+ const composition = await (0, get_composition_from_body_1.getCompositionFromBody)(body);
17
+ log_1.Log.verbose('Composition loaded', composition);
18
+ const tempFilePath = '/tmp/still.png';
19
+ const renderId = (0, random_hash_1.randomHash)({ randomInTests: true });
20
+ const actualChromiumOptions = {
21
+ ...body.chromiumOptions,
22
+ // Override the `null` value, which might come from CLI with swANGLE
23
+ gl: (_b = (_a = body.chromiumOptions) === null || _a === void 0 ? void 0 : _a.gl) !== null && _b !== void 0 ? _b : 'swangle',
24
+ };
25
+ await renderer_1.RenderInternals.internalRenderStill({
26
+ composition: {
27
+ ...composition,
28
+ height: (_c = body.forceHeight) !== null && _c !== void 0 ? _c : composition.height,
29
+ width: (_d = body.forceWidth) !== null && _d !== void 0 ? _d : composition.width,
30
+ },
31
+ serveUrl: body.serveUrl,
32
+ output: tempFilePath,
33
+ serializedInputPropsWithCustomSchema: body.serializedInputPropsWithCustomSchema,
34
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
35
+ data: composition.props,
36
+ indent: undefined,
37
+ staticBase: null,
38
+ }).serializedString,
39
+ jpegQuality: (_e = body.jpegQuality) !== null && _e !== void 0 ? _e : renderer_1.RenderInternals.DEFAULT_JPEG_QUALITY,
40
+ imageFormat: body.imageFormat,
41
+ scale: body.scale,
42
+ envVariables: body.envVariables,
43
+ chromiumOptions: actualChromiumOptions,
44
+ frame: body.frame,
45
+ logLevel: body.logLevel,
46
+ browserExecutable: null,
47
+ cancelSignal: null,
48
+ indent: false,
49
+ timeoutInMilliseconds: body.delayRenderTimeoutInMilliseconds,
50
+ onBrowserLog: null,
51
+ onDownload: null,
52
+ overwrite: true,
53
+ port: null,
54
+ puppeteerInstance: null,
55
+ server: undefined,
56
+ });
57
+ log_1.Log.info('Still rendered');
58
+ const storage = new storage_1.Storage();
59
+ const publicUpload = body.privacy === 'public' || !body.privacy;
60
+ const uploadedResponse = await storage
61
+ .bucket(body.outputBucket)
62
+ .upload(tempFilePath, {
63
+ destination: `renders/${renderId}/${(_f = body.outName) !== null && _f !== void 0 ? _f : 'out.png'}`,
64
+ predefinedAcl: publicUpload ? 'publicRead' : 'projectPrivate',
65
+ });
66
+ log_1.Log.info('Still uploaded');
67
+ const uploadedFile = uploadedResponse[0];
68
+ const renderMetadata = await uploadedFile.getMetadata();
69
+ const responseData = {
70
+ publicUrl: uploadedFile.publicUrl(),
71
+ cloudStorageUri: uploadedFile.cloudStorageURI.href,
72
+ size: renderMetadata[0].size,
73
+ bucketName: body.outputBucket,
74
+ renderId,
75
+ status: 'success',
76
+ privacy: publicUpload ? 'public-read' : 'project-private',
77
+ };
78
+ renderer_1.RenderInternals.Log.info('Render Completed:', responseData);
79
+ const jsonContent = JSON.stringify(responseData);
80
+ res.end(jsonContent);
81
+ };
82
+ exports.renderStillSingleThread = renderStillSingleThread;