From 792c5f22465d5bd53f0b2860f6ef0e036a5c6974 Mon Sep 17 00:00:00 2001 From: bymyself Date: Fri, 28 Feb 2025 14:00:02 -0700 Subject: [PATCH] Load workflows from webm files (#2772) Co-authored-by: github-actions --- browser_tests/assets/workflow.webm | Bin 0 -> 1078 bytes browser_tests/fixtures/ComfyPage.ts | 1 + browser_tests/loadWorkflowInMedia.spec.ts | 3 +- .../workflow-webm-chromium-2x-linux.png | Bin 0 -> 49818 bytes .../workflow-webm-chromium-linux.png | Bin 0 -> 49117 bytes src/scripts/app.ts | 10 + src/scripts/metadata/ebml.ts | 358 ++++++++++++++++++ src/types/metadataTypes.ts | 45 +++ 8 files changed, 416 insertions(+), 1 deletion(-) create mode 100644 browser_tests/assets/workflow.webm create mode 100644 browser_tests/loadWorkflowInMedia.spec.ts-snapshots/workflow-webm-chromium-2x-linux.png create mode 100644 browser_tests/loadWorkflowInMedia.spec.ts-snapshots/workflow-webm-chromium-linux.png create mode 100644 src/scripts/metadata/ebml.ts create mode 100644 src/types/metadataTypes.ts diff --git a/browser_tests/assets/workflow.webm b/browser_tests/assets/workflow.webm new file mode 100644 index 0000000000000000000000000000000000000000..4eea34d618d12eb69e8793c4bfa91be3dfda72c7 GIT binary patch literal 1078 zcmcIk-D}fO9KG#^_@+}Fehe&e_#mUC>o&LPLz^~Aaa~8-t;iT9rb!4(laQp{W~uhJ zTU(tnrf+kwjUxClL?7{iH=Jte)cTX$KFa0K z-0WeJd$kbGW(>(9Xtvk(x^W^)NS zR)iowF%TW->&ijPiLbfwGc)hNm;7UBU4~X%Gc~X4l)$cJgf;g(T`EQb!3*bl0ugV) zJ)I&XMmM6e662y`jOeyGI$LZNP7>weD%XKHEYXo*Fhy(&jWLx&91&uYT!g0l1QM!> zDLYNJx7eH{IfN)(yo_aoP6y%~PLty$M!>>U8VM9F#%TzU=sk{%s;{D~CXA}7%*0JA zG0q4m2ol!JeSY_O8WT7%>M18ADUEHFgi-5{p{gk=rx~JIMvCY~J~lk6jaM{V=wuLe z-7W;D8WCdxXXw!+BPA-e6CNebkM;YoTT<;pkJdI+W$TdXhyBg8*iF!sgt~=TMdn2T zIhf^gqlU)RK$6pRQIQcO?QLmc%{51t@_oU8zc1`9xNfBgM<$9 { if (fileName.endsWith('.png')) return 'image/png' if (fileName.endsWith('.webp')) return 'image/webp' + if (fileName.endsWith('.webm')) return 'video/webm' if (fileName.endsWith('.json')) return 'application/json' return 'application/octet-stream' } diff --git a/browser_tests/loadWorkflowInMedia.spec.ts b/browser_tests/loadWorkflowInMedia.spec.ts index e4a89b2708..40e939d2e3 100644 --- a/browser_tests/loadWorkflowInMedia.spec.ts +++ b/browser_tests/loadWorkflowInMedia.spec.ts @@ -7,7 +7,8 @@ test.describe('Load Workflow in Media', () => { 'workflow.webp', 'edited_workflow.webp', 'no_workflow.webp', - 'large_workflow.webp' + 'large_workflow.webp', + 'workflow.webm' ].forEach(async (fileName) => { test(`Load workflow in ${fileName}`, async ({ comfyPage }) => { await comfyPage.dragAndDropFile(fileName) diff --git a/browser_tests/loadWorkflowInMedia.spec.ts-snapshots/workflow-webm-chromium-2x-linux.png b/browser_tests/loadWorkflowInMedia.spec.ts-snapshots/workflow-webm-chromium-2x-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..28b892d02442c5410383b3b943ce0225082eb381 GIT binary patch literal 49818 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 G7ycJngj(PL literal 0 HcmV?d00001 diff --git a/browser_tests/loadWorkflowInMedia.spec.ts-snapshots/workflow-webm-chromium-linux.png b/browser_tests/loadWorkflowInMedia.spec.ts-snapshots/workflow-webm-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea8f1819236b5e1bed37febef176a5c30de812b GIT binary patch literal 49117 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 + WEBM_SIGNATURE.every((byte, index) => data[index] === byte) + +const readVint = (data: Uint8Array, pos: number): VInt | null => { + if (pos >= data.length) return null + + const byte = data[pos] + + // Fast path for common case (1-byte vint) + if ((byte & MASK.MSB) === MASK.MSB) { + return { value: byte & ~MASK.MSB, length: 1 } + } + + const length = findFirstSetBitPosition(byte) + if (length === 0 || pos + length > data.length) { + return null + } + + return { + value: calculateVintValue(data, pos, length), + length + } +} + +const calculateVintValue = ( + data: Uint8Array, + pos: number, + length: number +): number => { + let value = data[pos] & (0xff >> length) + + for (let i = 1; i < length; i++) { + value = (value << 8) | data[pos + i] + } + + const allBitsSet = Math.pow(2, 7 * length) - 1 + return value === allBitsSet ? MASK.ALL_BITS_SET : value +} + +const findFirstSetBitPosition = (byte: number): number => { + for (let mask = MASK.MSB, position = 1; mask !== 0; mask >>= 1, position++) { + if ((byte & mask) !== 0) return position + } + return 0 +} + +const matchesId = (data: Uint8Array, pos: number, id: Uint8Array): boolean => { + if (pos + id.length > data.length) return false + + for (let i = 0; i < id.length; i++) { + if (data[pos + i] !== id[i]) return false + } + + return true +} + +const findNextTag = ( + data: Uint8Array, + pos: number +): { tagEnd: number; contents: EbmlTagPosition | null } | null => { + if (!matchesId(data, pos, EBML_ID.SIMPLE_TAG)) return null + + const tagSize = readVint(data, pos + 2) + if (!tagSize || tagSize.value <= 0) return null + + const tagEnd = pos + 2 + tagSize.length + tagSize.value + if (tagEnd > data.length) return null + + const contents = extractTagContents(data, pos + 2 + tagSize.length, tagEnd) + return { tagEnd, contents } +} + +const extractTagContents = ( + data: Uint8Array, + start: number, + end: number +): EbmlTagPosition | null => { + const nameInfo = findElementsInTag(data, start, end, EBML_ID.TAG_NAME) + const valueInfo = findElementsInTag(data, start, end, EBML_ID.TAG_VALUE) + + if (!nameInfo || !valueInfo) return null + + return { + name: nameInfo, + value: valueInfo + } +} + +const findElementsInTag = ( + data: Uint8Array, + start: number, + end: number, + id: Uint8Array +): EbmlElementRange | null => { + for (let pos = start; pos < end - 1; ) { + if (matchesId(data, pos, id)) { + const size = readVint(data, pos + 2) + if (size && size.value > 0) { + const elementPos = pos + 2 + size.length + return { pos: elementPos, len: size.value } + } + } + pos++ + } + + return null +} + +const processTagContents = ( + data: Uint8Array, + contents: EbmlTagPosition, + meta: ComfyMetadata +) => { + try { + const name = extractEbmlTagName(data, contents.name.pos, contents.name.len) + if (!name) return + + const value = extractEbmlTagValue( + data, + name, + contents.value.pos, + contents.value.len + ) + if (value !== null) { + meta[name.toLowerCase()] = value + } + } catch { + // Silently continue on error + } +} + +const extractEbmlTagValue = ( + data: Uint8Array, + name: string, + pos: number, + len: number +): string | ComfyWorkflowJSON | ComfyApiWorkflow | null => { + if ( + name === ComfyMetadataTags.PROMPT || + name === ComfyMetadataTags.WORKFLOW + ) { + return readJson(data, pos, len) + } + + return ebmlToString(data, pos, len) +} + +const extractEbmlTagName = ( + data: Uint8Array, + start: number, + length: number +): string | null => { + if (length <= 0) return null + + const textRange = findReadableTextRange(data, start, length) + if (!textRange) return null + + return new TextDecoder() + .decode(data.subarray(textRange.start, textRange.end)) + .trim() +} + +const findReadableTextRange = ( + data: Uint8Array, + start: number, + length: number +): TextRange | null => { + const isPrintableAscii = (byte: number) => + byte >= ASCII.PRINTABLE_MIN && byte <= ASCII.PRINTABLE_MAX + + let textStart = start + while (textStart < start + length && !isPrintableAscii(data[textStart])) { + textStart++ + } + + if (textStart >= start + length) return null + + let textEnd = textStart + while (textEnd < start + length && data[textEnd] !== ASCII.NULL) { + textEnd++ + } + + return { start: textStart, end: textEnd } +} + +const readJson = ( + data: Uint8Array, + start: number, + length: number +): ComfyWorkflowJSON | ComfyApiWorkflow | null => { + if (length <= 0) return null + + const nullTerminatorPos = findNullTerminator(data, start, length) + const jsonStartPos = findJsonStart(data, start, nullTerminatorPos - start) + + if (jsonStartPos === null) return null + + const jsonText = decodeJsonText(data, jsonStartPos, nullTerminatorPos) + return parseJsonText(jsonText) +} + +const decodeJsonText = ( + data: Uint8Array, + start: number, + end: number +): string => { + return new TextDecoder().decode(data.subarray(start, end)) +} + +const parseJsonText = ( + jsonText: string +): ComfyWorkflowJSON | ComfyApiWorkflow | null => { + const jsonEndPos = findJsonEnd(jsonText) + if (jsonEndPos === null) return null + + try { + return JSON.parse(jsonText.substring(0, jsonEndPos)) + } catch { + return null + } +} + +const findNullTerminator = ( + data: Uint8Array, + start: number, + maxLength: number +): number => { + const end = Math.min(start + maxLength, data.length) + + for (let pos = start; pos < end; pos++) { + if (data[pos] === ASCII.NULL) return pos + } + + return end +} + +const findJsonStart = ( + data: Uint8Array, + start: number, + length: number +): number | null => { + for (let pos = start; pos < start + length; pos++) { + if (data[pos] === ASCII.OPEN_BRACE) return pos + } + + return null +} + +const findJsonEnd = (text: string): number | null => { + let braceCount = 1 + let pos = 1 // Start after the opening brace + + while (braceCount > 0 && pos < text.length) { + if (text[pos] === '{') braceCount++ + if (text[pos] === '}') braceCount-- + pos++ + } + + return braceCount === 0 ? pos : null +} + +const ebmlToString = ( + data: Uint8Array, + start: number, + length: number +): string => { + if (length <= 0) return '' + + const endPos = findNullTerminator(data, start, length) + return new TextDecoder().decode(data.subarray(start, endPos)).trim() +} + +const parseMetadata = (data: Uint8Array): ComfyMetadata => { + const meta: ComfyMetadata = {} + + for (let pos = 0; pos < data.length - 2; ) { + const tagInfo = findNextTag(data, pos) + if (!tagInfo) { + pos++ + continue + } + + const { tagEnd, contents } = tagInfo + if (contents) { + processTagContents(data, contents, meta) + } + + pos = tagEnd + } + + return meta +} + +const handleFileLoad = ( + event: ProgressEvent, + resolve: (value: ComfyMetadata) => void +) => { + if (!event.target?.result) { + resolve({}) + return + } + + try { + const data = new Uint8Array(event.target.result as ArrayBuffer) + if (data.length < 4 || !hasWebmSignature(data)) { + resolve({}) + return + } + + resolve(parseMetadata(data)) + } catch { + resolve({}) + } +} + +/** + * Extracts ComfyUI Workflow metadata from a WebM file + * @param file - The WebM file to extract metadata from + */ +export function getFromWebmFile(file: File): Promise { + return new Promise((resolve) => { + const reader = new FileReader() + reader.onload = (event) => handleFileLoad(event, resolve) + reader.onerror = () => resolve({}) + reader.readAsArrayBuffer(file.slice(0, MAX_READ_BYTES)) + }) +} diff --git a/src/types/metadataTypes.ts b/src/types/metadataTypes.ts new file mode 100644 index 0000000000..0923fcb7c7 --- /dev/null +++ b/src/types/metadataTypes.ts @@ -0,0 +1,45 @@ +import type { + ComfyApiWorkflow, + ComfyWorkflowJSON +} from '@/schemas/comfyWorkflowSchema' + +/** + * Tag names used in ComfyUI metadata + */ +export enum ComfyMetadataTags { + PROMPT = 'PROMPT', + WORKFLOW = 'WORKFLOW' +} + +/** + * Metadata extracted from ComfyUI output files + */ +export interface ComfyMetadata { + workflow?: ComfyWorkflowJSON + prompt?: ComfyApiWorkflow + [key: string]: string | ComfyWorkflowJSON | ComfyApiWorkflow | undefined +} + +export type EbmlElementRange = { + /** Position in the buffer */ + pos: number + /** Length of the element in bytes */ + len: number +} + +export type EbmlTagPosition = { + name: EbmlElementRange + value: EbmlElementRange +} + +export type VInt = { + /** The value of the variable-length integer */ + value: number + /** The length of the variable-length integer in bytes */ + length: number +} + +export type TextRange = { + start: number + end: number +}