1- export async function getOggMetadata ( file : File ) {
1+ import type { ComfyMetadata } from '@/types/metadataTypes'
2+
3+ export async function getOggMetadata ( file : File ) : Promise < ComfyMetadata > {
24 // Read the entire file into memory (Opus files are generally small enough)
35 const arrayBuffer = await file . arrayBuffer ( )
46 const data = new Uint8Array ( arrayBuffer )
@@ -82,7 +84,10 @@ function extractOpusTags(data: Uint8Array, decoder: TextDecoder): Uint8Array[] {
8284 return segments
8385}
8486
85- function parseVorbisComments ( packetData : Uint8Array , decoder : TextDecoder ) {
87+ function parseVorbisComments (
88+ packetData : Uint8Array ,
89+ decoder : TextDecoder
90+ ) : ComfyMetadata {
8691 let readIndex = 8 // Skip 'OpusTags' magic string (8 bytes)
8792 const packetView = new DataView (
8893 packetData . buffer ,
@@ -111,7 +116,7 @@ function parseVorbisComments(packetData: Uint8Array, decoder: TextDecoder) {
111116 const userCommentListLength = packetView . getUint32 ( readIndex , true )
112117 readIndex += 4
113118
114- let prompt , workflow
119+ const result : ComfyMetadata = { }
115120 for ( let i = 0 ; i < userCommentListLength ; i ++ ) {
116121 // Bounds check: ensure comment length field is within packet
117122 if ( readIndex + 4 > packetData . length ) break
@@ -135,21 +140,21 @@ function parseVorbisComments(packetData: Uint8Array, decoder: TextDecoder) {
135140 const value = text . substring ( separatorIndex + 1 )
136141 if ( key === 'prompt' ) {
137142 try {
138- prompt = JSON . parse ( value )
143+ result . prompt = JSON . parse ( value )
139144 } catch ( e ) {
140145 console . warn ( 'Ogg metadata parsing failed for prompt:' , e )
141146 }
142147 } else if ( key === 'workflow' ) {
143148 try {
144- workflow = JSON . parse ( value )
149+ result . workflow = JSON . parse ( value )
145150 } catch ( e ) {
146151 console . warn ( 'Ogg metadata parsing failed for workflow:' , e )
147152 }
148153 }
149154 }
150155
151- if ( prompt !== undefined && workflow !== undefined ) break
156+ if ( result . prompt !== undefined && result . workflow !== undefined ) break
152157 }
153158
154- return { prompt , workflow }
159+ return result
155160}
0 commit comments