hyperframes 0.8.190 → 0.8.192
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-DBKN5H7H.js → add-TZU2UW7A.js} +17 -17
- package/dist/{animatedGifPrep-YVBKKLQY.js → animatedGifPrep-NLAXC3VV.js} +11 -10
- package/dist/api.js +24 -23
- package/dist/{appHistory-TH3TL6N6.js → appHistory-QVCSAOI4.js} +1 -1
- package/dist/{asset-2OHQKUMQ.js → asset-JAJXA6LB.js} +2 -2
- package/dist/{assetCataloger-O3QAUWIK.js → assetCataloger-4WTX3J4I.js} +13 -12
- package/dist/{audio-IR3JGCMM.js → audio-XLWC7JKS.js} +22 -21
- package/dist/{auth-J6TAJLGD.js → auth-5K6X3NPJ.js} +4 -4
- package/dist/{autoUpdate-D7BJJUT2.js → autoUpdate-RNV7SKGB.js} +4 -4
- package/dist/{backgroundChecks-AILHY2YZ.js → backgroundChecks-QXLVZVGX.js} +5 -5
- package/dist/backgroundChecksWorker.js +5 -5
- package/dist/{batchRender-QZKFVWEI.js → batchRender-THKSPDZR.js} +14 -7
- package/dist/{beats-6LOEKZPB.js → beats-K7CGCFVL.js} +53 -15
- package/dist/{benchmark-RJMHI3YW.js → benchmark-PHRDIXNL.js} +18 -14
- package/dist/{browser-Q3Q36FE3.js → browser-GN6R5ZSK.js} +7 -7
- package/dist/{bundleWithLocalizedFonts-RWHFMSFL.js → bundleWithLocalizedFonts-C325UNR4.js} +3 -3
- package/dist/{capture-2PNTGVYV.js → capture-6UBQFHZQ.js} +76 -68
- package/dist/{capture-FO3ZZCT4.js → capture-BZ7APOGQ.js} +3 -3
- package/dist/{captureCompositionFrame-WTMLWVEJ.js → captureCompositionFrame-VORSCTWC.js} +19 -16
- package/dist/{catalog-LUZYPUYT.js → catalog-PHU2RUZ3.js} +18 -18
- package/dist/{catch-up-TUTLUTFP.js → catch-up-HCNRM46J.js} +7 -7
- package/dist/{check-K2TBTJZS.js → check-TJ5ZLB4I.js} +43 -42
- package/dist/{checkBrowser-JT7CXDT6.js → checkBrowser-DWP7ZXJ7.js} +38 -37
- package/dist/{chunk-STJ2ANMF.js → chunk-2HP5GIQ3.js} +3 -3
- package/dist/{chunk-L34DPWY4.js → chunk-2J3NA3OB.js} +13 -13
- package/dist/{chunk-B2A56S5C.js → chunk-2MCXIY4B.js} +13 -10
- package/dist/{chunk-DCAI5DBR.js → chunk-2ST4WAFY.js} +9 -1
- package/dist/{chunk-TSFA2Y5C.js → chunk-2VXY3PEF.js} +99 -69
- package/dist/{chunk-AYFF3GX6.js → chunk-32NB4VMH.js} +1 -1
- package/dist/{chunk-IXLUTE6N.js → chunk-3422KMTD.js} +5 -1
- package/dist/{chunk-JB7LML5B.js → chunk-3CXIX6XS.js} +68 -7
- package/dist/{chunk-F6DNM676.js → chunk-3FV5BVWS.js} +2 -2
- package/dist/{chunk-OTQXYTQZ.js → chunk-4E75LHAL.js} +23 -3
- package/dist/{chunk-TMBUBLZB.js → chunk-4HCJOFMB.js} +166 -46
- package/dist/{chunk-UZ7RJDEC.js → chunk-5IPKQHOL.js} +17 -6
- package/dist/{chunk-WBUO6WH6.js → chunk-5TRFLZ5Z.js} +2 -2
- package/dist/{chunk-HRPWRZGF.js → chunk-6N65ZMC5.js} +1 -1
- package/dist/{chunk-XUXGIA7H.js → chunk-6NLPPKBO.js} +1 -2
- package/dist/{chunk-3QLT727N.js → chunk-6WNLQI63.js} +4 -4
- package/dist/{chunk-XNLYMHX2.js → chunk-6XVKMBUA.js} +9 -6
- package/dist/{chunk-JLSXXMRU.js → chunk-7JJMT6LN.js} +1 -1
- package/dist/{chunk-7JHTNUF2.js → chunk-7LLRMYP6.js} +2 -2
- package/dist/{chunk-BT64TTSE.js → chunk-7RSY7SZN.js} +2 -2
- package/dist/{chunk-DX7VEUBO.js → chunk-7UZC4N62.js} +1 -1
- package/dist/{chunk-YT5VLUHM.js → chunk-A4OI5ZNX.js} +1 -1
- package/dist/{chunk-TSQAPPRS.js → chunk-AEXVVABM.js} +83 -45
- package/dist/{chunk-Y5L5I4US.js → chunk-AMZJFCOX.js} +8 -8
- package/dist/{chunk-WCT6KGGT.js → chunk-AR46ND2Q.js} +1 -1
- package/dist/chunk-B2XLXD7V.js +3897 -0
- package/dist/{chunk-KNQQZRB2.js → chunk-BEOK6F26.js} +2 -2
- package/dist/{chunk-76ITJYXX.js → chunk-BPKLUHFT.js} +7 -7
- package/dist/{chunk-OOAVKK2W.js → chunk-BV6YE455.js} +2 -2
- package/dist/{chunk-XGHHVYC7.js → chunk-BY6OQ6XP.js} +2 -2
- package/dist/{chunk-JQYJXUJW.js → chunk-C6KE4AFW.js} +1 -1
- package/dist/{chunk-TMK4Q7JA.js → chunk-CFUCHO4T.js} +20 -5
- package/dist/{chunk-FANFO5HI.js → chunk-CXRZBWSH.js} +11 -11
- package/dist/chunk-CZGHFATT.js +31 -0
- package/dist/{chunk-CYBXXSC4.js → chunk-DIKAPMMF.js} +2 -2
- package/dist/{chunk-7L37AB57.js → chunk-E3P3LJG6.js} +9 -9
- package/dist/{chunk-EU5HTY3E.js → chunk-E5V6WEMK.js} +58 -23
- package/dist/{chunk-HJZ5CPZA.js → chunk-EKGGSAWR.js} +6 -5
- package/dist/{chunk-7KVVNF7B.js → chunk-ELP5QZWL.js} +1 -1
- package/dist/{chunk-QH3T4WI2.js → chunk-EXAX37XR.js} +8 -2
- package/dist/{chunk-EI7FP7F3.js → chunk-FBVUAH7N.js} +12 -2
- package/dist/{chunk-TTZTGXKG.js → chunk-GANST5K3.js} +2 -2
- package/dist/{chunk-EQF6TVWB.js → chunk-IMSI7IFW.js} +65 -29
- package/dist/{chunk-W64L7IFS.js → chunk-IW5G323T.js} +1 -1
- package/dist/{chunk-RBGNU7VD.js → chunk-J2ASTCU6.js} +2 -2
- package/dist/{chunk-SUSSMCWL.js → chunk-J2BSUF6X.js} +1 -1
- package/dist/{chunk-GGVGOY6M.js → chunk-JCDYDF54.js} +2 -2
- package/dist/{chunk-EPOYPP36.js → chunk-K2AKVYNR.js} +2 -2
- package/dist/{chunk-XBGEWNGQ.js → chunk-KZOZN4PI.js} +4 -4
- package/dist/{chunk-E7DXKMKU.js → chunk-L2YGSAOL.js} +3 -3
- package/dist/{chunk-2FFOLLU2.js → chunk-LOKCBZYF.js} +3 -3
- package/dist/{chunk-56IDMP37.js → chunk-MEE4NTPZ.js} +2 -2
- package/dist/{chunk-56IOFIYB.js → chunk-MGBUWPXX.js} +2 -2
- package/dist/{chunk-K4664CDS.js → chunk-MVIJTXN5.js} +35 -14
- package/dist/{chunk-S2IEO6TH.js → chunk-ODBYZIOH.js} +28 -16
- package/dist/{chunk-45U3KY7Z.js → chunk-OQL4AJ4X.js} +6 -6
- package/dist/{chunk-5C7R55BJ.js → chunk-P2I4RLJE.js} +1 -1
- package/dist/{chunk-S7C6EM7N.js → chunk-PFRG5P32.js} +1 -1
- package/dist/{chunk-RUOG4VB7.js → chunk-PKZ7RK5N.js} +5 -4
- package/dist/{chunk-LLFQA7XF.js → chunk-QFPBRZJD.js} +1 -1
- package/dist/{chunk-CWVSJA52.js → chunk-QWLES6YV.js} +3 -3
- package/dist/{chunk-OAPYPSEB.js → chunk-QX4TB4NH.js} +292 -79
- package/dist/{chunk-BWPY64WA.js → chunk-R2U2G4OS.js} +1 -1
- package/dist/{chunk-46HEFGXJ.js → chunk-REUL2KH2.js} +1 -1
- package/dist/{chunk-R4QASDTN.js → chunk-RHYOWDI6.js} +2 -2
- package/dist/{chunk-DYAPHNV6.js → chunk-RWGASWT7.js} +1 -1
- package/dist/chunk-RXATE6FZ.js +385 -0
- package/dist/{chunk-CWYS2UNQ.js → chunk-SBBQFPCJ.js} +1 -1
- package/dist/{chunk-RDHEG7RX.js → chunk-SK7TR7BL.js} +4 -4
- package/dist/{chunk-KNU5COPB.js → chunk-T2EUWCJE.js} +1 -1
- package/dist/{chunk-6HYHHMX3.js → chunk-T6O5OLN2.js} +3 -3
- package/dist/{chunk-FVD44EQX.js → chunk-ULTKB5FC.js} +65 -23
- package/dist/{chunk-B7JFAXDP.js → chunk-VNPADTDD.js} +3 -3
- package/dist/{chunk-FUHI34T4.js → chunk-VOM2HLUI.js} +4 -4
- package/dist/{chunk-IARWN467.js → chunk-VRAXIQ6I.js} +2 -2
- package/dist/{chunk-NAUKCKCJ.js → chunk-W24SZ5FL.js} +4 -4
- package/dist/{chunk-ZFFKWHXN.js → chunk-WOKVXK4J.js} +1 -1
- package/dist/{chunk-WLG4OYH7.js → chunk-XF77MK3J.js} +1 -1
- package/dist/{chunk-DRTIIAIZ.js → chunk-XX2PA4L3.js} +2 -2
- package/dist/{chunk-A5YHWTSP.js → chunk-YMQQXPD5.js} +2 -2
- package/dist/{chunk-KUMUK6QS.js → chunk-YWRQHRDY.js} +17 -12
- package/dist/{chunk-EUUHVDMN.js → chunk-ZEMDV6W2.js} +29 -59
- package/dist/{clean-UVTWBPXK.js → clean-2RNCTDBT.js} +40 -27
- package/dist/cli.js +69 -67
- package/dist/{cloud-M42IPKFD.js → cloud-NFIKESNZ.js} +4 -4
- package/dist/{cloudrun-CTNX64R6.js → cloudrun-7224BCX3.js} +9 -9
- package/dist/commands/contrast-audit.browser.js +1 -1
- package/dist/commands/layout-audit.browser.js +64 -3
- package/dist/{compare-MQI7TG5M.js → compare-HL44MXVX.js} +80 -48
- package/dist/{compiler-EJE3HLCS.js → compiler-WF5QTXV7.js} +8 -7
- package/dist/{component-QSYOSFVV.js → component-ZBZXSJBR.js} +3 -3
- package/dist/{compositions-ITDFE7K4.js → compositions-76P7LDDX.js} +19 -17
- package/dist/{contactSheet-CAGMKI3E.js → contactSheet-43ISAESM.js} +2 -2
- package/dist/{delete-NTGTENKJ.js → delete-4YZBYOHJ.js} +7 -7
- package/dist/{deploy-AOJOXEYX.js → deploy-UGUUGYLF.js} +1 -1
- package/dist/{deterministicFonts-EGAAE7QL.js → deterministicFonts-RO2TCMLZ.js} +3 -3
- package/dist/{dist-NHW2JQCA.js → dist-5KKCRFPT.js} +5 -5
- package/dist/{dist-JH32CBQL.js → dist-QQ26RUDV.js} +5 -4
- package/dist/docs/rendering.md +2 -2
- package/dist/{doctor-Q6DAYVSQ.js → doctor-GGVUK4NB.js} +20 -19
- package/dist/{events-BQIBYPCF.js → events-OXPTHVDB.js} +4 -4
- package/dist/{events-PV3CDO4A.js → events-V2VU4J3B.js} +5 -5
- package/dist/{feedback-BZH26JQE.js → feedback-HFZ5SCUK.js} +16 -16
- package/dist/{ffmpeg-KU7RNT3U.js → ffmpeg-3VHY7GO3.js} +13 -12
- package/dist/{figma-PBGZUEIL.js → figma-7SEZTLBJ.js} +3 -3
- package/dist/fontLocalizeCli.js +14 -13
- package/dist/{get-MM2JZ5ET.js → get-Y2S2PXCM.js} +7 -7
- package/dist/{gpuPolicy-DQE2CD5T.js → gpuPolicy-UHPOWRV5.js} +11 -10
- package/dist/{grade-compare-YTDQ7YXW.js → grade-compare-4VTXSQM5.js} +38 -37
- package/dist/{gsapParserAcorn-SKODXC2N.js → gsapParserAcorn-OOTY2MVN.js} +2 -2
- package/dist/{help-M4B2DN7E.js → help-HXNOACHI.js} +1 -1
- package/dist/{history-ZW4UYKAJ.js → history-XDJUI4LC.js} +39 -16
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +64 -64
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/hyperframes-slideshow.global.js +1 -1
- package/dist/{info-L7LQAXLK.js → info-KYRI3EZV.js} +56 -22
- package/dist/{init-HTSQ535A.js → init-IL7EWMT5.js} +38 -45
- package/dist/{inspect-EWF2THRR.js → inspect-TBNH23UC.js} +36 -35
- package/dist/{installer-PQKH2S7C.js → installer-O2YMFSI4.js} +8 -8
- package/dist/{keyframes-X2QKJ4DP.js → keyframes-4GF62KAJ.js} +13 -14
- package/dist/{lambda-BURM66GP.js → lambda-JFL6M4XZ.js} +12 -12
- package/dist/{layout-3Z3SJGZZ.js → layout-7MAEFR65.js} +36 -35
- package/dist/{lint-OMNZ2K5J.js → lint-4AYHKYAM.js} +23 -16
- package/dist/{lintProject-XM3DLUKG.js → lintProject-52SLJPRC.js} +5 -4
- package/dist/{list-5ZSQEH6N.js → list-3DP3D3MW.js} +7 -7
- package/dist/{login-YNCQPHLA.js → login-T54WQYRQ.js} +7 -7
- package/dist/{logout-DDC4QLVK.js → logout-JYFWWUGK.js} +3 -3
- package/dist/{manager-UHWEKPXC.js → manager-MZIJY73J.js} +3 -3
- package/dist/{manager-N6XXRQN3.js → manager-QROK2IH3.js} +14 -13
- package/dist/{media-treatment-EOKBRJPY.js → media-treatment-4CXF7MSG.js} +20 -19
- package/dist/{models-6T4CCKUV.js → models-IS3I6JKU.js} +18 -17
- package/dist/{motionShot-KXKMYZ3A.js → motionShot-DVYJZOTQ.js} +21 -20
- package/dist/{normalize-3AYFSN2F.js → normalize-FASIPBUM.js} +1 -1
- package/dist/{normalize-audio-VWB7RHHA.js → normalize-audio-4527JIK4.js} +12 -8
- package/dist/{open-32SQCNUP.js → open-5JE46SAX.js} +18 -18
- package/dist/{parakeetRunner-BXW2WX6Q.js → parakeetRunner-7JIJGJJ7.js} +20 -19
- package/dist/{pipeline-V5ONFRCY.js → pipeline-YEN3WFD2.js} +15 -14
- package/dist/{play-BBL262JE.js → play-WFX67I7M.js} +27 -26
- package/dist/{policies-MBWGLMWB.js → policies-GHVXA5PE.js} +1 -1
- package/dist/{preflight-LCNGQFNY.js → preflight-D377HVUZ.js} +15 -14
- package/dist/{present-RY4HO4ZQ.js → present-XTSEKAC7.js} +24 -23
- package/dist/{preview-BLLPCCLG.js → preview-5XH7EK6O.js} +28 -26
- package/dist/{producer-QG4AQ35S.js → producer-TFFYF4ZM.js} +1 -1
- package/dist/{projectConfig-LN3NR5OM.js → projectConfig-6YUJHMCL.js} +10 -10
- package/dist/{publication-TXMCS4KM.js → publication-JK33Y55E.js} +5 -5
- package/dist/{publish-57VURD7Z.js → publish-JHDGXWXU.js} +18 -17
- package/dist/{refresh-RXTOPRBB.js → refresh-USSFPJAU.js} +3 -3
- package/dist/{remove-background-VEWVIO3A.js → remove-background-P44MYAPJ.js} +16 -15
- package/dist/{render-SP7WAUB4.js → render-HJ34EGMN.js} +10 -9
- package/dist/{render-XMN3NJIQ.js → render-RBINWWP5.js} +43 -42
- package/dist/{render-4E7QDVOI.js → render-RJ3I4E3A.js} +26 -25
- package/dist/{render-batch-7ULP5RIJ.js → render-batch-3D6XQYUC.js} +11 -10
- package/dist/renderSetupWorker.js +9 -8
- package/dist/{resolver-D3XERO6U.js → resolver-HCLTFZUW.js} +7 -7
- package/dist/{screenshotCapture-UBY6TT75.js → screenshotCapture-I5EDCITF.js} +6 -3
- package/dist/{sherpa-5B5G426W.js → sherpa-IPOUJM6Q.js} +19 -18
- package/dist/{sites-5PWHAMEG.js → sites-Q2S3DZY4.js} +2 -1
- package/dist/skills/hyperframes/references/captions.md +1 -1
- package/dist/skills/hyperframes/references/skill-lifecycle.md +8 -4
- package/dist/skills/hyperframes-cli/references/cloudrun.md +1 -1
- package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +1 -1
- package/dist/skills/hyperframes-cli/references/lambda.md +1 -1
- package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +2 -2
- package/dist/skills/hyperframes-cli/references/preview-render.md +1 -1
- package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +0 -8
- package/dist/skills/media-use/audio/references/transcribe.md +2 -2
- package/dist/skills/media-use/references/audio.md +1 -1
- package/dist/{skills-RXHRF7O7.js → skills-P67QEERC.js} +13 -75
- package/dist/{skillsUpdateCheck-JOTDZJAE.js → skillsUpdateCheck-IFMLRVIF.js} +5 -5
- package/dist/{slideshow-YTWATJRT.js → slideshow-SJGK4RQS.js} +1 -1
- package/dist/{snapshot-DN4MP4VN.js → snapshot-4YM4NNWJ.js} +66 -48
- package/dist/{src-W6Y5ZYRQ.js → src-DCD3YMXX.js} +13 -12
- package/dist/{src-XSDYRKLG.js → src-SSV66L3F.js} +14 -9
- package/dist/{staticProjectServer-JMFGTPMX.js → staticProjectServer-C7PPGLEQ.js} +22 -21
- package/dist/{status-CM7IQTU2.js → status-H5WLKQDS.js} +3 -3
- package/dist/studio/assets/{hyperframes-player-0HXJPmYC.js → hyperframes-player-ChN3cOr0.js} +3 -3
- package/dist/studio/assets/{index-DsSfhjUS.js → index-BYbFcRR0.js} +1 -1
- package/dist/studio/assets/{index-BYw97F07.js → index-CHu83hHM.js} +126 -125
- package/dist/studio/assets/{index-B3vk3hfU.css → index-CYbvOVp-.css} +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/{studio-api-SZ4OMFPN.js → studio-api-6YZ7PIQR.js} +17 -14
- package/dist/{studioServer-LWO33H7D.js → studioServer-EWHSE4GC.js} +60 -59
- package/dist/{telemetry-QG5AANZ4.js → telemetry-4K6CPMNT.js} +2 -2
- package/dist/{telemetry-K3AFDKOP.js → telemetry-GGLBHZRZ.js} +5 -5
- package/dist/{timeline-NYQOAQDH.js → timeline-NKHQJXJ2.js} +65 -43
- package/dist/{tokens-K7YWUVOK.js → tokens-FWNNDJ6R.js} +2 -2
- package/dist/{transcribe-QAUMODXM.js → transcribe-TRPKXZ7L.js} +27 -26
- package/dist/{transcribe-ANPUQDZD.js → transcribe-VD2TMMC2.js} +17 -16
- package/dist/{tts-A2WILYGN.js → tts-5I2AJNLM.js} +1 -1
- package/dist/{updateCheck-RNR4HMDI.js → updateCheck-CUPS6LU3.js} +4 -4
- package/dist/{upgrade-MKUGZZPA.js → upgrade-23XO6MEX.js} +4 -4
- package/dist/{urlDownloader-5USPXLCS.js → urlDownloader-YOAOONCK.js} +10 -9
- package/dist/{validate-OJHPDLC5.js → validate-BWIW24G5.js} +30 -29
- package/dist/{video-BCKRR6LU.js → video-XRXJS4GC.js} +12 -11
- package/dist/warmCheck.js +43 -42
- package/package.json +2 -1
- package/dist/chunk-DIV37NUE.js +0 -3896
- package/dist/chunk-I5JRXMCV.js +0 -6077
|
@@ -19,6 +19,10 @@ import {
|
|
|
19
19
|
resolveLocalAssetCandidates,
|
|
20
20
|
resolveProjectRelativeSrc
|
|
21
21
|
} from "./chunk-6BNTGNGD.js";
|
|
22
|
+
import {
|
|
23
|
+
TIMING_TOLERANCE_SECONDS,
|
|
24
|
+
resolveCompositionDuration
|
|
25
|
+
} from "./chunk-CZGHFATT.js";
|
|
22
26
|
import {
|
|
23
27
|
COMPOSITION_VARIABLE_TYPES,
|
|
24
28
|
FONT_ALIAS_KEYS,
|
|
@@ -26,9 +30,10 @@ import {
|
|
|
26
30
|
HTML_BODY_CSS_WIDTH_FIRST_RE,
|
|
27
31
|
VIEWPORT_META_SIZE_RE,
|
|
28
32
|
extractMediaSrcMutations,
|
|
33
|
+
isCompositionVariable,
|
|
29
34
|
isSafeMediaUrl,
|
|
30
35
|
resolveAliasDisplayName
|
|
31
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-PKZ7RK5N.js";
|
|
32
37
|
import {
|
|
33
38
|
COLOR_GRADING_SOURCE_TAGS,
|
|
34
39
|
COMPOSITION_ATTRIBUTES,
|
|
@@ -56,14 +61,12 @@ import {
|
|
|
56
61
|
isSceneLikeCompositionId,
|
|
57
62
|
parseSlideshowManifest,
|
|
58
63
|
resolveSlideshow
|
|
59
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-3422KMTD.js";
|
|
60
65
|
import {
|
|
61
66
|
base,
|
|
62
|
-
parse,
|
|
63
|
-
parseExpressionAt,
|
|
64
67
|
recursive,
|
|
65
68
|
simple
|
|
66
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-RXATE6FZ.js";
|
|
67
70
|
import {
|
|
68
71
|
__commonJS,
|
|
69
72
|
__require,
|
|
@@ -3708,30 +3711,10 @@ var require_dist = __commonJS({
|
|
|
3708
3711
|
});
|
|
3709
3712
|
|
|
3710
3713
|
// ../lint/dist/index.js
|
|
3714
|
+
import { parse } from "acorn";
|
|
3711
3715
|
var import_postcss_selector_parser = __toESM(require_dist(), 1);
|
|
3712
3716
|
import postcss from "postcss";
|
|
3713
|
-
|
|
3714
|
-
// ../parsers/dist/compositionDuration.js
|
|
3715
|
-
var TIMING_TOLERANCE_SECONDS = 0.05;
|
|
3716
|
-
var isPositiveFinite = (value) => value !== null && Number.isFinite(value) && value > 0;
|
|
3717
|
-
function resolveCompositionDuration(input) {
|
|
3718
|
-
const pendingClips = input.clipEndsSeconds.filter((end) => end === null).length;
|
|
3719
|
-
if (isPositiveFinite(input.authoredDurationSeconds)) {
|
|
3720
|
-
return { seconds: input.authoredDurationSeconds, source: "authored", pendingClips };
|
|
3721
|
-
}
|
|
3722
|
-
const known = input.clipEndsSeconds.filter(isPositiveFinite);
|
|
3723
|
-
if (known.length > 0) {
|
|
3724
|
-
return { seconds: Math.max(...known), source: "derived", pendingClips };
|
|
3725
|
-
}
|
|
3726
|
-
return {
|
|
3727
|
-
seconds: null,
|
|
3728
|
-
source: "unresolved",
|
|
3729
|
-
pendingClips,
|
|
3730
|
-
reason: pendingClips > 0 ? "every clip's length is still pending" : "no authored duration and no clip with a length"
|
|
3731
|
-
};
|
|
3732
|
-
}
|
|
3733
|
-
|
|
3734
|
-
// ../lint/dist/index.js
|
|
3717
|
+
import { parse as parse2 } from "acorn";
|
|
3735
3718
|
import postcss2 from "postcss";
|
|
3736
3719
|
import postcss3 from "postcss";
|
|
3737
3720
|
|
|
@@ -3770,6 +3753,7 @@ function trackKindOf(node) {
|
|
|
3770
3753
|
}
|
|
3771
3754
|
|
|
3772
3755
|
// ../lint/dist/index.js
|
|
3756
|
+
import { parse as parse3, parseExpressionAt } from "acorn";
|
|
3773
3757
|
import { createHash } from "crypto";
|
|
3774
3758
|
import { existsSync as existsSync2, readFileSync, readdirSync } from "fs";
|
|
3775
3759
|
import { dirname as dirname2, extname, join as join3, relative as relative2, resolve } from "path";
|
|
@@ -3895,6 +3879,7 @@ function resolveReferencedDuration(doc, el, startCache, visiting) {
|
|
|
3895
3879
|
}
|
|
3896
3880
|
|
|
3897
3881
|
// ../lint/dist/index.js
|
|
3882
|
+
import postcss4 from "postcss";
|
|
3898
3883
|
import { execFile } from "child_process";
|
|
3899
3884
|
import { existsSync } from "fs";
|
|
3900
3885
|
import { join } from "path";
|
|
@@ -5599,7 +5584,8 @@ var IMAGE_SRC_EXT = /* @__PURE__ */ new Set([
|
|
|
5599
5584
|
"heic",
|
|
5600
5585
|
"heif",
|
|
5601
5586
|
"tiff",
|
|
5602
|
-
"ico"
|
|
5587
|
+
"ico",
|
|
5588
|
+
"avif"
|
|
5603
5589
|
]);
|
|
5604
5590
|
var VIDEO_SRC_EXT = /* @__PURE__ */ new Set([
|
|
5605
5591
|
"mp4",
|
|
@@ -5613,7 +5599,7 @@ var VIDEO_SRC_EXT = /* @__PURE__ */ new Set([
|
|
|
5613
5599
|
"mpg",
|
|
5614
5600
|
"mpeg"
|
|
5615
5601
|
]);
|
|
5616
|
-
var AUDIO_SRC_EXT = /* @__PURE__ */ new Set(["mp3", "wav", "aac", "flac", "opus", "aiff", "wma"]);
|
|
5602
|
+
var AUDIO_SRC_EXT = /* @__PURE__ */ new Set(["mp3", "wav", "aac", "flac", "opus", "aiff", "wma", "m4a"]);
|
|
5617
5603
|
var SRC_KIND_NOUN = {
|
|
5618
5604
|
image: "an image",
|
|
5619
5605
|
video: "a video",
|
|
@@ -6456,7 +6442,7 @@ function callsFor(script) {
|
|
|
6456
6442
|
if (cached) return cached;
|
|
6457
6443
|
const calls = [];
|
|
6458
6444
|
try {
|
|
6459
|
-
const ast =
|
|
6445
|
+
const ast = parse2(script.content, {
|
|
6460
6446
|
ecmaVersion: "latest",
|
|
6461
6447
|
sourceType: "script",
|
|
6462
6448
|
allowReturnOutsideFunction: true
|
|
@@ -6782,6 +6768,16 @@ function variablesDeclarationFindings(tag, tags) {
|
|
|
6782
6768
|
});
|
|
6783
6769
|
continue;
|
|
6784
6770
|
}
|
|
6771
|
+
if (!isCompositionVariable(e)) {
|
|
6772
|
+
findings.push({
|
|
6773
|
+
code: "invalid_composition_variables_declaration",
|
|
6774
|
+
severity: "error",
|
|
6775
|
+
message: `data-composition-variables entry [${i}] has a default that does not match its type, or an enum without an options array.`,
|
|
6776
|
+
fixHint: "Use number defaults for number variables, boolean defaults for boolean variables, and string defaults for other types. Enum variables also require an options array.",
|
|
6777
|
+
snippet: truncateSnippet(tag.raw)
|
|
6778
|
+
});
|
|
6779
|
+
continue;
|
|
6780
|
+
}
|
|
6785
6781
|
const id = String(e.id);
|
|
6786
6782
|
if ((e.type === "image" || varSrcIds.has(id)) && typeof e.default === "string" && e.default.length > 0 && !isSafeMediaUrl(e.default)) {
|
|
6787
6783
|
findings.push({
|
|
@@ -7680,11 +7676,11 @@ function deriveDurationFromClips(tags, rootTag) {
|
|
|
7680
7676
|
return resolveCompositionDuration({ authoredDurationSeconds: null, clipEndsSeconds: clipEnds });
|
|
7681
7677
|
}
|
|
7682
7678
|
async function loadParseGsapScript() {
|
|
7683
|
-
const mod = await import("./gsapParserAcorn-
|
|
7679
|
+
const mod = await import("./gsapParserAcorn-OOTY2MVN.js");
|
|
7684
7680
|
return mod.parseGsapScriptAcorn;
|
|
7685
7681
|
}
|
|
7686
7682
|
async function loadGsapScriptMotionPathFirstUseIndex() {
|
|
7687
|
-
const mod = await import("./gsapParserAcorn-
|
|
7683
|
+
const mod = await import("./gsapParserAcorn-OOTY2MVN.js");
|
|
7688
7684
|
return mod.gsapScriptMotionPathFirstUseIndex;
|
|
7689
7685
|
}
|
|
7690
7686
|
var SCENE_BOUNDARY_EPSILON_SECONDS = 0.05;
|
|
@@ -8818,7 +8814,7 @@ ${right.raw}`)
|
|
|
8818
8814
|
return findings;
|
|
8819
8815
|
},
|
|
8820
8816
|
// gsap_timeline_registered_before_async_build — registering window.__timelines[id]
|
|
8821
|
-
// BEFORE the timeline is built inside
|
|
8817
|
+
// BEFORE the timeline is built inside a font-ready callback
|
|
8822
8818
|
// leaves an EMPTY timeline registered. The runtime's sub-composition readiness gate
|
|
8823
8819
|
// treats "key present" as "ready" and nests the child ONCE, while still empty — so the
|
|
8824
8820
|
// animation never renders when this composition is mounted as a sub-composition.
|
|
@@ -8827,9 +8823,11 @@ ${right.raw}`)
|
|
|
8827
8823
|
const findings = [];
|
|
8828
8824
|
for (const script of scripts) {
|
|
8829
8825
|
const content = stripJsComments(script.content);
|
|
8830
|
-
const regIdx = content.search(
|
|
8826
|
+
const regIdx = content.search(
|
|
8827
|
+
/window\s*\.\s*__timelines\s*(?:\[[^\]]+\]|\.\s*[A-Za-z_$][\w$]*)\s*=\s*(?!=)/
|
|
8828
|
+
);
|
|
8831
8829
|
if (regIdx < 0) continue;
|
|
8832
|
-
const fontsReadyIdx = content.search(/document\s*\.\s*fonts\s*\.\s*ready/);
|
|
8830
|
+
const fontsReadyIdx = content.search(/document\s*\.\s*fonts\s*\.\s*(?:ready\b|load\s*\()/);
|
|
8833
8831
|
if (fontsReadyIdx < 0) continue;
|
|
8834
8832
|
if (regIdx >= fontsReadyIdx) continue;
|
|
8835
8833
|
const tail = content.slice(fontsReadyIdx);
|
|
@@ -8837,8 +8835,8 @@ ${right.raw}`)
|
|
|
8837
8835
|
findings.push({
|
|
8838
8836
|
code: "gsap_timeline_registered_before_async_build",
|
|
8839
8837
|
severity: "error",
|
|
8840
|
-
message: 'window.__timelines is assigned BEFORE the timeline is built inside document.fonts.ready. An empty timeline registered early gets nested empty when this composition is used as a sub-composition (the readiness gate treats "key present" as "ready" and never re-nests), so the animation renders blank.',
|
|
8841
|
-
fixHint: "Move the `window.__timelines[id] = tl;` assignment to the END of the
|
|
8838
|
+
message: 'window.__timelines is assigned BEFORE the timeline is built inside document.fonts.ready or document.fonts.load(). An empty timeline registered early gets nested empty when this composition is used as a sub-composition (the readiness gate treats "key present" as "ready" and never re-nests), so the animation renders blank.',
|
|
8839
|
+
fixHint: "Move the `window.__timelines[id] = tl;` assignment to the END of the font-ready callback, after the tweens are added. Optionally call window.__hfForceTimelineRebind() right after, to re-nest the populated timeline."
|
|
8842
8840
|
});
|
|
8843
8841
|
}
|
|
8844
8842
|
return findings;
|
|
@@ -9867,22 +9865,29 @@ var GENERIC_FAMILIES = /* @__PURE__ */ new Set([
|
|
|
9867
9865
|
"unset",
|
|
9868
9866
|
"revert"
|
|
9869
9867
|
]);
|
|
9870
|
-
function
|
|
9871
|
-
|
|
9868
|
+
function parseFontCss(css) {
|
|
9869
|
+
try {
|
|
9870
|
+
return postcss3.parse(css);
|
|
9871
|
+
} catch {
|
|
9872
|
+
return null;
|
|
9873
|
+
}
|
|
9874
|
+
}
|
|
9875
|
+
function isFontFaceDeclaration(decl) {
|
|
9876
|
+
let parent = decl.parent;
|
|
9877
|
+
while (parent) {
|
|
9878
|
+
if (parent.type === "atrule" && parent.name.toLowerCase() === "font-face") return true;
|
|
9879
|
+
parent = parent.parent;
|
|
9880
|
+
}
|
|
9881
|
+
return false;
|
|
9872
9882
|
}
|
|
9873
9883
|
function extractFontFaceFamilies(styles) {
|
|
9874
9884
|
const families = /* @__PURE__ */ new Set();
|
|
9875
|
-
const fontFaceRe = /@font-face\s*\{[^}]*\}/gi;
|
|
9876
|
-
const familyRe = /font-family\s*:\s*(['"]?)([^;'"]+)\1/i;
|
|
9877
9885
|
for (const style of styles) {
|
|
9878
|
-
|
|
9879
|
-
|
|
9880
|
-
|
|
9881
|
-
|
|
9882
|
-
|
|
9883
|
-
families.add(familyMatch[2].trim().toLowerCase());
|
|
9884
|
-
}
|
|
9885
|
-
}
|
|
9886
|
+
parseFontCss(style.content)?.walkDecls(/^font-family$/i, (decl) => {
|
|
9887
|
+
if (!isFontFaceDeclaration(decl)) return;
|
|
9888
|
+
const name = normalizeUsedFontName(decl.value);
|
|
9889
|
+
if (name) families.add(name);
|
|
9890
|
+
});
|
|
9886
9891
|
}
|
|
9887
9892
|
return families;
|
|
9888
9893
|
}
|
|
@@ -9891,22 +9896,43 @@ function normalizeUsedFontName(part) {
|
|
|
9891
9896
|
if (!name || name.includes("(") || name.includes(")")) return null;
|
|
9892
9897
|
return name;
|
|
9893
9898
|
}
|
|
9899
|
+
function collectFontCustomProperties(styles) {
|
|
9900
|
+
const properties = /* @__PURE__ */ new Map();
|
|
9901
|
+
for (const style of styles) {
|
|
9902
|
+
parseFontCss(style.content)?.walkDecls(/^--/, (decl) => {
|
|
9903
|
+
if (!isFontFaceDeclaration(decl)) properties.set(decl.prop, decl.value);
|
|
9904
|
+
});
|
|
9905
|
+
}
|
|
9906
|
+
return properties;
|
|
9907
|
+
}
|
|
9908
|
+
function resolveUsedFontNames(value, properties, resolving = /* @__PURE__ */ new Set()) {
|
|
9909
|
+
return postcss3.list.comma(value).flatMap((part) => {
|
|
9910
|
+
const variable = /^var\(\s*(--[^\s,()]+)\s*(?:,[\s\S]*)?\)$/i.exec(part.trim());
|
|
9911
|
+
if (!variable) {
|
|
9912
|
+
const name = normalizeUsedFontName(part);
|
|
9913
|
+
return name ? [name] : [];
|
|
9914
|
+
}
|
|
9915
|
+
const property = variable[1];
|
|
9916
|
+
if (!property || resolving.has(property) || resolving.size >= 8) return [];
|
|
9917
|
+
const referenced = properties.get(property);
|
|
9918
|
+
if (referenced === void 0) return [];
|
|
9919
|
+
return resolveUsedFontNames(referenced, properties, new Set(resolving).add(property));
|
|
9920
|
+
});
|
|
9921
|
+
}
|
|
9894
9922
|
function extractUsedFontFamilies(styles) {
|
|
9895
9923
|
const used = [];
|
|
9896
9924
|
const seen = /* @__PURE__ */ new Set();
|
|
9897
|
-
const
|
|
9925
|
+
const properties = collectFontCustomProperties(styles);
|
|
9898
9926
|
for (const style of styles) {
|
|
9899
|
-
|
|
9900
|
-
|
|
9901
|
-
|
|
9902
|
-
|
|
9903
|
-
const name = normalizeUsedFontName(part);
|
|
9904
|
-
if (name && !GENERIC_FAMILIES.has(name) && !seen.has(name)) {
|
|
9927
|
+
parseFontCss(style.content)?.walkDecls(/^font-family$/i, (decl) => {
|
|
9928
|
+
if (isFontFaceDeclaration(decl)) return;
|
|
9929
|
+
for (const name of resolveUsedFontNames(decl.value, properties)) {
|
|
9930
|
+
if (!GENERIC_FAMILIES.has(name) && !seen.has(name)) {
|
|
9905
9931
|
seen.add(name);
|
|
9906
9932
|
used.push(name);
|
|
9907
9933
|
}
|
|
9908
9934
|
}
|
|
9909
|
-
}
|
|
9935
|
+
});
|
|
9910
9936
|
}
|
|
9911
9937
|
return used;
|
|
9912
9938
|
}
|
|
@@ -10009,15 +10035,12 @@ var fontRules = [
|
|
|
10009
10035
|
];
|
|
10010
10036
|
function uniqueFontLocation(styles, families, locate) {
|
|
10011
10037
|
const locations = [];
|
|
10038
|
+
const properties = collectFontCustomProperties(styles);
|
|
10012
10039
|
for (const style of styles) {
|
|
10013
10040
|
try {
|
|
10014
10041
|
postcss3.parse(style.content).walkDecls(/^font-family$/i, (decl) => {
|
|
10015
|
-
|
|
10016
|
-
|
|
10017
|
-
if (parent.type === "atrule" && parent.name.toLowerCase() === "font-face") return;
|
|
10018
|
-
parent = parent.parent;
|
|
10019
|
-
}
|
|
10020
|
-
if (!decl.value.split(",").some((part) => families.includes(normalizeUsedFontName(part) ?? "")))
|
|
10042
|
+
if (isFontFaceDeclaration(decl)) return;
|
|
10043
|
+
if (!resolveUsedFontNames(decl.value, properties).some((name) => families.includes(name)))
|
|
10021
10044
|
return;
|
|
10022
10045
|
locations.push(locate(style, decl.source?.start?.offset));
|
|
10023
10046
|
});
|
|
@@ -10025,7 +10048,7 @@ function uniqueFontLocation(styles, families, locate) {
|
|
|
10025
10048
|
return {};
|
|
10026
10049
|
}
|
|
10027
10050
|
}
|
|
10028
|
-
return locations.length === 1 ? locations[0] : {};
|
|
10051
|
+
return locations.length === 1 ? locations[0] ?? {} : {};
|
|
10029
10052
|
}
|
|
10030
10053
|
function parseTiming(raw) {
|
|
10031
10054
|
const startStr = readAttr(raw, "data-start");
|
|
@@ -10294,7 +10317,7 @@ function withoutComments(source) {
|
|
|
10294
10317
|
function staticShaders(source) {
|
|
10295
10318
|
const shaders = [];
|
|
10296
10319
|
try {
|
|
10297
|
-
const ast =
|
|
10320
|
+
const ast = parse3(source, {
|
|
10298
10321
|
ecmaVersion: "latest",
|
|
10299
10322
|
sourceType: "module",
|
|
10300
10323
|
allowReturnOutsideFunction: true
|
|
@@ -10825,6 +10848,7 @@ function contentDigest(html) {
|
|
|
10825
10848
|
return createHash("sha256").update(html).digest("hex").slice(0, 16);
|
|
10826
10849
|
}
|
|
10827
10850
|
var AUDIO_EXTENSIONS = /* @__PURE__ */ new Set([".mp3", ".wav", ".aac", ".ogg", ".m4a", ".flac", ".opus"]);
|
|
10851
|
+
var CSS_URL_RE = /\burl\(\s*(?:"([^"]+)"|'([^']+)'|([^"')\s]+))\s*\)/gi;
|
|
10828
10852
|
var MASK_IMAGE_URL_RE = /\b(?:-webkit-)?mask-image\s*:\s*[^;{}]*url\(\s*(?:"([^"]+)"|'([^']+)'|([^"')\s]+))\s*\)/gi;
|
|
10829
10853
|
function isLocalStylesheetHref(href) {
|
|
10830
10854
|
return !!href && !/^(https?:|data:|blob:|\/\/)/i.test(href);
|
|
@@ -11117,9 +11141,16 @@ function lintTextureMaskAssetNotFound(projectDir, htmlSources) {
|
|
|
11117
11141
|
for (const { html, compSrcPath } of htmlSources) {
|
|
11118
11142
|
const file = sourceFile(projectDir, compSrcPath);
|
|
11119
11143
|
for (const cssSource of collectCssSources(projectDir, html, compSrcPath)) {
|
|
11120
|
-
let
|
|
11121
|
-
|
|
11122
|
-
|
|
11144
|
+
let matches = [];
|
|
11145
|
+
try {
|
|
11146
|
+
postcss4.parse(cssSource.content).walkDecls(/^(?:-webkit-)?mask-image$/i, (declaration) => {
|
|
11147
|
+
matches.push(...declaration.value.matchAll(CSS_URL_RE));
|
|
11148
|
+
});
|
|
11149
|
+
} catch (error) {
|
|
11150
|
+
if (!(error instanceof postcss4.CssSyntaxError)) throw error;
|
|
11151
|
+
matches = [...cssSource.content.matchAll(MASK_IMAGE_URL_RE)];
|
|
11152
|
+
}
|
|
11153
|
+
for (const match of matches) {
|
|
11123
11154
|
const rawUrl = match[1] ?? match[2] ?? match[3] ?? "";
|
|
11124
11155
|
if (isUnresolvedAssetPlaceholder(rawUrl)) continue;
|
|
11125
11156
|
const url = cleanAssetUrl(rawUrl);
|
|
@@ -11321,7 +11352,6 @@ export {
|
|
|
11321
11352
|
resolveReferencedStart,
|
|
11322
11353
|
resolveReferencedDuration,
|
|
11323
11354
|
require_dist,
|
|
11324
|
-
resolveCompositionDuration,
|
|
11325
11355
|
LINT_RULE_COUNT,
|
|
11326
11356
|
LINT_RULE_GROUP_COUNTS,
|
|
11327
11357
|
lintHyperframeHtml,
|
|
@@ -10,7 +10,11 @@ var SLIDESHOW_MANIFEST_VERSION = 1;
|
|
|
10
10
|
var SLIDESHOW_ISLAND_TYPE = "application/hyperframes-slideshow+json";
|
|
11
11
|
function slideshowIslandRegex(flags = "i") {
|
|
12
12
|
const escaped = SLIDESHOW_ISLAND_TYPE.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
13
|
-
|
|
13
|
+
const htmlWhitespace = "[\\t\\n\\f\\r ]*";
|
|
14
|
+
return new RegExp(
|
|
15
|
+
`<script[^>]*type${htmlWhitespace}=${htmlWhitespace}["']${escaped}["'][^>]*>([\\s\\S]*?)<\\/script>`,
|
|
16
|
+
flags
|
|
17
|
+
);
|
|
14
18
|
}
|
|
15
19
|
function parseSlideshowManifest(html) {
|
|
16
20
|
const re = slideshowIslandRegex("i");
|
|
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
loadOptionalPackage,
|
|
9
9
|
loadSharp
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EXAX37XR.js";
|
|
11
11
|
import {
|
|
12
12
|
downloadFile
|
|
13
13
|
} from "./chunk-WQ6ZXHFQ.js";
|
|
@@ -15,13 +15,16 @@ import {
|
|
|
15
15
|
findFFmpeg,
|
|
16
16
|
findFFprobe,
|
|
17
17
|
getFFmpegInstallHint
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-VRAXIQ6I.js";
|
|
19
19
|
import {
|
|
20
20
|
DEFAULT_VP9_CPU_USED,
|
|
21
21
|
SDR_RGB_TO_BT709_FILTER,
|
|
22
22
|
SDR_RGB_TO_TAGGED_BT709_FILTER,
|
|
23
23
|
renderProvenanceArgs
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-QX4TB4NH.js";
|
|
25
|
+
import {
|
|
26
|
+
runCancellableProcess
|
|
27
|
+
} from "./chunk-RWGASWT7.js";
|
|
25
28
|
|
|
26
29
|
// src/background-removal/pipeline.ts
|
|
27
30
|
import { spawn } from "child_process";
|
|
@@ -135,11 +138,29 @@ async function createSession(options = {}) {
|
|
|
135
138
|
const maskBuf = Buffer.allocUnsafe(INPUT_PLANE);
|
|
136
139
|
let rgbaBuf = null;
|
|
137
140
|
let rgbaBgBuf = null;
|
|
141
|
+
let retried = false;
|
|
142
|
+
const run = async (tensor) => {
|
|
143
|
+
try {
|
|
144
|
+
return await session.run({ [inputName]: tensor });
|
|
145
|
+
} catch (err) {
|
|
146
|
+
if (providerUsed === "CPU" || retried) throw err;
|
|
147
|
+
retried = true;
|
|
148
|
+
options.onProgress?.(
|
|
149
|
+
`${providerUsed} failed while running a frame (${err.message}); continuing on CPU.`
|
|
150
|
+
);
|
|
151
|
+
await session.release().catch(() => void 0);
|
|
152
|
+
session = await tryCreate(["cpu"]);
|
|
153
|
+
providerUsed = "CPU";
|
|
154
|
+
return await session.run({ [inputName]: tensor });
|
|
155
|
+
}
|
|
156
|
+
};
|
|
138
157
|
return {
|
|
139
|
-
provider
|
|
158
|
+
get provider() {
|
|
159
|
+
return providerUsed;
|
|
160
|
+
},
|
|
140
161
|
async process(rgb, width, height, withBackground = false) {
|
|
141
162
|
const tensor = await preprocess(sharp, ort, rgb, width, height, inputData);
|
|
142
|
-
const outputs = await
|
|
163
|
+
const outputs = await run(tensor);
|
|
143
164
|
const output = outputs[outputName];
|
|
144
165
|
if (!output) throw new Error(`Model did not return output '${outputName}'`);
|
|
145
166
|
const expectedBytes = width * height * 4;
|
|
@@ -260,16 +281,56 @@ function inferInputKind(inputPath) {
|
|
|
260
281
|
`Unsupported input: ${ext}. Use a video (mp4/mov/webm/mkv/avi) or image (jpg/png/webp).`
|
|
261
282
|
);
|
|
262
283
|
}
|
|
284
|
+
async function decoderTransposesDimensions(inputPath) {
|
|
285
|
+
const ffprobePath = findFFprobe();
|
|
286
|
+
if (!ffprobePath) throw new Error(`ffprobe is required. Install: ${getFFmpegInstallHint()}`);
|
|
287
|
+
const { stdout } = await runCancellableProcess(
|
|
288
|
+
ffprobePath,
|
|
289
|
+
[
|
|
290
|
+
"-v",
|
|
291
|
+
"error",
|
|
292
|
+
"-select_streams",
|
|
293
|
+
"v:0",
|
|
294
|
+
"-show_streams",
|
|
295
|
+
"-print_format",
|
|
296
|
+
"json",
|
|
297
|
+
"--",
|
|
298
|
+
inputPath
|
|
299
|
+
],
|
|
300
|
+
{ timeoutMs: 3e4, maxBufferBytes: 256 * 1024 }
|
|
301
|
+
);
|
|
302
|
+
const probe = JSON.parse(stdout);
|
|
303
|
+
if (typeof probe !== "object" || probe === null || !("streams" in probe) || !Array.isArray(probe.streams))
|
|
304
|
+
return false;
|
|
305
|
+
const stream = probe.streams[0];
|
|
306
|
+
if (typeof stream !== "object" || stream === null) return false;
|
|
307
|
+
const sideData = "side_data_list" in stream && Array.isArray(stream.side_data_list) ? stream.side_data_list : [];
|
|
308
|
+
const matrix = sideData.find(
|
|
309
|
+
(entry) => typeof entry === "object" && entry !== null && "side_data_type" in entry && entry.side_data_type === "Display Matrix"
|
|
310
|
+
);
|
|
311
|
+
let rotation = typeof matrix === "object" && matrix !== null && "rotation" in matrix ? matrix.rotation : void 0;
|
|
312
|
+
if (rotation === void 0 && "tags" in stream && typeof stream.tags === "object" && stream.tags !== null && "rotate" in stream.tags)
|
|
313
|
+
rotation = Number(stream.tags.rotate);
|
|
314
|
+
if (typeof rotation !== "number" || !Number.isFinite(rotation)) return false;
|
|
315
|
+
const angle = (rotation % 360 + 360) % 360;
|
|
316
|
+
return Math.abs(angle - 90) < 1 || Math.abs(angle - 270) < 1;
|
|
317
|
+
}
|
|
263
318
|
async function probeMedia(inputPath) {
|
|
264
319
|
const isImage = inferInputKind(inputPath) === "image";
|
|
265
|
-
const engine = await import("./src-
|
|
320
|
+
const engine = await import("./src-SSV66L3F.js");
|
|
266
321
|
const meta = await engine.extractMediaMetadata(inputPath);
|
|
267
322
|
if (isImage) {
|
|
268
323
|
return { width: meta.width, height: meta.height, fps: 0, frameCount: 1 };
|
|
269
324
|
}
|
|
270
325
|
const fps = meta.fps || 30;
|
|
271
326
|
const frameCount = meta.durationSeconds ? Math.round(meta.durationSeconds * fps) : 0;
|
|
272
|
-
|
|
327
|
+
const transposed = await decoderTransposesDimensions(inputPath);
|
|
328
|
+
return {
|
|
329
|
+
width: transposed ? meta.height : meta.width,
|
|
330
|
+
height: transposed ? meta.width : meta.height,
|
|
331
|
+
fps,
|
|
332
|
+
frameCount
|
|
333
|
+
};
|
|
273
334
|
}
|
|
274
335
|
function buildEncoderArgs(format, width, height, fps, outputPath, quality = DEFAULT_QUALITY) {
|
|
275
336
|
const base = [
|
|
@@ -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.192" : "0.0.0-dev";
|
|
10
|
+
var PRODUCER_VERSION = true ? "0.8.192" : "0.0.0-dev";
|
|
11
11
|
|
|
12
12
|
export {
|
|
13
13
|
VERSION,
|
|
@@ -9,14 +9,14 @@ import {
|
|
|
9
9
|
} from "./chunk-K2FLNJVB.js";
|
|
10
10
|
import {
|
|
11
11
|
trackCommandFailure
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BV6YE455.js";
|
|
13
13
|
import {
|
|
14
14
|
failCommand
|
|
15
15
|
} from "./chunk-JVBRJMOP.js";
|
|
16
16
|
|
|
17
17
|
// src/utils/project.ts
|
|
18
18
|
import { existsSync, statSync } from "fs";
|
|
19
|
-
import { resolve,
|
|
19
|
+
import { basename, dirname, join, relative, resolve, sep } from "path";
|
|
20
20
|
var InvalidProjectError = class extends Error {
|
|
21
21
|
title;
|
|
22
22
|
hint;
|
|
@@ -65,8 +65,28 @@ function resolveProject(dirArg, options = {}) {
|
|
|
65
65
|
throw err;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
+
function projectHolding(file) {
|
|
69
|
+
for (let dir = dirname(file); ; dir = dirname(dir)) {
|
|
70
|
+
if (existsSync(join(dir, "index.html"))) return dir;
|
|
71
|
+
if (dirname(dir) === dir) return dirname(file);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function resolveLintTarget(arg) {
|
|
75
|
+
const file = arg === void 0 ? void 0 : resolve(arg);
|
|
76
|
+
if (file === void 0 || !statSync(file, { throwIfNoEntry: false })?.isFile()) {
|
|
77
|
+
return { project: resolveProject(arg) };
|
|
78
|
+
}
|
|
79
|
+
const dir = projectHolding(file);
|
|
80
|
+
const project = resolveProject(dir, { requireIndex: false });
|
|
81
|
+
return file === project.indexPath ? { project } : { project, entryFile: file };
|
|
82
|
+
}
|
|
83
|
+
function isUnderCompositions(projectDir, file) {
|
|
84
|
+
return relative(projectDir, file).split(sep)[0] === "compositions";
|
|
85
|
+
}
|
|
68
86
|
|
|
69
87
|
export {
|
|
70
88
|
resolveProjectOrThrow,
|
|
71
|
-
resolveProject
|
|
89
|
+
resolveProject,
|
|
90
|
+
resolveLintTarget,
|
|
91
|
+
isUnderCompositions
|
|
72
92
|
};
|