Synapse implementation-specific details for the media repository
The media repository
All media in Matrix can be identified by a unique MXC URI, consisting of a server name and media ID:
mxc://<server-name>/<media-id>
Synapse generates 24 character media IDs for content uploaded by local users. These media IDs consist of upper and lowercase letters and are case-sensitive. Other homeserver implementations may generate media IDs differently.
Local media is recorded in the local_media_repository
table, which includes
metadata such as MIME types, upload times and file sizes.
Note that this table is shared by the URL cache, which has a different media ID
scheme.
A file with media ID aabbcccccccccccccccccccc
and its 128x96
image/jpeg
thumbnail, created by scaling, would be stored at:
local_content/aa/bb/cccccccccccccccccccc
local_thumbnails/aa/bb/cccccccccccccccccccc/128-96-image-jpeg-scale
When media from a remote homeserver is requested from Synapse, it is assigned
a local filesystem_id
, with the same format as locally-generated media IDs,
as described above.
A record of remote media is stored in the remote_media_cache
table, which
can be used to map remote MXC URIs (server names and media IDs) to local
filesystem_id
s.
A file from matrix.org
with filesystem_id
aabbcccccccccccccccccccc
and its
128x96
image/jpeg
thumbnail, created by scaling, would be stored at:
remote_content/matrix.org/aa/bb/cccccccccccccccccccc
remote_thumbnail/matrix.org/aa/bb/cccccccccccccccccccc/128-96-image-jpeg-scale
Older thumbnails may omit the thumbnailing method:
remote_thumbnail/matrix.org/aa/bb/cccccccccccccccccccc/128-96-image-jpeg
Note that remote_thumbnail/
does not have an s
.
See URL Previews for documentation on the URL preview process.
When generating previews for URLs, Synapse may download and cache various
resources, including images. These resources are assigned temporary media IDs
of the form yyyy-mm-dd_aaaaaaaaaaaaaaaa
, where yyyy-mm-dd
is the current
date and aaaaaaaaaaaaaaaa
is a random sequence of 16 case-sensitive letters.
The metadata for these cached resources is stored in the
local_media_repository
and local_media_repository_url_cache
tables.
Resources for URL previews are deleted after a few days.
The file with media ID yyyy-mm-dd_aaaaaaaaaaaaaaaa
and its 128x96
image/jpeg
thumbnail, created by scaling, would be stored at:
url_cache/yyyy-mm-dd/aaaaaaaaaaaaaaaa
url_cache_thumbnails/yyyy-mm-dd/aaaaaaaaaaaaaaaa/128-96-image-jpeg-scale