MCPcopy Create free account
hub / github.com/Cicada000/VV / extractFrame

Function extractFrame

Web/script.js:293–395  ·  view source on GitHub ↗
(folderId, frameNum, baseDir = "")

Source from the content-addressed store, hash-verified

291 watermarkLoaded = true;
292};
293async function extractFrame(folderId, frameNum, baseDir = "") {
294 const groupIndex = Math.floor((folderId - 1) / 10);
295 const requestKey = `${baseDir}/${groupIndex}/${folderId}/${frameNum}`;
296
297 return RequestController.enqueue(requestKey, async () => {
298 try {
299 if (!baseDir) {
300 throw new Error("Base directory is required");
301 }
302
303 const indexData = await indexCache.get(groupIndex, baseDir);
304
305 const dataView = new DataView(indexData);
306 let offset = 0;
307
308 const gridW = dataView.getUint32(offset, true);
309 offset += 4;
310 const gridH = dataView.getUint32(offset, true);
311 offset += 4;
312 const folderCount = dataView.getUint32(offset, true);
313 offset += 4;
314 offset += folderCount * 4;
315 const fileCount = dataView.getUint32(offset, true);
316 offset += 4;
317
318 let left = 0;
319 let right = fileCount - 1;
320 let startOffset = null;
321 let endOffset = null;
322
323 while (left <= right) {
324 const mid = Math.floor((left + right) / 2);
325 const recordOffset = offset + mid * 16;
326 const currFolder = dataView.getUint32(recordOffset, true);
327 const currFrame = dataView.getUint32(recordOffset + 4, true);
328 const currFileOffset = Number(
329 dataView.getBigUint64(recordOffset + 8, true),
330 );
331
332 if (currFolder === folderId && currFrame === frameNum) {
333 startOffset = currFileOffset;
334 if (mid < fileCount - 1) {
335 endOffset = Number(dataView.getBigUint64(recordOffset + 24, true));
336 }
337 break;
338 } else if (
339 currFolder < folderId ||
340 (currFolder === folderId && currFrame < frameNum)
341 ) {
342 left = mid + 1;
343 } else {
344 right = mid - 1;
345 }
346 }
347
348 if (startOffset === null) {
349 throw new Error(`Frame ${frameNum} not found in folder ${folderId}`);
350 }

Callers 1

loadPreviewImageFunction · 0.85

Calls 1

fetchFunction · 0.85

Tested by

no test coverage detected