@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.
- package/.turbo/turbo-build.log +13 -0
- package/LICENSE.md +41 -0
- package/dist/admin/bundle-installer.d.ts +1 -0
- package/dist/admin/bundle-installer.js +32 -0
- package/dist/admin/bundle-renderLogic.d.ts +1 -0
- package/dist/admin/bundle-renderLogic.js +39 -0
- package/dist/api/check-if-service-exists.d.ts +18 -0
- package/dist/api/check-if-service-exists.js +46 -0
- package/dist/api/create-bucket.d.ts +13 -0
- package/dist/api/create-bucket.js +18 -0
- package/dist/api/delete-service.d.ts +12 -0
- package/dist/api/delete-service.js +19 -0
- package/dist/api/delete-site.d.ts +13 -0
- package/dist/api/delete-site.js +30 -0
- package/dist/api/deploy-service.d.ts +28 -0
- package/dist/api/deploy-service.js +90 -0
- package/dist/api/deploy-site.d.ts +35 -0
- package/dist/api/deploy-site.js +78 -0
- package/dist/api/download-file.d.ts +12 -0
- package/dist/api/download-file.js +29 -0
- package/dist/api/get-buckets.d.ts +10 -0
- package/dist/api/get-buckets.js +23 -0
- package/dist/api/get-or-create-bucket.d.ts +17 -0
- package/dist/api/get-or-create-bucket.js +42 -0
- package/dist/api/get-regions.d.ts +7 -0
- package/dist/api/get-regions.js +13 -0
- package/dist/api/get-service-info.d.ts +23 -0
- package/dist/api/get-service-info.js +34 -0
- package/dist/api/get-services.d.ts +14 -0
- package/dist/api/get-services.js +49 -0
- package/dist/api/get-sites.d.ts +23 -0
- package/dist/api/get-sites.js +49 -0
- package/dist/api/helpers/IService.d.ts +2 -0
- package/dist/api/helpers/IService.js +2 -0
- package/dist/api/helpers/construct-service-deploy-request.d.ts +32 -0
- package/dist/api/helpers/construct-service-deploy-request.js +36 -0
- package/dist/api/helpers/extract-mem-from-url.d.ts +1 -0
- package/dist/api/helpers/extract-mem-from-url.js +9 -0
- package/dist/api/helpers/extract-time-from-url.d.ts +1 -0
- package/dist/api/helpers/extract-time-from-url.js +13 -0
- package/dist/api/helpers/get-auth-client-for-url.d.ts +1 -0
- package/dist/api/helpers/get-auth-client-for-url.js +15 -0
- package/dist/api/helpers/get-cloud-logging-client.d.ts +1 -0
- package/dist/api/helpers/get-cloud-logging-client.js +15 -0
- package/dist/api/helpers/get-cloud-run-client.d.ts +2 -0
- package/dist/api/helpers/get-cloud-run-client.js +15 -0
- package/dist/api/helpers/get-cloud-storage-client.d.ts +2 -0
- package/dist/api/helpers/get-cloud-storage-client.js +14 -0
- package/dist/api/helpers/get-cloudrun-endpoint.d.ts +6 -0
- package/dist/api/helpers/get-cloudrun-endpoint.js +28 -0
- package/dist/api/helpers/get-resource-manager-client.d.ts +2 -0
- package/dist/api/helpers/get-resource-manager-client.js +15 -0
- package/dist/api/helpers/parse-service-name.d.ts +8 -0
- package/dist/api/helpers/parse-service-name.js +24 -0
- package/dist/api/iam-validation/testPermissions.d.ts +20 -0
- package/dist/api/iam-validation/testPermissions.js +48 -0
- package/dist/api/render-media-on-cloudrun.d.ts +78 -0
- package/dist/api/render-media-on-cloudrun.js +144 -0
- package/dist/api/render-still-on-cloudrun.d.ts +49 -0
- package/dist/api/render-still-on-cloudrun.js +76 -0
- package/dist/api/speculate-service-name.d.ts +13 -0
- package/dist/api/speculate-service-name.js +20 -0
- package/dist/api/test/service-names.test.d.ts +1 -0
- package/dist/api/test/service-names.test.js +28 -0
- package/dist/api/upload-dir.d.ts +18 -0
- package/dist/api/upload-dir.js +81 -0
- package/dist/cli/args.d.ts +19 -0
- package/dist/cli/args.js +11 -0
- package/dist/cli/commands/permissions.d.ts +2 -0
- package/dist/cli/commands/permissions.js +23 -0
- package/dist/cli/commands/regions.d.ts +2 -0
- package/dist/cli/commands/regions.js +10 -0
- package/dist/cli/commands/render/helpers/renderArgsCheck.d.ts +9 -0
- package/dist/cli/commands/render/helpers/renderArgsCheck.js +75 -0
- package/dist/cli/commands/render/index.d.ts +2 -0
- package/dist/cli/commands/render/index.js +227 -0
- package/dist/cli/commands/render/renderMedia.d.ts +2 -0
- package/dist/cli/commands/render/renderMedia.js +156 -0
- package/dist/cli/commands/render/renderStill.d.ts +2 -0
- package/dist/cli/commands/render/renderStill.js +123 -0
- package/dist/cli/commands/services/deploy.d.ts +2 -0
- package/dist/cli/commands/services/deploy.js +129 -0
- package/dist/cli/commands/services/index.d.ts +5 -0
- package/dist/cli/commands/services/index.js +64 -0
- package/dist/cli/commands/services/ls.d.ts +2 -0
- package/dist/cli/commands/services/ls.js +40 -0
- package/dist/cli/commands/services/rm.d.ts +2 -0
- package/dist/cli/commands/services/rm.js +63 -0
- package/dist/cli/commands/services/rmall.d.ts +2 -0
- package/dist/cli/commands/services/rmall.js +52 -0
- package/dist/cli/commands/sites/create.d.ts +2 -0
- package/dist/cli/commands/sites/create.js +138 -0
- package/dist/cli/commands/sites/index.d.ts +4 -0
- package/dist/cli/commands/sites/index.js +60 -0
- package/dist/cli/commands/sites/ls.d.ts +2 -0
- package/dist/cli/commands/sites/ls.js +40 -0
- package/dist/cli/commands/sites/rm.d.ts +2 -0
- package/dist/cli/commands/sites/rm.js +59 -0
- package/dist/cli/commands/sites/rmall.d.ts +2 -0
- package/dist/cli/commands/sites/rmall.js +38 -0
- package/dist/cli/commands/still.d.ts +2 -0
- package/dist/cli/commands/still.js +129 -0
- package/dist/cli/get-gcp-region.d.ts +2 -0
- package/dist/cli/get-gcp-region.js +19 -0
- package/dist/cli/help.d.ts +1 -0
- package/dist/cli/help.js +38 -0
- package/dist/cli/helpers/confirm.d.ts +4 -0
- package/dist/cli/helpers/confirm.js +12 -0
- package/dist/cli/helpers/date-string.d.ts +1 -0
- package/dist/cli/helpers/date-string.js +9 -0
- package/dist/cli/helpers/progress-bar.d.ts +23 -0
- package/dist/cli/helpers/progress-bar.js +81 -0
- package/dist/cli/helpers/quit.d.ts +1 -0
- package/dist/cli/helpers/quit.js +7 -0
- package/dist/cli/helpers/yes-or-no.d.ts +4 -0
- package/dist/cli/helpers/yes-or-no.js +44 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/log.d.ts +26 -0
- package/dist/cli/log.js +5 -0
- package/dist/defaults.d.ts +1 -0
- package/dist/defaults.js +17 -0
- package/dist/functions/helpers/get-composition-from-body.d.ts +2 -0
- package/dist/functions/helpers/get-composition-from-body.js +27 -0
- package/dist/functions/helpers/io.d.ts +11 -0
- package/dist/functions/helpers/io.js +17 -0
- package/dist/functions/helpers/payloads.d.ts +300 -0
- package/dist/functions/helpers/payloads.js +104 -0
- package/dist/functions/index.d.ts +3 -0
- package/dist/functions/index.js +39 -0
- package/dist/functions/render-media-single-thread.d.ts +3 -0
- package/dist/functions/render-media-single-thread.js +103 -0
- package/dist/functions/render-still-single-thread.d.ts +3 -0
- package/dist/functions/render-still-single-thread.js +82 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +31 -0
- package/dist/internals.d.ts +3 -0
- package/dist/internals.js +7 -0
- package/dist/pricing/gcp-regions.d.ts +2 -0
- package/dist/pricing/gcp-regions.js +40 -0
- package/dist/regions.d.ts +2 -0
- package/dist/regions.js +5 -0
- package/dist/shared/bundle-site.d.ts +2 -0
- package/dist/shared/bundle-site.js +5 -0
- package/dist/shared/constants.d.ts +13 -0
- package/dist/shared/constants.js +18 -0
- package/dist/shared/convert-to-serve-url.d.ts +4 -0
- package/dist/shared/convert-to-serve-url.js +14 -0
- package/dist/shared/docs-url.d.ts +1 -0
- package/dist/shared/docs-url.js +4 -0
- package/dist/shared/generate-service-name.d.ts +5 -0
- package/dist/shared/generate-service-name.js +20 -0
- package/dist/shared/get-etag.d.ts +1 -0
- package/dist/shared/get-etag.js +24 -0
- package/dist/shared/get-storage-operations.d.ts +10 -0
- package/dist/shared/get-storage-operations.js +36 -0
- package/dist/shared/make-storage-key.d.ts +1 -0
- package/dist/shared/make-storage-key.js +11 -0
- package/dist/shared/make-storage-url.d.ts +4 -0
- package/dist/shared/make-storage-url.js +7 -0
- package/dist/shared/random-hash.d.ts +3 -0
- package/dist/shared/random-hash.js +14 -0
- package/dist/shared/read-dir.d.ts +9 -0
- package/dist/shared/read-dir.js +57 -0
- package/dist/shared/sa-permissions.json +64 -0
- package/dist/shared/service-version-string.d.ts +1 -0
- package/dist/shared/service-version-string.js +8 -0
- package/dist/shared/validate-bucketname.d.ts +8 -0
- package/dist/shared/validate-bucketname.js +35 -0
- package/dist/shared/validate-cloudrun-url.d.ts +1 -0
- package/dist/shared/validate-cloudrun-url.js +10 -0
- package/dist/shared/validate-gcp-codec.d.ts +4 -0
- package/dist/shared/validate-gcp-codec.js +29 -0
- package/dist/shared/validate-gcp-region.d.ts +2 -0
- package/dist/shared/validate-gcp-region.js +10 -0
- package/dist/shared/validate-image-remotion-version.d.ts +1 -0
- package/dist/shared/validate-image-remotion-version.js +26 -0
- package/dist/shared/validate-privacy.d.ts +2 -0
- package/dist/shared/validate-privacy.js +12 -0
- package/dist/shared/validate-project-id.d.ts +1 -0
- package/dist/shared/validate-project-id.js +17 -0
- package/dist/shared/validate-region.d.ts +1 -0
- package/dist/shared/validate-region.js +15 -0
- package/dist/shared/validate-retries.d.ts +1 -0
- package/dist/shared/validate-retries.js +21 -0
- package/dist/shared/validate-serveurl.d.ts +1 -0
- package/dist/shared/validate-serveurl.js +30 -0
- package/dist/shared/validate-service-name.d.ts +1 -0
- package/dist/shared/validate-service-name.js +9 -0
- package/dist/shared/validate-site-name.d.ts +1 -0
- package/dist/shared/validate-site-name.js +17 -0
- package/package.json +56 -0
- package/readme.md +3 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderArgsCheck = void 0;
|
|
4
|
+
const get_or_create_bucket_1 = require("../../../../api/get-or-create-bucket");
|
|
5
|
+
const get_service_info_1 = require("../../../../api/get-service-info");
|
|
6
|
+
const get_services_1 = require("../../../../api/get-services");
|
|
7
|
+
const constants_1 = require("../../../../shared/constants");
|
|
8
|
+
const convert_to_serve_url_1 = require("../../../../shared/convert-to-serve-url");
|
|
9
|
+
const validate_privacy_1 = require("../../../../shared/validate-privacy");
|
|
10
|
+
const args_1 = require("../../../args");
|
|
11
|
+
const get_gcp_region_1 = require("../../../get-gcp-region");
|
|
12
|
+
const quit_1 = require("../../../helpers/quit");
|
|
13
|
+
const log_1 = require("../../../log");
|
|
14
|
+
const services_1 = require("../../services");
|
|
15
|
+
const deploy_1 = require("../../services/deploy");
|
|
16
|
+
const renderArgsCheck = async (subcommand, args) => {
|
|
17
|
+
var _a, _b, _c, _d;
|
|
18
|
+
let region = (0, get_gcp_region_1.getGcpRegion)();
|
|
19
|
+
let remotionBucket;
|
|
20
|
+
let serveUrl = args[0];
|
|
21
|
+
if (!serveUrl) {
|
|
22
|
+
log_1.Log.error('No serve URL passed.');
|
|
23
|
+
log_1.Log.info('Pass an additional argument specifying a URL where your Remotion project is hosted.');
|
|
24
|
+
log_1.Log.info();
|
|
25
|
+
log_1.Log.info(`${constants_1.BINARY_NAME} ${subcommand} <serve-url> <composition-id> [output-location]`);
|
|
26
|
+
(0, quit_1.quit)(1);
|
|
27
|
+
}
|
|
28
|
+
if (!serveUrl.startsWith('https://') && !serveUrl.startsWith('http://')) {
|
|
29
|
+
const siteName = serveUrl;
|
|
30
|
+
log_1.Log.verbose('Remotion site-name passed, constructing serve url...');
|
|
31
|
+
region = region !== null && region !== void 0 ? region : (0, get_gcp_region_1.getGcpRegion)();
|
|
32
|
+
remotionBucket = (await (0, get_or_create_bucket_1.getOrCreateBucket)({ region })).bucketName;
|
|
33
|
+
serveUrl = (0, convert_to_serve_url_1.convertToServeUrl)({
|
|
34
|
+
urlOrId: siteName,
|
|
35
|
+
bucketName: remotionBucket,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const outName = args_1.parsedCloudrunCli['out-name'];
|
|
39
|
+
const downloadName = (_a = args[2]) !== null && _a !== void 0 ? _a : null;
|
|
40
|
+
const privacy = (_b = args_1.parsedCloudrunCli.privacy) !== null && _b !== void 0 ? _b : constants_1.DEFAULT_OUTPUT_PRIVACY;
|
|
41
|
+
(0, validate_privacy_1.validatePrivacy)(privacy);
|
|
42
|
+
const forceBucketName = (_d = (_c = args_1.parsedCloudrunCli['force-bucket-name']) !== null && _c !== void 0 ? _c : remotionBucket) !== null && _d !== void 0 ? _d : (await (0, get_or_create_bucket_1.getOrCreateBucket)({ region })).bucketName;
|
|
43
|
+
let cloudRunUrl = args_1.parsedCloudrunCli['cloud-run-url'];
|
|
44
|
+
let serviceName = args_1.parsedCloudrunCli['service-name'];
|
|
45
|
+
if (cloudRunUrl && serviceName) {
|
|
46
|
+
log_1.Log.error('Both a Cloud Run URL and a Service Name was provided. Specify only one.');
|
|
47
|
+
(0, quit_1.quit)(1);
|
|
48
|
+
}
|
|
49
|
+
if (!cloudRunUrl && !serviceName) {
|
|
50
|
+
const services = await (0, get_services_1.getServices)({ region, compatibleOnly: true });
|
|
51
|
+
if (services.length === 0) {
|
|
52
|
+
// TODO: Log if there is an incompatible service
|
|
53
|
+
log_1.Log.error('No compatible services found. Please create a service first:');
|
|
54
|
+
log_1.Log.info();
|
|
55
|
+
log_1.Log.info(` ${constants_1.BINARY_NAME} ${services_1.SERVICES_COMMAND} ${deploy_1.CLOUD_RUN_DEPLOY_SUBCOMMAND}`);
|
|
56
|
+
(0, quit_1.quit)(1);
|
|
57
|
+
}
|
|
58
|
+
serviceName = services[0].serviceName;
|
|
59
|
+
cloudRunUrl = services[0].uri;
|
|
60
|
+
}
|
|
61
|
+
if (serviceName && !cloudRunUrl) {
|
|
62
|
+
const { uri } = await (0, get_service_info_1.getServiceInfo)({ serviceName, region });
|
|
63
|
+
cloudRunUrl = uri;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
serveUrl,
|
|
67
|
+
cloudRunUrl,
|
|
68
|
+
outName,
|
|
69
|
+
forceBucketName,
|
|
70
|
+
privacy,
|
|
71
|
+
downloadName,
|
|
72
|
+
region,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.renderArgsCheck = renderArgsCheck;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderCommand = exports.RENDER_COMMAND = void 0;
|
|
4
|
+
const cli_1 = require("@remotion/cli");
|
|
5
|
+
const config_1 = require("@remotion/cli/config");
|
|
6
|
+
const renderer_1 = require("@remotion/renderer");
|
|
7
|
+
const remotion_1 = require("remotion");
|
|
8
|
+
const download_file_1 = require("../../../api/download-file");
|
|
9
|
+
const extract_mem_from_url_1 = require("../../../api/helpers/extract-mem-from-url");
|
|
10
|
+
const extract_time_from_url_1 = require("../../../api/helpers/extract-time-from-url");
|
|
11
|
+
const get_cloud_logging_client_1 = require("../../../api/helpers/get-cloud-logging-client");
|
|
12
|
+
const render_media_on_cloudrun_1 = require("../../../api/render-media-on-cloudrun");
|
|
13
|
+
const validate_serveurl_1 = require("../../../shared/validate-serveurl");
|
|
14
|
+
const args_1 = require("../../args");
|
|
15
|
+
const log_1 = require("../../log");
|
|
16
|
+
const renderArgsCheck_1 = require("./helpers/renderArgsCheck");
|
|
17
|
+
exports.RENDER_COMMAND = 'render';
|
|
18
|
+
const renderCommand = async (args, remotionRoot) => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const { serveUrl, cloudRunUrl, outName, forceBucketName, downloadName, privacy, region, } = await (0, renderArgsCheck_1.renderArgsCheck)(exports.RENDER_COMMAND, args);
|
|
21
|
+
const { codec, reason: codecReason } = cli_1.CliInternals.getFinalOutputCodec({
|
|
22
|
+
cliFlag: cli_1.CliInternals.parsedCli.codec,
|
|
23
|
+
downloadName,
|
|
24
|
+
outName: outName !== null && outName !== void 0 ? outName : null,
|
|
25
|
+
configFile: (_a = config_1.ConfigInternals.getOutputCodecOrUndefined()) !== null && _a !== void 0 ? _a : null,
|
|
26
|
+
uiCodec: null,
|
|
27
|
+
});
|
|
28
|
+
const imageFormat = args_1.parsedCloudrunCli['image-format'];
|
|
29
|
+
const audioCodec = args_1.parsedCloudrunCli['audio-codec'];
|
|
30
|
+
const { chromiumOptions, crf, envVariables, frameRange, inputProps, logLevel, puppeteerTimeout, pixelFormat, proResProfile, jpegQuality, scale, everyNthFrame, numberOfGifLoops, muted, audioBitrate, videoBitrate, height, width, browserExecutable, port, enforceAudioTrack, } = await cli_1.CliInternals.getCliOptions({
|
|
31
|
+
type: 'series',
|
|
32
|
+
isLambda: true,
|
|
33
|
+
remotionRoot,
|
|
34
|
+
});
|
|
35
|
+
let composition = args[1];
|
|
36
|
+
if (!composition) {
|
|
37
|
+
log_1.Log.info('No compositions passed. Fetching compositions...');
|
|
38
|
+
(0, validate_serveurl_1.validateServeUrl)(serveUrl);
|
|
39
|
+
const server = renderer_1.RenderInternals.prepareServer({
|
|
40
|
+
concurrency: 1,
|
|
41
|
+
indent: false,
|
|
42
|
+
port,
|
|
43
|
+
remotionRoot,
|
|
44
|
+
logLevel,
|
|
45
|
+
webpackConfigOrServeUrl: serveUrl,
|
|
46
|
+
});
|
|
47
|
+
const { compositionId } = await cli_1.CliInternals.getCompositionWithDimensionOverride({
|
|
48
|
+
args,
|
|
49
|
+
compositionIdFromUi: null,
|
|
50
|
+
browserExecutable,
|
|
51
|
+
chromiumOptions,
|
|
52
|
+
envVariables,
|
|
53
|
+
height,
|
|
54
|
+
indent: false,
|
|
55
|
+
port,
|
|
56
|
+
puppeteerInstance: undefined,
|
|
57
|
+
serveUrlOrWebpackUrl: serveUrl,
|
|
58
|
+
timeoutInMilliseconds: puppeteerTimeout,
|
|
59
|
+
logLevel,
|
|
60
|
+
width,
|
|
61
|
+
server: await server,
|
|
62
|
+
serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
|
|
63
|
+
data: inputProps,
|
|
64
|
+
indent: undefined,
|
|
65
|
+
staticBase: null,
|
|
66
|
+
}).serializedString,
|
|
67
|
+
});
|
|
68
|
+
composition = compositionId;
|
|
69
|
+
}
|
|
70
|
+
// Todo: Check cloudRunUrl is valid, as the error message is obtuse
|
|
71
|
+
cli_1.CliInternals.Log.info(cli_1.CliInternals.chalk.gray(`
|
|
72
|
+
Cloud Run Service URL = ${cloudRunUrl}
|
|
73
|
+
Region = ${region}
|
|
74
|
+
Type = media
|
|
75
|
+
Composition = ${composition}
|
|
76
|
+
Codec = ${codec}
|
|
77
|
+
Output Bucket = ${forceBucketName}
|
|
78
|
+
Output File = ${outName !== null && outName !== void 0 ? outName : 'out.mp4'}
|
|
79
|
+
Output File Privacy = ${privacy}
|
|
80
|
+
${downloadName ? ` Downloaded File = ${downloadName}` : ''}
|
|
81
|
+
`.trim()));
|
|
82
|
+
log_1.Log.info();
|
|
83
|
+
const renderStart = Date.now();
|
|
84
|
+
const progressBar = cli_1.CliInternals.createOverwriteableCliOutput({
|
|
85
|
+
quiet: cli_1.CliInternals.quietFlagProvided(),
|
|
86
|
+
cancelSignal: null,
|
|
87
|
+
updatesDontOverwrite: false,
|
|
88
|
+
indent: false,
|
|
89
|
+
});
|
|
90
|
+
const renderProgress = {
|
|
91
|
+
doneIn: null,
|
|
92
|
+
progress: 0,
|
|
93
|
+
};
|
|
94
|
+
const updateProgress = () => {
|
|
95
|
+
progressBar.update([
|
|
96
|
+
`Rendering on Cloud Run: `,
|
|
97
|
+
cli_1.CliInternals.makeProgressBar(renderProgress.progress),
|
|
98
|
+
`${renderProgress.doneIn === null ? 'Rendering' : 'Rendered'}`,
|
|
99
|
+
renderProgress.doneIn === null
|
|
100
|
+
? `${Math.round(renderProgress.progress * 100)}%`
|
|
101
|
+
: cli_1.CliInternals.chalk.gray(`${renderProgress.doneIn}ms`),
|
|
102
|
+
].join(' '), false);
|
|
103
|
+
};
|
|
104
|
+
const updateRenderProgress = (progress, error) => {
|
|
105
|
+
if (error) {
|
|
106
|
+
// exiting progress and adding space
|
|
107
|
+
log_1.Log.info(`
|
|
108
|
+
|
|
109
|
+
`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
renderProgress.progress = progress;
|
|
113
|
+
updateProgress();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const res = await (0, render_media_on_cloudrun_1.renderMediaOnCloudrun)({
|
|
117
|
+
cloudRunUrl,
|
|
118
|
+
serveUrl,
|
|
119
|
+
region,
|
|
120
|
+
inputProps,
|
|
121
|
+
codec: codec,
|
|
122
|
+
imageFormat,
|
|
123
|
+
crf: crf !== null && crf !== void 0 ? crf : undefined,
|
|
124
|
+
envVariables,
|
|
125
|
+
pixelFormat,
|
|
126
|
+
proResProfile,
|
|
127
|
+
jpegQuality,
|
|
128
|
+
composition,
|
|
129
|
+
privacy,
|
|
130
|
+
frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : undefined,
|
|
131
|
+
outName,
|
|
132
|
+
chromiumOptions,
|
|
133
|
+
scale,
|
|
134
|
+
numberOfGifLoops,
|
|
135
|
+
everyNthFrame,
|
|
136
|
+
muted,
|
|
137
|
+
audioBitrate,
|
|
138
|
+
videoBitrate,
|
|
139
|
+
forceHeight: height,
|
|
140
|
+
forceWidth: width,
|
|
141
|
+
audioCodec,
|
|
142
|
+
forceBucketName,
|
|
143
|
+
updateRenderProgress,
|
|
144
|
+
logLevel: config_1.ConfigInternals.Logging.getLogLevel(),
|
|
145
|
+
// Special case: Should not use default local concurrency, or from
|
|
146
|
+
// config file, just when explicitly set
|
|
147
|
+
concurrency: (_b = cli_1.CliInternals.parsedCli.concurrency) !== null && _b !== void 0 ? _b : null,
|
|
148
|
+
delayRenderTimeoutInMilliseconds: puppeteerTimeout,
|
|
149
|
+
enforceAudioTrack,
|
|
150
|
+
preferLossless: false,
|
|
151
|
+
});
|
|
152
|
+
if (res.status === 'crash') {
|
|
153
|
+
let timeoutPreMsg = '';
|
|
154
|
+
const timeout = (0, extract_time_from_url_1.extractTimeoutFromURL)(res.cloudRunEndpoint);
|
|
155
|
+
const memoryLimit = (0, extract_mem_from_url_1.extractMemoryFromURL)(res.cloudRunEndpoint);
|
|
156
|
+
if (timeout && res.requestElapsedTimeInSeconds + 10 > timeout) {
|
|
157
|
+
timeoutPreMsg = `Render call likely timed out. Service timeout is ${timeout} seconds, and render took at least ${res.requestElapsedTimeInSeconds.toFixed(1)} seconds.\n`;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
timeoutPreMsg = `Crash unlikely due to timeout. Render took ${res.requestElapsedTimeInSeconds.toFixed(1)} seconds, below the timeout of ${timeout} seconds.\n`;
|
|
161
|
+
}
|
|
162
|
+
log_1.Log.error(`Error rendering on Cloud Run. The Cloud Run service did not return a response.\n
|
|
163
|
+
${timeoutPreMsg}The crash may be due to the service exceeding its memory limit of ${memoryLimit}.
|
|
164
|
+
Full logs are available at https://console.cloud.google.com/run?project=${process.env.REMOTION_GCP_PROJECT_ID}\n`);
|
|
165
|
+
const cloudLoggingClient = (0, get_cloud_logging_client_1.getCloudLoggingClient)();
|
|
166
|
+
const listLogEntriesRequest = {
|
|
167
|
+
resourceNames: [`projects/${process.env.REMOTION_GCP_PROJECT_ID}`],
|
|
168
|
+
filter: `logName=projects/${process.env.REMOTION_GCP_PROJECT_ID}/logs/run.googleapis.com%2Fvarlog%2Fsystem AND (severity=WARNING OR severity=ERROR) AND timestamp >= "${res.requestStartTime}"`,
|
|
169
|
+
};
|
|
170
|
+
const logCheckCountdown = cli_1.CliInternals.createOverwriteableCliOutput({
|
|
171
|
+
quiet: cli_1.CliInternals.quietFlagProvided(),
|
|
172
|
+
cancelSignal: null,
|
|
173
|
+
updatesDontOverwrite: false,
|
|
174
|
+
indent: false,
|
|
175
|
+
});
|
|
176
|
+
await (() => {
|
|
177
|
+
return new Promise((resolve) => {
|
|
178
|
+
let timeLeft = 30;
|
|
179
|
+
const intervalId = setInterval(() => {
|
|
180
|
+
logCheckCountdown.update(`GCP Cloud Logging takes time to ingest and index logs.\nFetching recent error/warning logs in ${timeLeft} seconds`, false);
|
|
181
|
+
timeLeft--;
|
|
182
|
+
if (timeLeft < 0) {
|
|
183
|
+
logCheckCountdown.update('Fetching logs...\n\n', false);
|
|
184
|
+
clearInterval(intervalId);
|
|
185
|
+
resolve();
|
|
186
|
+
}
|
|
187
|
+
}, 1000);
|
|
188
|
+
});
|
|
189
|
+
})();
|
|
190
|
+
const iterableLogListEntries = await cloudLoggingClient.listLogEntriesAsync(listLogEntriesRequest);
|
|
191
|
+
for await (const logResponse of iterableLogListEntries) {
|
|
192
|
+
const responseDate = new Date(Number(logResponse.timestamp.seconds) * 1000 +
|
|
193
|
+
Number(logResponse.timestamp.nanos) / 1000000);
|
|
194
|
+
const convertedDate = responseDate.toLocaleString();
|
|
195
|
+
log_1.Log.info(convertedDate);
|
|
196
|
+
log_1.Log.info(logResponse.textPayload);
|
|
197
|
+
log_1.Log.info();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else if (res.status === 'success') {
|
|
201
|
+
renderProgress.doneIn = Date.now() - renderStart;
|
|
202
|
+
updateProgress();
|
|
203
|
+
log_1.Log.info(`
|
|
204
|
+
|
|
205
|
+
`);
|
|
206
|
+
log_1.Log.info(cli_1.CliInternals.chalk.blueBright(`
|
|
207
|
+
${res.publicUrl ? `Public URL = ${decodeURIComponent(res.publicUrl)}` : ``}
|
|
208
|
+
Cloud Storage Uri = ${res.cloudStorageUri}
|
|
209
|
+
Size (KB) = ${Math.round(Number(res.size) / 1000)}
|
|
210
|
+
Bucket Name = ${res.bucketName}
|
|
211
|
+
Privacy = ${res.privacy}
|
|
212
|
+
Render ID = ${res.renderId}
|
|
213
|
+
Codec = ${codec} (${codecReason})
|
|
214
|
+
`.trim()));
|
|
215
|
+
if (downloadName) {
|
|
216
|
+
log_1.Log.info('');
|
|
217
|
+
log_1.Log.info('downloading file...');
|
|
218
|
+
const destination = await (0, download_file_1.downloadFile)({
|
|
219
|
+
bucketName: res.bucketName,
|
|
220
|
+
gsutilURI: res.cloudStorageUri,
|
|
221
|
+
downloadName,
|
|
222
|
+
});
|
|
223
|
+
log_1.Log.info(cli_1.CliInternals.chalk.blueBright(`Downloaded file to ${destination}!`));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
exports.renderCommand = renderCommand;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMediaSubcommand = exports.RENDER_MEDIA_SUBCOMMAND = void 0;
|
|
4
|
+
const cli_1 = require("@remotion/cli");
|
|
5
|
+
const render_media_on_cloudrun_1 = require("../../../api/render-media-on-cloudrun");
|
|
6
|
+
// import {validateMaxRetries} from '../../../shared/validate-retries';
|
|
7
|
+
const config_1 = require("@remotion/cli/config");
|
|
8
|
+
const renderer_1 = require("@remotion/renderer");
|
|
9
|
+
const download_file_1 = require("../../../api/download-file");
|
|
10
|
+
const validate_serveurl_1 = require("../../../shared/validate-serveurl");
|
|
11
|
+
const args_1 = require("../../args");
|
|
12
|
+
const log_1 = require("../../log");
|
|
13
|
+
const renderArgsCheck_1 = require("./helpers/renderArgsCheck");
|
|
14
|
+
exports.RENDER_MEDIA_SUBCOMMAND = 'media';
|
|
15
|
+
const renderMediaSubcommand = async (args, remotionRoot) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const { serveUrl, cloudRunUrl, outName, forceBucketName, downloadName, privacy, region, } = await (0, renderArgsCheck_1.renderArgsCheck)(exports.RENDER_MEDIA_SUBCOMMAND, args);
|
|
18
|
+
const { codec, reason: codecReason } = cli_1.CliInternals.getFinalOutputCodec({
|
|
19
|
+
cliFlag: cli_1.CliInternals.parsedCli.codec,
|
|
20
|
+
downloadName,
|
|
21
|
+
outName: outName !== null && outName !== void 0 ? outName : null,
|
|
22
|
+
configFile: (_a = config_1.ConfigInternals.getOutputCodecOrUndefined()) !== null && _a !== void 0 ? _a : null,
|
|
23
|
+
uiCodec: null,
|
|
24
|
+
});
|
|
25
|
+
const imageFormat = args_1.parsedCloudrunCli['image-format'];
|
|
26
|
+
const audioCodec = args_1.parsedCloudrunCli['audio-codec'];
|
|
27
|
+
const { chromiumOptions, crf, envVariables, frameRange, inputProps, logLevel, puppeteerTimeout, pixelFormat, proResProfile, jpegQuality, scale, everyNthFrame, numberOfGifLoops, muted, audioBitrate, videoBitrate, height, width, browserExecutable, port, } = await cli_1.CliInternals.getCliOptions({
|
|
28
|
+
type: 'series',
|
|
29
|
+
isLambda: true,
|
|
30
|
+
remotionRoot,
|
|
31
|
+
});
|
|
32
|
+
let composition = args[1];
|
|
33
|
+
if (!composition) {
|
|
34
|
+
log_1.Log.info('No compositions passed. Fetching compositions...');
|
|
35
|
+
(0, validate_serveurl_1.validateServeUrl)(serveUrl);
|
|
36
|
+
const server = renderer_1.RenderInternals.prepareServer({
|
|
37
|
+
concurrency: 1,
|
|
38
|
+
indent: false,
|
|
39
|
+
port,
|
|
40
|
+
remotionRoot,
|
|
41
|
+
verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
|
|
42
|
+
webpackConfigOrServeUrl: serveUrl,
|
|
43
|
+
});
|
|
44
|
+
const { compositionId } = await cli_1.CliInternals.getCompositionWithDimensionOverride({
|
|
45
|
+
args,
|
|
46
|
+
compositionIdFromUi: null,
|
|
47
|
+
browserExecutable,
|
|
48
|
+
chromiumOptions,
|
|
49
|
+
envVariables,
|
|
50
|
+
height,
|
|
51
|
+
indent: false,
|
|
52
|
+
inputProps,
|
|
53
|
+
port,
|
|
54
|
+
puppeteerInstance: undefined,
|
|
55
|
+
serveUrlOrWebpackUrl: serveUrl,
|
|
56
|
+
timeoutInMilliseconds: puppeteerTimeout,
|
|
57
|
+
verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
|
|
58
|
+
width,
|
|
59
|
+
server: await server,
|
|
60
|
+
});
|
|
61
|
+
composition = compositionId;
|
|
62
|
+
}
|
|
63
|
+
// Todo: Check cloudRunUrl is valid, as the error message is obtuse
|
|
64
|
+
cli_1.CliInternals.Log.info(cli_1.CliInternals.chalk.gray(`
|
|
65
|
+
Cloud Run Service URL = ${cloudRunUrl}
|
|
66
|
+
Region = ${region}
|
|
67
|
+
Type = media
|
|
68
|
+
Composition = ${composition}
|
|
69
|
+
Codec = ${codec}
|
|
70
|
+
Output Bucket = ${forceBucketName}
|
|
71
|
+
Output File = ${outName !== null && outName !== void 0 ? outName : 'out.mp4'}
|
|
72
|
+
Output File Privacy = ${privacy}
|
|
73
|
+
${downloadName ? ` Downloaded File = ${downloadName}` : ''}
|
|
74
|
+
`.trim()));
|
|
75
|
+
log_1.Log.info();
|
|
76
|
+
const renderStart = Date.now();
|
|
77
|
+
const progressBar = cli_1.CliInternals.createOverwriteableCliOutput({
|
|
78
|
+
quiet: cli_1.CliInternals.quietFlagProvided(),
|
|
79
|
+
cancelSignal: null,
|
|
80
|
+
updatesDontOverwrite: false,
|
|
81
|
+
indent: false,
|
|
82
|
+
});
|
|
83
|
+
const renderProgress = {
|
|
84
|
+
doneIn: null,
|
|
85
|
+
progress: 0,
|
|
86
|
+
};
|
|
87
|
+
const updateProgress = () => {
|
|
88
|
+
progressBar.update([
|
|
89
|
+
`Rendering on Cloud Run: `,
|
|
90
|
+
cli_1.CliInternals.makeProgressBar(renderProgress.progress),
|
|
91
|
+
`${renderProgress.doneIn === null ? 'Rendering' : 'Rendered'}`,
|
|
92
|
+
renderProgress.doneIn === null
|
|
93
|
+
? `${Math.round(renderProgress.progress * 100)}%`
|
|
94
|
+
: cli_1.CliInternals.chalk.gray(`${renderProgress.doneIn}ms`),
|
|
95
|
+
].join(' '), false);
|
|
96
|
+
};
|
|
97
|
+
const updateRenderProgress = (progress) => {
|
|
98
|
+
renderProgress.progress = progress;
|
|
99
|
+
updateProgress();
|
|
100
|
+
};
|
|
101
|
+
const res = await (0, render_media_on_cloudrun_1.renderMediaOnCloudrun)({
|
|
102
|
+
cloudRunUrl,
|
|
103
|
+
serveUrl,
|
|
104
|
+
region,
|
|
105
|
+
inputProps,
|
|
106
|
+
codec: codec,
|
|
107
|
+
imageFormat,
|
|
108
|
+
crf: crf !== null && crf !== void 0 ? crf : undefined,
|
|
109
|
+
envVariables,
|
|
110
|
+
pixelFormat,
|
|
111
|
+
proResProfile,
|
|
112
|
+
jpegQuality,
|
|
113
|
+
composition,
|
|
114
|
+
privacy,
|
|
115
|
+
frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : undefined,
|
|
116
|
+
outName,
|
|
117
|
+
chromiumOptions,
|
|
118
|
+
scale,
|
|
119
|
+
numberOfGifLoops,
|
|
120
|
+
everyNthFrame,
|
|
121
|
+
muted,
|
|
122
|
+
audioBitrate,
|
|
123
|
+
videoBitrate,
|
|
124
|
+
forceHeight: height,
|
|
125
|
+
forceWidth: width,
|
|
126
|
+
audioCodec,
|
|
127
|
+
forceBucketName,
|
|
128
|
+
updateRenderProgress,
|
|
129
|
+
logLevel: config_1.ConfigInternals.Logging.getLogLevel(),
|
|
130
|
+
});
|
|
131
|
+
renderProgress.doneIn = Date.now() - renderStart;
|
|
132
|
+
updateProgress();
|
|
133
|
+
log_1.Log.info(`
|
|
134
|
+
|
|
135
|
+
`);
|
|
136
|
+
log_1.Log.info(cli_1.CliInternals.chalk.blueBright(`
|
|
137
|
+
${res.publicUrl ? `Public URL = ${decodeURIComponent(res.publicUrl)}` : ``}
|
|
138
|
+
Cloud Storage Uri = ${res.cloudStorageUri}
|
|
139
|
+
Size (KB) = ${Math.round(Number(res.size) / 1000)}
|
|
140
|
+
Bucket Name = ${res.bucketName}
|
|
141
|
+
Privacy = ${res.privacy}
|
|
142
|
+
Render ID = ${res.renderId}
|
|
143
|
+
Codec = ${codec} (${codecReason})
|
|
144
|
+
`.trim()));
|
|
145
|
+
if (downloadName) {
|
|
146
|
+
log_1.Log.info('');
|
|
147
|
+
log_1.Log.info('downloading file...');
|
|
148
|
+
const destination = await (0, download_file_1.downloadFile)({
|
|
149
|
+
bucketName: res.bucketName,
|
|
150
|
+
gsutilURI: res.cloudStorageUri,
|
|
151
|
+
downloadName,
|
|
152
|
+
});
|
|
153
|
+
log_1.Log.info(cli_1.CliInternals.chalk.blueBright(`Downloaded file to ${destination}!`));
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
exports.renderMediaSubcommand = renderMediaSubcommand;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderStillSubcommand = exports.RENDER_STILL_SUBCOMMAND = void 0;
|
|
4
|
+
const cli_1 = require("@remotion/cli");
|
|
5
|
+
const config_1 = require("@remotion/cli/config");
|
|
6
|
+
const renderer_1 = require("@remotion/renderer");
|
|
7
|
+
const download_file_1 = require("../../../api/download-file");
|
|
8
|
+
const render_still_on_cloudrun_1 = require("../../../api/render-still-on-cloudrun");
|
|
9
|
+
const validate_serveurl_1 = require("../../../shared/validate-serveurl");
|
|
10
|
+
const log_1 = require("../../log");
|
|
11
|
+
const renderArgsCheck_1 = require("./helpers/renderArgsCheck");
|
|
12
|
+
exports.RENDER_STILL_SUBCOMMAND = 'still';
|
|
13
|
+
const renderStillSubcommand = async (args, remotionRoot) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const { serveUrl, cloudRunUrl, outName, forceBucketName, privacy, downloadName, region, } = await (0, renderArgsCheck_1.renderArgsCheck)(exports.RENDER_STILL_SUBCOMMAND, args);
|
|
16
|
+
const { chromiumOptions, envVariables, inputProps, logLevel, puppeteerTimeout, jpegQuality, stillFrame, scale, height, width, browserExecutable, port, } = await cli_1.CliInternals.getCliOptions({
|
|
17
|
+
type: 'still',
|
|
18
|
+
isLambda: true,
|
|
19
|
+
remotionRoot,
|
|
20
|
+
});
|
|
21
|
+
let composition = args[1];
|
|
22
|
+
if (!composition) {
|
|
23
|
+
log_1.Log.info('No compositions passed. Fetching compositions...');
|
|
24
|
+
(0, validate_serveurl_1.validateServeUrl)(serveUrl);
|
|
25
|
+
const server = renderer_1.RenderInternals.prepareServer({
|
|
26
|
+
concurrency: 1,
|
|
27
|
+
indent: false,
|
|
28
|
+
port,
|
|
29
|
+
remotionRoot,
|
|
30
|
+
verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
|
|
31
|
+
webpackConfigOrServeUrl: serveUrl,
|
|
32
|
+
});
|
|
33
|
+
const { compositionId } = await cli_1.CliInternals.getCompositionWithDimensionOverride({
|
|
34
|
+
args,
|
|
35
|
+
compositionIdFromUi: null,
|
|
36
|
+
indent: false,
|
|
37
|
+
serveUrlOrWebpackUrl: serveUrl,
|
|
38
|
+
verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
|
|
39
|
+
browserExecutable,
|
|
40
|
+
chromiumOptions,
|
|
41
|
+
envVariables,
|
|
42
|
+
inputProps,
|
|
43
|
+
port,
|
|
44
|
+
puppeteerInstance: undefined,
|
|
45
|
+
timeoutInMilliseconds: puppeteerTimeout,
|
|
46
|
+
height,
|
|
47
|
+
width,
|
|
48
|
+
server: await server,
|
|
49
|
+
});
|
|
50
|
+
composition = compositionId;
|
|
51
|
+
}
|
|
52
|
+
const { format: imageFormat, source: imageFormatReason } = cli_1.CliInternals.determineFinalStillImageFormat({
|
|
53
|
+
downloadName,
|
|
54
|
+
outName: outName !== null && outName !== void 0 ? outName : null,
|
|
55
|
+
cliFlag: (_a = cli_1.CliInternals.parsedCli['image-format']) !== null && _a !== void 0 ? _a : null,
|
|
56
|
+
isLambda: true,
|
|
57
|
+
fromUi: null,
|
|
58
|
+
configImageFormat: (_b = config_1.ConfigInternals.getUserPreferredStillImageFormat()) !== null && _b !== void 0 ? _b : null,
|
|
59
|
+
});
|
|
60
|
+
log_1.Log.verbose(`Image format: (${imageFormat}), ${imageFormatReason}`);
|
|
61
|
+
// Todo: Check cloudRunUrl is valid, as the error message is obtuse
|
|
62
|
+
cli_1.CliInternals.Log.info(cli_1.CliInternals.chalk.gray(`
|
|
63
|
+
Cloud Run Service URL = ${cloudRunUrl}
|
|
64
|
+
Region = ${region}
|
|
65
|
+
Type = still
|
|
66
|
+
Composition = ${composition}
|
|
67
|
+
Output Bucket = ${forceBucketName}
|
|
68
|
+
Output File = ${outName !== null && outName !== void 0 ? outName : 'out.png'}
|
|
69
|
+
Output File Privacy = ${privacy}
|
|
70
|
+
${downloadName ? ` Downloaded File = ${downloadName}` : ''}
|
|
71
|
+
`.trim()));
|
|
72
|
+
log_1.Log.info();
|
|
73
|
+
const renderStart = Date.now();
|
|
74
|
+
const progressBar = cli_1.CliInternals.createOverwriteableCliOutput({
|
|
75
|
+
quiet: cli_1.CliInternals.quietFlagProvided(),
|
|
76
|
+
cancelSignal: null,
|
|
77
|
+
updatesDontOverwrite: false,
|
|
78
|
+
indent: false,
|
|
79
|
+
});
|
|
80
|
+
let doneIn = null;
|
|
81
|
+
const updateProgress = (newline) => {
|
|
82
|
+
progressBar.update([
|
|
83
|
+
`Rendering on Cloud Run:`,
|
|
84
|
+
`${doneIn === null ? '...' : `Rendered in ${doneIn}ms`}`,
|
|
85
|
+
].join(' '), newline);
|
|
86
|
+
};
|
|
87
|
+
const res = await (0, render_still_on_cloudrun_1.renderStillOnCloudrun)({
|
|
88
|
+
cloudRunUrl,
|
|
89
|
+
serveUrl,
|
|
90
|
+
region,
|
|
91
|
+
inputProps,
|
|
92
|
+
imageFormat,
|
|
93
|
+
composition,
|
|
94
|
+
privacy,
|
|
95
|
+
envVariables,
|
|
96
|
+
frame: stillFrame,
|
|
97
|
+
jpegQuality,
|
|
98
|
+
chromiumOptions,
|
|
99
|
+
scale,
|
|
100
|
+
forceHeight: height,
|
|
101
|
+
forceWidth: width,
|
|
102
|
+
forceBucketName,
|
|
103
|
+
outName,
|
|
104
|
+
logLevel: config_1.ConfigInternals.Logging.getLogLevel(),
|
|
105
|
+
});
|
|
106
|
+
doneIn = Date.now() - renderStart;
|
|
107
|
+
updateProgress(true);
|
|
108
|
+
log_1.Log.info(cli_1.CliInternals.chalk.gray(`Cloud Storage Uri = ${res.cloudStorageUri}`));
|
|
109
|
+
log_1.Log.info(cli_1.CliInternals.chalk.gray(`Render ID = ${res.renderId}`));
|
|
110
|
+
log_1.Log.info(cli_1.CliInternals.chalk.gray(`${Math.round(Number(res.size) / 1000)} KB, Privacy: ${res.privacy}, Bucket: ${res.bucketName}`));
|
|
111
|
+
log_1.Log.info(cli_1.CliInternals.chalk.blue(`○ ${res.publicUrl}`));
|
|
112
|
+
if (downloadName) {
|
|
113
|
+
log_1.Log.info('');
|
|
114
|
+
log_1.Log.info('downloading file...');
|
|
115
|
+
const destination = await (0, download_file_1.downloadFile)({
|
|
116
|
+
bucketName: res.bucketName,
|
|
117
|
+
gsutilURI: res.cloudStorageUri,
|
|
118
|
+
downloadName,
|
|
119
|
+
});
|
|
120
|
+
log_1.Log.info(cli_1.CliInternals.chalk.blueBright(`Downloaded file to ${destination}!`));
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
exports.renderStillSubcommand = renderStillSubcommand;
|