hyperframes 0.7.84 → 0.7.86
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/cli.js +87 -18
- package/dist/hyperframes-player.global.js +1 -1
- package/dist/skills/hyperframes/references/routes/music-to-video.md +1 -1
- package/dist/studio/assets/{hyperframes-player-s9w3Y9Nj.js → hyperframes-player-BL3qfGEQ.js} +1 -1
- package/dist/studio/assets/{index-COqACN_S.js → index-B5QGai9B.js} +1 -1
- package/dist/studio/assets/{index-BWOPM8bq.js → index-C0Vr8jjc.js} +1 -1
- package/dist/studio/assets/{index-C3J3fmFc.js → index-CISVI7UC.js} +145 -145
- package/dist/studio/index.html +1 -1
- package/dist/studio/index.js +576 -477
- package/dist/studio/index.js.map +1 -1
- package/dist/templates/_shared/AGENTS.md +1 -1
- package/dist/templates/_shared/CLAUDE.md +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -50,7 +50,7 @@ var VERSION;
|
|
|
50
50
|
var init_version = __esm({
|
|
51
51
|
"src/version.ts"() {
|
|
52
52
|
"use strict";
|
|
53
|
-
VERSION = true ? "0.7.
|
|
53
|
+
VERSION = true ? "0.7.86" : "0.0.0-dev";
|
|
54
54
|
}
|
|
55
55
|
});
|
|
56
56
|
|
|
@@ -68784,7 +68784,7 @@ function sanitizeFfprobeDiagnostic(stderr, filePath) {
|
|
|
68784
68784
|
}
|
|
68785
68785
|
async function runFfprobe(filePath, argsWithoutInput, signal) {
|
|
68786
68786
|
const command2 = getFfprobeBinary();
|
|
68787
|
-
const proc = spawn3(command2, ["-v", "error", ...argsWithoutInput, filePath]);
|
|
68787
|
+
const proc = spawn3(command2, ["-v", "error", ...argsWithoutInput, "--", filePath]);
|
|
68788
68788
|
trackChildProcess(proc);
|
|
68789
68789
|
let stdout2 = "";
|
|
68790
68790
|
proc.stdout.on("data", (data2) => {
|
|
@@ -68840,6 +68840,7 @@ function extractPngMetadataFromBuffer(buf) {
|
|
|
68840
68840
|
let width = 0;
|
|
68841
68841
|
let height = 0;
|
|
68842
68842
|
let seenIdat = false;
|
|
68843
|
+
let colorSpaceFromCicp = null;
|
|
68843
68844
|
let pos = 8;
|
|
68844
68845
|
while (pos + 12 <= buf.length) {
|
|
68845
68846
|
const chunkLen = buf.readUInt32BE(pos);
|
|
@@ -68860,20 +68861,16 @@ function extractPngMetadataFromBuffer(buf) {
|
|
|
68860
68861
|
const primariesCode = chunkData[0] ?? 0;
|
|
68861
68862
|
const transferCode = chunkData[1] ?? 0;
|
|
68862
68863
|
const matrixCode = chunkData[2] ?? 0;
|
|
68863
|
-
|
|
68864
|
-
|
|
68865
|
-
|
|
68866
|
-
colorSpace: {
|
|
68867
|
-
colorPrimaries: primariesCode === 9 ? "bt2020" : primariesCode === 1 ? "bt709" : `unknown-${primariesCode}`,
|
|
68868
|
-
colorTransfer: transferCode === 16 ? "smpte2084" : transferCode === 18 ? "arib-std-b67" : transferCode === 1 ? "bt709" : `unknown-${transferCode}`,
|
|
68869
|
-
colorSpace: matrixCode === 9 ? "bt2020nc" : matrixCode === 0 ? "gbr" : `unknown-${matrixCode}`
|
|
68870
|
-
}
|
|
68864
|
+
colorSpaceFromCicp = {
|
|
68865
|
+
colorPrimaries: primariesCode === 9 ? "bt2020" : primariesCode === 1 ? "bt709" : `unknown-${primariesCode}`,
|
|
68866
|
+
colorTransfer: transferCode === 16 ? "smpte2084" : transferCode === 18 ? "arib-std-b67" : transferCode === 1 ? "bt709" : `unknown-${transferCode}`,
|
|
68867
|
+
colorSpace: matrixCode === 9 ? "bt2020nc" : matrixCode === 0 ? "gbr" : `unknown-${matrixCode}`
|
|
68871
68868
|
};
|
|
68872
68869
|
}
|
|
68873
68870
|
if (chunkType === "IEND") break;
|
|
68874
68871
|
pos += 12 + chunkLen;
|
|
68875
68872
|
}
|
|
68876
|
-
return width > 0 && height > 0 ? { width, height, colorSpace:
|
|
68873
|
+
return width > 0 && height > 0 ? { width, height, colorSpace: colorSpaceFromCicp } : null;
|
|
68877
68874
|
}
|
|
68878
68875
|
function extractStillImageMetadata(filePath) {
|
|
68879
68876
|
if (extname(filePath).toLowerCase() !== ".png") return null;
|
|
@@ -68897,9 +68894,13 @@ function parseFrameRate(frameRateStr) {
|
|
|
68897
68894
|
if (parts.length === 2) {
|
|
68898
68895
|
const num2 = parseFloat(parts[0] ?? "");
|
|
68899
68896
|
const den = parseFloat(parts[1] ?? "");
|
|
68900
|
-
if (
|
|
68897
|
+
if (Number.isFinite(num2) && Number.isFinite(den) && den !== 0) {
|
|
68898
|
+
return Math.round(num2 / den * 100) / 100;
|
|
68899
|
+
}
|
|
68900
|
+
return 0;
|
|
68901
68901
|
}
|
|
68902
|
-
|
|
68902
|
+
const parsed = parseFloat(frameRateStr);
|
|
68903
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
68903
68904
|
}
|
|
68904
68905
|
async function extractMediaMetadata(filePath) {
|
|
68905
68906
|
const cached2 = videoMetadataCache.get(filePath);
|
|
@@ -74701,6 +74702,9 @@ function decodeUrlPathVariants2(path2) {
|
|
|
74701
74702
|
function isRemoteOrInlineUrl(url) {
|
|
74702
74703
|
return /^(https?:|data:|blob:|\/\/|#)/i.test(url);
|
|
74703
74704
|
}
|
|
74705
|
+
function hasUnresolvedTemplatingToken(url) {
|
|
74706
|
+
return /<<[^<>]+>>|\{\{[^{}]+\}\}|\$\{[^{}]+\}/.test(url);
|
|
74707
|
+
}
|
|
74704
74708
|
function cleanAssetUrl(url) {
|
|
74705
74709
|
return url.trim().split(/[?#]/, 1)[0] ?? "";
|
|
74706
74710
|
}
|
|
@@ -78415,7 +78419,9 @@ function collectLocalVideoCandidates(projectDir, htmlSources) {
|
|
|
78415
78419
|
const re2 = new RegExp(videoSrcRe.source, videoSrcRe.flags);
|
|
78416
78420
|
let match;
|
|
78417
78421
|
while ((match = re2.exec(scannable)) !== null) {
|
|
78418
|
-
const
|
|
78422
|
+
const rawSrc = match[1] ?? "";
|
|
78423
|
+
if (hasUnresolvedTemplatingToken(rawSrc)) continue;
|
|
78424
|
+
const src = cleanAssetUrl(rawSrc);
|
|
78419
78425
|
if (!src) continue;
|
|
78420
78426
|
if (isRemoteOrInlineUrl(src)) continue;
|
|
78421
78427
|
if (/^__[A-Z_]+__$/.test(src)) continue;
|
|
@@ -78641,6 +78647,7 @@ function lintAudioSrcNotFound(projectDir, htmlSources) {
|
|
|
78641
78647
|
const src = match[1];
|
|
78642
78648
|
if (/^(https?:|data:|blob:)/i.test(src)) continue;
|
|
78643
78649
|
if (/^__[A-Z_]+__$/.test(src)) continue;
|
|
78650
|
+
if (hasUnresolvedTemplatingToken(src)) continue;
|
|
78644
78651
|
const rootRelative = compSrcPath ? rewriteAssetPath(compSrcPath, src) : src;
|
|
78645
78652
|
if (!resolveLocalAssetCandidates(projectDir, rootRelative).some(existsSync11)) {
|
|
78646
78653
|
missingSrcs.push(src);
|
|
@@ -78669,6 +78676,7 @@ function lintMissingLocalAsset(projectDir, htmlSources) {
|
|
|
78669
78676
|
while ((match = re2.exec(scannable)) !== null) {
|
|
78670
78677
|
const tagName19 = (match[1] ?? "").toLowerCase();
|
|
78671
78678
|
const rawSrc = match[2] ?? "";
|
|
78679
|
+
if (hasUnresolvedTemplatingToken(rawSrc)) continue;
|
|
78672
78680
|
const src = cleanAssetUrl(rawSrc);
|
|
78673
78681
|
if (!src) continue;
|
|
78674
78682
|
if (isRemoteOrInlineUrl(src)) continue;
|
|
@@ -78704,6 +78712,7 @@ function lintTextureMaskAssetNotFound(projectDir, htmlSources) {
|
|
|
78704
78712
|
const pattern = new RegExp(MASK_IMAGE_URL_RE.source, MASK_IMAGE_URL_RE.flags);
|
|
78705
78713
|
while ((match = pattern.exec(cssSource.content)) !== null) {
|
|
78706
78714
|
const rawUrl = match[1] ?? match[2] ?? match[3] ?? "";
|
|
78715
|
+
if (hasUnresolvedTemplatingToken(rawUrl)) continue;
|
|
78707
78716
|
const url = cleanAssetUrl(rawUrl);
|
|
78708
78717
|
if (!url || isRemoteOrInlineUrl(url)) continue;
|
|
78709
78718
|
if (/^__[A-Z_]+__$/.test(url)) continue;
|
|
@@ -78811,6 +78820,7 @@ function lintMissingOrEmptySubComposition(projectDir, rootHtml) {
|
|
|
78811
78820
|
const srcPath = (match[1] ?? "").trim();
|
|
78812
78821
|
if (!srcPath) continue;
|
|
78813
78822
|
if (/^__[A-Z_]+__$/.test(srcPath)) continue;
|
|
78823
|
+
if (hasUnresolvedTemplatingToken(srcPath)) continue;
|
|
78814
78824
|
const filePath = resolve8(projectDir, srcPath);
|
|
78815
78825
|
if (visited.has(filePath)) continue;
|
|
78816
78826
|
visited.add(filePath);
|
|
@@ -131167,7 +131177,7 @@ var init_init = __esm({
|
|
|
131167
131177
|
console.log(
|
|
131168
131178
|
` ${c.dim('"Using /hyperframes, create a 15-second intro about [your topic]"')}`
|
|
131169
131179
|
);
|
|
131170
|
-
console.log(` ${c.dim("More patterns: hyperframes.heygen.com/
|
|
131180
|
+
console.log(` ${c.dim("More patterns: hyperframes.heygen.com/prompting/overview")}`);
|
|
131171
131181
|
console.log();
|
|
131172
131182
|
console.log(` ${c.accent("4.")} Preview in the browser:`);
|
|
131173
131183
|
console.log(` ${c.accent(`cd ${name2}`)} && ${c.accent("npm run dev")}`);
|
|
@@ -190296,6 +190306,20 @@ function svgContentHashSlug(svgSource, isLogo) {
|
|
|
190296
190306
|
const hash2 = createHash18("sha1").update(svgSource).digest("hex").slice(0, 8);
|
|
190297
190307
|
return isLogo ? `logo-${hash2}` : `svg-${hash2}`;
|
|
190298
190308
|
}
|
|
190309
|
+
function toStandaloneSvg(outerHTML) {
|
|
190310
|
+
const open3 = outerHTML.match(/<svg\b[^>]*>/i);
|
|
190311
|
+
if (!open3) return outerHTML;
|
|
190312
|
+
const original = open3[0];
|
|
190313
|
+
let tag = original;
|
|
190314
|
+
const add2 = [];
|
|
190315
|
+
if (!/\sxmlns\s*=/i.test(tag)) add2.push('xmlns="http://www.w3.org/2000/svg"');
|
|
190316
|
+
if (/\sxlink:[a-z-]+\s*=/i.test(outerHTML) && !/\sxmlns:xlink\s*=/i.test(tag)) {
|
|
190317
|
+
add2.push('xmlns:xlink="http://www.w3.org/1999/xlink"');
|
|
190318
|
+
}
|
|
190319
|
+
if (!add2.length) return outerHTML;
|
|
190320
|
+
tag = tag.replace(/^<svg\b/i, `<svg ${add2.join(" ")}`);
|
|
190321
|
+
return outerHTML.replace(original, tag);
|
|
190322
|
+
}
|
|
190299
190323
|
async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks) {
|
|
190300
190324
|
const assetsDir = join109(outputDir, "assets");
|
|
190301
190325
|
mkdirSync53(assetsDir, { recursive: true });
|
|
@@ -190306,7 +190330,8 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
190306
190330
|
for (let i2 = 0; i2 < tokens.svgs.length && i2 < 30; i2++) {
|
|
190307
190331
|
const svg = tokens.svgs[i2];
|
|
190308
190332
|
if (!svg.outerHTML || svg.outerHTML.length < 50) continue;
|
|
190309
|
-
const
|
|
190333
|
+
const svgFile = toStandaloneSvg(svg.outerHTML);
|
|
190334
|
+
const slug = svgContentHashSlug(svgFile, !!svg.isLogo);
|
|
190310
190335
|
let finalSlug = slug;
|
|
190311
190336
|
let suffix = 2;
|
|
190312
190337
|
while (usedSvgNames.has(finalSlug)) {
|
|
@@ -190317,7 +190342,7 @@ async function downloadAssets(tokens, outputDir, catalogedAssets, faviconLinks)
|
|
|
190317
190342
|
const name = `${finalSlug}.svg`;
|
|
190318
190343
|
const localPath = `assets/svgs/${name}`;
|
|
190319
190344
|
try {
|
|
190320
|
-
writeFileSync45(join109(outputDir, localPath),
|
|
190345
|
+
writeFileSync45(join109(outputDir, localPath), svgFile, "utf-8");
|
|
190321
190346
|
assets.push({ url: "", localPath, type: "svg" });
|
|
190322
190347
|
} catch {
|
|
190323
190348
|
}
|
|
@@ -193304,10 +193329,50 @@ var init_scaffolding = __esm({
|
|
|
193304
193329
|
// src/capture/screenshotCapture.ts
|
|
193305
193330
|
var screenshotCapture_exports = {};
|
|
193306
193331
|
__export(screenshotCapture_exports, {
|
|
193307
|
-
|
|
193332
|
+
MAX_PLATE_HEIGHT_PX: () => MAX_PLATE_HEIGHT_PX,
|
|
193333
|
+
captureFullPagePlate: () => captureFullPagePlate,
|
|
193334
|
+
captureScrollScreenshots: () => captureScrollScreenshots,
|
|
193335
|
+
pngHeight: () => pngHeight
|
|
193308
193336
|
});
|
|
193309
193337
|
import { writeFileSync as writeFileSync50, mkdirSync as mkdirSync56 } from "fs";
|
|
193310
193338
|
import { join as join117 } from "path";
|
|
193339
|
+
function pngHeight(buf) {
|
|
193340
|
+
if (buf.length < 24) return null;
|
|
193341
|
+
if (buf[12] !== 73 || buf[13] !== 72 || buf[14] !== 68 || buf[15] !== 82) return null;
|
|
193342
|
+
return (buf[20] << 24 | buf[21] << 16 | buf[22] << 8 | buf[23]) >>> 0;
|
|
193343
|
+
}
|
|
193344
|
+
async function captureFullPagePlate(page, screenshotsDir) {
|
|
193345
|
+
await page.evaluate(
|
|
193346
|
+
`document.querySelectorAll('*').forEach((el) => {
|
|
193347
|
+
const p = getComputedStyle(el).position;
|
|
193348
|
+
if (p === 'fixed' || p === 'sticky') {
|
|
193349
|
+
el.setAttribute('data-hf-plate-position', el.style.position || '');
|
|
193350
|
+
el.style.position = 'static';
|
|
193351
|
+
}
|
|
193352
|
+
})`
|
|
193353
|
+
);
|
|
193354
|
+
try {
|
|
193355
|
+
const docHeight = await page.evaluate(
|
|
193356
|
+
`Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)`
|
|
193357
|
+
);
|
|
193358
|
+
if (docHeight > MAX_PLATE_HEIGHT_PX) return null;
|
|
193359
|
+
const buffer = await page.screenshot({ type: "png", fullPage: true });
|
|
193360
|
+
const produced = pngHeight(buffer);
|
|
193361
|
+
if (produced != null && produced > MAX_PLATE_HEIGHT_PX) return null;
|
|
193362
|
+
writeFileSync50(join117(screenshotsDir, "full-page.png"), buffer);
|
|
193363
|
+
return "screenshots/full-page.png";
|
|
193364
|
+
} finally {
|
|
193365
|
+
try {
|
|
193366
|
+
await page.evaluate(
|
|
193367
|
+
`document.querySelectorAll('[data-hf-plate-position]').forEach((el) => {
|
|
193368
|
+
el.style.position = el.getAttribute('data-hf-plate-position');
|
|
193369
|
+
el.removeAttribute('data-hf-plate-position');
|
|
193370
|
+
})`
|
|
193371
|
+
);
|
|
193372
|
+
} catch {
|
|
193373
|
+
}
|
|
193374
|
+
}
|
|
193375
|
+
}
|
|
193311
193376
|
async function captureScrollScreenshots(page, outputDir) {
|
|
193312
193377
|
const screenshotsDir = join117(outputDir, "screenshots");
|
|
193313
193378
|
mkdirSync56(screenshotsDir, { recursive: true });
|
|
@@ -193408,13 +193473,17 @@ async function captureScrollScreenshots(page, outputDir) {
|
|
|
193408
193473
|
}
|
|
193409
193474
|
await page.evaluate(`window.scrollTo(0, 0)`);
|
|
193410
193475
|
await new Promise((r2) => setTimeout(r2, 200));
|
|
193476
|
+
const plate = await captureFullPagePlate(page, screenshotsDir);
|
|
193477
|
+
if (plate) filePaths.push(plate);
|
|
193411
193478
|
} catch {
|
|
193412
193479
|
}
|
|
193413
193480
|
return filePaths;
|
|
193414
193481
|
}
|
|
193482
|
+
var MAX_PLATE_HEIGHT_PX;
|
|
193415
193483
|
var init_screenshotCapture = __esm({
|
|
193416
193484
|
"src/capture/screenshotCapture.ts"() {
|
|
193417
193485
|
"use strict";
|
|
193486
|
+
MAX_PLATE_HEIGHT_PX = 16384;
|
|
193418
193487
|
}
|
|
193419
193488
|
});
|
|
193420
193489
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var HyperframesPlayer=(()=>{var J=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ye=Object.prototype.hasOwnProperty;var Xe=(i,e)=>{for(var t in e)J(i,t,{get:e[t],enumerable:!0})},Ze=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of qe(e))!Ye.call(i,n)&&n!==t&&J(i,n,{get:()=>e[n],enumerable:!(r=Ge(e,n))||r.enumerable});return i};var Qe=i=>Ze(J({},"__esModule",{value:!0}),i);var Lt={};Xe(Lt,{HyperframesPlayer:()=>Q,SPEED_PRESETS:()=>te,formatSpeed:()=>N,formatTime:()=>$});function ye(i){return i.hasRuntime||i.runtimeInjected?!1:!!(i.hasNestedCompositions||i.hasTimelines&&i.attempts>=5)}function I(i){return typeof i=="object"&&i!==null}function Ee(i){return I(i)&&typeof i.getDuration=="function"}function Se(i){return I(i)&&typeof i.duration=="function"&&typeof i.time=="function"&&typeof i.seek=="function"&&typeof i.play=="function"&&typeof i.pause=="function"}var Je="https://cdn.jsdelivr.net/npm/@hyperframes/core@0.7.
|
|
1
|
+
"use strict";var HyperframesPlayer=(()=>{var J=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ye=Object.prototype.hasOwnProperty;var Xe=(i,e)=>{for(var t in e)J(i,t,{get:e[t],enumerable:!0})},Ze=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of qe(e))!Ye.call(i,n)&&n!==t&&J(i,n,{get:()=>e[n],enumerable:!(r=Ge(e,n))||r.enumerable});return i};var Qe=i=>Ze(J({},"__esModule",{value:!0}),i);var Lt={};Xe(Lt,{HyperframesPlayer:()=>Q,SPEED_PRESETS:()=>te,formatSpeed:()=>N,formatTime:()=>$});function ye(i){return i.hasRuntime||i.runtimeInjected?!1:!!(i.hasNestedCompositions||i.hasTimelines&&i.attempts>=5)}function I(i){return typeof i=="object"&&i!==null}function Ee(i){return I(i)&&typeof i.getDuration=="function"}function Se(i){return I(i)&&typeof i.duration=="function"&&typeof i.time=="function"&&typeof i.seek=="function"&&typeof i.play=="function"&&typeof i.pause=="function"}var Je="https://cdn.jsdelivr.net/npm/@hyperframes/core@0.7.86/dist/hyperframe.runtime.iife.js";function D(i){if(i===null)return null;let e=Number.parseInt(i,10);return Number.isFinite(e)&&e>0?e:null}function Ke(i){let e=i?.querySelector("[data-composition-id][data-width][data-height]")??i?.querySelector("[data-width][data-height]");if(!e)return null;let t=D(e.getAttribute("data-width")),r=D(e.getAttribute("data-height"));return t!==null&&r!==null?{width:t,height:r}:null}var j=class{constructor(e,t){this._iframe=e;this._callbacks=t}_iframe;_callbacks;_interval=null;_runtimeInjected=!1;get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let e=0;this._interval=setInterval(()=>{e++;try{let t=this._iframe.contentWindow;if(!t)return;let r=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),o=!!this._iframe.contentDocument?.querySelector("[data-composition-src]");if(ye({hasRuntime:r,hasTimelines:n,hasNestedCompositions:o,runtimeInjected:this._runtimeInjected,attempts:e})){this._injectRuntime();return}if(this._runtimeInjected&&!r)return;let s=this._resolvePlaybackDurationAdapter(t);if(s&&s.getDuration()>0){this.stop();let l=Ke(this._iframe.contentDocument);this._callbacks.onReady({duration:s.getDuration(),adapter:s,compositionSize:l});return}}catch{}e>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{let e=this._iframe.contentWindow;return e?this._resolveDirectTimelineAdapterFromWindow(e):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(e){return this._resolveDirectTimelineAdapterFromWindow(e)}hasRuntimeBridge(e){return Reflect.get(e,"__hf")!==void 0||I(Reflect.get(e,"__player"))}_injectRuntime(){this._runtimeInjected=!0;try{let e=this._iframe.contentDocument;if(!e)return;let t=e.createElement("script");t.src=Je,(e.head||e.documentElement).appendChild(t),this._callbacks.onRuntimeInjected?.()}catch{}}_resolveDirectTimelineAdapterFromWindow(e){if(this.hasRuntimeBridge(e))return null;let t=Reflect.get(e,"__timelines");if(!I(t))return null;let r=Object.keys(t);if(r.length===0)return null;let n=this._iframe.contentDocument?.querySelector("[data-composition-id]")?.getAttribute("data-composition-id"),o=n&&n in t?n:r[r.length-1],s=t[o];return Se(s)?s:null}_resolvePlaybackDurationAdapter(e){let t=Reflect.get(e,"__player");if(Ee(t))return{kind:"runtime",getDuration:()=>t.getDuration()};let r=this._resolveDirectTimelineAdapterFromWindow(e);return r?{kind:"direct-timeline",timeline:r,getDuration:()=>r.duration()}:null}};var Te=`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
position: relative;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Route: music-to-video
|
|
2
2
|
|
|
3
|
-
- **Input:** A music track,
|
|
3
|
+
- **Input:** A music track, a video whose audio becomes the track, or a track generated from a mood brief — with no narration or website capture. User images or videos are optional, so a complete video needs zero supplied assets.
|
|
4
4
|
- **Output:** A beat-synced MP4 driven by a deterministic beat/energy map (`audiomap.json`). It may become a lyric video, slideshow, visualizer, or kinetic promo without changing pipelines.
|
|
5
5
|
- **Triggers:** "make a video for this song", "beat-synced video", "lyric video", "music visualizer", "kinetic promo to this beat".
|
|
6
6
|
|
package/dist/studio/assets/{hyperframes-player-s9w3Y9Nj.js → hyperframes-player-BL3qfGEQ.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var ce=Object.defineProperty;var pe=(r,t,e)=>t in r?ce(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var c=(r,t,e)=>pe(r,typeof t!="symbol"?t+"":t,e);import{r as ne,i as me,a as fe}from"./index-
|
|
1
|
+
var ce=Object.defineProperty;var pe=(r,t,e)=>t in r?ce(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var c=(r,t,e)=>pe(r,typeof t!="symbol"?t+"":t,e);import{r as ne,i as me,a as fe}from"./index-CISVI7UC.js";function _e(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function F(r){return typeof r=="object"&&r!==null}function ge(r){return F(r)&&typeof r.getDuration=="function"}function ye(r){return F(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}function ve(r){if(!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(r))throw new Error(`Invalid HyperFrames runtime version: ${r}`);return`https://cdn.jsdelivr.net/npm/@hyperframes/core@${r}/dist/hyperframe.runtime.iife.js`}const be=typeof __HYPERFRAMES_RUNTIME_CDN_URL__=="string"?__HYPERFRAMES_RUNTIME_CDN_URL__:ve("0.0.0-dev");function H(r){if(r===null)return null;const t=Number.parseInt(r,10);return Number.isFinite(t)&&t>0?t:null}function we(r){const t=(r==null?void 0:r.querySelector("[data-composition-id][data-width][data-height]"))??(r==null?void 0:r.querySelector("[data-width][data-height]"));if(!t)return null;const e=H(t.getAttribute("data-width")),i=H(t.getAttribute("data-height"));return e!==null&&i!==null?{width:e,height:i}:null}class Ae{constructor(t,e){c(this,"_interval",null);c(this,"_runtimeInjected",!1);this._iframe=t,this._callbacks=e}get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let t=0;this._interval=setInterval(()=>{var e;t++;try{const i=this._iframe.contentWindow;if(!i)return;const s=!!(i.__hf||i.__player),o=!!(i.__timelines&&Object.keys(i.__timelines).length>0),d=!!((e=this._iframe.contentDocument)!=null&&e.querySelector("[data-composition-src]"));if(_e({hasRuntime:s,hasTimelines:o,hasNestedCompositions:d,runtimeInjected:this._runtimeInjected,attempts:t})){this._injectRuntime();return}if(this._runtimeInjected&&!s)return;const a=this._resolvePlaybackDurationAdapter(i);if(a&&a.getDuration()>0){this.stop();const h=we(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:h});return}}catch{}t>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{const t=this._iframe.contentWindow;return t?this._resolveDirectTimelineAdapterFromWindow(t):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(t){return this._resolveDirectTimelineAdapterFromWindow(t)}hasRuntimeBridge(t){return Reflect.get(t,"__hf")!==void 0||F(Reflect.get(t,"__player"))}_injectRuntime(){var t,e;this._runtimeInjected=!0;try{const i=this._iframe.contentDocument;if(!i)return;const s=i.createElement("script");s.src=be,(i.head||i.documentElement).appendChild(s),(e=(t=this._callbacks).onRuntimeInjected)==null||e.call(t)}catch{}}_resolveDirectTimelineAdapterFromWindow(t){var a,h;if(this.hasRuntimeBridge(t))return null;const e=Reflect.get(t,"__timelines");if(!F(e))return null;const i=Object.keys(e);if(i.length===0)return null;const s=(h=(a=this._iframe.contentDocument)==null?void 0:a.querySelector("[data-composition-id]"))==null?void 0:h.getAttribute("data-composition-id"),o=s&&s in e?s:i[i.length-1],d=e[o];return ye(d)?d:null}_resolvePlaybackDurationAdapter(t){const e=Reflect.get(t,"__player");if(ge(e))return{kind:"runtime",getDuration:()=>e.getDuration()};const i=this._resolveDirectTimelineAdapterFromWindow(t);return i?{kind:"direct-timeline",timeline:i,getDuration:()=>i.duration()}:null}}const Ee=`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
position: relative;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as P}from"./index-
|
|
1
|
+
import{g as P}from"./index-CISVI7UC.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
|