hyperframes 0.8.145 → 0.8.146
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/{add-B6OUH46W.js → add-6J4TLUDW.js} +15 -15
- package/dist/{animatedGifPrep-MIWRDJIO.js → animatedGifPrep-TPYA45ZZ.js} +10 -10
- package/dist/{asset-XJ2B2PU3.js → asset-B4C6ZU4V.js} +2 -2
- package/dist/{assetCataloger-A5ZLSCMZ.js → assetCataloger-GX4B55VB.js} +4 -4
- package/dist/{auth-5HOVCZMV.js → auth-T2V3URGO.js} +2 -2
- package/dist/{autoUpdate-WVNL5K3D.js → autoUpdate-O4R7IOYP.js} +2 -2
- package/dist/{backgroundChecks-IGF54SFH.js → backgroundChecks-SQHGZCSH.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-T6JEGCQV.js → batchRender-T7S2CGJE.js} +5 -5
- package/dist/{beats-37T6Y6QP.js → beats-RNEXDM7U.js} +16 -16
- package/dist/{benchmark-ZVVLOWPP.js → benchmark-IVK6FCEU.js} +12 -12
- package/dist/{browser-4SSJOLH4.js → browser-WUE6VK2N.js} +5 -5
- package/dist/{bundleWithLocalizedFonts-XWK423QP.js → bundleWithLocalizedFonts-EEIRL7FT.js} +2 -2
- package/dist/{capture-2SF7YP57.js → capture-K3EONGGU.js} +2 -2
- package/dist/{capture-KZXOPBMO.js → capture-LEKIGJ4G.js} +13 -13
- package/dist/{catalog-NLD4A2C6.js → catalog-IXYQ2KXW.js} +15 -15
- package/dist/{catch-up-4BSRN6IR.js → catch-up-IIF7HKR6.js} +6 -6
- package/dist/{check-IA44QQWM.js → check-W7CDOXNP.js} +38 -38
- package/dist/{checkBrowser-VM35KZMW.js → checkBrowser-5VSXEHBZ.js} +118 -61
- package/dist/{chunk-ZF7SXQJ7.js → chunk-2NAUEDA6.js} +2 -2
- package/dist/{chunk-FXJJCPPB.js → chunk-3HSWLZ6S.js} +1 -1
- package/dist/{chunk-ZSVUAVMT.js → chunk-4RUILXS6.js} +5 -5
- package/dist/{chunk-FBCULCAL.js → chunk-54UXJKFF.js} +1 -1
- package/dist/{chunk-DIRJ322I.js → chunk-66SAATRI.js} +3 -3
- package/dist/{chunk-QLSM7K5S.js → chunk-6TTAXMDG.js} +2 -2
- package/dist/{chunk-5WVW7P23.js → chunk-A72OAGNB.js} +6 -6
- package/dist/{chunk-G75ENCEZ.js → chunk-AIJS74LG.js} +3 -3
- package/dist/{chunk-HB7FJOY4.js → chunk-AJ5R4GM6.js} +1 -1
- package/dist/{chunk-VRW6EBHV.js → chunk-BAKPN2D2.js} +101 -94
- package/dist/{chunk-OTHDVXOJ.js → chunk-CVPWZ5LY.js} +3 -3
- package/dist/{chunk-BIAC7IJT.js → chunk-DDNS2674.js} +1 -1
- package/dist/{chunk-QFSCCQIR.js → chunk-DMKI64EZ.js} +1 -1
- package/dist/{chunk-EPE2HRJK.js → chunk-DUU77E2S.js} +69 -64
- package/dist/{chunk-ZIYZ77MR.js → chunk-EGO6Z24R.js} +3 -3
- package/dist/{chunk-KC5XXX3X.js → chunk-EOOEC32M.js} +1 -1
- package/dist/{chunk-3IBMBNYY.js → chunk-ETNQF37F.js} +10 -10
- package/dist/{chunk-XIHCMVMG.js → chunk-FDL4HV44.js} +2 -2
- package/dist/{chunk-GBGJ7A3D.js → chunk-FJLHVAPO.js} +6 -6
- package/dist/{chunk-QZ3AZTXI.js → chunk-FJWEYVEM.js} +42 -16
- package/dist/{chunk-IHTRYDFN.js → chunk-FKLYMV3U.js} +1 -1
- package/dist/{chunk-PUGIRFPX.js → chunk-FMNVTKX2.js} +4 -4
- package/dist/{chunk-GEMJYBRU.js → chunk-HBGJYBGE.js} +2 -2
- package/dist/{chunk-U5QY7KTN.js → chunk-HTM4CIFS.js} +11 -8
- package/dist/{chunk-T42U2W2R.js → chunk-IXLUTE6N.js} +1 -1
- package/dist/{chunk-FDT6KQV4.js → chunk-JBQJKC23.js} +2 -2
- package/dist/{chunk-IEIJRMLZ.js → chunk-JDB65PPT.js} +62 -63
- package/dist/{chunk-USDEMXXL.js → chunk-JYVGYKXG.js} +1 -1
- package/dist/{chunk-PLR7Z6TC.js → chunk-K7ES5RSK.js} +1 -1
- package/dist/{chunk-VHFEMFYL.js → chunk-KFZUUXUN.js} +3 -3
- package/dist/{chunk-GRY3PN3K.js → chunk-KG265HQ7.js} +2 -2
- package/dist/{chunk-R42WWQVB.js → chunk-KPJMBC4K.js} +2 -2
- package/dist/{chunk-MAYCCGMQ.js → chunk-KVGDFUVO.js} +1 -1
- package/dist/{chunk-CFUXNBWH.js → chunk-LE7T4ML7.js} +1 -1
- package/dist/{chunk-MQZVBHEY.js → chunk-LFNQDTSH.js} +1 -1
- package/dist/{chunk-KIFHYXPB.js → chunk-MOL32UKR.js} +45 -11
- package/dist/{chunk-ICKDMTLA.js → chunk-QSSPIATO.js} +2 -2
- package/dist/{chunk-3KU3PFDW.js → chunk-R6R74HNZ.js} +74 -66
- package/dist/{chunk-ADF3X6GM.js → chunk-SYMSKGXI.js} +2 -2
- package/dist/{chunk-ZEUONDQG.js → chunk-SYUGVPYH.js} +1 -1
- package/dist/{chunk-BFACGEII.js → chunk-TBOMPYG6.js} +2 -2
- package/dist/{chunk-XBX4QJP7.js → chunk-TH4OXAWY.js} +1 -1
- package/dist/{chunk-GMAJB2P6.js → chunk-UOBYRLDD.js} +1 -1
- package/dist/{chunk-4QWD6JYN.js → chunk-UZUUVYAO.js} +3 -3
- package/dist/{chunk-PJ3HDUCY.js → chunk-VAS6HQX3.js} +39 -9
- package/dist/{chunk-6LGNTUZN.js → chunk-VT563F4O.js} +7 -7
- package/dist/{chunk-UXO2L7HJ.js → chunk-WU2B74TL.js} +267 -65
- package/dist/{chunk-OB5MJR4W.js → chunk-WUZ6TMAO.js} +1 -1
- package/dist/{chunk-GQJZORQP.js → chunk-XBSPQ52S.js} +1 -1
- package/dist/{chunk-4ORLNTET.js → chunk-XJUZEB44.js} +1 -1
- package/dist/{chunk-LAFJSYDL.js → chunk-XVIYZU3D.js} +1 -1
- package/dist/{chunk-GXJEGZL2.js → chunk-Z5C4LEAD.js} +17 -18
- package/dist/chunk-Z6FLHIDV.js +3795 -0
- package/dist/{chunk-DDIVWXN7.js → chunk-ZFN6GQU4.js} +4 -4
- package/dist/{chunk-DWUKJQTO.js → chunk-ZVZSFDW3.js} +2 -2
- package/dist/{chunk-5NRXZGKK.js → chunk-ZZ7H4IJ6.js} +9 -9
- package/dist/{clean-RDKJB5FK.js → clean-2GDD2B4F.js} +23 -23
- package/dist/cli.js +52 -52
- package/dist/{cloud-QVPVVNCW.js → cloud-LUKGDTTE.js} +4 -4
- package/dist/{cloudrun-3RE2UCQG.js → cloudrun-NQF5KFQI.js} +6 -6
- package/dist/{compare-LEDOY7MO.js → compare-4P6O4ONG.js} +32 -32
- package/dist/{compiler-F54OZZPM.js → compiler-ACCPOZMQ.js} +6 -6
- package/dist/{component-N42M67WY.js → component-SDDOLNJD.js} +3 -3
- package/dist/{compositions-VB2J2LZI.js → compositions-P2L6HUVQ.js} +15 -15
- package/dist/{delete-Q6RWMJ4Z.js → delete-Q6S4BJ3F.js} +2 -2
- package/dist/{deterministicFonts-U2BIMGPG.js → deterministicFonts-C5JQLCTS.js} +2 -2
- package/dist/{dist-Q4BI5A73.js → dist-GPDOV3IQ.js} +4 -4
- package/dist/{dist-KDJTFJHA.js → dist-HUMFCJ6T.js} +3 -3
- package/dist/{doctor-JMMUHDRV.js → doctor-NL73UKHV.js} +15 -15
- package/dist/{events-RGUAHIBW.js → events-AVOPOKO3.js} +5 -5
- package/dist/{events-6ZBSIBE5.js → events-X7KPU7LG.js} +4 -4
- package/dist/{feedback-FIID6MZW.js → feedback-GJZ5NXSH.js} +10 -10
- package/dist/{ffmpeg-T5SH2EFJ.js → ffmpeg-5V4FP3R6.js} +2 -2
- package/dist/{figma-BL3JJC36.js → figma-V7SVQQI5.js} +3 -3
- package/dist/fontLocalizeCli.js +14 -14
- package/dist/{get-P46GS7S6.js → get-FO3YZYEU.js} +2 -2
- package/dist/{gpuPolicy-AQ2BPLBK.js → gpuPolicy-QGS4TFWP.js} +10 -10
- package/dist/{grade-compare-GDCWU7ZZ.js → grade-compare-7ICSN7KE.js} +33 -33
- package/dist/{help-HJR3RWFG.js → help-Y5LYZG7K.js} +2 -2
- package/dist/{history-GGO5AWJB.js → history-RKGBRNLD.js} +49 -22
- package/dist/hyperframe-runtime.js +214 -68
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +214 -68
- package/dist/hyperframes-player.global.js +4 -5
- package/dist/hyperframes-slideshow.global.js +3 -4
- package/dist/{info-3GFWUBJC.js → info-GGUTL2NR.js} +11 -11
- package/dist/{init-36OPU2ZG.js → init-PG7NA5SQ.js} +31 -31
- package/dist/{inspect-F2HEL5ON.js → inspect-FCXUB6DE.js} +33 -33
- package/dist/{installer-NI6P6GC4.js → installer-LZ4X5TZZ.js} +6 -6
- package/dist/{keyframes-7OY3LMAZ.js → keyframes-R3K6WJ3N.js} +8 -8
- package/dist/{lambda-6GJIWNJ3.js → lambda-3GAKHMC3.js} +7 -7
- package/dist/{layout-FTMLNL5A.js → layout-XNIZIGA2.js} +33 -33
- package/dist/{lint-U6POHUON.js → lint-4KDS2F4O.js} +11 -11
- package/dist/{lintProject-UBZ3TDHU.js → lintProject-SSEXWCH6.js} +3 -3
- package/dist/{list-IP5KI5Q2.js → list-OVPURFPK.js} +2 -2
- package/dist/{login-4VWTVPHG.js → login-EE2AX2PE.js} +4 -4
- package/dist/{manager-YKMHR6LN.js → manager-5ORDVWJB.js} +3 -3
- package/dist/{media-treatment-XGV44AGV.js → media-treatment-UDUEOP67.js} +82 -54
- package/dist/{models-UCXB6UR5.js → models-LPK2O4B2.js} +14 -14
- package/dist/{motionShot-WPVNBXKA.js → motionShot-G76XBOYI.js} +35 -29
- package/dist/{normalize-audio-TYJ3UEHO.js → normalize-audio-TUKWZ3OR.js} +10 -10
- package/dist/{open-HENOLVB2.js → open-7XB2TGVB.js} +6 -6
- package/dist/{parakeetRunner-VFQ6WFTD.js → parakeetRunner-DL556HXL.js} +14 -14
- package/dist/{pipeline-6WPSC3H4.js → pipeline-34N5DLWU.js} +11 -11
- package/dist/{play-OI53WNUM.js → play-DDA2UUQF.js} +26 -26
- package/dist/{preflight-B4AFK3RG.js → preflight-ONF5AJNO.js} +5 -5
- package/dist/{present-NGMEQ4NO.js → present-LLNRKXF5.js} +23 -23
- package/dist/{preview-VT2HWRWZ.js → preview-H3ZZS46F.js} +57 -26
- package/dist/{producer-7TYEAUF7.js → producer-IFQOZK2G.js} +1 -1
- package/dist/{projectConfig-B2AF5DXY.js → projectConfig-SBRMQZGG.js} +8 -8
- package/dist/{publication-2PANQVC6.js → publication-5BQICRZO.js} +4 -4
- package/dist/{publish-O5OL42BG.js → publish-XDUZA3E3.js} +27 -26
- package/dist/{remove-background-T2JM6UVP.js → remove-background-GNKRMFQS.js} +12 -12
- package/dist/{render-Z253WHBK.js → render-JM6KNRIA.js} +27 -27
- package/dist/{render-OLPKOJRU.js → render-KTTC3EE5.js} +12 -12
- package/dist/{render-W7OFXDOJ.js → render-PCFO45RK.js} +5 -5
- package/dist/{render-batch-46IIBFKL.js → render-batch-7R2NRNVJ.js} +5 -5
- package/dist/{renderCancellation-QTZOCDJ2.js → renderCancellation-GP3XD2FS.js} +10 -10
- package/dist/renderSetupWorker.js +3 -3
- package/dist/{resolver-J2PL5FVJ.js → resolver-C4FPX72I.js} +6 -6
- package/dist/{sherpa-ZF42V3RN.js → sherpa-MZP3MV2X.js} +14 -14
- package/dist/skills/media-use/references/media-treatments.md +5 -1
- package/dist/{skills-ACDOO3PX.js → skills-OET4XSHR.js} +7 -7
- package/dist/{skillsUpdateCheck-L5OXVVPU.js → skillsUpdateCheck-IPFSKKJD.js} +3 -3
- package/dist/{slideshow-4OJEPWNZ.js → slideshow-YTWATJRT.js} +1 -1
- package/dist/{snapshot-UUVNZOW5.js → snapshot-EC4N75MS.js} +34 -34
- package/dist/{src-BSLKXEGX.js → src-LIERUCFW.js} +11 -9
- package/dist/{src-KS3AWFGT.js → src-ZZQJOKO6.js} +13 -13
- package/dist/{staticProjectServer-2TTVGPQH.js → staticProjectServer-YH2RHYKW.js} +20 -20
- package/dist/{status-LXPGSSKY.js → status-PTKNQD2E.js} +2 -2
- package/dist/studio/assets/{hyperframes-player-DZ5JrMDg.js → hyperframes-player-tkxyWf5H.js} +3 -3
- package/dist/studio/assets/{index-BqFRhNZa.js → index-BrdqOkqP.js} +1 -1
- package/dist/studio/assets/{index-D8W0a0Z9.js → index-Cg48BxAo.js} +135 -135
- package/dist/studio/assets/{index-BOs6C0aZ.js → index-Dllxg4aU.js} +1 -1
- package/dist/studio/index.html +1 -1
- package/dist/{studio-api-WYWF7XRC.js → studio-api-T2TS2CHL.js} +16 -14
- package/dist/{studioServer-3FG4YTP7.js → studioServer-GJVVJUEL.js} +50 -50
- package/dist/{system-OQLOGGPJ.js → system-OXRG57F2.js} +2 -2
- package/dist/{telemetry-PAOOB4T4.js → telemetry-ZQ5XVE6Z.js} +5 -5
- package/dist/{timeline-JIIJKKPC.js → timeline-I2T5WIPD.js} +34 -25
- package/dist/{tokens-3QRAM75Z.js → tokens-ONUWOXEX.js} +2 -2
- package/dist/{transcribe-QSBP5MUG.js → transcribe-BCQMA537.js} +12 -12
- package/dist/{transcribe-SZB6UMXE.js → transcribe-ZLJF7V5Y.js} +13 -13
- package/dist/{updateCheck-V3DSB26K.js → updateCheck-ZWHDXF73.js} +2 -2
- package/dist/{upgrade-L5GISOEV.js → upgrade-32JGFZWS.js} +2 -2
- package/dist/{urlDownloader-52FERT4X.js → urlDownloader-EVDP43GM.js} +9 -9
- package/dist/{validate-HVVLX7KO.js → validate-G4PUGQCI.js} +27 -27
- package/dist/{video-MEOWRMFG.js → video-TILEY3VJ.js} +10 -10
- package/package.json +3 -2
- package/dist/chunk-AUWHD7RA.js +0 -3753
- package/dist/studio/chunk-6JY3MTIX.js +0 -1204
- package/dist/studio/chunk-EEXSYY5F.js +0 -190
- package/dist/studio/chunk-NZPJUZKT.js +0 -1538
- package/dist/studio/chunk-PZ5AY32C.js +0 -10
- package/dist/studio/chunk-TP6D3U37.js +0 -845
- package/dist/studio/chunk-Y2OHHNM2.js +0 -970
- package/dist/studio/domEditingLayers-PTP2ICGM.js +0 -47
- package/dist/studio/index.css +0 -165
- package/dist/studio/index.d.ts +0 -4318
- package/dist/studio/index.js +0 -100952
- package/dist/studio/player.d.ts +0 -30
- package/dist/studio/player.js +0 -10
- package/dist/studio/styles/tailwind-preset.d.ts +0 -39
- package/dist/studio/styles/tailwind-preset.js +0 -50
- package/dist/studio/styles.css +0 -1
- package/dist/studio/ui.d.ts +0 -297
- package/dist/studio/ui.js +0 -66
|
@@ -11,15 +11,15 @@ import {
|
|
|
11
11
|
iterateFontFamilyDeclarations,
|
|
12
12
|
normalizeSystemFontPrimaryFamilies,
|
|
13
13
|
resolveFontFamilyDeclarationFamilies
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-FMNVTKX2.js";
|
|
15
15
|
import {
|
|
16
16
|
EncoderInterruptedError,
|
|
17
17
|
encoderFailureError,
|
|
18
18
|
prepareAnimatedGifInputs
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KG265HQ7.js";
|
|
20
20
|
import {
|
|
21
21
|
createStudioPositionSeekReapplyScript
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-EOOEC32M.js";
|
|
23
23
|
import {
|
|
24
24
|
BROWSER_GPU_NOT_SOFTWARE,
|
|
25
25
|
CaptureFailure,
|
|
@@ -105,6 +105,7 @@ import {
|
|
|
105
105
|
isNotMediaPayload,
|
|
106
106
|
isTransientBrowserError,
|
|
107
107
|
isVideoFrameFormat,
|
|
108
|
+
isVideoPastTimelineEnd,
|
|
108
109
|
mergeWorkerFrames,
|
|
109
110
|
muxVideoWithAudio,
|
|
110
111
|
normalizeObjectFit,
|
|
@@ -144,7 +145,7 @@ import {
|
|
|
144
145
|
validateEngineConfigSnapshot,
|
|
145
146
|
verifyDiskDrawElementSamples,
|
|
146
147
|
writeCapturedFrame
|
|
147
|
-
} from "./chunk-
|
|
148
|
+
} from "./chunk-WU2B74TL.js";
|
|
148
149
|
import {
|
|
149
150
|
assignBundledRuntimeCompositionIds,
|
|
150
151
|
buildVariablesByCompScript,
|
|
@@ -157,12 +158,12 @@ import {
|
|
|
157
158
|
isTemplateEntry,
|
|
158
159
|
parsesAsScript,
|
|
159
160
|
prepareFlattenedInnerRoot
|
|
160
|
-
} from "./chunk-
|
|
161
|
+
} from "./chunk-JBQJKC23.js";
|
|
161
162
|
import {
|
|
162
163
|
LOW_MEMORY_TOTAL_MB_THRESHOLD,
|
|
163
164
|
getCgroupMemoryLimitMb,
|
|
164
165
|
getSystemTotalMb
|
|
165
|
-
} from "./chunk-
|
|
166
|
+
} from "./chunk-JYVGYKXG.js";
|
|
166
167
|
import {
|
|
167
168
|
HF_VFX_ATTR,
|
|
168
169
|
MEDIA_START_BASIS_ATTR,
|
|
@@ -178,7 +179,7 @@ import {
|
|
|
178
179
|
resolveAbsoluteMediaStartSeconds,
|
|
179
180
|
resolveAuthoredTimingWindow,
|
|
180
181
|
toFps
|
|
181
|
-
} from "./chunk-
|
|
182
|
+
} from "./chunk-BAKPN2D2.js";
|
|
182
183
|
import {
|
|
183
184
|
COMPOSITION_SOURCE_URL,
|
|
184
185
|
HF_COLOR_GRADING_ATTR,
|
|
@@ -205,7 +206,7 @@ import {
|
|
|
205
206
|
shouldClampResolvedMediaDuration,
|
|
206
207
|
sourceTimeAt,
|
|
207
208
|
styleElementsFor
|
|
208
|
-
} from "./chunk-
|
|
209
|
+
} from "./chunk-Z6FLHIDV.js";
|
|
209
210
|
import {
|
|
210
211
|
MAX_AUDIO_GAIN
|
|
211
212
|
} from "./chunk-YA62XGXS.js";
|
|
@@ -219,7 +220,7 @@ import {
|
|
|
219
220
|
isAspectAgnosticResolutionAlias,
|
|
220
221
|
normalizeResolutionFlag,
|
|
221
222
|
suggestMatchingPreset
|
|
222
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-LFNQDTSH.js";
|
|
223
224
|
import {
|
|
224
225
|
redactKnownPaths,
|
|
225
226
|
redactTelemetryString
|
|
@@ -229,7 +230,7 @@ import {
|
|
|
229
230
|
} from "./chunk-TWWSYAKJ.js";
|
|
230
231
|
import {
|
|
231
232
|
lintHyperframeHtml
|
|
232
|
-
} from "./chunk-
|
|
233
|
+
} from "./chunk-JDB65PPT.js";
|
|
233
234
|
import {
|
|
234
235
|
isUnresolvedAssetPlaceholder,
|
|
235
236
|
readProjectFile,
|
|
@@ -486,7 +487,7 @@ function buildVirtualTimeShim(options) {
|
|
|
486
487
|
const seedRandomFromFrame = options.seedRandomFromFrame === true;
|
|
487
488
|
const seededRandomBlock = seedRandomFromFrame ? String.raw`
|
|
488
489
|
// Seeded Math.random / crypto.getRandomValues, keyed by virtual time.
|
|
489
|
-
// Mulberry32
|
|
490
|
+
// Mulberry32: single uint32 state, deterministic, fast.
|
|
490
491
|
var rngState = 0;
|
|
491
492
|
function mulberry32() {
|
|
492
493
|
rngState |= 0; rngState = (rngState + 0x6D2B79F5) | 0;
|
|
@@ -497,7 +498,7 @@ function buildVirtualTimeShim(options) {
|
|
|
497
498
|
}
|
|
498
499
|
function reseedRngFromTime(ms) {
|
|
499
500
|
var ms32 = Math.max(0, Math.floor(Number(ms) || 0)) | 0;
|
|
500
|
-
// Knuth's multiplicative hash + golden-ratio offset
|
|
501
|
+
// Knuth's multiplicative hash + golden-ratio offset gives a well-
|
|
501
502
|
// distributed seed even for frame 0 (otherwise rngState=0 degenerates
|
|
502
503
|
// the PRNG's first few outputs).
|
|
503
504
|
rngState = (Math.imul(ms32, -1640531527) + 0x9E3779B9) | 0;
|
|
@@ -739,7 +740,7 @@ function buildRenderModeScript(fps) {
|
|
|
739
740
|
};
|
|
740
741
|
window.__playerReady = true;
|
|
741
742
|
// Media-fallback player has no timeline to bind, so render-ready is immediate.
|
|
742
|
-
// init.ts defers __renderReady until the timeline is bound
|
|
743
|
+
// init.ts defers __renderReady until the timeline is bound (a different runtime).
|
|
743
744
|
window.__renderReady = true;
|
|
744
745
|
return true;
|
|
745
746
|
}
|
|
@@ -2266,7 +2267,7 @@ function blitHdrVideoLayer(canvas, el, time, fps, hdrVideoFrameSources, hdrStart
|
|
|
2266
2267
|
if (matrix && !isTranslationOnly) {
|
|
2267
2268
|
if (clipped && log) {
|
|
2268
2269
|
log.debug(
|
|
2269
|
-
`HDR clip rect on affine-transformed element ${el.id}
|
|
2270
|
+
`HDR clip rect on affine-transformed element ${el.id}: clip not applied (affine scissor not yet supported)`
|
|
2270
2271
|
);
|
|
2271
2272
|
}
|
|
2272
2273
|
blitRgb48leAffine(
|
|
@@ -2323,7 +2324,7 @@ function blitHdrImageLayer(canvas, el, hdrImageBuffers, hdrImageTransferCache, w
|
|
|
2323
2324
|
return;
|
|
2324
2325
|
}
|
|
2325
2326
|
if (el.clipRect && log) {
|
|
2326
|
-
log.debug(`HDR clip rect on image element ${el.id}
|
|
2327
|
+
log.debug(`HDR clip rect on image element ${el.id}: clip not yet supported for images`);
|
|
2327
2328
|
}
|
|
2328
2329
|
try {
|
|
2329
2330
|
if (hdrPerf) hdrPerf.hdrImageLayerBlits += 1;
|
|
@@ -4474,7 +4475,7 @@ async function validateCompletedSegments(manifest, expectedHash, probeFrames) {
|
|
|
4474
4475
|
function formatDowngradeWarning(outputFormat, forcedHdrWithoutSources) {
|
|
4475
4476
|
const hdrSourceReason = forcedHdrWithoutSources ? "HDR was forced without detected HDR sources" : "HDR source detected";
|
|
4476
4477
|
const formatReason = outputFormat === "hls" ? "HLS output is SDR-only (H.264 in MPEG-TS)" : "HDR + alpha is not supported";
|
|
4477
|
-
return `[Render] ${hdrSourceReason}, but format is "${outputFormat}"
|
|
4478
|
+
return `[Render] ${hdrSourceReason}, but format is "${outputFormat}", so falling back to SDR. ${formatReason}. Use --format mp4 for HDR10 output.`;
|
|
4478
4479
|
}
|
|
4479
4480
|
function findRenderHdrAutoPromotionTrigger(input) {
|
|
4480
4481
|
for (const extracted of input.extractionResult?.extracted ?? []) {
|
|
@@ -4487,12 +4488,12 @@ function findRenderHdrAutoPromotionTrigger(input) {
|
|
|
4487
4488
|
function logHdrResolution(input, hdrMode, effectiveHdr, forcedHdrWithoutSources) {
|
|
4488
4489
|
if (forcedHdrWithoutSources) {
|
|
4489
4490
|
input.log.warn(
|
|
4490
|
-
"[Render] HDR forced by --hdr flag, but no HDR sources were detected
|
|
4491
|
+
"[Render] HDR forced by --hdr flag, but no HDR sources were detected, defaulting to HLG. SDR-only compositions may look perceptually wrong on HDR displays."
|
|
4491
4492
|
);
|
|
4492
4493
|
}
|
|
4493
4494
|
if (!effectiveHdr) {
|
|
4494
4495
|
input.log.info(
|
|
4495
|
-
hdrMode === "force-sdr" ? "[Render] SDR forced by --sdr flag" : "[Render] No HDR sources detected
|
|
4496
|
+
hdrMode === "force-sdr" ? "[Render] SDR forced by --sdr flag" : "[Render] No HDR sources detected, rendering SDR"
|
|
4496
4497
|
);
|
|
4497
4498
|
return;
|
|
4498
4499
|
}
|
|
@@ -4507,9 +4508,9 @@ function logHdrResolution(input, hdrMode, effectiveHdr, forcedHdrWithoutSources)
|
|
|
4507
4508
|
);
|
|
4508
4509
|
return;
|
|
4509
4510
|
}
|
|
4510
|
-
const reason = forcedHdrWithoutSources ? "forced by --hdr flag (no HDR sources detected
|
|
4511
|
+
const reason = forcedHdrWithoutSources ? "forced by --hdr flag (no HDR sources detected, defaulting to HLG)" : "forced by --hdr flag";
|
|
4511
4512
|
input.log.info(
|
|
4512
|
-
`[Render] HDR ${reason}
|
|
4513
|
+
`[Render] HDR ${reason}, output: ${effectiveHdr.transfer.toUpperCase()} (BT.2020, 10-bit H.265)`
|
|
4513
4514
|
);
|
|
4514
4515
|
}
|
|
4515
4516
|
function resolveEffectiveHdrMode(input) {
|
|
@@ -4596,14 +4597,14 @@ function resolveRenderWorkerCount(totalFrames, requestedWorkers, cfg, compiled,
|
|
|
4596
4597
|
const reasonCodes = new Set(compiled.renderModeHints.reasons.map((r) => r.code));
|
|
4597
4598
|
if (reasonCodes.has("htmlInCanvas")) {
|
|
4598
4599
|
log.warn(
|
|
4599
|
-
"[Render] html-in-canvas (drawElementImage) detected
|
|
4600
|
+
"[Render] html-in-canvas (drawElementImage) detected, pinning to 1 worker (Chrome concurrency limitation).",
|
|
4600
4601
|
{ requestedWorkers }
|
|
4601
4602
|
);
|
|
4602
4603
|
return 1;
|
|
4603
4604
|
}
|
|
4604
4605
|
if (cfg.lowMemoryMode && requestedWorkers === void 0) {
|
|
4605
4606
|
log.info(
|
|
4606
|
-
"[Render] Low-memory profile
|
|
4607
|
+
"[Render] Low-memory profile, pinning to 1 capture worker (auto-worker calibration skipped)."
|
|
4607
4608
|
);
|
|
4608
4609
|
return 1;
|
|
4609
4610
|
}
|
|
@@ -5227,7 +5228,7 @@ function assertVideoFrameCoverage(reports, threshold) {
|
|
|
5227
5228
|
const thresholdPct = (threshold * 100).toFixed(1);
|
|
5228
5229
|
const suffix = sorted.length > 1 ? ` (+${sorted.length - 1} more clip(s) below threshold)` : "";
|
|
5229
5230
|
throw new VideoFrameCoverageError(
|
|
5230
|
-
`Video "${worst.videoId}" captured ${worst.capturedFrames} of expected ${worst.expectedFrames} frames (coverage ${pct}%, threshold ${thresholdPct}%). check/snapshot may pass while the encoded MP4 renders this clip blank
|
|
5231
|
+
`Video "${worst.videoId}" captured ${worst.capturedFrames} of expected ${worst.expectedFrames} frames (coverage ${pct}%, threshold ${thresholdPct}%). check/snapshot may pass while the encoded MP4 renders this clip blank, so the render is aborted to prevent shipping a wrong MP4.${suffix} Set HF_VIDEO_COVERAGE_THRESHOLD=0 to disable this gate.`,
|
|
5231
5232
|
{ threshold, worst, failedReports: sorted }
|
|
5232
5233
|
);
|
|
5233
5234
|
}
|
|
@@ -5334,7 +5335,7 @@ function collectRenderMedia(html) {
|
|
|
5334
5335
|
}
|
|
5335
5336
|
|
|
5336
5337
|
// ../core/dist/generated/position-edits-render-inline.js
|
|
5337
|
-
var POSITION_EDITS_RENDER_IIFE = '"use strict";(()=>{function T(){return globalThis}function P(e,t){if(typeof window>"u")return;let o=T(),r=o.__hf?.onSwallowed;if(r)try{r({label:e,error:t})}catch(s){}(o.__hfDebug||o.__HYPERFRAMES_DEBUG)&&console.debug(`[hyperframes] ${e} swallowed:`,t)}var x=null;function R(e,t){if(x)try{x({source:"hf-preview",type:"analytics",event:e,properties:t??{}})}catch(o){P("runtime.analytics.site1",o)}}var W="http://www.w3.org/1999/xhtml";function N(e){return e!=null&&e.nodeType===1}function
|
|
5338
|
+
var POSITION_EDITS_RENDER_IIFE = '"use strict";(()=>{function T(){return globalThis}function P(e,t){if(typeof window>"u")return;let o=T(),r=o.__hf?.onSwallowed;if(r)try{r({label:e,error:t})}catch(s){}(o.__hfDebug||o.__HYPERFRAMES_DEBUG)&&console.debug(`[hyperframes] ${e} swallowed:`,t)}var x=null;function R(e,t){if(x)try{x({source:"hf-preview",type:"analytics",event:e,properties:t??{}})}catch(o){P("runtime.analytics.site1",o)}}var W="http://www.w3.org/1999/xhtml";function N(e){return e!=null&&e.nodeType===1}function k(e){return N(e)&&(e.namespaceURI===W||e.namespaceURI==="http://www.w3.org/2000/svg")}var w="data-hf-edit-base-x",y="data-hf-edit-base-y",m="data-hf-edit-original-translate",_=e=>{let t=parseFloat(e??"");return Number.isFinite(t)?t:0},O=e=>{let t=[],o=0,r="";for(let s of e.trim())s==="("&&(o+=1),s===")"&&(o=Math.max(0,o-1)),/\\s/.test(s)&&o===0?(r&&t.push(r),r=""):r+=s;return r&&t.push(r),t},L=/^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)px$/,E=(e,t)=>L.test(e)&&L.test(t)?`${parseFloat(e)+parseFloat(t)}px`:`calc(${e} + ${t})`,V=(e,t,o)=>{if(!e||e==="none")return`${t} ${o}`;let[r,s,a]=O(e);if(r===void 0)return`${t} ${o}`;if(s===void 0)return`${E(r,t)} ${o}`;let i=a===void 0?"":` ${a}`;return`${E(r,t)} ${E(s,o)}${i}`},j=e=>{try{e.ownerDocument.defaultView?.gsap?.getProperty?.(e,"x")}catch{}},C=e=>{let t=e.style.getPropertyValue("translate").trim();if(t)return t==="none"?"":t;try{let o=e.ownerDocument.defaultView,r=o?o.getComputedStyle(e).getPropertyValue("translate").trim():"";return r==="none"?"":r}catch{return""}},b=new WeakMap;function G(e,t){let o=b.get(e);if(!t?.force&&o!==void 0&&e.style.getPropertyValue("translate")!==o){R("position_edit_fold_skipped",{hfId:e.getAttribute("data-hf-id")});return}let r=_(e.getAttribute("data-x"))-_(e.getAttribute(w)),s=_(e.getAttribute("data-y"))-_(e.getAttribute(y));e.hasAttribute(m)||e.setAttribute(m,C(e)),o===void 0&&j(e);let a=e.getAttribute(m)??"",i=V(a,`${r}px`,`${s}px`);e.style.setProperty("translate",i),b.set(e,e.style.getPropertyValue("translate"))}function S(e,t){let o=e.querySelectorAll(`[${m}]:not([${w}]):not([${y}])`);for(let a=0;a<o.length;a++){let i=o[a];if(i===void 0||!k(i))continue;let g=i.getAttribute(m)??"";g===""?i.style.removeProperty("translate"):i.style.setProperty("translate",g),i.removeAttribute(m),b.delete(i)}let r=e.querySelectorAll(`[${w}], [${y}]`),s=0;for(let a=0;a<r.length;a++){let i=r[a];i===void 0||!k(i)||(G(i,t),s+=1)}return s}var $="__hfPositionEditsSeekReapplyWrapped",D=new WeakSet,M=new WeakMap,H=new WeakMap;function F(e){let t=e,o=()=>{try{S(t.document)}catch{}},r=n=>typeof n=="function"&&(D.has(n)||!!n[$]),s=n=>{D.add(n);try{Object.defineProperty(n,$,{value:!0})}catch{}},a=n=>{if(typeof n!="function"||r(n))return n;let l=function(...u){let d=n.apply(this,u);return o(),d};return s(l),l},i=(n,l)=>{let u=M.get(n);if(u?.has(l))return!0;let d=Object.getOwnPropertyDescriptor(n,l);if(d?.configurable===!1){let c=n[l];return typeof c=="function"&&(n[l]=a(c),o()),!1}let p=n[l],f=d?.set;return Object.defineProperty(n,l,{configurable:!0,enumerable:d?.enumerable??!0,get:()=>p,set:c=>{p=a(c),f?.call(n,c)}}),p=a(p),u??(u=new Set),u.add(l),M.set(n,u),o(),!0},g=(n,l)=>{let u=H.get(t),d=Object.getOwnPropertyDescriptor(t,n);if(!u?.has(n)){if(d?.configurable===!1){let c=t[n];return c?i(c,l):!1}let f=t[n];Object.defineProperty(t,n,{configurable:!0,enumerable:d?.enumerable??!0,get:()=>f,set:c=>{f=c,f&&i(f,l)}}),u??(u=new Set),u.add(n),H.set(t,u)}let p=t[n];return p?i(p,l):!1},h=()=>{let n=g("__hf","seek"),l=g("__player","renderSeek");return n&&l};if(h())return;let v=120,A=t.setInterval(()=>{if(h()){t.clearInterval(A);return}v-=1,v<=0&&t.clearInterval(A)},50)}function I(){document.querySelector(`[${w}], [${y}]`)&&(S(document),F(window))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",I,{once:!0}):I();})();\n';
|
|
5338
5339
|
function getPositionEditsRenderScript() {
|
|
5339
5340
|
return POSITION_EDITS_RENDER_IIFE;
|
|
5340
5341
|
}
|
|
@@ -5724,7 +5725,7 @@ async function resolveMediaDuration(src, mediaStart, playbackRate, baseDir, down
|
|
|
5724
5725
|
if (tagName !== "video") {
|
|
5725
5726
|
if (error instanceof NotMediaPayloadError) {
|
|
5726
5727
|
log?.warn(
|
|
5727
|
-
`[compile] Audio "${elementIdentity}" (${src}) is a text document, not a media file
|
|
5728
|
+
`[compile] Audio "${elementIdentity}" (${src}) is a text document, not a media file, so the element is dropped from the render. Point it at a rendered media file.`
|
|
5728
5729
|
);
|
|
5729
5730
|
}
|
|
5730
5731
|
return { duration: null, resolvedPath: filePath };
|
|
@@ -5813,7 +5814,7 @@ async function compileHtmlFile(html, baseDir, downloadDir, log) {
|
|
|
5813
5814
|
if (r.maxDuration != null && shouldClampResolvedMediaDuration(r.tagName, r.duration, r.maxDuration)) {
|
|
5814
5815
|
clampList.push({ id: r.id, duration: r.maxDuration });
|
|
5815
5816
|
log?.warn(
|
|
5816
|
-
`[compile] Audio "${r.id}" (${r.src}) is ${r.maxDuration.toFixed(2)}s but its data-duration is ${r.duration.toFixed(2)}s
|
|
5817
|
+
`[compile] Audio "${r.id}" (${r.src}) is ${r.maxDuration.toFixed(2)}s but its data-duration is ${r.duration.toFixed(2)}s, so the slot is shortened to the media length. Set data-duration to ~${r.maxDuration.toFixed(2)}s, trim data-media-start, or use a longer/looping source if that isn't intended.`
|
|
5817
5818
|
);
|
|
5818
5819
|
}
|
|
5819
5820
|
}
|
|
@@ -6202,7 +6203,7 @@ ${safeText}
|
|
|
6202
6203
|
} else {
|
|
6203
6204
|
if (download.reason instanceof ScriptIntegrityError) throw download.reason;
|
|
6204
6205
|
defaultLogger.warn(
|
|
6205
|
-
`[Compiler] WARNING: Failed to download CDN script: ${src}
|
|
6206
|
+
`[Compiler] WARNING: Failed to download CDN script: ${src} (${download.reason}). The render may fail if this script is required (e.g. GSAP). Consider bundling it locally in your project.`
|
|
6206
6207
|
);
|
|
6207
6208
|
}
|
|
6208
6209
|
}
|
|
@@ -6254,7 +6255,7 @@ function collectExternalAssets(html, projectDir) {
|
|
|
6254
6255
|
}
|
|
6255
6256
|
if (externalAssets.size > 0) {
|
|
6256
6257
|
defaultLogger.info(
|
|
6257
|
-
`[Compiler] Found ${externalAssets.size} asset(s) outside project directory
|
|
6258
|
+
`[Compiler] Found ${externalAssets.size} asset(s) outside project directory, will copy to render output`
|
|
6258
6259
|
);
|
|
6259
6260
|
}
|
|
6260
6261
|
return {
|
|
@@ -6279,7 +6280,7 @@ async function downloadAndRewriteUrls(urlSet, html, remoteDir, warnLabel, logLab
|
|
|
6279
6280
|
urlToLocal.set(url, localPath);
|
|
6280
6281
|
} catch (err) {
|
|
6281
6282
|
const identity = safeDownloadUrlIdentity(url);
|
|
6282
|
-
defaultLogger.warn(`[Compiler] ${warnLabel}
|
|
6283
|
+
defaultLogger.warn(`[Compiler] ${warnLabel}, using original URL as fallback.`, {
|
|
6283
6284
|
urlFingerprint: identity.urlFingerprint,
|
|
6284
6285
|
host: identity.host,
|
|
6285
6286
|
error: err instanceof Error ? err.message : String(err)
|
|
@@ -6372,7 +6373,7 @@ async function fetchExternalStylesheetCss(href) {
|
|
|
6372
6373
|
timeoutMs: 15e3
|
|
6373
6374
|
});
|
|
6374
6375
|
} catch (err) {
|
|
6375
|
-
defaultLogger.warn("[Compiler] External stylesheet fetch failed
|
|
6376
|
+
defaultLogger.warn("[Compiler] External stylesheet fetch failed, preserving link tag.", {
|
|
6376
6377
|
urlFingerprint: identity.urlFingerprint,
|
|
6377
6378
|
host: identity.host,
|
|
6378
6379
|
error: err instanceof Error ? err.message : String(err)
|
|
@@ -6507,7 +6508,7 @@ async function readLocalFont(absPath) {
|
|
|
6507
6508
|
return { kind: "inline", buffer: Buffer.concat(chunks, totalBytes) };
|
|
6508
6509
|
}
|
|
6509
6510
|
async function embedLocalFontFaces(html, projectDir) {
|
|
6510
|
-
const { fontToDataUri: toDataUri } = await import("./deterministicFonts-
|
|
6511
|
+
const { fontToDataUri: toDataUri } = await import("./deterministicFonts-C5JQLCTS.js");
|
|
6511
6512
|
const styleBlockRe = /<style\b[^>]*>([\s\S]*?)<\/style>/gi;
|
|
6512
6513
|
const fontFaceRe = /@font-face\s*\{([^}]*)\}/gi;
|
|
6513
6514
|
let result = html;
|
|
@@ -7016,12 +7017,15 @@ async function resolveCompositionDurations(page, unresolved) {
|
|
|
7016
7017
|
const resolved = [];
|
|
7017
7018
|
for (const id of compIds) {
|
|
7018
7019
|
const tl = timelines[id];
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7022
|
-
|
|
7023
|
-
|
|
7024
|
-
|
|
7020
|
+
let dur = 0;
|
|
7021
|
+
try {
|
|
7022
|
+
dur = typeof tl?.duration === "function" ? Number(tl.duration()) : 0;
|
|
7023
|
+
} catch {
|
|
7024
|
+
dur = 0;
|
|
7025
|
+
}
|
|
7026
|
+
if (dur > 0) {
|
|
7027
|
+
resolved.push({ id, duration: dur, source: "__timelines" });
|
|
7028
|
+
continue;
|
|
7025
7029
|
}
|
|
7026
7030
|
const el = document.getElementById(id);
|
|
7027
7031
|
if (el) {
|
|
@@ -7117,28 +7121,28 @@ async function runCompileStage(input) {
|
|
|
7117
7121
|
cfg.useDrawElement = false;
|
|
7118
7122
|
deCompileGate = "3d";
|
|
7119
7123
|
log.info(
|
|
7120
|
-
"[Render] Fast capture: composition uses a CSS 3D rendering context (perspective / preserve-3d / backface-visibility)
|
|
7124
|
+
"[Render] Fast capture: composition uses a CSS 3D rendering context (perspective / preserve-3d / backface-visibility), so disabling drawElementImage for this render. Capture uses the platform's baseline route."
|
|
7121
7125
|
);
|
|
7122
7126
|
}
|
|
7123
7127
|
if (cfg.useDrawElement && process.env.HF_FAST_CAPTURE_BLEND !== "true" && compiled.usesMixBlendMode) {
|
|
7124
7128
|
cfg.useDrawElement = false;
|
|
7125
7129
|
deCompileGate = "mix_blend_mode";
|
|
7126
7130
|
log.info(
|
|
7127
|
-
"[Render] Fast capture: composition uses mix-blend-mode
|
|
7131
|
+
"[Render] Fast capture: composition uses mix-blend-mode, so disabling drawElementImage for this render. Capture uses the platform's baseline route."
|
|
7128
7132
|
);
|
|
7129
7133
|
}
|
|
7130
7134
|
if (cfg.useDrawElement && process.env.HF_FAST_CAPTURE_ANCESTOR_BG !== "true" && compiled.hasAncestorBackgroundImage) {
|
|
7131
7135
|
cfg.useDrawElement = false;
|
|
7132
7136
|
deCompileGate = "ancestor_background_image";
|
|
7133
7137
|
log.info(
|
|
7134
|
-
"[Render] Fast capture: composition root's ancestors (body/html/wrapper) carry a background-image
|
|
7138
|
+
"[Render] Fast capture: composition root's ancestors (body/html/wrapper) carry a background-image, so disabling drawElementImage for this render. Capture uses the platform's baseline route."
|
|
7135
7139
|
);
|
|
7136
7140
|
}
|
|
7137
7141
|
if (cfg.useDrawElement && process.env.PRODUCER_EXPERIMENTAL_FAST_CAPTURE !== "true" && compiled.hasShaderTransitions) {
|
|
7138
7142
|
cfg.useDrawElement = false;
|
|
7139
7143
|
deCompileGate = "shader_transitions";
|
|
7140
7144
|
log.info(
|
|
7141
|
-
"[Render] Fast capture: composition uses shader transitions
|
|
7145
|
+
"[Render] Fast capture: composition uses shader transitions, so disabling drawElementImage so page-side compositing stays available."
|
|
7142
7146
|
);
|
|
7143
7147
|
}
|
|
7144
7148
|
if (!cfg.useDrawElement && cfg.pageSideCompositingAutoDisabled) {
|
|
@@ -7453,7 +7457,7 @@ async function runProbeStage(input) {
|
|
|
7453
7457
|
} else {
|
|
7454
7458
|
beginFrameStalled = true;
|
|
7455
7459
|
log.warn(
|
|
7456
|
-
"[Render] BeginFrame liveness probe timed out
|
|
7460
|
+
"[Render] BeginFrame liveness probe timed out: this composition stalls BeginFrame on this host (SwiftShader heavy-layer pattern). Relaunching the probe browser in screenshot capture mode; the render will use screenshot capture throughout.",
|
|
7457
7461
|
{ probeTimeoutMs }
|
|
7458
7462
|
);
|
|
7459
7463
|
lastBrowserConsole = probeSession.browserConsoleBuffer;
|
|
@@ -7667,7 +7671,7 @@ async function runProbeStage(input) {
|
|
|
7667
7671
|
video.start = win.visibleStart;
|
|
7668
7672
|
video.end = win.visibleEnd;
|
|
7669
7673
|
log.info(
|
|
7670
|
-
`[Probe] Runtime video discovery: ${video.id} visible ${win.visibleStart.toFixed(2)}s
|
|
7674
|
+
`[Probe] Runtime video discovery: ${video.id} visible ${win.visibleStart.toFixed(2)}s to ${win.visibleEnd.toFixed(2)}s`
|
|
7671
7675
|
);
|
|
7672
7676
|
}
|
|
7673
7677
|
}
|
|
@@ -7715,7 +7719,7 @@ async function runProbeStage(input) {
|
|
|
7715
7719
|
});
|
|
7716
7720
|
if (!timelinesInfo.gsapLoaded) {
|
|
7717
7721
|
diagnostics.push(
|
|
7718
|
-
"GSAP is not loaded
|
|
7722
|
+
"GSAP is not loaded. The CDN script may have failed to download. Bundle GSAP locally in your project instead of using a CDN <script src>."
|
|
7719
7723
|
);
|
|
7720
7724
|
} else if (timelinesInfo.timelineKeys.length === 0) {
|
|
7721
7725
|
diagnostics.push(
|
|
@@ -7732,10 +7736,10 @@ async function runProbeStage(input) {
|
|
|
7732
7736
|
log.warn("Failed to gather browser diagnostics for zero-duration composition", {
|
|
7733
7737
|
error: err instanceof Error ? err.message : String(err)
|
|
7734
7738
|
});
|
|
7735
|
-
diagnostics.push("(Could not gather browser diagnostics
|
|
7739
|
+
diagnostics.push("(Could not gather browser diagnostics. The page may have crashed.)");
|
|
7736
7740
|
}
|
|
7737
7741
|
const hint = diagnostics.length > 0 ? "\n\nDiagnostics:\n - " + diagnostics.join("\n - ") : "\n\nCheck that GSAP timelines are registered on window.__timelines.";
|
|
7738
|
-
throw new Error("Composition duration is 0
|
|
7742
|
+
throw new Error("Composition duration is 0, so this would produce a black video." + hint);
|
|
7739
7743
|
}
|
|
7740
7744
|
if (probeSession) {
|
|
7741
7745
|
const failedRequests = probeSession.browserConsoleBuffer.filter(isActionableProbeFailure);
|
|
@@ -7791,7 +7795,7 @@ function validateNoGpuEncode(config) {
|
|
|
7791
7795
|
if (config.useGpu === true) {
|
|
7792
7796
|
throw new PlanValidationError(
|
|
7793
7797
|
BROWSER_GPU_NOT_SOFTWARE,
|
|
7794
|
-
"[planValidation] GPU encode is banned in distributed mode: config.useGpu === true. Distributed retries must be byte-identical, but NVENC/QSV/VAAPI produce different output across machines. Set useGpu=false (the default)
|
|
7798
|
+
"[planValidation] GPU encode is banned in distributed mode: config.useGpu === true. Distributed retries must be byte-identical, but NVENC/QSV/VAAPI produce different output across machines. Set useGpu=false (the default): software libx264/libx265 is the only supported encoder in distributed mode."
|
|
7795
7799
|
);
|
|
7796
7800
|
}
|
|
7797
7801
|
if (config.browserGpuMode !== void 0 && config.browserGpuMode !== "software") {
|
|
@@ -8050,6 +8054,9 @@ async function runExtractVideosStage(input) {
|
|
|
8050
8054
|
} = input;
|
|
8051
8055
|
const stage2Start = Date.now();
|
|
8052
8056
|
const extractionPolicy = resolveVideoExtractionPolicy();
|
|
8057
|
+
composition.videos = composition.videos.filter(
|
|
8058
|
+
(video) => !isVideoPastTimelineEnd(video, composition.duration)
|
|
8059
|
+
);
|
|
8053
8060
|
let frameLookup = null;
|
|
8054
8061
|
let extractionResult = null;
|
|
8055
8062
|
let failureToEnforce = null;
|
|
@@ -8136,7 +8143,8 @@ async function runExtractVideosStage(input) {
|
|
|
8136
8143
|
timelineEnd: composition.duration,
|
|
8137
8144
|
maxTransientRetries: extractionPolicy.maxTransientRetries,
|
|
8138
8145
|
collectProbeFailures: extractionPolicy.failureMode === "enforce",
|
|
8139
|
-
deferRangeExtraction
|
|
8146
|
+
deferRangeExtraction,
|
|
8147
|
+
contentKeyedDirs: [join15(compiledDir, REMOTE_MEDIA_SUBDIR)]
|
|
8140
8148
|
},
|
|
8141
8149
|
abortSignal,
|
|
8142
8150
|
cfg,
|
|
@@ -10698,7 +10706,7 @@ async function executeDiskCaptureWithAdaptiveRetry(options) {
|
|
|
10698
10706
|
const madeProgress = captureAttemptMadeProgress(frameCount, remainingCount);
|
|
10699
10707
|
if (!madeProgress) {
|
|
10700
10708
|
options.log.warn(
|
|
10701
|
-
"[Render] Capture attempt made no forward progress; composition is likely structurally broken
|
|
10709
|
+
"[Render] Capture attempt made no forward progress; composition is likely structurally broken, not retrying.",
|
|
10702
10710
|
{ attempt, frameCount, remainingCount, workers: currentWorkers }
|
|
10703
10711
|
);
|
|
10704
10712
|
}
|
|
@@ -10767,7 +10775,7 @@ async function executeDiskCaptureWithAdaptiveRetry(options) {
|
|
|
10767
10775
|
}
|
|
10768
10776
|
if (!madeProgress) {
|
|
10769
10777
|
options.log.warn(
|
|
10770
|
-
"[Render] Capture attempt made no forward progress; composition is likely structurally broken
|
|
10778
|
+
"[Render] Capture attempt made no forward progress; composition is likely structurally broken, not retrying.",
|
|
10771
10779
|
{ attempt, frameCount, remainingCount, workers: currentWorkers }
|
|
10772
10780
|
);
|
|
10773
10781
|
}
|
|
@@ -11230,7 +11238,7 @@ async function executeRenderJob(job, projectDir, outputPath, progressSink, abort
|
|
|
11230
11238
|
execution.defer("remove workDir", () => {
|
|
11231
11239
|
if (job.config.debug) return;
|
|
11232
11240
|
if (job.status === "complete" && process.env.KEEP_TEMP === "1") {
|
|
11233
|
-
log.info("KEEP_TEMP=1
|
|
11241
|
+
log.info("KEEP_TEMP=1, leaving workDir on disk for inspection", { workDir });
|
|
11234
11242
|
return;
|
|
11235
11243
|
}
|
|
11236
11244
|
rmSync8(workDir, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
@@ -11467,7 +11475,7 @@ async function executeRenderPipeline(input) {
|
|
|
11467
11475
|
captureForceScreenshot = true;
|
|
11468
11476
|
updateCaptureObservability({ forceScreenshot: captureForceScreenshot });
|
|
11469
11477
|
log.info(
|
|
11470
|
-
"[Render] Low-memory render profile active
|
|
11478
|
+
"[Render] Low-memory render profile active: screenshot capture, auto-worker calibration skipped" + (job.config.workers === void 0 ? ", pinned to 1 worker" : "") + ". Override with --no-low-memory-mode or PRODUCER_LOW_MEMORY_MODE=false.",
|
|
11471
11479
|
{ totalMemMb: getSystemTotalMb(), thresholdMb: LOW_MEMORY_TOTAL_MB_THRESHOLD }
|
|
11472
11480
|
);
|
|
11473
11481
|
}
|
|
@@ -12035,7 +12043,7 @@ async function executeRenderPipeline(input) {
|
|
|
12035
12043
|
cfg.useDrawElement = false;
|
|
12036
12044
|
deClampReason = workerCount > 1 ? "parallel" : "disk_path";
|
|
12037
12045
|
log.info(
|
|
12038
|
-
"[Render] Fast capture: default-on drawElement disabled for this render
|
|
12046
|
+
"[Render] Fast capture: default-on drawElement disabled for this render: " + (workerCount > 1 ? "parallel capture" : "the disk capture path") + " has no runtime self-verification. Set PRODUCER_EXPERIMENTAL_FAST_CAPTURE=true to override."
|
|
12039
12047
|
);
|
|
12040
12048
|
if (probeSession && probeSession.captureMode === "drawelement") {
|
|
12041
12049
|
lastBrowserConsole = probeSession.browserConsoleBuffer;
|
|
@@ -12131,7 +12139,7 @@ async function executeRenderPipeline(input) {
|
|
|
12131
12139
|
});
|
|
12132
12140
|
updateCaptureObservability({ forceScreenshot: captureForceScreenshot });
|
|
12133
12141
|
log.info(
|
|
12134
|
-
`[Render] Page-side compositing enabled
|
|
12142
|
+
`[Render] Page-side compositing enabled, bypassing Node-side layered shader-blend path. Engine will capture one ${needsAlpha ? "RGBA PNG" : "opaque RGB"} screenshot per output frame.`
|
|
12135
12143
|
);
|
|
12136
12144
|
}
|
|
12137
12145
|
const useLayeredComposite = !usePageSideCompositingForTransitions && shouldUseLayeredComposite({
|
|
@@ -12628,7 +12636,7 @@ async function executeRenderPipeline(input) {
|
|
|
12628
12636
|
cfg.useDrawElement = false;
|
|
12629
12637
|
deClampReason = deClampReason ?? "disk_path";
|
|
12630
12638
|
log.info(
|
|
12631
|
-
"[Render] Fast capture: drawElement disabled for the disk fallback
|
|
12639
|
+
"[Render] Fast capture: drawElement disabled for the disk fallback: streaming encoder spawn failed and the disk path has no runtime self-verification."
|
|
12632
12640
|
);
|
|
12633
12641
|
if (probeSession && probeSession.captureMode === "drawelement") {
|
|
12634
12642
|
lastBrowserConsole = probeSession.browserConsoleBuffer;
|
|
@@ -13167,10 +13175,10 @@ function validateJsonSafeValue(value, field) {
|
|
|
13167
13175
|
walkVariables(value, field, /* @__PURE__ */ new WeakSet());
|
|
13168
13176
|
}
|
|
13169
13177
|
var LEAF_REJECTIONS = {
|
|
13170
|
-
undefined: "undefined leaves are silently dropped by JSON.stringify
|
|
13178
|
+
undefined: "undefined leaves are silently dropped by JSON.stringify. Use null if you mean an absent value",
|
|
13171
13179
|
function: "functions are not JSON-serializable",
|
|
13172
13180
|
symbol: "Symbols are not JSON-serializable",
|
|
13173
|
-
bigint: "BigInt values throw at JSON.stringify
|
|
13181
|
+
bigint: "BigInt values throw at JSON.stringify. Encode as a string if you need 64-bit integers"
|
|
13174
13182
|
};
|
|
13175
13183
|
function walkVariables(value, path, seen) {
|
|
13176
13184
|
const t = typeof value;
|
|
@@ -13191,7 +13199,7 @@ function walkVariables(value, path, seen) {
|
|
|
13191
13199
|
if (seen.has(value)) {
|
|
13192
13200
|
throw new InvalidConfigError(
|
|
13193
13201
|
path,
|
|
13194
|
-
"circular reference detected
|
|
13202
|
+
"circular reference detected: JSON.stringify cannot serialize cycles"
|
|
13195
13203
|
);
|
|
13196
13204
|
}
|
|
13197
13205
|
seen.add(value);
|
|
@@ -13853,7 +13861,7 @@ function validateOutputResolutionOverride(body) {
|
|
|
13853
13861
|
return `Invalid outputResolution "${body.outputResolution}". Must be one of: landscape, portrait, landscape-4k, portrait-4k, square, square-4k (aliases: 1080p, 4k, \u2026).`;
|
|
13854
13862
|
}
|
|
13855
13863
|
if (normalized !== void 0 && (body.format === "webm" || body.format === "mov")) {
|
|
13856
|
-
return `outputResolution is not supported with format "${body.format}"
|
|
13864
|
+
return `outputResolution is not supported with format "${body.format}": the alpha (webm/mov) capture path can't supersample. Use format "mp4", or omit outputResolution to render at the composition's native dimensions.`;
|
|
13857
13865
|
}
|
|
13858
13866
|
return void 0;
|
|
13859
13867
|
}
|
|
@@ -14300,7 +14308,7 @@ function startServer(options = {}) {
|
|
|
14300
14308
|
});
|
|
14301
14309
|
async function shutdown(signal) {
|
|
14302
14310
|
log.info(`Received ${signal}, shutting down`);
|
|
14303
|
-
const { drainBrowserPool } = await import("./src-
|
|
14311
|
+
const { drainBrowserPool } = await import("./src-LIERUCFW.js");
|
|
14304
14312
|
await drainBrowserPool().catch(() => {
|
|
14305
14313
|
});
|
|
14306
14314
|
const handle = await Promise.race([
|
|
@@ -14560,7 +14568,7 @@ function collectPlanAssetShas(planDir) {
|
|
|
14560
14568
|
}
|
|
14561
14569
|
if (compositionHtml === null) {
|
|
14562
14570
|
throw new Error(
|
|
14563
|
-
`[freezePlan] compiled HTML missing at ${COMPILED_INDEX_RELATIVE_PATH}
|
|
14571
|
+
`[freezePlan] compiled HTML missing at ${COMPILED_INDEX_RELATIVE_PATH} (upstream compile stage did not materialize the expected file).`
|
|
14564
14572
|
);
|
|
14565
14573
|
}
|
|
14566
14574
|
return { compositionHtml, assets };
|
|
@@ -15139,7 +15147,7 @@ var PlanTooLargeError = class extends Error {
|
|
|
15139
15147
|
const breakdownSuffix = breakdown ? ` Breakdown: video-frames=${formatBytes(breakdown.videoFramesBytes)}, compiled=${formatBytes(breakdown.compiledBytes)} (source-media=${formatBytes(breakdown.sourceMediaBytes)}), audio=${formatBytes(breakdown.audioBytes)}, metadata=${formatBytes(breakdown.metadataBytes)}, other=${formatBytes(breakdown.otherBytes)}, files=${breakdown.fileCount}.` : "";
|
|
15140
15148
|
const observationSuffix = observedAt ? ` Observed at ${observedAt}.` : "";
|
|
15141
15149
|
super(
|
|
15142
|
-
`[plan] planDir size ${formatBytes(sizeBytes)} exceeds the configured ceiling ${formatBytes(limitBytes)} (PLAN_TOO_LARGE). The default 2 GB cap fits inside AWS Lambda's 10 GB /tmp budget alongside the chunk worker's frame buffer and ffmpeg's working set. To unblock: use the content-addressed \`planV2()\` transport, shorten the composition, lower the framerate, or use the in-process renderer (\`executeRenderJob\`)
|
|
15150
|
+
`[plan] planDir size ${formatBytes(sizeBytes)} exceeds the configured ceiling ${formatBytes(limitBytes)} (PLAN_TOO_LARGE). The default 2 GB cap fits inside AWS Lambda's 10 GB /tmp budget alongside the chunk worker's frame buffer and ffmpeg's working set. To unblock: use the content-addressed \`planV2()\` transport, shorten the composition, lower the framerate, or use the in-process renderer (\`executeRenderJob\`), which has no planDir size cap.` + observationSuffix + breakdownSuffix
|
|
15143
15151
|
);
|
|
15144
15152
|
this.name = "PlanTooLargeError";
|
|
15145
15153
|
this.sizeBytes = sizeBytes;
|
|
@@ -15156,7 +15164,7 @@ var FormatNotSupportedInDistributedError = class extends Error {
|
|
|
15156
15164
|
reason;
|
|
15157
15165
|
constructor(format, reason) {
|
|
15158
15166
|
super(
|
|
15159
|
-
`[plan] format ${JSON.stringify(format)} is not supported in distributed mode: ${reason}. Render with the in-process renderer (\`executeRenderJob\`)
|
|
15167
|
+
`[plan] format ${JSON.stringify(format)} is not supported in distributed mode: ${reason}. Render with the in-process renderer (\`executeRenderJob\`), which has full format support, or pick a distributed-supported format: mp4 SDR, mov ProRes 4444, png-sequence, or webm VP9.`
|
|
15160
15168
|
);
|
|
15161
15169
|
this.name = "FormatNotSupportedInDistributedError";
|
|
15162
15170
|
this.format = format;
|
|
@@ -15245,7 +15253,7 @@ async function readFontSnapshotSha() {
|
|
|
15245
15253
|
const data = module.EMBEDDED_FONT_DATA;
|
|
15246
15254
|
if (!data || typeof data !== "object") {
|
|
15247
15255
|
throw new Error(
|
|
15248
|
-
"[plan] EMBEDDED_FONT_DATA missing from @hyperframes/core/fonts/embedded-data
|
|
15256
|
+
"[plan] EMBEDDED_FONT_DATA missing from @hyperframes/core/fonts/embedded-data. Was `bun run build:fonts` run?"
|
|
15249
15257
|
);
|
|
15250
15258
|
}
|
|
15251
15259
|
const dataObj = data;
|
|
@@ -15295,7 +15303,7 @@ function resolveEncoderTriple(config) {
|
|
|
15295
15303
|
}
|
|
15296
15304
|
if (config.codec !== void 0) {
|
|
15297
15305
|
throw new Error(
|
|
15298
|
-
`[plan] DistributedRenderConfig.codec is only valid for format="mp4"; received codec=${JSON.stringify(config.codec)} with format=${JSON.stringify(config.format)}. Omit codec for non-mp4 formats
|
|
15306
|
+
`[plan] DistributedRenderConfig.codec is only valid for format="mp4"; received codec=${JSON.stringify(config.codec)} with format=${JSON.stringify(config.format)}. Omit codec for non-mp4 formats: mov is always ProRes 4444, webm is always libvpx-vp9, and png-sequence has no encoder.`
|
|
15299
15307
|
);
|
|
15300
15308
|
}
|
|
15301
15309
|
return resolveNonMp4EncoderTriple(config.format, config.quality ?? "standard");
|
|
@@ -15485,7 +15493,7 @@ async function buildLocalExecutionPlan(projectDir, config, executionPlanDir, opt
|
|
|
15485
15493
|
if (probeResult.fileServer) closeFileServerSafely(probeResult.fileServer, "plan", log);
|
|
15486
15494
|
if (probeResult.probeSession) {
|
|
15487
15495
|
try {
|
|
15488
|
-
const { closeCaptureSession: closeCaptureSession2 } = await import("./src-
|
|
15496
|
+
const { closeCaptureSession: closeCaptureSession2 } = await import("./src-LIERUCFW.js");
|
|
15489
15497
|
await closeCaptureSession2(probeResult.probeSession);
|
|
15490
15498
|
} catch (err) {
|
|
15491
15499
|
log.warn("[plan] probe session close failed", {
|
|
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
resolveConfig,
|
|
9
9
|
usesSoftwareWebGpu
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WU2B74TL.js";
|
|
11
11
|
|
|
12
12
|
// src/browser/gpuPolicy.ts
|
|
13
13
|
function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCER_BROWSER_GPU_MODE) {
|
|
@@ -17,7 +17,7 @@ function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCE
|
|
|
17
17
|
return "auto";
|
|
18
18
|
}
|
|
19
19
|
async function resolveCaptureBrowserGpuMode(requestedMode, chromePath) {
|
|
20
|
-
const { resolveBrowserGpuMode } = await import("./src-
|
|
20
|
+
const { resolveBrowserGpuMode } = await import("./src-LIERUCFW.js");
|
|
21
21
|
return resolveBrowserGpuMode(requestedMode, { chromePath });
|
|
22
22
|
}
|
|
23
23
|
function resolveLocalWebGpu(browserGpuMode, requiresWebGpu) {
|
|
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
|
|
|
6
6
|
var __dirname = __hf_dirname(__filename);
|
|
7
7
|
|
|
8
8
|
// src/version.ts
|
|
9
|
-
var VERSION = true ? "0.8.
|
|
10
|
-
var PRODUCER_VERSION = true ? "0.8.
|
|
9
|
+
var VERSION = true ? "0.8.146" : "0.0.0-dev";
|
|
10
|
+
var PRODUCER_VERSION = true ? "0.8.146" : "0.0.0-dev";
|
|
11
11
|
|
|
12
12
|
export {
|
|
13
13
|
VERSION,
|
|
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
|
|
|
6
6
|
var __dirname = __hf_dirname(__filename);
|
|
7
7
|
import {
|
|
8
8
|
VERSION
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TBOMPYG6.js";
|
|
10
10
|
|
|
11
11
|
// src/registry/compatibility.ts
|
|
12
12
|
import { compareVersions } from "compare-versions";
|
|
@@ -7,14 +7,14 @@ var __dirname = __hf_dirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
trackLintReport,
|
|
9
9
|
trackLintRuleStreak
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QSSPIATO.js";
|
|
11
11
|
import {
|
|
12
12
|
shouldTrack
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2NAUEDA6.js";
|
|
14
14
|
import {
|
|
15
15
|
LINT_RULE_COUNT,
|
|
16
16
|
LINT_RULE_GROUP_COUNTS
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-JDB65PPT.js";
|
|
18
18
|
|
|
19
19
|
// src/telemetry/lintStreaks.ts
|
|
20
20
|
import { createHash } from "crypto";
|