^ What's the point?
^ Description
^ File format binary specification

Download :: Top
Universal File Format Editor

Universal File Format Editor is a free and powerful editor for the new .UFF Universal File Format files.

Features:
  • Create and edit .uff files
  • Add and extract content
  • Add and edit advanced meta-data with cover arts support
  • Meta-data info is automatically created from supported file formats when adding files
  • Advanced search for .uff files
  • Edit frame content
  • Compress and decompress frames
  • Encrypt and decrypt frames
  • Full unicode and UI DPI scaling support
Universal File Format Editor is a completely free application. If you use this program regularly and wish to support my work please consider registering and support continuous development.


Universal File Format Description

The concept of Universal File Format is the structured implementation and maximum freedom of the content frames.
The format is similar to MP4 atom system but greatly improved and tends to be universal.
Compression, encryption and error checking options are natively implemented.
Tagging system is frames/structured and also universal, meant to replace all current tagging methods (like ID3v2, MP4, EXIF, etc.).

Official frames:

A file in Universal File Format is an ENTITY frame with a DATA sub-frame that holds the (binary) data that corresponds to a file.
The ENTITY frame itself holds the title of the frame's content, this is usually the original file name without the file extension.
Recommended sub-frames of an ENTITY frame:
  • GUID: an ID for the ENTITY. This is a highly recommended frame as it makes simple to find a particular ENTITY frame just by scanning all the frames.
  • MIMETYPE: the type of the DATA content, this is an important frame.
  • FILENAME: this is usually the original file name. When extracting "files" from an .uff package the extracted files have their name with this value.
  • CREATIONTIME: the file's creation time in Windows FILETIME format. When adding files to an .uff package this is usually the original file's creation date-time.
  • MODIFIEDTIME: the file's last modified time in Windows FILETIME format. When adding files to an .uff package this is usually the original file's modified date-time.
ENTITY frames can be placed also inside FOLDER frames. A FOLDER frame has the same functionality as eg. folders in Windows formatted drives.
The FOLDER frame's value is the folder's name.
Recommended sub-frames of a FOLDER frame:
  • GUID: an ID for the FOLDER. This is a highly recommended frame as it makes simple to find a particular FOLDER frame just by scanning all the frames.
All frames can have a METADATA sub-frame that corresponds to eg. an MP3 ID3v2, MP4 or MKV tags. Usually METADATA sub-frame should be added to ENTITY frames but any frame can have a METADATA sub-frame, eg. a FOLDER frame can have a METADATA sub-frame to describe the FOLDER contents.
The main advantage of the METADATA frame is that it is structured. For example there can be an ACTORS sub-frame with PERSON sub-frames that have a CHARACTER sub-frame.
The METADATA frame is trying to cover all audio and video tagging formats used nowadays and improving the functionality.
Cover arts are supported inside a COVER_ARTS METADATA sub-frame as ENTITY frames. These cover art ENTITY frames can also have a METADATA sub-frame (for eg. a description of the cover art, etc.).
Optionally add a 'PADDING' binary frame as the last METADATA sub-frame to support simple expanding the METADATA frames if needed (usually 4KB).

For developers:

There is a complete solution for managing .uff files/streams in Delphi called Storage Stream Library.
The package contains a COM class too, a bit simpler and with less functionality but should be usable for managing .uff files in languages that support COM.


File format binary specification

File/stream header:
  • 4 bytes '3SSF'
  • 4 bytes 'UFFS'
  • 1 byte MajorVersion
  • 1 byte MinorVersion
  • 8 bytes flags, 64 flag bits from right to left:
    • FrameNameEncoding:
      • 1 ssfneUTF8
      • 0 ssfneUnicode UTF16
    • CRC:
      • 1 CRC is used
      • 0 CRC not used
    • GlobalEncryptionID:
      • 1 GlobalEncryptionID used (value follows stream header)
      • 0 GlobalEncryptionID not used
    • GlobalCompressionID:
      • 1 GlobalCompressionID used (value follows stream header)
      • 0 GlobalCompressionID not used
  • 8 bytes stream size value -26 bytes (stream version 4, adding 26 bytes to this value should equal the stream/file size)
  • 4 bytes 'CRC' value if set in flags
  • 16 bytes GUID if 'GlobalEncryptionID' is set in flags
  • 16 bytes GUID if 'GlobalCompressionID' is set in flags
Frame header:
  • Variable size Frame ID with terminating 0: if 'ssfneUnicode' flag is 0 in header a unicode UTF16 string (2 terminating zero bytes), if flag is 1 UTF8 string (1 terminating zero byte)
  • 8 bytes frame size including sub-frames sizes
  • 8 bytes frame header flags, 64 flag bits from right to left:
    • DataLengthIndicator:
      • 1 DataLengthIndicator used (value follows frame header)
      • 0 DataLengthIndicator not used
    • ParentFrame:
      • 1 this frame is a parent frame and has sub-frames
      • 0 this frame is not a parent frame
    • Encrypted:
      • 1 this frame is encrypted
      • 0 this frame is not encrypted
    • Compressed:
      • 1 this frame is compressed with zlib compression
      • 0 this frame is not compressed
    • GroupingIdentity:
      • 1 this frame has grouping identity (value follows frame header)
      • 0 this frame has no grouping value
    • CRCPresent:
      • 1 this frame has CRC (value follows frame header)
      • 0 this frame has no CRC value
    • Important:
      • 1 this frame is important
      • 0 this frame is not important
    • CompressedThenEncrypted:
      • 1 this frame is first compressed then encrypted
      • 0 this frame is not first compressed then encrypted
    • AdvancedCompression:
      • 1 this frame is compressed with advanced compression (frame should have a sub-frame with ID "COMPRESSION_MODE" with type ssftGUID that indicates what type of compression is used for the frame)
      • 0 this frame is not compressed with advanced compression
    • GlobalEncryption:
      • 1 this frame uses global encryption
      • 0 this frame does not use lobal encryption
    • GlobalCompression:
      • 1 this frame uses global compression
      • 0 this frame does not use global compression
  • 1 byte 'FrameType'
  • 8 bytes 'GroupIdentifier' if 'GroupingIdentity' set in frame header flags
  • 16 bytes GUID if 'Encrypted' set in frame header flags and 'GlobalEncryption' is not set
  • 16 bytes GUID if 'Compressed' and 'AdvancedCompression' set in frame header flags and 'GlobalCompression' is not set
  • 8 bytes if 'DataLengthIndicator' is set in frame header flags
  • 4 bytes CRC value if 'CRC' is set in frame header flags
  • 8 bytes total frame size (including sub-frames) if 'ParentFrame' is set in frame header flags
  • Variable data length follows that is the actual frame content, the size is determined by the specified frame size minus the header and extra flags data. If frame has the 'ParentFrame' flag set additional sub-frames follow if not next frame follows.

[Top]