Cache audio waveforms and rescue oversized GIF previews

This commit is contained in:
Fisto
2026-09-16 23:48:17 +02:00
parent caf9b7db3a
commit 8f30ec14ad
7 changed files with 123 additions and 5 deletions
+35 -1
View File
@@ -9,7 +9,14 @@ import { createHash } from "node:crypto";
import { existsSync, mkdirSync, mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { downloadOne, downloadPreview, gifPoster, previewUrlFor, videoPoster } from "../src/download.js";
import {
downloadOne,
downloadPreview,
gifPoster,
previewUrlFor,
remoteFrame,
videoPoster
} from "../src/download.js";
import { ogImageFromHtml, resolveEmbedPreview } from "../src/embed-preview.js";
import { ScrapeEngine, type FetchPage, type ScrapeBackend } from "../src/engine.js";
import { extractMedia } from "../src/extract.js";
@@ -954,6 +961,33 @@ void (async () => {
);
});
await test("remoteFrame renders an audio waveform", async () => {
const dir = join(root, "waveform-test");
mkdirSync(dir, { recursive: true });
const wavPath = join(dir, "tone.wav");
try {
execFileSync("ffmpeg", [
"-v",
"error",
"-y",
"-f",
"lavfi",
"-i",
"sine=frequency=440:duration=1",
wavPath
]);
} catch {
console.log("ok - remoteFrame skipped (no ffmpeg)");
return;
}
const frame = await remoteFrame(wavPath, dir, { waveform: true });
assert.ok(frame?.hash);
assert.ok((frame?.bytes ?? 0) > 0);
assert.equal(existsSync(join(dir, `${frame?.hash}.webp`)), true);
});
await test("snowflake helpers round-trip dates", () => {
const id = snowflakeFromIso("2026-09-16T00:00:00.000Z");
assert.ok(id);