Naming and sizes

The grammar

A URL is https://loremfile.dev/{format}/{name}. The format matches ^[a-z0-9]+$. The name is lowercase kebab-case followed by one or more extensions: ^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+)+$. There are no capitals, spaces or underscores.

A name is a list of tokens separated by hyphens, in order: a variant, then a dimension, duration, count or size, then qualifiers. jpg/progressive-1920x1080.jpg is a variant and a dimension; mp4/no-audio-720p-5s.mp4 adds a duration; csv/people-10-utf8-bom.csv is a dataset, a count and an encoding qualifier.

Sizes: kb is not kib

Size tokens are explicit about their units. kb, mb and gb are decimal, so bin/1mb.bin is exactly 1,000,000 bytes. kib, mib and gib are binary, so bin/1mib.bin is exactly 1,048,576 bytes. Upload limits are written both ways in the wild, and a limit tested with the wrong unit passes files it should refuse.

Boundary files sit one byte either side of a limit: bin/10mib-plus-1.bin is 10,485,761 bytes and bin/1mb-minus-1.bin is 999,999 bytes. Test the edge of a limit, not its middle.

How exact is a size?

The manifest's size_class says. exact means the byte count is the number in the name, and boundary means it is exactly one byte above or below it, as the plus-1 and minus-1 files are. approx means the file was fitted to within 5% of it, as csv/1mb.csv is, because a CSV cannot end halfway through a row. free means the name describes the content and the size simply follows from it.

HLS

HLS is the one nested case: hls/{variant}/index.m3u8 and its numbered segments beside it, such as hls/720p-10s/seg-000.ts.

Names stay put

The bytes at a published name do not change. A fix is a new name, and the old entry points to its replacement. In rare cases a file can be withdrawn; see the terms of use.