@remotion/promo-pages 4.0.446 → 4.0.448
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/dist/Homepage.js +303 -42
- package/dist/components/experts/experts-data.js +13 -0
- package/dist/components/homepage/CommunityStatsItems.js +4 -4
- package/dist/components/homepage/GitHubButton.js +1 -1
- package/dist/components/homepage/RealMp4Videos.js +1 -1
- package/dist/components/prompts/PromptsGallery.js +1 -1
- package/dist/components/prompts/PromptsSubmit.js +2 -2
- package/dist/components/team/TitleTeamCards.js +1 -1
- package/dist/components/team.js +2 -1
- package/dist/design.js +18 -9
- package/dist/experts.js +18 -9
- package/dist/homepage/Pricing.js +18 -9
- package/dist/prompts/PromptsGallery.js +18 -9
- package/dist/prompts/PromptsShow.js +18 -9
- package/dist/prompts/PromptsSubmit.js +18 -9
- package/dist/team.js +18 -9
- package/dist/template-modal-content.js +18 -9
- package/dist/templates.js +19 -9
- package/package.json +13 -13
package/dist/Homepage.js
CHANGED
|
@@ -1568,7 +1568,8 @@ var useResolvedVideoConfig = (preferredCompositionId) => {
|
|
|
1568
1568
|
defaultOutName: null,
|
|
1569
1569
|
defaultVideoImageFormat: null,
|
|
1570
1570
|
defaultPixelFormat: null,
|
|
1571
|
-
defaultProResProfile: null
|
|
1571
|
+
defaultProResProfile: null,
|
|
1572
|
+
defaultSampleRate: null
|
|
1572
1573
|
}
|
|
1573
1574
|
};
|
|
1574
1575
|
}
|
|
@@ -2042,7 +2043,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
|
|
|
2042
2043
|
var addSequenceStackTraces = (component) => {
|
|
2043
2044
|
componentsToAddStacksTo.push(component);
|
|
2044
2045
|
};
|
|
2045
|
-
var VERSION = "4.0.
|
|
2046
|
+
var VERSION = "4.0.448";
|
|
2046
2047
|
var checkMultipleRemotionVersions = () => {
|
|
2047
2048
|
if (typeof globalThis === "undefined") {
|
|
2048
2049
|
return;
|
|
@@ -2281,7 +2282,8 @@ var useUnsafeVideoConfig = () => {
|
|
|
2281
2282
|
defaultOutName,
|
|
2282
2283
|
defaultVideoImageFormat,
|
|
2283
2284
|
defaultPixelFormat,
|
|
2284
|
-
defaultProResProfile
|
|
2285
|
+
defaultProResProfile,
|
|
2286
|
+
defaultSampleRate
|
|
2285
2287
|
} = video;
|
|
2286
2288
|
return {
|
|
2287
2289
|
id,
|
|
@@ -2295,7 +2297,8 @@ var useUnsafeVideoConfig = () => {
|
|
|
2295
2297
|
defaultOutName,
|
|
2296
2298
|
defaultVideoImageFormat,
|
|
2297
2299
|
defaultPixelFormat,
|
|
2298
|
-
defaultProResProfile
|
|
2300
|
+
defaultProResProfile,
|
|
2301
|
+
defaultSampleRate
|
|
2299
2302
|
};
|
|
2300
2303
|
}, [ctxDuration, ctxHeight, ctxWidth, video]);
|
|
2301
2304
|
};
|
|
@@ -6629,6 +6632,7 @@ var validateCalculated = ({
|
|
|
6629
6632
|
const defaultVideoImageFormat = calculated?.defaultVideoImageFormat;
|
|
6630
6633
|
const defaultPixelFormat = calculated?.defaultPixelFormat;
|
|
6631
6634
|
const defaultProResProfile = calculated?.defaultProResProfile;
|
|
6635
|
+
const defaultSampleRate = calculated?.defaultSampleRate;
|
|
6632
6636
|
return {
|
|
6633
6637
|
width,
|
|
6634
6638
|
height,
|
|
@@ -6638,7 +6642,8 @@ var validateCalculated = ({
|
|
|
6638
6642
|
defaultOutName,
|
|
6639
6643
|
defaultVideoImageFormat,
|
|
6640
6644
|
defaultPixelFormat,
|
|
6641
|
-
defaultProResProfile
|
|
6645
|
+
defaultProResProfile,
|
|
6646
|
+
defaultSampleRate
|
|
6642
6647
|
};
|
|
6643
6648
|
};
|
|
6644
6649
|
var resolveVideoConfig = ({
|
|
@@ -6670,7 +6675,8 @@ var resolveVideoConfig = ({
|
|
|
6670
6675
|
defaultOutName,
|
|
6671
6676
|
defaultVideoImageFormat,
|
|
6672
6677
|
defaultPixelFormat,
|
|
6673
|
-
defaultProResProfile
|
|
6678
|
+
defaultProResProfile,
|
|
6679
|
+
defaultSampleRate
|
|
6674
6680
|
} = validateCalculated({
|
|
6675
6681
|
calculated: c2,
|
|
6676
6682
|
compositionDurationInFrames,
|
|
@@ -6691,7 +6697,8 @@ var resolveVideoConfig = ({
|
|
|
6691
6697
|
defaultOutName: defaultOutName ?? null,
|
|
6692
6698
|
defaultVideoImageFormat: defaultVideoImageFormat ?? null,
|
|
6693
6699
|
defaultPixelFormat: defaultPixelFormat ?? null,
|
|
6694
|
-
defaultProResProfile: defaultProResProfile ?? null
|
|
6700
|
+
defaultProResProfile: defaultProResProfile ?? null,
|
|
6701
|
+
defaultSampleRate: defaultSampleRate ?? null
|
|
6695
6702
|
};
|
|
6696
6703
|
});
|
|
6697
6704
|
}
|
|
@@ -6713,7 +6720,8 @@ var resolveVideoConfig = ({
|
|
|
6713
6720
|
defaultOutName: null,
|
|
6714
6721
|
defaultVideoImageFormat: null,
|
|
6715
6722
|
defaultPixelFormat: null,
|
|
6716
|
-
defaultProResProfile: null
|
|
6723
|
+
defaultProResProfile: null,
|
|
6724
|
+
defaultSampleRate: null
|
|
6717
6725
|
};
|
|
6718
6726
|
}
|
|
6719
6727
|
return {
|
|
@@ -6725,7 +6733,8 @@ var resolveVideoConfig = ({
|
|
|
6725
6733
|
defaultOutName: calculatedProm.defaultOutName ?? null,
|
|
6726
6734
|
defaultVideoImageFormat: calculatedProm.defaultVideoImageFormat ?? null,
|
|
6727
6735
|
defaultPixelFormat: calculatedProm.defaultPixelFormat ?? null,
|
|
6728
|
-
defaultProResProfile: calculatedProm.defaultProResProfile ?? null
|
|
6736
|
+
defaultProResProfile: calculatedProm.defaultProResProfile ?? null,
|
|
6737
|
+
defaultSampleRate: calculatedProm.defaultSampleRate ?? null
|
|
6729
6738
|
};
|
|
6730
6739
|
};
|
|
6731
6740
|
var resolveVideoConfigOrCatch = (params) => {
|
|
@@ -23412,7 +23421,7 @@ var GitHubStars = () => {
|
|
|
23412
23421
|
width: "45px"
|
|
23413
23422
|
}),
|
|
23414
23423
|
/* @__PURE__ */ jsx50(StatItemContent, {
|
|
23415
|
-
content: "
|
|
23424
|
+
content: "42k",
|
|
23416
23425
|
width: "80px",
|
|
23417
23426
|
fontSize: "2.5rem",
|
|
23418
23427
|
fontWeight: "bold"
|
|
@@ -27223,6 +27232,7 @@ var SharedPlayerContexts = ({
|
|
|
27223
27232
|
defaultOutName: null,
|
|
27224
27233
|
defaultPixelFormat: null,
|
|
27225
27234
|
defaultProResProfile: null,
|
|
27235
|
+
defaultSampleRate: null,
|
|
27226
27236
|
defaultVideoImageFormat: null,
|
|
27227
27237
|
durationInFrames,
|
|
27228
27238
|
fps,
|
|
@@ -29037,7 +29047,7 @@ var isAlreadyQueued = (time, queuedPeriod) => {
|
|
|
29037
29047
|
return time >= queuedPeriod.from && time < queuedPeriod.until;
|
|
29038
29048
|
};
|
|
29039
29049
|
var AUDIO_PRIMING_SECONDS = 0.5;
|
|
29040
|
-
var PREDECODE_AHEAD_SECONDS =
|
|
29050
|
+
var PREDECODE_AHEAD_SECONDS = 2;
|
|
29041
29051
|
function makePredecodingIterator(inner2) {
|
|
29042
29052
|
const buffer = [];
|
|
29043
29053
|
let consumerEndTime = 0;
|
|
@@ -29216,7 +29226,7 @@ var makePrewarmedAudioIteratorCache = (audioSink) => {
|
|
|
29216
29226
|
destroy
|
|
29217
29227
|
};
|
|
29218
29228
|
};
|
|
29219
|
-
var MAX_BUFFER_AHEAD_SECONDS =
|
|
29229
|
+
var MAX_BUFFER_AHEAD_SECONDS = 2;
|
|
29220
29230
|
var audioIteratorManager = ({
|
|
29221
29231
|
audioTrack,
|
|
29222
29232
|
delayPlaybackHandleIfNotPremounting,
|
|
@@ -29731,8 +29741,10 @@ var videoIteratorManager = ({
|
|
|
29731
29741
|
let framesRendered = 0;
|
|
29732
29742
|
let currentDelayHandle = null;
|
|
29733
29743
|
if (canvas) {
|
|
29734
|
-
canvas.width
|
|
29735
|
-
|
|
29744
|
+
if (canvas.width !== videoTrack.displayWidth || canvas.height !== videoTrack.displayHeight) {
|
|
29745
|
+
canvas.width = videoTrack.displayWidth;
|
|
29746
|
+
canvas.height = videoTrack.displayHeight;
|
|
29747
|
+
}
|
|
29736
29748
|
}
|
|
29737
29749
|
const canvasSink = new CanvasSink(videoTrack, {
|
|
29738
29750
|
poolSize: 2,
|
|
@@ -31831,7 +31843,12 @@ var applyVolume = (array, volume) => {
|
|
|
31831
31843
|
}
|
|
31832
31844
|
};
|
|
31833
31845
|
var TARGET_NUMBER_OF_CHANNELS = 2;
|
|
31834
|
-
var
|
|
31846
|
+
var getTargetSampleRate = () => {
|
|
31847
|
+
if (typeof window !== "undefined" && window.remotion_sampleRate) {
|
|
31848
|
+
return window.remotion_sampleRate;
|
|
31849
|
+
}
|
|
31850
|
+
return 48000;
|
|
31851
|
+
};
|
|
31835
31852
|
var fixFloatingPoint = (value) => {
|
|
31836
31853
|
if (value % 1 < 0.0000001) {
|
|
31837
31854
|
return Math.floor(value);
|
|
@@ -31960,7 +31977,7 @@ var convertAudioData = ({
|
|
|
31960
31977
|
sampleRate: currentSampleRate,
|
|
31961
31978
|
numberOfFrames
|
|
31962
31979
|
} = audioData;
|
|
31963
|
-
const ratio = currentSampleRate /
|
|
31980
|
+
const ratio = currentSampleRate / getTargetSampleRate();
|
|
31964
31981
|
const frameOffset = Math.floor(fixFloatingPoint2(trimStartInSeconds * audioData.sampleRate));
|
|
31965
31982
|
const unroundedFrameCount = numberOfFrames - trimEndInSeconds * audioData.sampleRate - frameOffset;
|
|
31966
31983
|
const frameCount = isLast ? ceilButNotIfFloatingPointIssue(unroundedFrameCount) : Math.round(unroundedFrameCount);
|
|
@@ -32007,7 +32024,7 @@ var convertAudioData = ({
|
|
|
32007
32024
|
data: srcChannels,
|
|
32008
32025
|
numberOfFrames: newNumberOfFrames,
|
|
32009
32026
|
timestamp: audioDataTimestamp * 1e6 + fixFloatingPoint2(timestampOffsetMicroseconds),
|
|
32010
|
-
durationInMicroSeconds: fixFloatingPoint2(newNumberOfFrames /
|
|
32027
|
+
durationInMicroSeconds: fixFloatingPoint2(newNumberOfFrames / getTargetSampleRate() * 1e6)
|
|
32011
32028
|
};
|
|
32012
32029
|
}
|
|
32013
32030
|
resampleAudioData({
|
|
@@ -32021,7 +32038,7 @@ var convertAudioData = ({
|
|
|
32021
32038
|
data,
|
|
32022
32039
|
numberOfFrames: newNumberOfFrames,
|
|
32023
32040
|
timestamp: audioDataTimestamp * 1e6 + fixFloatingPoint2(timestampOffsetMicroseconds),
|
|
32024
|
-
durationInMicroSeconds: fixFloatingPoint2(newNumberOfFrames /
|
|
32041
|
+
durationInMicroSeconds: fixFloatingPoint2(newNumberOfFrames / getTargetSampleRate() * 1e6)
|
|
32025
32042
|
};
|
|
32026
32043
|
return newAudioData;
|
|
32027
32044
|
};
|
|
@@ -32266,12 +32283,12 @@ var extractAudioInternal = async ({
|
|
|
32266
32283
|
if (isFirstSample) {
|
|
32267
32284
|
trimStartInSeconds = fixFloatingPoint2(timeInSeconds - sample.timestamp);
|
|
32268
32285
|
if (trimStartInSeconds < 0) {
|
|
32269
|
-
const silenceFrames = Math.ceil(fixFloatingPoint2(-trimStartInSeconds *
|
|
32286
|
+
const silenceFrames = Math.ceil(fixFloatingPoint2(-trimStartInSeconds * getTargetSampleRate()));
|
|
32270
32287
|
leadingSilence = {
|
|
32271
32288
|
data: new Int16Array(silenceFrames * TARGET_NUMBER_OF_CHANNELS),
|
|
32272
32289
|
numberOfFrames: silenceFrames,
|
|
32273
32290
|
timestamp: timeInSeconds * 1e6,
|
|
32274
|
-
durationInMicroSeconds: silenceFrames /
|
|
32291
|
+
durationInMicroSeconds: silenceFrames / getTargetSampleRate() * 1e6
|
|
32275
32292
|
};
|
|
32276
32293
|
trimStartInSeconds = 0;
|
|
32277
32294
|
}
|
|
@@ -32908,7 +32925,7 @@ var AudioForRendering2 = ({
|
|
|
32908
32925
|
audio: environment.isClientSideRendering ? audio.data : Array.from(audio.data),
|
|
32909
32926
|
frame: absoluteFrame,
|
|
32910
32927
|
timestamp: audio.timestamp,
|
|
32911
|
-
duration: audio.numberOfFrames /
|
|
32928
|
+
duration: audio.numberOfFrames / getTargetSampleRate() * 1e6,
|
|
32912
32929
|
toneFrequency: toneFrequency ?? 1
|
|
32913
32930
|
});
|
|
32914
32931
|
}
|
|
@@ -33024,6 +33041,27 @@ var AudioInner = (props) => {
|
|
|
33024
33041
|
};
|
|
33025
33042
|
var Audio2 = Internals.wrapInSchema(AudioInner, audioSchema);
|
|
33026
33043
|
Internals.addSequenceStackTraces(Audio2);
|
|
33044
|
+
var cache2 = new Map;
|
|
33045
|
+
var cacheVideoFrame = (src, sourceCanvas) => {
|
|
33046
|
+
const { width, height } = sourceCanvas;
|
|
33047
|
+
if (width === 0 || height === 0) {
|
|
33048
|
+
return;
|
|
33049
|
+
}
|
|
33050
|
+
let cached = cache2.get(src);
|
|
33051
|
+
if (!cached || cached.width !== width || cached.height !== height) {
|
|
33052
|
+
cached = new OffscreenCanvas(width, height);
|
|
33053
|
+
cache2.set(src, cached);
|
|
33054
|
+
}
|
|
33055
|
+
const ctx = cached.getContext("2d");
|
|
33056
|
+
if (!ctx) {
|
|
33057
|
+
return;
|
|
33058
|
+
}
|
|
33059
|
+
ctx.clearRect(0, 0, width, height);
|
|
33060
|
+
ctx.drawImage(sourceCanvas, 0, 0);
|
|
33061
|
+
};
|
|
33062
|
+
var getCachedVideoFrame = (src) => {
|
|
33063
|
+
return cache2.get(src) ?? null;
|
|
33064
|
+
};
|
|
33027
33065
|
var OBJECT_FIT_CLASS_PATTERN = /\bobject-(contain|cover|fill|none|scale-down)\b/;
|
|
33028
33066
|
var warnedStyle = false;
|
|
33029
33067
|
var warnedClassName = false;
|
|
@@ -33079,7 +33117,8 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
33079
33117
|
onError,
|
|
33080
33118
|
credentials,
|
|
33081
33119
|
controls,
|
|
33082
|
-
objectFit: objectFitProp
|
|
33120
|
+
objectFit: objectFitProp,
|
|
33121
|
+
_experimentalInitiallyDrawCachedFrame
|
|
33083
33122
|
}) => {
|
|
33084
33123
|
const src = usePreload22(unpreloadedSrc);
|
|
33085
33124
|
const canvasRef = useRef212(null);
|
|
@@ -33156,6 +33195,44 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
33156
33195
|
const initialMuted = useRef212(effectiveMuted);
|
|
33157
33196
|
const initialDurationInFrames = useRef212(videoConfig.durationInFrames);
|
|
33158
33197
|
const initialSequenceOffset = useRef212(sequenceOffset);
|
|
33198
|
+
const hasDrawnRealFrameRef = useRef212(false);
|
|
33199
|
+
const isPremountingRef = useRef212(isPremounting);
|
|
33200
|
+
isPremountingRef.current = isPremounting;
|
|
33201
|
+
useLayoutEffect34(() => {
|
|
33202
|
+
if (!_experimentalInitiallyDrawCachedFrame) {
|
|
33203
|
+
return;
|
|
33204
|
+
}
|
|
33205
|
+
const canvas = canvasRef.current;
|
|
33206
|
+
if (!canvas) {
|
|
33207
|
+
return;
|
|
33208
|
+
}
|
|
33209
|
+
const cached = getCachedVideoFrame(src);
|
|
33210
|
+
if (!cached) {
|
|
33211
|
+
return;
|
|
33212
|
+
}
|
|
33213
|
+
canvas.width = cached.width;
|
|
33214
|
+
canvas.height = cached.height;
|
|
33215
|
+
const ctx = canvas.getContext("2d", {
|
|
33216
|
+
alpha: true,
|
|
33217
|
+
desynchronized: true
|
|
33218
|
+
});
|
|
33219
|
+
if (!ctx) {
|
|
33220
|
+
return;
|
|
33221
|
+
}
|
|
33222
|
+
ctx.drawImage(cached, 0, 0);
|
|
33223
|
+
}, [_experimentalInitiallyDrawCachedFrame, src]);
|
|
33224
|
+
useLayoutEffect34(() => {
|
|
33225
|
+
if (!_experimentalInitiallyDrawCachedFrame) {
|
|
33226
|
+
return;
|
|
33227
|
+
}
|
|
33228
|
+
const canvas = canvasRef.current;
|
|
33229
|
+
return () => {
|
|
33230
|
+
if (!canvas || !hasDrawnRealFrameRef.current || isPremountingRef.current) {
|
|
33231
|
+
return;
|
|
33232
|
+
}
|
|
33233
|
+
cacheVideoFrame(src, canvas);
|
|
33234
|
+
};
|
|
33235
|
+
}, [_experimentalInitiallyDrawCachedFrame, src]);
|
|
33159
33236
|
useEffect312(() => {
|
|
33160
33237
|
if (!sharedAudioContext)
|
|
33161
33238
|
return;
|
|
@@ -33224,6 +33301,7 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
33224
33301
|
if (result.type === "success") {
|
|
33225
33302
|
setMediaPlayerReady(true);
|
|
33226
33303
|
setMediaDurationInSeconds(result.durationInSeconds);
|
|
33304
|
+
hasDrawnRealFrameRef.current = true;
|
|
33227
33305
|
}
|
|
33228
33306
|
}).catch((error2) => {
|
|
33229
33307
|
const [action, errorToUse] = callOnErrorAndResolve({
|
|
@@ -33261,6 +33339,7 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
33261
33339
|
}
|
|
33262
33340
|
setMediaPlayerReady(false);
|
|
33263
33341
|
setShouldFallbackToNativeVideo(false);
|
|
33342
|
+
hasDrawnRealFrameRef.current = false;
|
|
33264
33343
|
};
|
|
33265
33344
|
}, [
|
|
33266
33345
|
audioStreamIndex,
|
|
@@ -33566,7 +33645,7 @@ var VideoForRendering2 = ({
|
|
|
33566
33645
|
audio: environment.isClientSideRendering ? audio.data : Array.from(audio.data),
|
|
33567
33646
|
frame: absoluteFrame,
|
|
33568
33647
|
timestamp: audio.timestamp,
|
|
33569
|
-
duration: audio.numberOfFrames /
|
|
33648
|
+
duration: audio.numberOfFrames / getTargetSampleRate() * 1e6,
|
|
33570
33649
|
toneFrequency
|
|
33571
33650
|
});
|
|
33572
33651
|
}
|
|
@@ -33759,7 +33838,8 @@ var InnerVideo = ({
|
|
|
33759
33838
|
onError,
|
|
33760
33839
|
credentials,
|
|
33761
33840
|
controls,
|
|
33762
|
-
objectFit
|
|
33841
|
+
objectFit,
|
|
33842
|
+
_experimentalInitiallyDrawCachedFrame
|
|
33763
33843
|
}) => {
|
|
33764
33844
|
const environment = useRemotionEnvironment();
|
|
33765
33845
|
if (typeof src !== "string") {
|
|
@@ -33831,7 +33911,8 @@ var InnerVideo = ({
|
|
|
33831
33911
|
onError,
|
|
33832
33912
|
credentials,
|
|
33833
33913
|
controls,
|
|
33834
|
-
objectFit
|
|
33914
|
+
objectFit,
|
|
33915
|
+
_experimentalInitiallyDrawCachedFrame
|
|
33835
33916
|
});
|
|
33836
33917
|
};
|
|
33837
33918
|
var VideoInner = ({
|
|
@@ -33863,6 +33944,7 @@ var VideoInner = ({
|
|
|
33863
33944
|
credentials,
|
|
33864
33945
|
controls,
|
|
33865
33946
|
objectFit,
|
|
33947
|
+
_experimentalInitiallyDrawCachedFrame,
|
|
33866
33948
|
from,
|
|
33867
33949
|
durationInFrames
|
|
33868
33950
|
}) => {
|
|
@@ -33900,7 +33982,8 @@ var VideoInner = ({
|
|
|
33900
33982
|
onError,
|
|
33901
33983
|
credentials,
|
|
33902
33984
|
controls,
|
|
33903
|
-
objectFit: objectFit ?? "contain"
|
|
33985
|
+
objectFit: objectFit ?? "contain",
|
|
33986
|
+
_experimentalInitiallyDrawCachedFrame: _experimentalInitiallyDrawCachedFrame ?? false
|
|
33904
33987
|
})
|
|
33905
33988
|
});
|
|
33906
33989
|
};
|
|
@@ -35208,7 +35291,7 @@ import {
|
|
|
35208
35291
|
import { BufferTarget, StreamTarget } from "mediabunny";
|
|
35209
35292
|
|
|
35210
35293
|
// ../core/dist/esm/version.mjs
|
|
35211
|
-
var VERSION2 = "4.0.
|
|
35294
|
+
var VERSION2 = "4.0.448";
|
|
35212
35295
|
|
|
35213
35296
|
// ../web-renderer/dist/esm/index.mjs
|
|
35214
35297
|
import { AudioSample, VideoSample } from "mediabunny";
|
|
@@ -35624,7 +35707,6 @@ var handleArtifacts = () => {
|
|
|
35624
35707
|
return { handle };
|
|
35625
35708
|
};
|
|
35626
35709
|
var TARGET_NUMBER_OF_CHANNELS2 = 2;
|
|
35627
|
-
var TARGET_SAMPLE_RATE2 = 48000;
|
|
35628
35710
|
function mixAudio(waves, length2) {
|
|
35629
35711
|
if (waves.length === 1 && waves[0].length === length2) {
|
|
35630
35712
|
return waves[0];
|
|
@@ -35645,13 +35727,14 @@ function mixAudio(waves, length2) {
|
|
|
35645
35727
|
var onlyInlineAudio = ({
|
|
35646
35728
|
assets,
|
|
35647
35729
|
fps,
|
|
35648
|
-
timestamp
|
|
35730
|
+
timestamp,
|
|
35731
|
+
sampleRate
|
|
35649
35732
|
}) => {
|
|
35650
35733
|
const inlineAudio = assets.filter((asset) => asset.type === "inline-audio");
|
|
35651
35734
|
if (inlineAudio.length === 0) {
|
|
35652
35735
|
return null;
|
|
35653
35736
|
}
|
|
35654
|
-
const expectedLength = Math.round(TARGET_NUMBER_OF_CHANNELS2 *
|
|
35737
|
+
const expectedLength = Math.round(TARGET_NUMBER_OF_CHANNELS2 * sampleRate / fps);
|
|
35655
35738
|
for (const asset of inlineAudio) {
|
|
35656
35739
|
if (asset.toneFrequency !== 1) {
|
|
35657
35740
|
throw new Error("Setting the toneFrequency is not supported yet in web rendering.");
|
|
@@ -35663,7 +35746,7 @@ var onlyInlineAudio = ({
|
|
|
35663
35746
|
format: "s16",
|
|
35664
35747
|
numberOfChannels: TARGET_NUMBER_OF_CHANNELS2,
|
|
35665
35748
|
numberOfFrames: expectedLength / TARGET_NUMBER_OF_CHANNELS2,
|
|
35666
|
-
sampleRate
|
|
35749
|
+
sampleRate,
|
|
35667
35750
|
timestamp
|
|
35668
35751
|
});
|
|
35669
35752
|
};
|
|
@@ -35764,6 +35847,80 @@ var createAudioSampleSource = ({
|
|
|
35764
35847
|
});
|
|
35765
35848
|
return { audioSampleSource, [Symbol.dispose]: () => audioSampleSource.close() };
|
|
35766
35849
|
};
|
|
35850
|
+
var supportsNativeHtmlInCanvas = () => {
|
|
35851
|
+
if (typeof document === "undefined") {
|
|
35852
|
+
return false;
|
|
35853
|
+
}
|
|
35854
|
+
const ctx = document.createElement("canvas").getContext("2d");
|
|
35855
|
+
return typeof ctx?.drawElementImage === "function";
|
|
35856
|
+
};
|
|
35857
|
+
var setupHtmlInCanvas = ({
|
|
35858
|
+
wrapper,
|
|
35859
|
+
div,
|
|
35860
|
+
width: width2,
|
|
35861
|
+
height: height2
|
|
35862
|
+
}) => {
|
|
35863
|
+
if (!supportsNativeHtmlInCanvas()) {
|
|
35864
|
+
return null;
|
|
35865
|
+
}
|
|
35866
|
+
const layoutCanvas = document.createElement("canvas");
|
|
35867
|
+
layoutCanvas.layoutSubtree = true;
|
|
35868
|
+
layoutCanvas.width = width2;
|
|
35869
|
+
layoutCanvas.height = height2;
|
|
35870
|
+
layoutCanvas.style.position = "absolute";
|
|
35871
|
+
layoutCanvas.style.top = "0";
|
|
35872
|
+
layoutCanvas.style.left = "0";
|
|
35873
|
+
layoutCanvas.style.width = `${width2}px`;
|
|
35874
|
+
layoutCanvas.style.height = `${height2}px`;
|
|
35875
|
+
layoutCanvas.style.visibility = "visible";
|
|
35876
|
+
const maybeCtx = layoutCanvas.getContext("2d");
|
|
35877
|
+
if (!maybeCtx || typeof maybeCtx.drawElementImage !== "function") {
|
|
35878
|
+
return null;
|
|
35879
|
+
}
|
|
35880
|
+
if (typeof layoutCanvas.requestPaint !== "function") {
|
|
35881
|
+
return null;
|
|
35882
|
+
}
|
|
35883
|
+
wrapper.removeChild(div);
|
|
35884
|
+
layoutCanvas.appendChild(div);
|
|
35885
|
+
wrapper.appendChild(layoutCanvas);
|
|
35886
|
+
return { layoutCanvas, ctx: maybeCtx };
|
|
35887
|
+
};
|
|
35888
|
+
var waitForPaint = (layoutCanvas) => {
|
|
35889
|
+
return new Promise((resolve) => {
|
|
35890
|
+
layoutCanvas.addEventListener("paint", () => resolve(), { once: true });
|
|
35891
|
+
layoutCanvas.requestPaint();
|
|
35892
|
+
});
|
|
35893
|
+
};
|
|
35894
|
+
var drawWithHtmlInCanvas = async ({
|
|
35895
|
+
htmlInCanvasContext,
|
|
35896
|
+
element,
|
|
35897
|
+
scaledWidth,
|
|
35898
|
+
scaledHeight
|
|
35899
|
+
}) => {
|
|
35900
|
+
const { ctx, layoutCanvas } = htmlInCanvasContext;
|
|
35901
|
+
await waitForPaint(layoutCanvas);
|
|
35902
|
+
layoutCanvas.width = scaledWidth;
|
|
35903
|
+
layoutCanvas.height = scaledHeight;
|
|
35904
|
+
ctx.reset();
|
|
35905
|
+
ctx.drawElementImage(element, 0, 0, scaledWidth, scaledHeight);
|
|
35906
|
+
const offscreen = new OffscreenCanvas(scaledWidth, scaledHeight);
|
|
35907
|
+
const offCtx = offscreen.getContext("2d");
|
|
35908
|
+
if (!offCtx) {
|
|
35909
|
+
throw new Error("Could not get offscreen context");
|
|
35910
|
+
}
|
|
35911
|
+
offCtx.drawImage(layoutCanvas, 0, 0);
|
|
35912
|
+
return offCtx;
|
|
35913
|
+
};
|
|
35914
|
+
var teardownHtmlInCanvas = ({
|
|
35915
|
+
htmlInCanvasContext,
|
|
35916
|
+
wrapper,
|
|
35917
|
+
div
|
|
35918
|
+
}) => {
|
|
35919
|
+
const { layoutCanvas } = htmlInCanvasContext;
|
|
35920
|
+
layoutCanvas.removeChild(div);
|
|
35921
|
+
wrapper.removeChild(layoutCanvas);
|
|
35922
|
+
wrapper.appendChild(div);
|
|
35923
|
+
};
|
|
35767
35924
|
var UpdateTime = ({
|
|
35768
35925
|
children,
|
|
35769
35926
|
audioEnabled,
|
|
@@ -35876,7 +36033,8 @@ function createScaffold({
|
|
|
35876
36033
|
audioEnabled,
|
|
35877
36034
|
videoEnabled,
|
|
35878
36035
|
defaultCodec,
|
|
35879
|
-
defaultOutName
|
|
36036
|
+
defaultOutName,
|
|
36037
|
+
allowHtmlInCanvas
|
|
35880
36038
|
}) {
|
|
35881
36039
|
if (!ReactDOM6.createRoot) {
|
|
35882
36040
|
throw new Error("@remotion/web-renderer requires React 18 or higher");
|
|
@@ -35902,6 +36060,7 @@ function createScaffold({
|
|
|
35902
36060
|
const cleanupCSS = Internals.CSSUtils.injectCSS(Internals.CSSUtils.makeDefaultPreviewCSS(`.${scaffoldClassName}`, "white"));
|
|
35903
36061
|
wrapper.appendChild(div);
|
|
35904
36062
|
document.body.appendChild(wrapper);
|
|
36063
|
+
const htmlInCanvasContext = allowHtmlInCanvas ? setupHtmlInCanvas({ wrapper, div, width: width2, height: height2 }) : null;
|
|
35905
36064
|
const errorHolder = { error: null };
|
|
35906
36065
|
const root = ReactDOM6.createRoot(div, {
|
|
35907
36066
|
onUncaughtError: (err, errorInfo) => {
|
|
@@ -35962,7 +36121,8 @@ function createScaffold({
|
|
|
35962
36121
|
defaultOutName: defaultOutName ?? null,
|
|
35963
36122
|
defaultVideoImageFormat: null,
|
|
35964
36123
|
defaultPixelFormat: null,
|
|
35965
|
-
defaultProResProfile: null
|
|
36124
|
+
defaultProResProfile: null,
|
|
36125
|
+
defaultSampleRate: null
|
|
35966
36126
|
},
|
|
35967
36127
|
folders: []
|
|
35968
36128
|
},
|
|
@@ -35992,8 +36152,12 @@ function createScaffold({
|
|
|
35992
36152
|
delayRenderScope,
|
|
35993
36153
|
div,
|
|
35994
36154
|
errorHolder,
|
|
36155
|
+
htmlInCanvasContext,
|
|
35995
36156
|
[Symbol.dispose]: () => {
|
|
35996
36157
|
root.unmount();
|
|
36158
|
+
if (htmlInCanvasContext) {
|
|
36159
|
+
teardownHtmlInCanvas({ htmlInCanvasContext, wrapper, div });
|
|
36160
|
+
}
|
|
35997
36161
|
div.remove();
|
|
35998
36162
|
wrapper.remove();
|
|
35999
36163
|
cleanupCSS();
|
|
@@ -36867,6 +37031,7 @@ var calculateTransforms = ({
|
|
|
36867
37031
|
let opacity = 1;
|
|
36868
37032
|
let elementComputedStyle = null;
|
|
36869
37033
|
let maskImageInfo = null;
|
|
37034
|
+
let filterValue = null;
|
|
36870
37035
|
while (parent) {
|
|
36871
37036
|
const computedStyle = getComputedStyle(parent);
|
|
36872
37037
|
if (parent === element) {
|
|
@@ -36874,6 +37039,16 @@ var calculateTransforms = ({
|
|
|
36874
37039
|
opacity = parseFloat(computedStyle.opacity);
|
|
36875
37040
|
const maskImageValue = getMaskImageValue(computedStyle);
|
|
36876
37041
|
maskImageInfo = maskImageValue ? parseMaskImage(maskImageValue) : null;
|
|
37042
|
+
const computedFilter = computedStyle.filter;
|
|
37043
|
+
if (computedFilter && computedFilter !== "none") {
|
|
37044
|
+
filterValue = computedFilter;
|
|
37045
|
+
const originalFilter = parent.style.filter;
|
|
37046
|
+
parent.style.filter = "none";
|
|
37047
|
+
const parentRefFilter = parent;
|
|
37048
|
+
toReset.push(() => {
|
|
37049
|
+
parentRefFilter.style.filter = originalFilter;
|
|
37050
|
+
});
|
|
37051
|
+
}
|
|
36877
37052
|
const originalMaskImage = parent.style.maskImage;
|
|
36878
37053
|
const originalWebkitMaskImage = parent.style.webkitMaskImage;
|
|
36879
37054
|
parent.style.maskImage = "none";
|
|
@@ -36937,6 +37112,7 @@ var calculateTransforms = ({
|
|
|
36937
37112
|
}
|
|
36938
37113
|
const needs3DTransformViaWebGL = !totalMatrix.is2D;
|
|
36939
37114
|
const needsMaskImage = maskImageInfo !== null;
|
|
37115
|
+
const needsFilter = filterValue !== null;
|
|
36940
37116
|
return {
|
|
36941
37117
|
dimensions,
|
|
36942
37118
|
totalMatrix,
|
|
@@ -36952,7 +37128,8 @@ var calculateTransforms = ({
|
|
|
36952
37128
|
precompositing: {
|
|
36953
37129
|
needs3DTransformViaWebGL,
|
|
36954
37130
|
needsMaskImage: maskImageInfo,
|
|
36955
|
-
|
|
37131
|
+
needsFilter: filterValue,
|
|
37132
|
+
needsPrecompositing: Boolean(needs3DTransformViaWebGL || needsMaskImage || needsFilter)
|
|
36956
37133
|
}
|
|
36957
37134
|
};
|
|
36958
37135
|
};
|
|
@@ -38271,6 +38448,9 @@ var handle3dTransform = ({
|
|
|
38271
38448
|
});
|
|
38272
38449
|
return transformed;
|
|
38273
38450
|
};
|
|
38451
|
+
var getPrecomposeRectForFilter = (element) => {
|
|
38452
|
+
return getBiggestBoundingClientRect(element);
|
|
38453
|
+
};
|
|
38274
38454
|
var getPrecomposeRectForMask = (element) => {
|
|
38275
38455
|
const boundingRect = getBiggestBoundingClientRect(element);
|
|
38276
38456
|
return boundingRect;
|
|
@@ -38351,6 +38531,12 @@ var processNode = async ({
|
|
|
38351
38531
|
if (precompositing.needsMaskImage) {
|
|
38352
38532
|
precomposeRect = roundToExpandRect(getPrecomposeRectForMask(element));
|
|
38353
38533
|
}
|
|
38534
|
+
if (precompositing.needsFilter) {
|
|
38535
|
+
precomposeRect = roundToExpandRect(getWiderRectAndExpand({
|
|
38536
|
+
firstRect: precomposeRect,
|
|
38537
|
+
secondRect: getPrecomposeRectForFilter(element)
|
|
38538
|
+
}));
|
|
38539
|
+
}
|
|
38354
38540
|
if (precompositing.needs3DTransformViaWebGL) {
|
|
38355
38541
|
const tentativePrecomposeRect = getPrecomposeRectFor3DTransform({
|
|
38356
38542
|
element,
|
|
@@ -38413,8 +38599,13 @@ var processNode = async ({
|
|
|
38413
38599
|
}
|
|
38414
38600
|
}
|
|
38415
38601
|
const previousTransform = context.getTransform();
|
|
38602
|
+
const previousFilter = context.filter;
|
|
38416
38603
|
context.setTransform(new DOMMatrix);
|
|
38604
|
+
if (precompositing.needsFilter) {
|
|
38605
|
+
context.filter = precompositing.needsFilter;
|
|
38606
|
+
}
|
|
38417
38607
|
context.drawImage(drawable, 0, drawable.height - rectAfterTransforms.height, rectAfterTransforms.width, rectAfterTransforms.height, rectAfterTransforms.left - parentRect.x, rectAfterTransforms.top - parentRect.y, rectAfterTransforms.width, rectAfterTransforms.height);
|
|
38608
|
+
context.filter = previousFilter;
|
|
38418
38609
|
context.setTransform(previousTransform);
|
|
38419
38610
|
Internals.Log.trace({
|
|
38420
38611
|
logLevel,
|
|
@@ -38737,10 +38928,32 @@ var createLayer = async ({
|
|
|
38737
38928
|
logLevel,
|
|
38738
38929
|
internalState,
|
|
38739
38930
|
onlyBackgroundClipText,
|
|
38740
|
-
cutout
|
|
38931
|
+
cutout,
|
|
38932
|
+
htmlInCanvasContext,
|
|
38933
|
+
onHtmlInCanvasLayerOutcome
|
|
38741
38934
|
}) => {
|
|
38742
38935
|
const scaledWidth = Math.ceil(cutout.width * scale);
|
|
38743
38936
|
const scaledHeight = Math.ceil(cutout.height * scale);
|
|
38937
|
+
if (!onlyBackgroundClipText && element instanceof HTMLElement && htmlInCanvasContext && onHtmlInCanvasLayerOutcome) {
|
|
38938
|
+
try {
|
|
38939
|
+
const offCtx = await drawWithHtmlInCanvas({
|
|
38940
|
+
htmlInCanvasContext,
|
|
38941
|
+
element,
|
|
38942
|
+
scaledWidth,
|
|
38943
|
+
scaledHeight
|
|
38944
|
+
});
|
|
38945
|
+
onHtmlInCanvasLayerOutcome({ native: true });
|
|
38946
|
+
return offCtx;
|
|
38947
|
+
} catch (err) {
|
|
38948
|
+
const detail = err instanceof Error ? err.message : JSON.stringify(err);
|
|
38949
|
+
onHtmlInCanvasLayerOutcome({
|
|
38950
|
+
native: false,
|
|
38951
|
+
reason: `drawElementImage failed (${detail}); falling back to the built-in DOM composer.`,
|
|
38952
|
+
shouldWarn: true
|
|
38953
|
+
});
|
|
38954
|
+
Internals.Log.verbose({ logLevel, tag: "@remotion/web-renderer" }, "HTML-in-canvas capture failed, falling back to software compose", err);
|
|
38955
|
+
}
|
|
38956
|
+
}
|
|
38744
38957
|
const canvas = new OffscreenCanvas(scaledWidth, scaledHeight);
|
|
38745
38958
|
const context = canvas.getContext("2d");
|
|
38746
38959
|
if (!context) {
|
|
@@ -38971,11 +39184,25 @@ var internalRenderMediaOnWeb = async ({
|
|
|
38971
39184
|
licenseKey,
|
|
38972
39185
|
muted,
|
|
38973
39186
|
scale,
|
|
38974
|
-
isProduction
|
|
39187
|
+
isProduction,
|
|
39188
|
+
allowHtmlInCanvas,
|
|
39189
|
+
sampleRate
|
|
38975
39190
|
}) => {
|
|
38976
39191
|
let __stack2 = [];
|
|
38977
39192
|
try {
|
|
38978
39193
|
validateScale(scale);
|
|
39194
|
+
let htmlInCanvasLayerOutcomeReported = false;
|
|
39195
|
+
const onHtmlInCanvasLayerOutcome = (outcome) => {
|
|
39196
|
+
if (htmlInCanvasLayerOutcomeReported) {
|
|
39197
|
+
return;
|
|
39198
|
+
}
|
|
39199
|
+
htmlInCanvasLayerOutcomeReported = true;
|
|
39200
|
+
if (outcome.native) {
|
|
39201
|
+
Internals.Log.warn({ logLevel, tag: "@remotion/web-renderer" }, "Using Chromium experimental HTML-in-canvas (drawElementImage) for video frames. See https://github.com/WICG/html-in-canvas");
|
|
39202
|
+
} else if (outcome.shouldWarn) {
|
|
39203
|
+
Internals.Log.warn({ logLevel, tag: "@remotion/web-renderer" }, `Not using HTML-in-canvas: ${outcome.reason}`);
|
|
39204
|
+
}
|
|
39205
|
+
};
|
|
38979
39206
|
const outputTarget = userDesiredOutputTarget === null ? await canUseWebFsWriter() ? "web-fs" : "arraybuffer" : userDesiredOutputTarget;
|
|
38980
39207
|
if (outputTarget === "web-fs") {
|
|
38981
39208
|
await cleanupStaleOpfsFiles();
|
|
@@ -39041,9 +39268,38 @@ var internalRenderMediaOnWeb = async ({
|
|
|
39041
39268
|
videoEnabled,
|
|
39042
39269
|
initialFrame: 0,
|
|
39043
39270
|
defaultCodec: resolved.defaultCodec,
|
|
39044
|
-
defaultOutName: resolved.defaultOutName
|
|
39271
|
+
defaultOutName: resolved.defaultOutName,
|
|
39272
|
+
allowHtmlInCanvas
|
|
39045
39273
|
}), 0);
|
|
39046
|
-
const {
|
|
39274
|
+
const {
|
|
39275
|
+
delayRenderScope,
|
|
39276
|
+
div,
|
|
39277
|
+
timeUpdater,
|
|
39278
|
+
collectAssets,
|
|
39279
|
+
errorHolder,
|
|
39280
|
+
htmlInCanvasContext
|
|
39281
|
+
} = scaffold;
|
|
39282
|
+
if (allowHtmlInCanvas && !htmlInCanvasContext) {
|
|
39283
|
+
if (!supportsNativeHtmlInCanvas()) {
|
|
39284
|
+
onHtmlInCanvasLayerOutcome({
|
|
39285
|
+
native: false,
|
|
39286
|
+
reason: "This browser does not expose CanvasRenderingContext2D.prototype.drawElementImage. In Chromium, enable chrome://flags/#canvas-draw-element and use a version that ships the API.",
|
|
39287
|
+
shouldWarn: false
|
|
39288
|
+
});
|
|
39289
|
+
} else {
|
|
39290
|
+
onHtmlInCanvasLayerOutcome({
|
|
39291
|
+
native: false,
|
|
39292
|
+
reason: "drawElementImage is available but canvas.requestPaint() is missing. Use a Chromium version that ships requestPaint.",
|
|
39293
|
+
shouldWarn: true
|
|
39294
|
+
});
|
|
39295
|
+
}
|
|
39296
|
+
} else if (!allowHtmlInCanvas) {
|
|
39297
|
+
onHtmlInCanvasLayerOutcome({
|
|
39298
|
+
native: false,
|
|
39299
|
+
reason: "allowHtmlInCanvas is false; using the built-in DOM composer.",
|
|
39300
|
+
shouldWarn: false
|
|
39301
|
+
});
|
|
39302
|
+
}
|
|
39047
39303
|
const internalState = __using2(__stack2, makeInternalState(), 0);
|
|
39048
39304
|
const keepalive = __using2(__stack2, createBackgroundKeepalive({
|
|
39049
39305
|
fps: resolved.fps,
|
|
@@ -39156,7 +39412,9 @@ var internalRenderMediaOnWeb = async ({
|
|
|
39156
39412
|
logLevel,
|
|
39157
39413
|
internalState,
|
|
39158
39414
|
onlyBackgroundClipText: false,
|
|
39159
|
-
cutout: new DOMRect(0, 0, resolved.width, resolved.height)
|
|
39415
|
+
cutout: new DOMRect(0, 0, resolved.width, resolved.height),
|
|
39416
|
+
htmlInCanvasContext,
|
|
39417
|
+
onHtmlInCanvasLayerOutcome: htmlInCanvasContext ? onHtmlInCanvasLayerOutcome : undefined
|
|
39160
39418
|
});
|
|
39161
39419
|
internalState.addCreateFrameTime(performance.now() - createFrameStart);
|
|
39162
39420
|
layerCanvas = layer.canvas;
|
|
@@ -39207,7 +39465,7 @@ var internalRenderMediaOnWeb = async ({
|
|
|
39207
39465
|
if (signal?.aborted) {
|
|
39208
39466
|
throw new Error("renderMediaOnWeb() was cancelled");
|
|
39209
39467
|
}
|
|
39210
|
-
const audio = muted ? null : onlyInlineAudio({ assets, fps: resolved.fps, timestamp });
|
|
39468
|
+
const audio = muted ? null : onlyInlineAudio({ assets, fps: resolved.fps, timestamp, sampleRate });
|
|
39211
39469
|
internalState.addAudioMixingTime(performance.now() - audioCombineStart);
|
|
39212
39470
|
const addSampleStart = performance.now();
|
|
39213
39471
|
const encodingPromises = [];
|
|
@@ -39320,7 +39578,9 @@ var renderMediaOnWeb = (options2) => {
|
|
|
39320
39578
|
licenseKey: options2.licenseKey ?? null,
|
|
39321
39579
|
muted: options2.muted ?? false,
|
|
39322
39580
|
scale: options2.scale ?? 1,
|
|
39323
|
-
isProduction: options2.isProduction ?? true
|
|
39581
|
+
isProduction: options2.isProduction ?? true,
|
|
39582
|
+
allowHtmlInCanvas: options2.allowHtmlInCanvas ?? false,
|
|
39583
|
+
sampleRate: options2.sampleRate ?? 48000
|
|
39324
39584
|
}));
|
|
39325
39585
|
return onlyOneRenderAtATimeQueue.ref;
|
|
39326
39586
|
};
|
|
@@ -41624,6 +41884,7 @@ var listOfRemotionPackages = [
|
|
|
41624
41884
|
"@remotion/bundler",
|
|
41625
41885
|
"@remotion/cli",
|
|
41626
41886
|
"@remotion/cloudrun",
|
|
41887
|
+
"@remotion/codex-plugin",
|
|
41627
41888
|
"@remotion/compositor-darwin-arm64",
|
|
41628
41889
|
"@remotion/compositor-darwin-x64",
|
|
41629
41890
|
"@remotion/compositor-linux-arm64-gnu",
|
|
@@ -42957,7 +43218,7 @@ var GithubButton = () => {
|
|
|
42957
43218
|
" ",
|
|
42958
43219
|
/* @__PURE__ */ jsx164("div", {
|
|
42959
43220
|
className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center",
|
|
42960
|
-
children: "
|
|
43221
|
+
children: "42k"
|
|
42961
43222
|
})
|
|
42962
43223
|
]
|
|
42963
43224
|
});
|