# File Thumbnails
## Introduction
When sending media, it is often helpful for users when a thumbnail can be shown before the
actual file is finished downloading.
XMPP already has a protocol for specifying thumbails, [Jingle Content Thumbnails](https://xmpp.org/extensions/xep-0264.html).
However, this protocol requires that the thumbnail is a base64-encoded image published using
[Bits of Binary](https://xmpp.org/extensions/xep-0231.html). This prevents clients from implementing newer technologies, such as
[Blurhash](https://github.com/woltapp/blurhash).
This document specifies are more general and extensible element for specifiying thumbnails.
## Usage
```xml
LEHV6nWB2yk8pyoJadR*.7kCMdnj
```
In this example, the thumbnail is specified of type `proto:urn:xmpp:file-thumbnails:0:blurhash`, which means that a supporting
client should decode the `` element using the [Blurhash](https://github.com/woltapp/blurhash) algorithm.
Other extensions may define similar types. Note that the content of the `` element
is dependent on the type specified in the `` element.
### Thumbnail Types
#### Blurhash
If a sender specifies the type to be of `blurhash`, then the `` element must contain the
image data as specified by the [Blurhash](https://github.com/woltapp/blurhash) algorithm. Care should be taken to prevent
the blurhash data from growing to large in order to prevent hitting the stanza size limit.
```xml
LEHV6nWB2yk8pyoJadR*.7kCMdnj
```
#### Jingle Content Thumbnail Compatability
In order to enable a pseudo-interoperability with [Jingle Content Thumbnails](https://xmpp.org/extensions/xep-0264.html), a type
`base64-bob` is defined.
If a sender specified the type to be of `base64-bob`, then the ``
element must contain exactly one `` element. The attributes of the element are the same
as the `` element specified in [Jingle Content Thumbnails](https://xmpp.org/extensions/xep-0264.html).
```xml
```
This allows clients that already support [Jingle Content Thumbnails](https://xmpp.org/extensions/xep-0264.html) to reuse
the same logic they use for retrieving thumbnail data.
#### Base64 Data
If a sender specified the type to be of `base64`, then the `` element must
contain exactly one `` element. The element must posess an `media-type` attribute, whose value
contains the mime type of the thumbnail data, while the inner text of the element contains the base64-encoded
binary thumbnail data.
```xml
[base64 data]
```
Note that this thumbnail type is essentially the same as the `base64-bob` type, but allowing the thumbnail to be used even if
the sender is not available on a server that does not cache [Bits of Binary](https://xmpp.org/extensions/xep-0231.html) data or has it otherwise not available.
If using this thumbnail type, care has to be taken in order to not hit any existing stanza size limits.
## Usage Example with Stateless Inline Media Sharing
NOTE: This example is taken from [Stateless Inline Media Sharing](https://xmpp.org/extensions/xep-0385.html) and modified for this protocol.
```xml
Look at the nice view from the summit.
image/jpeg
summit.jpg
3032449
2XarmwTlNxDAMkvymloX3S5+VbylNrJt/l5QyPa+YoU=
2AfMGH8O7UNPTvUVAM9aK13mpCY=
Photo from the summit.
LEHV6nWB2yk8pyoJadR*.7kCMdnj
```
## Security Considerations
The same considerations apply as specified by [Jingle Content Thumbnails](https://xmpp.org/extensions/xep-0264.html).
## Info
| Key | Value |
| --- | --- |
| Author | PapaTutuWawa |
| Version | 0.0.3 |