# Vorbis Comment

VorbisComment is the tagging format used in Ogg and FLAC container formats. In mutagen this corresponds to the tags in all subclasses of `mutagen.ogg.OggFileType` and the `mutagen.flac.FLAC` class.

## Embedded Images

The most common way to include images in VorbisComment (except in FLAC) is to store a base64 encoded FLAC Picture block with the key `metadata_block_picture` (see https://wiki.xiph.org/VorbisComment#Cover_art). See the following code example on how to read and write images this way:

    # READING / SAVING
    import base64
    from mutagen.oggvorbis import OggVorbis
    from mutagen.flac import Picture, error as FLACError

    file_ = OggVorbis("somefile.ogg")

    for b64_data in file_.get("metadata_block_picture", []):
        try:
            data = base64.b64decode(b64_data)
        except (TypeError, ValueError):
            continue

        try:
            picture = Picture(data)
        except FLACError:
            continue

        extensions = {
            "image/jpeg": "jpg",
            "image/png": "png",
            "image/gif": "gif",
        }
        ext = extensions.get(picture.mime, "jpg")

        with open("image.%s" % ext, "wb") as h:
            h.write(picture.data)

    # WRITING
    import base64
    from mutagen.oggvorbis import OggVorbis
    from mutagen.flac import Picture

    file_ = OggVorbis("somefile.ogg")

    with open("image.jpeg", "rb") as h:
        data = h.read()

    picture = Picture()
    picture.data = data
    picture.type = 17
    picture.desc = u"A bright coloured fish"
    picture.mime = u"image/jpeg"
    picture.width = 100
    picture.height = 100
    picture.depth = 24

    picture_data = picture.write()
    encoded_data = base64.b64encode(picture_data)
    vcomment_value = encoded_data.decode("ascii")

    file_["metadata_block_picture"] = [vcomment_value]
    file_.save()

Some programs also write base64 encoded image data directly into the `coverart` field and sometimes a corresponding mime type into the `coverartmime` field:

    # READING
    import base64
    import itertools
    from mutagen.oggvorbis import OggVorbis

    file_ = OggVorbis("somefile.ogg")

    values = file_.get("coverart", [])
    mimes = file_.get("coverartmime", [])
    for value, mime in itertools.izip_longest(values, mimes, fillvalue=u""):
        try:
            image_data = base64.b64decode(value.encode("ascii"))
        except (TypeError, ValueError):
            continue

        print(mime)
        print(image_data)

FLAC supports images directly, see `mutagen.flac.Picture`, `mutagen.flac.FLAC.pictures`, `mutagen.flac.FLAC.add_picture()` and `mutagen.flac.FLAC.clear_pictures()`.