TileYolo
Serve GeoTIFFs as an XYZ tile API with zero configuration.
Drop your TIFFs into subfolders by style and run tileyolo — it handles everything else.
Install
Or use as a library:
Usage
Dependencies
- GDAL
Cargo
cdinto your data directory (parent of style subfolders).- Run:
- Point your XYZ-capable client (browser, QGIS, Leaflet, etc.) at:
http://localhost:8000/tiles/{layer}/{z}/{x}/{y}{layer}is the TIFF filename (without extension).
TileYolo will auto-detect styles (style.txt or built-in palettes), handle no-data values, and serve tiles on port 8000.
Docker
To run with the docker image on port 8000 and mapping the local folder ./data,
use the command:
docker run -v ./data:/app/data -p 8000:8000 tileyolo
Styles & Folder Structure
Organize your GeoTIFFs into style-specific subfolders:
./data/
├── default/
│ ├── layer1.tif
│ ├── layer2.tif
│ └── style.txt # QGIS-exported colour stops
├── viridis/
│ ├── layer3.tif
│ └── layer4.tif # uses built-in viridis palette
└── grayscale/
└── layer5.tif # no style.txt → linear grayscale
- Custom styles: Folders with a
style.txt(QGIS export) use those exact colour stops. - Built-in palettes: Folders named
viridis,magma,plasma,inferno,turbo,cubehelix_default,rainbow,spectral, orsinebowapply the corresponding gradient. - Grayscale fallback: Other folders without any style file render in linear grayscale.
Sample Output
Configuration
TileYolo has minimal options:
QGIS style.txt Example
# QGIS Generated Colour Map Export File
INTERPOLATION:INTERPOLATED
0,215,25,28,255,0
100,253,174,97,255,100
200,255,255,191,255,200
300,171,221,164,255,300
400,43,131,186,255,400
See QGIS Raster Properties → Symbology → Colour Ramp for export instructions.
Why TileYolo?
I needed a zero‑config, lightweight XYZ tile server for GeoTIFFs. TileYolo does just that: drag, drop, and go.
Roadmap
- Speed up startup with caching
- Tile caching for performance
- S3
and COGsupport Additional built-in palettes- Contributions welcome
Caveats
- Only band 1 is served
- Output CRS is EPSG:3857 (Web Mercator)
- Input TIFFs must define a CRS
- Tested on small to medium rasters; large rasters may require more resources
- Reprojection using nearest neighbour