Release Notes¶
0.25.0 (2025-11-07)¶
Misc¶
- remove
/boundsendpoints breaking change - update docker image to python:3.13
- switch to
uvfor development - switch to
hatchfor python package build-system - remove
titilermetapackage breaking change - bump minimum python version to 3.11
titiler.xarray¶
- add
opener_optionsarg totitiler.xarray.io.Readerto allow users to pass args through to a custom opener function ([#1248(developmentseed/titiler!1248)]) - add
obstoreandzarr-pythonas dependency and addopen_zarrdataset opener - default to
titiler.xarray.io.open_zarrfortitiler.xarray.io.Reader.dataset_openerattribute - rename
titiler.xarray.io.xarray_open_datasettofs_open_dataset - add
FsReaderwhich usefs_open_datasetasdataset_opener - create offical application
titiler.xarray.main:app
titiler.mosaic¶
- move
/and/validateto aMosaicJSONExtension
0.24.2 (2025-10-16)¶
titiler.core¶
- update
TileJSONspec from 2.2.0 to 3.0.0 - fix OpenAPI spec for
histogram_rangeexamples (@guillemc23, developmentseed/titiler!1239)
0.24.1 (2025-10-10)¶
- add
grayscaleandbitonalalgorithms - add
transformandcrsfortiffoutputs
0.24.0 (2025-09-23)¶
Misc¶
- add attribution in
/tilejson.jsonresponse. Controled withTITILER_DEFAULT_ATTRIBUTIONenvironment variable. - enable
jinja2.autoescapefor HTML/XML templates (ref: jinja.palletsprojects.com/en/stable/api/#autoescaping) - remove python 3.9 support
titiler.extension¶
- update rio-stac requirement
titiler.application¶
- add
descriptioninApiSettings
titiler.core¶
- delete
titiler.core.templatingsubmodule breaking change - move
create_html_responsefunction totitiler.core.utilssubmodule - move all HTML templates in
titiler/core/templatesdirectory breaking change - add HTML responses for tilesets, tilematrixsets, algorithms and colormaps endpoints
- rename response model
ColorMapsList->ColorMapListand change it's attibutes tocolormapsbreaking change - add
templatesin theBaseFactoryclass definition
0.23.1 (2025-08-27)¶
titiler.core¶
- add
sumalgorithm
0.23.0 (2025-08-26)¶
titiler.core¶
- add OpenTelemetry instrumentation to the tiler factory classes
- add
OGC Maps APIsupport (/mapendpoint)
titiler.application¶
- add OpenTelemetry tracing to the FastAPI application
- update
starlette-cramjamrequirement to>=0.4,<0.6
titiler.xarray¶
- add
add_previewin factory attribute (default toFalse)
Misc¶
- Add otel-collector and jaeger to the docker network
- fix layer's bounds for non-wgs84 CRS in WMTS document
- switch from bitnami to official python:3.12 docker image
0.22.4 (2025-07-02)¶
- fix
relvalues for tiling scheme link (OGC Tiles specification)
0.22.3 (2025-06-17)¶
titiler.xarray¶
- use dimension's
dtypeto cast user selection
0.22.2 (2025-06-02)¶
titiler.application¶
- remove unused templates
titiler.xarray¶
- fix
xarray_open_datasetfor cloud hosted files
0.22.1 (2025-05-13)¶
titiler.xarray¶
- update
readerandpath_dependencytype informations
0.22.0 (2025-05-06)¶
Misc¶
- rename
/mapendpoint to/map.htmlbreaking change - add
nameattribute toBaseFactoryto define endpoint'soperationId - add
operationIdon all endpoints - add
/preview/{width}x{height}.{format}endpoints - update rio-tiler requirement to
>=7.7,<8.0 - allow users to pass only one of
widthorheighsize parameters forpreview,partandfeaturerequests - use
minZoominstead ofminNativeZoomin the/map.htmlhtml template - update geojson-pydantic requirement to
>=1.1.2,<3.0and change featureCollection iteration
titiler.application¶
- fix Landing page links when app is behind proxy
- use
titiler.coretemplates for Landing page - enable JSON and HTML rendering of the
/landing page - add OGC Common
/conformanceendpoint
titiler.core¶
-
add
conforms_toattribute toBaseFactoryto indicate which conformance the TileFactory implement -
remove deprecated
ColorFormulaParamsandRescalingParamsdependencies breaking change -
remove deprecated
DefaultDependencydict-unpacking feature breaking change -
add
min,max,mean,median,stdandvaralgorithms -
Fix TerrainRGB algorithm and param user-controlled nodata-height (@jo-chemla, developmentseed/titiler!1116)
-
add
output_minandoutput_maxmetadata attributes toslopealgorithm (@tayden, developmentseed/titiler!1089) -
add point value query on right-click to map viewer (@hrodmn, developmentseed/titiler!1100)
-
refactor middlewares to use python's dataclasses
-
update
LoggerMiddlewareoutput format and options breaking changefrom fastapi import FastAPI from titiler.core.middlewares import LoggerMiddleware # before app = FastAPI() app.add_middlewares(LoggerMiddleware, querystrings=True, headers=True) # now app = FastAPI() app.add_middlewares( LoggerMiddleware, # custom Logger logger=logging.getLogger("mytiler.requests"), # default to logging.getLogger("titiler.requests") )Note: logger needs then to be
configuredat runtime. e.g :from logging import config config.dictConfig( { "version": 1, "disable_existing_loggers": False, "formatters": { "detailed": { "format": "%(asctime)s - %(levelname)s - %(name)s - %(message)s" }, "request": { "format": ( "%(asctime)s - %(levelname)s - %(name)s - %(message)s " + json.dumps( { k: f"%({k})s" for k in [ "method", "referer", "origin", "route", "path", "path_params", "query_params", "headers", ] } ) ), }, }, "handlers": { "console_request": { "class": "logging.StreamHandler", "level": "DEBUG", "formatter": "request", "stream": "ext://sys.stdout", }, }, "loggers": { "mytiler.requests": { "level": "INFO", "handlers": ["console_request"], "propagate": False, }, }, } )
titiler.extensions¶
- update
wmsextension to remove usage ofColorFormulaParamsandRescalingParamsdependencies - update
renderextension to better validate query-parameters from render expression
titiler.xarray¶
- update
rio-tilerrequirement to>=7.6.1 -
add
selandsel_methodoptions to select dimension* add support for# before https://.../0/0/0.png?url=dataset.zarr&drop_dim=time=2023-01-01 # now https://.../0/0/0.png?url=dataset.zarr&sel=time=2023-01-01 # method https://.../0/0/0.png?url=dataset.zarr&sel=time=2023-01-02&sel_method=nearest # Can use `slice` when providing 2 values https://.../0/0/0.png?url=dataset.zarr&sel=time=2023-01-01&time=2023-01-31bidxparameter * removefirsttime dim selection breaking change * add support for 3D dataset * removedrop_dimoption breaking change * removedatetimeoption breaking change * deprecateVariablesExtensionextension * addDatasetMetadataExtensionextension (/dataset/keys,/dataset/and/dataset/dictendpoints)
titiler.mosaic¶
- add
/bboxprefix to/{minx},{miny},{maxx},{maxy}/assetsendpoint ->/bbox/{minx},{miny},{maxx},{maxy}/assetsbreaking change - add
/pointprefix to{lon},{lat}/assetsendpoint ->/point/{lon},{lat}/assetsbreaking change - add
/tilesprefix to/{tileMatrixSetId}/{z}/{x}/{y}/assetsendpoint ->/tiles/{tileMatrixSetId}/{z}/{x}/{y}/assetsbreaking change - add
assets_accessor_dependencydependency to the MosaicTileFactory to pass options to the backend'sget_assetsmethod.
0.21.1 (2025-01-29)¶
titiler.core¶
- add
slopealgorithm (@tayden, developmentseed/titiler!1088)
titiler.xarray¶
- Support Zarr-Python >=3 (author @maxrjones, developmentseed/titiler!1082)
0.21.0 (2025-01-24)¶
Misc¶
-
use
URNstyle CRS notation in WMTS document -
Unify Docker images (deprecate
titiler-uvicorn)# Uvicorn # before docker run \ --platform=linux/amd64 \ -p 8000:8000 \ --env PORT=8000 \ --rm -it ghcr.io/developmentseed/titiler-uvicorn:latest # now docker run \ --platform=linux/amd64 \ -p 8000:8000 \ --rm -it ghcr.io/developmentseed/titiler:latest \ uvicorn titiler.application.main:app --host 0.0.0.0 --port 8000 --workers 1 # Gunicorn # before docker run \ --platform=linux/amd64 \ -p 8000:8000 \ --env PORT=8000 \ --rm -it ghcr.io/developmentseed/titiler:latest # now docker run \ --platform=linux/amd64 \ -p 8000:8000 \ --rm -it ghcr.io/developmentseed/titiler:latest \ gunicorn -k uvicorn.workers.UvicornWorker titiler.application.main:app --bind 0.0.0.0:8000 --workers 1
0.20.1 (2025-01-09)¶
titiler.xarray¶
- pin python
zarrto>2,<3.0to avoid zarr 3.0 breaking changes
0.20.0 (2025-01-07)¶
titiler.core¶
- add layer control to map viewer template (author @hrodmn, developmentseed/titiler!1051)
- improve query string handling in LowerCaseQueryStringMiddleware using urlencode (author @pratapvardhan, developmentseed/titiler!1050)
- add
titiler.core.utils.bounds_to_geometryand reduce code duplication in factories (author @PratapVardhan, developmentseed/titiler!1047) - simplify image format dtype validation in
render_image(author @PratapVardhan, developmentseed/titiler!1046) - remove
rescale_dependencyandcolor_formula_dependencyattributes inTilerFactoryclass breaking change - move
rescaleandcolor_formulaQueryParameters dependencies inImageRenderingParamsclass breaking change - handle image rescaling and color_formula within
titiler.core.utils.render_imagefunction breaking change - add
render_func: Callable[..., Tuple[bytes, str]] = render_imageattribute inTilerFactoryclass - add
castToInt,Floor,Ceilalgorithms
titiler.application¶
- update
/healthzendpoint to return dependencies versions (titiler, rasterio, gdal, ...) (author @scottyhq, developmentseed/titiler!1056) - migrate
templates/index.htmlto bootstrap5, remove unused css, reuse bs classes (author @PratapVardhan, developmentseed/titiler!1048)
titiler.mosaic¶
- remove
rescale_dependencyandcolor_formula_dependencyattributes inMosaicTilerFactoryclass breaking change - add
render_func: Callable[..., Tuple[bytes, str]] = render_imageattribute inMosaicTilerFactoryclass breaking change
titiler.extensions¶
- use
factory.render_funcas render function inwmsExtensionendpoints - add
stacRenderExtensionwhich adds two endpoints:/renders(lists all renders) and/renders/<render_id>(render metadata and links) (author @alekzvik, developmentseed/titiler!1038)
Misc¶
- Updated WMTS Capabilities template to avoid inserting extra new lines (author @AndrewAnnex, developmentseed/titiler!1052).
- Updated WMTS endpoint in titiler.mosaic and titiler.core to return layer bounds in coordinate ordering matching CRS order if WGS84 is not used (author @AndrewAnnex, developmentseed/titiler!1052).
- Remove
python3.8support (author @pratapvardhan, developmentseed/titiler!1058) - Add
python3.13support (author @pratapvardhan, developmentseed/titiler!1058)
0.19.3 (2025-01-09)¶
titiler.xarray¶
- pin python zarr to >2,<3.0 to avoid zarr 3.0 breaking changes [Backported from 0.20.1]
0.19.2 (2024-11-28)¶
Misc¶
-
drop python 3.8 and add python 3.13 support (author @pratapvardhan, developmentseed/titiler!1058)
-
Update package build backend from
pdm-pep517topdm-backend(backend.pdm-project.org/#migrate-from-pdm-pep517) -
Update namespace package from using
.to-as separator to comply with PEP-625 (peps.python.org/pep-0625/)
titiler.mosaic¶
- Define variable (
MOSAIC_CONCURRENCYandMOSAIC_STRICT_ZOOM) from env-variable outside endpoint code
0.19.1 (2024-11-14)¶
- Add
titilerlinks in Map attributions
0.19.0 (2024-11-07)¶
Misc¶
-
Remove default
WebMercatorQuadtile matrix set in/tiles,/tilesjson.json,/mapand/WMTSCapabilities.xmlendpoints breaking change# Before /tiles/{z}/{x}/{y} /tilejson.json /map /WMTSCapabilities.xml # Now /tiles/WebMercatorQuad/{z}/{x}/{y} /WebMercatorQuad/tilejson.json /WebMercatorQuad/map /WebMercatorQuad/WMTSCapabilities.xml -
Use
@attrs.defineinstead of dataclass for factories breaking change - Use
@attrs.defineinstead of dataclass for factory extensions breaking change - Handle
numpytypes in JSON/GeoJSON response - In the
map.htmltemplate, use the tilejson'sminzoomandmaxzoomto populateminNativeZoomandmaxNativeZoomparameters in leaflettileLayerinstead ofminZoomandmaxZoom
titiler.core¶
-
Update
rio-tilerdependency to>=7.0,<8.0 -
Update
geojson-pydanticdependency to>=1.1.2,<2.0which better handle antimeridian crossing dataset -
handle
antimeridiancrossing bounds in/info.geojsonendpoints (returning MultiPolygon instead of Polygon) -
Improve XSS security for HTML templates (author @jcary741, developmentseed/titiler!953)
-
Remove all default values to the dependencies breaking change
DatasetParams.unscale:False->None(default toFalsein rio-tiler)DatasetParams.resampling_method:nearest->None(default tonearestin rio-tiler)DatasetParams.reproject_method:nearest->None(default tonearestin rio-tiler)ImageRenderingParams.add_mask:True->None(default toTruein rio-tiler)StatisticsParams.categorical:False->None(default toFalsein rio-tiler)
-
Add
as_dict(exclude_none=True/False)method to theDefaultDependencyclass.from typing import Optional from titiler.core.dependencies import DefaultDependency from dataclasses import dataclass @dataclass class Deps(DefaultDependency): value: Optional[int] = None print({**Deps().__dict__.items()}) >> {'value': None} Deps().as_dict() # `exclude_none` defaults to True >> {} Deps(value=1).as_dict() >> {'value': 1} -
Fix Hillshade algorithm (bad
azimuthangle) -
Set default
azimuthandaltitudeangles to 45º for the Hillshade algorithm breaking change -
Use
.as_dict()method when passing option to rio-tiler Reader's methods to avoid parameter conflicts when using custom Readers. -
Rename
BaseTilerFactorytoBaseFactorybreaking change -
Remove useless attribute in
BaseFactory(and moved them toTilerFactory) breaking change -
Add
crsoption to/boundsendpoints to enable geographic_crs selection by the user -
/boundsendpoints now return acrs: strattribute in the response -
update
wmts.xmltemplate to support multiple layers -
re-order endpoints parameters
-
avoid
lat/lonoverflow inmapviewer -
add OGC Tiles
/tilesand/tiles/{tileMatrixSet}endpoints -
add
gifmedia type -
/pointendpoint returned masked values (Noneis nodata)
titiler.mosaic¶
-
Rename
readerattribute tobackendinMosaicTilerFactorybreaking change -
Add
crsoption to/boundsendpoints to enable geographic_crs selection by the user -
/boundsendpoints now return acrs: strattribute in the response -
Update
cogeo-mosaicdependency to>=8.0,<9.0 -
re-order endpoints parameters
-
add OGC Tiles
/tilesand/tiles/{tileMatrixSet}endpoints -
/pointendpoint returned masked values (Noneis nodata)
titiler.extensions¶
-
Encode URL for cog_viewer and stac_viewer (author @guillemc23, developmentseed/titiler!961)
-
Add links for render parameters and
/maplink to viewer dashboard (author @hrodmn, developmentseed/titiler!987) -
Update viewers to use
/info.geojsonendpoint instead of/info
0.18.10 (2024-10-17)¶
titiler.application¶
- update
starlette-cramjamdependency and set compression-level default to6
0.18.9 (2024-09-23)¶
- fix release 0.18.8
0.18.8 (2024-09-23)¶
titiler.extensions¶
- Add links for render parameters and /map link to viewer dashboard (author @hrodmn, developmentseed/titiler!987)
0.18.7 (2024-09-19)¶
- fix Hillshade algorithm (bad
azimuthangle) (developmentseed/titiler!985) [Backported] - Encode URL for cog_viewer and stac_viewer (author @guillemc23, developmentseed/titiler!961) [Backported]
- Improve XSS security for HTML templates (author @jcary741, developmentseed/titiler!953) [Backported]
0.18.6 (2024-08-27)¶
- Switch back to
fastapiinstead offastapi-slimand use>=0.109.0version
0.18.5 (2024-07-03)¶
- Set version requirement for FastAPI to
>=0.111.0
0.18.4 (2024-06-26)¶
- fix Tiles URL encoding for WMTSCapabilities XML document
0.18.3 (2024-05-20)¶
- fix
WMTSCapabilities.xmlresponse for ArcMap compatibility- replace
Cloud Optimized GeoTIFFwith dataset URL orTiTilerfor the ows:ServiceIdentification title - replace
cogeowithDatasetfor thelayerows:Identifier
- replace
0.18.2 (2024-05-07)¶
- move to
fastapi-slimto avoid unwanted dependencies (author @n8sty, developmentseed/titiler!815)
0.18.1 (2024-04-12)¶
titiler.core¶
- fix
TerrainRGBalgorithm name (author @JinIgarashi, developmentseed/titiler!804) - add more tests for
RescalingParamsandHistogramParamsdependencies - make sure to return empty content for
204Error code
0.18.0 (2024-03-22)¶
titiler.core¶
- Add
ColorMapFactoryto create colorMap metadata endpoints (developmentseed/titiler!796) -
Deprecation remove default
WebMercatorQuadtile matrix set in/tiles,/tilesjson.json,/mapand/WMTSCapabilities.xmlendpoints (developmentseed/titiler!802)# Before /tiles/{z}/{x}/{y} /tilejson.json /map /WMTSCapabilities.xml # Now /tiles/WebMercatorQuad/{z}/{x}/{y} /WebMercatorQuad/tilejson.json /WebMercatorQuad/map /WebMercatorQuad/WMTSCapabilities.xml -
Deprecation
default_tmsattribute inBaseTilerFactory(becausetileMatrixSetIdis now required in endpoints).
titiler.mosaic¶
-
Deprecation remove default
WebMercatorQuadtile matrix set in/tiles,/tilesjson.json,/mapand/WMTSCapabilities.xmlendpoints (developmentseed/titiler!802)# Before /tiles/{z}/{x}/{y} /tilejson.json /map /WMTSCapabilities.xml # Now /tiles/WebMercatorQuad/{z}/{x}/{y} /WebMercatorQuad/tilejson.json /WebMercatorQuad/map /WebMercatorQuad/WMTSCapabilities.xml -
Deprecation
default_tmsattribute inMosaicTilerFactory(becausetileMatrixSetIdis now required in endpoints).
Misc¶
- add
requestas first argument inTemplateResponseto adapt with latest starlette version
0.17.3 (2024-03-21)¶
titiler.application¶
- Add
extra="ignore"optionApiSettingsto fix pydantic issue when using.envfile (author @imanshafiei540, developmentseed/titiler!800)
0.17.2 (2024-03-15)¶
titiler.core¶
- fix OpenAPI metadata for algorithm (author @JinIgarashi, developmentseed/titiler!797)
0.17.1 (2024-03-13)¶
- add python 3.12 support
titiler.core¶
- Add
use_epsgparameter to WMTS endpoint to resolve ArcMAP issues and fix XML formating (author @gadomski, developmentseed/titiler!782) - Add more OpenAPI metadata for algorithm (author @JinIgarashi, developmentseed/titiler!783)
titiler.application¶
- fix invalid url parsing in HTML responses
0.17.0 (2024-01-17)¶
titiler.core¶
- update
rio-tilerversion to>6.3.0 - use new
align_bounds_with_dataset=Truerio-tiler option in GeoJSON statistics methods for more precise calculation
0.16.2 (2024-01-17)¶
titiler.core¶
- fix leafletjs template maxZoom to great than 18 for
/mapendpoint (author @Firefishy, developmentseed/titiler!749)
0.16.1 (2024-01-08)¶
titiler.core¶
- use morecantile
TileMatrixSet.cellSizeproperty instead of deprecated/privateTileMatrixSet._resolutionmethod
titiler.mosaic¶
- use morecantile
TileMatrixSet.cellSizeproperty instead of deprecated/privateTileMatrixSet._resolutionmethod
0.16.0 (2024-01-08)¶
titiler.core¶
- update FastAPI version lower limit to
>=0.107.0 - fix template loading for starlette >= 0.28 by using
jinja2.Environmentargument (author @jasongi, developmentseed/titiler!744)
titiler.extensions¶
- fix template loading for starlette >= 0.28 by using
jinja2.Environmentargument (author @jasongi, developmentseed/titiler!744)
titiler.application¶
- fix template loading for starlette >= 0.28 by using
jinja2.Environmentargument (author @jasongi, developmentseed/titiler!744)
0.15.8 (2024-01-08)¶
titiler.core¶
- use morecantile
TileMatrixSet.cellSizeproperty instead of deprecated/privateTileMatrixSet._resolutionmethod [backported from 0.16.1]
titiler.mosaic¶
- use morecantile
TileMatrixSet.cellSizeproperty instead of deprecated/privateTileMatrixSet._resolutionmethod [backported from 0.16.1]
0.15.7 (2024-01-08)¶
titiler.core¶
- update FastAPI version upper limit to
<0.107.0to avoid starlette breaking change (0.28)
titiler.application¶
- add simple auth (optional) based on
global_access_tokenstring, set withTITILER_API_GLOBAL_ACCESS_TOKENenvironment variable (author @DeflateAwning, developmentseed/titiler!735)
0.15.6 (2023-11-16)¶
titiler.core¶
- in
/mapHTML response, add Lat/Lon buffer to AOI to avoid creating wrong AOI (when data covers the whole world).
0.15.5 (2023-11-09)¶
titiler.core¶
-
add
algorithmoptions for/statisticsendpoints -
switch from
BaseReader.statistics()method to a combination ofBaseReader.preview()andImageData.statistics()methods to get the statistics
0.15.4 (2023-11-06)¶
titiler.core¶
-
update
rio-tilerrequirement to>=6.2.5,<7.0 -
allow
bidxoption intitiler.core.dependencies.AssetsBidxExprParamsandtitiler.core.dependencies.AssetsBidxParams# merge band 1 form asset1 and asset2 # before httpx.get( "/stac/preview", params=( ("url", "stac.json"), ("assets", "asset1"), ("assets", "asset2"), ("asset_bidx", "asset1|1"), ("asset_bidx", "asset2|1"), ) ) # now httpx.get( "/stac/preview", params=( ("url", "stac.json"), ("assets", "asset1"), ("assets", "asset2"), ("bidx", 1), ) ) -
fix openapi examples
0.15.3 (2023-11-02)¶
- add
dst_crsoptions in/statistics [POST]and/feature [POST]endpoints
0.15.2 (2023-10-23)¶
titiler.core¶
- add
dependencies.TileParamsdependency withbufferandpaddingoptions - add
tile_dependencyattribute inTilerFactoryclass (defaults toTileParams) - add
reproject(alias toreproject_method) option inDatasetParamsdependency
titiler.mosaic¶
- Change
HTTP_404_NOT_FOUNDtoHTTP_204_NO_CONTENTwhen no asset is found or tile is empty (author @simouel, developmentseed/titiler!713) - add
tile_dependencyattribute inMosaicTilerFactoryclass (defaults toTileParams)
cdk application¶
- Support non-root paths in AWS API Gateway Lambda handler (author @DanSchoppe, developmentseed/titiler!716)
0.15.1 (2023-10-17)¶
- Allow a default
color_formulaparameter to be set via a dependency (author @samn, developmentseed/titiler!707) - add
titiler.core.dependencies.create_colormap_dependencyto create ColorMapParams dependency fromrio_tiler.colormap.ColorMapsobject - add
py.typedfiles in titiler submodules (peps.python.org/pep-0561)
0.15.0 (2023-09-28)¶
titiler.core¶
- added
PartFeatureParamsdependency
breaking changes
-
max_sizeis now set toNonefor/statistics [POST],/bboxand/featureendpoints, meaning the tiler will create image from the highest resolution. -
renamed
titiler.core.dependencies.ImageParamstoPreviewParams -
split TileFactory
img_dependencyattribute in two: -
img_preview_dependency: used in/previewand/statistics [GET], default toPreviewParams(withmax_size=1024) -
img_part_dependency: used in/bbox,/featureand/statistics [POST], default toPartFeatureParams(withmax_size=None) -
renamed
/cropendpoints to/bbox/...or/feature/... -
/crop/{minx},{miny},{maxx},{maxy}.{format}->/bbox/{minx},{miny},{maxx},{maxy}.{format} -
/crop/{minx},{miny},{maxx},{maxy}/{width}x{height}.{format}->/bbox/{minx},{miny},{maxx},{maxy}/{width}x{height}.{format} -
/crop [POST]->/feature [POST] -
/crop.{format} [POST]->/feature.{format} [POST] -
/crop/{width}x{height}.{format} [POST]->/feature/{width}x{height}.{format} [POST] -
update
rio-tilerrequirement to>=6.2.1 -
Take coverage weights in account when generating statistics from GeoJSON features
0.14.1 (2023-09-14)¶
titiler.extension¶
- add
GetFeatureInfocapability inwmsExtension(author @benjaminleighton, developmentseed/titiler!698)
0.14.0 (2023-08-30)¶
titiler.core¶
- replace
-by_in query parameters breaking change coord-crs->coord_crs-
dst-crs->dst_crs -
replace
bufferandcolor_formulaendpoint parameters by external dependencies (BufferParamsandColorFormulaParams) -
add
titiler.core.utils.render_imagewhich allow non-binary alpha band created with custom colormap.render_imagereplaceImageData.rendermethod.# before if cmap := colormap or dst_colormap: image = image.apply_colormap(cmap) if not format: format = ImageType.jpeg if image.mask.all() else ImageType.png content = image.render( img_format=format.driver, **format.profile, **render_params, ) # now # render_image will: # - apply the colormap # - choose the right output format if `None` # - create the binary data content, media_type = render_image( image, output_format=format, colormap=colormap or dst_colormap, **render_params, )
titiler.extension¶
- rename
geom-densify-ptstogeometry_densifybreaking change - rename
geom-precisiontogeometry_precisionbreaking change
0.13.3 (2023-08-27)¶
- fix Factories
url_formethod and avoid changingRequest.path_paramsobject
0.13.2 (2023-08-24)¶
titiler.extensions¶
- replace mapbox-gl by maplibre
- replace Stamen by OpenStreetMap tiles
- simplify band selection handling (author @tayden, developmentseed/titiler!688)
0.13.1 (2023-08-21)¶
titiler.core¶
- fix
LowerCaseQueryStringMiddlewareunexpectedly truncating query parameters (authors @jthetzel and @jackharrhy, @developmentseed/titiler!677)
titiler.application¶
- add
cors_allow_methodsinApiSettingsto control the CORS allowed methods (author @ubi15, developmentseed/titiler!684)
0.13.0 (2023-07-27)¶
- update core requirements to libraries using pydantic ~=2.0
titiler.core¶
- update requirements:
- fastapi
>=0.95.1→>=0.100.0 - pydantic
~=1.0→~=2.0 - rio-tiler
>=5.0,<6.0→>=6.0,<7.0 - morecantile
>=4.3,<5.0→>=5.0,<6.0 - geojson-pydantic
>=0.4,<0.7→>=1.0,<2.0 - typing_extensions
>=4.6.1
titiler.extension¶
- update requirements:
- rio-cogeo
>=4.0,<5.0"→>=5.0,<6.0"
titiler.mosaic¶
- update requirements:
- cogeo-mosaic
>=6.0,<7.0→>=7.0,<8.0
titiler.application¶
- use
/apiand/api.htmlfor documentation (instead of/openapi.jsonand/docs) - update landing page
0.12.0 (2023-07-17)¶
- use
AnnotatedType for Query/Path parameters - replace variable
TileMatrixSetIdbytileMatrixSetId
titiler.core¶
- update FastAPI dependency to
>=0.95.1 - set
pydanticdependency to~=1.0 - update
rio-tilerdependency to>=5.0,<6.0 - update TMS endpoints to match OGC Tiles specification
titiler.extensions¶
- use TiTiler's custom JSONResponse for the
/validateendpoint to avoid issue when COG hasNaNnodata value - update
rio-cogeodependency to>=4.0,<5.0 - update
rio-stacrequirement to>=0.8,<0.9and addgeom-densify-ptsandgeom-precisionoptions
titiler.mosaic¶
- update
cogeo-mosaicdependency to>=6.0,<7.0 - remove
titiler.mosaic.resources.enum.PixelSelectionMethodand userio_tiler.mosaic.methods.PixelSelectionMethod - allow more TileMatrixSet (than only
WebMercatorQuad)
0.11.7 (2023-05-18)¶
titiler.core¶
- make HTML
templatesconfigurable in the factories - rename
index.htmltomap.html - rename
dependencies.CRSParamstodependencies.CoordCRSParams - add
dst-crsoption for/previewand/cropendpoints to specify the output Coordinate Reference System.
titiler.mosaic¶
- make HTML
templatesconfigurable in the factories
titiler.extensions¶
- make HTML
templatesconfigurable in the factories - rename
cog_index.htmltocog_viewer.html - rename
stac_index.htmltostac_viewer.html - add
zoom to pointinstacandcogviewers (author @dchirst, developmentseed/titiler!614)
0.11.6 (2023-04-14)¶
- Allow a default
rescaleparameter to be set via a dependency (author @samn, developmentseed/titiler!619) - add
coord-crsparameter for/point,/partand/featureendpoints
0.11.5 (2023-03-22)¶
- fix
TerrainRGB(change interval from1.0to0.1)
0.11.4 (2023-03-20)¶
- set FastAPI version lower than 0.95 (tiangolo/fastapi?9278)
0.11.3 (2023-03-14)¶
- handle dateline crossing dataset in COG/STAC Viewer
- update Factories
url_formethod to make sure we return a string (developmentseed/titiler!607)
0.11.2 (2023-03-08)¶
- Add OSM background in
/mapviewer when using WebMercator TMS
0.11.1 (2023-03-01)¶
- no change since 0.11.1a0
0.11.1a0 (2023-03-01)¶
- switch to
hatchandpdm-pep517as build system and usepyproject.tomlfor python module metadata - switch to
rufffor python linting - update pre-commit configuration
- documentation fixes 🙏 (authors @jthetzel, @neilsh)
- fix documentation about
asset_bidx
titiler.core¶
- Algorithm change, make terrainrgb interval and baseval floats to support more quantizers (author @AndrewAnnex, developmentseed/titiler!587)
- update
rio-tilerminimum version to4.1.6 - Apply colormap before defining image output format (when not provided)
titiler.mosaic¶
- Apply colormap before defining image output format (when not provided)
0.11.0 (2023-01-27)¶
- add
titiler.extensionspackage (cogValidateExtension,stacExtension,cogViewerExtension,stacViewerExtension,wmsExtension)
titiler.mosaic¶
- update
cogeo-mosaicversion requirement to>=5.0,<5.2(allow usingaz://prefix from uri) - add
MOSAIC_STRICT_ZOOMenvironment variable to control if the application should allow fetching tiles outside mosaic min/max zooms
breaking change
titiler.core¶
- add
extensionsoption to theBaseTilerFactoryto specify a list of extension we want to register. Each extension will be then registered in the__post_init__object creation step. - remove
BaseHTTPMiddlewareclass inheritance for middleware (write pure ASGI middleware)
titiler.application¶
- uses Extension to add more endpoints to default
titiler.corefactories - move all
viewercode intotitiler.extensions - add
/cog/stacendpoint fromtitiler.extension.stacExtensionto create STAC Items from raster dataset
titiler.mosaic¶
- removed deprecated empty path (
/is the correct route path, which enable prefixed and non-prefixed mosaic application)
0.10.2 (2022-12-17)¶
- fix issue with new morecantile version
- replace path parameter in
router_prefixinBaseTilerFactory.url_for
0.10.1 (2022-12-15)¶
- update
/mapendpoint and template to support multiple TMS (developmentseed/titiler!560)
0.10.0 (2022-12-09)¶
breaking change
- Simplify dependency requirements for titiler.mosaic and titiler.application and using
=={currentVersion}
titiler.core¶
- fix the
wmts.xmltemplate to work with non-epsg based CRS
titiler.application¶
- fix titiler.application viewer when using dataset with band name in metadata
0.9.0 (2022-12-05)¶
titiler.core¶
- add
default_tmsinBaseTilerFactoryto set the default TMS identifier supported by the tiler (e.gWebMercatorQuad)
0.8.1 (2022-12-01)¶
titiler.core¶
- remove useless
titiler.core.versionfile
0.8.0 (2022-12-01)¶
- remove python 3.7 support
- add python 3.10 and 3.11 in CI
titiler.core¶
- update FastAPI requirement to
>=0.87 - update rio-tiler requirement to
>=4.1,<4.2 - remove
rescaleandcolor_formulafrom thepost_processdependency - add
algorithmsupport and introduce newalgorithmandalgorithm_paramsquery parameters
breaking changes
- remove
timing headersandtitiler.core.utilssubmodule - remove
asset_expression(except in/asset_statisticsendpoint) (see cogeotiff.github.io/rio-tiler/v4_migration/#multibasereader-expressions) - update Point output model to include
band_names - histogram and info band names are prefixed with
b(e.gb1) (ref: cogeotiff.github.io/rio-tiler/v4_migration/#band-names) - add
/mapendpoint in TilerFactory to display tiles given query-parameters - remove
TMSParamsandWebMercatorTMSParamsdependencies. - replace
TilerFactory.tms_dependencyattribute byTilerFactory.supported_tms. This attribute gets amorecantile.defaults.TileMatrixSetsstore and will create the tms dependencies dynamically - replace
TMSFactory.tms_dependencyattribute byTMSFactory.supported_tms. This attribute gets amorecantile.defaults.TileMatrixSetsstore and will create the tms dependencies dynamically - move
stats_dependencyandhistogram_dependencyfromBaseTilerFactorytoTilerFactory - per rio-tiler changes,
;has be to used in expression to indicate multiple bands.b1*2,b2+b3,b1/b3->b1*2;b2+b3;b1/b3
titiler.mosaic¶
- update cogeo-mosaic requirement to
>=4.2,<4.3
breaking changes
- remove
timing headers - replace
MosaicTilerFactory.tms_dependencyattribute byMosaicTilerFactory.supported_tms. This attribute gets amorecantile.defaults.TileMatrixSetsstore and will create the tms dependencies dynamically
titiler.application¶
- code simplification by removing custom code and submodules from endpoints
breaking changes
- remove custom TMS and custom Colormap dependencies
- remove middleware submodule
0.7.1 (2022-09-21)¶
titiler.mosaic¶
- add
pixel_selection_dependencyoptions inMosaicTilerFactoryto allow default method override (author @samn, developmentseed/titiler!495)
titiler.application¶
- allow
intervalcolormaps in titiler.application
Helm charts¶
- Check Charts workflow added for the Helm charts testing (author @emmanuelmathot, developmentseed/titiler!495)
0.7.0 (2022-06-08)¶
- add
environment_dependencyoption inBaseTilerFactoryto define GDAL environment at runtime. - remove
gdal_configoption inBaseTilerFactorybreaking
# before
router = TilerFactory(gdal_config={"GDAL_DISABLE_READDIR_ON_OPEN": "FALSE"}).router
# now
router = TilerFactory(environment_dependency=lambda: {"GDAL_DISABLE_READDIR_ON_OPEN": "FALSE"}).router
class ReaddirType(str, Enum):
false = "false"
true = "true"
empty_dir = "empty_dir"
# or at endpoint call. The user could choose between false/true/empty_dir
def gdal_env(disable_read: ReaddirType = Query(ReaddirType.false)):
return {"GDAL_DISABLE_READDIR_ON_OPEN": disable_read.value.upper()}
router = TilerFactory(environment_dependency=gdal_env).router
titiler.application¶
- update
starlette-cramjamrequirement
0.6.0 (2022-05-13)¶
- no change since
0.6.0a2
0.6.0a2 (2022-05-11)¶
- revert to
setup.py+setuptoolsinstead ofpyproject.toml+flitbecause it broke namespace packages (developmentseed/titiler!472)
0.6.0a1 (2022-05-11)¶
titiler.core¶
- remove logging in error
exception_handler_factory - add optional
reader_dependencyto enable passingReader's option defined by Query/Header/Path parameters. - switch to
pyproject.toml - move version definition in
titiler.core.__version__breaking - Include all values for a query param in
LowerCaseQueryStringMiddleware(author @samn, developmentseed/titiler!464)
titiler.mosaic¶
- add optional
backend_dependencyto enable passingBackend's option defined by Query/Header/Path parameters. - remove
backend_optionsMosaicTilerFactory argument in favor of the use ofbackend_dependencybreaking - switch to
pyproject.toml - move version definition in
titiler.mosaic.__version__breaking
titiler.application¶
- Fix frontend to handle anti-meridian crossing data
- switch to
pyproject.toml - move version definition in
titiler.application.__version__breaking
0.5.1 (2022-03-07)¶
- add
cachecontrol_max_http_codeoption toCacheControlMiddlewareto avoid adding cache-control headers for API errors (Author @sharkinsspatial, developmentseed/titiler!444)
0.5.0 (2022-02-22)¶
- update rio-tiler/morecantile/rio-cogeo/cogeo-mosaic versions
- add MultiBaseTilerFactory
/asset_statisticswhich will return per asset statistics. Returns response in form ofDict[{asset name}, Dict[{band name}, BandStatistics]]
breaking change
- Multi-band expression now uses semicolon
;instead of colon (,) as separator. Note: proper urlencoding might be needed.
# before
expression = "b1+b2,b2"
# new
expression = "b1+b2;b2"
- MultiBaseTilerFactory
/statisticsnow returns merged statistics in form ofDict[{asset_band or expression}, BandStatistics](instead ofDict[{asset name}, Dict[{band name}, BandStatistics]])
# before
response = httpx.get(f"/stac/statistics?url=item.json").json()
print(response)
>>> {
"asset1": {
"1": {
"min": ...,
"max": ...,
...
},
"2": {
"min": ...,
"max": ...,
...
}
}
}
# now
response = httpx.get(f"/stac/statistics?url=item.json").json()
print(response)
>>> {
"asset1_1": {
"min": ...,
"max": ...,
...
},
"asset1_2": {
"min": ...,
"max": ...,
...
},
}
0.4.3 (2022-02-08)¶
- add tile
bufferoption to match rio-tiler tile options (developmentseed/titiler!427)
0.4.2 (2022-01-25)¶
titiler.core¶
- update minimum FastAPI version to
>=0.73(developmentseed/titiler!425)
0.4.1 (2022-01-25)¶
titiler.core¶
- update type information for the factory
colormap_dependency
k8s¶
- Update ingress k8s templates to be compatible with latest resource types versions (developmentseed/titiler!425
0.4.0 (2021-11-30)¶
- rename
DockerfiletoDockerfile.gunicorn - switch default docker image to python3.9
- add
Dockerfile.uvicorn
titiler.core¶
- update
rio-tilerversion requirement to>=3.0
titiler.mosaic¶
- update
cogeo-mosaicversion to>=4.0
0.4.0a2 (2021-11-24)¶
titiler.core¶
- update
rio-tilerversion (>=3.0.0a6) with new colormap types information and base classes - remove
additional_dependencyattribute inBaseTileFactory. This also remove**kwargsin endpoints breaking - remove
reader_optionsattribute inBaseTileFactorybreaking tms_dependencydefault totitiler.core.dependencies.TMSParamswhich should supports all morecantile's TMS.- add
route_dependenciesattribute toBaseTilerFactoryto allow customizing route dependencies (author @alukach, developmentseed/titiler!406)
titiler.mosaic¶
- update
cogeo-mosaicversion (>=4.0.0a2) with updated Backend type hints information
0.4.0a1 (2021-11-12)¶
- fix titiler packages cross dependencies
0.4.0a0 (2021-11-12)¶
- remove python 3.6 supports (related to morecantile/pyproj update)
titiler.core¶
- update
rio-tiler/morecantilerequirement (>=3.0) - remove
utils.bbox_to_feature(replaced by geojson_pydantic native functionFeature(geometry=Polygon.from_bounds(*bounds), properties=info)) - remove
utils.data_stats(replaced by rio-tiler new statistics method) - remove
metadataendpoints breaking API - update
statisticsendpoints with histogram options - update
statisticsendpoint responses breaking API - remove
band_expressioninBandsExprParamsdependency breaking API - remove
morecantilerequirement definition in setup.py and defers to rio-tiler supported version - update
titiler.core.dependencies.DefaultDependency(allows dict unpacking and remove.kwargs) breaking API - use standard for List in QueryParameter (e.g
bidx=1&bidx=2&bidxinstead ofbidx=1,2,3) breaking API - add
asset_bidxquery parameter in replacement ofbidxin MultiBaseFactory dependencies and switch to new format:{asset name}|{bidx,bidx,bidx}breaking API - update
asset_expressionto the new format:{asset name}|{expression}(e.gdata|b1+b2) breaking API - update
assetsQueryParameter to List (e.gassets=COG&assets=Data) breaking API - update
bandsQueryParameter to List (e.gbands=B01&bands=B02) breaking API - split
RenderParamsdependency into:PostProcessParams:rescaleandcolor_formulaparametersImageRenderingParams:return_mask
- add
process_dependencyattribute inBaseTilerFactory(defaults toPostProcessParams) - use
resamplingalias instead ofresampling_methodfor QueryParameter breaking API - defaults to available assets if
assetsoption is not provided forMultiBaseTilerFactoryinfo and statistics endpoints. - defaults to available bands if
bandsoption is not provided forMultiBandsTilerFactoryinfo and statistics endpoints. - better output models definition
- keep
bounds,minzoomandmaxzoomin/inforesponse - remove
datasetin/inforesponse to better follow the Info model - add
/statisticsendpoint by default
titiler.mosaic¶
- update
cogeo-mosaicrequirement (>=4.0) - update response from
/infoendpoint to match the model.
titiler.application¶
- update viewers to match changes in titiler.core endpoints
0.3.12 (2021-10-20)¶
titiler.core¶
- Update morecantile requirement to stay under
3.0(author @robintw, developmentseed/titiler!389)
0.3.11 (2021-10-07)¶
titiler.application¶
- Update rio-cogeo requirement to stay under
3.0
0.3.10 (2021-09-23)¶
titiler.core¶
- add custom JSONResponse using simplejson to allow NaN/inf/-inf values (ref: developmentseed/titiler!374)
- use
titiler.core.resources.responses.JSONResponseas default response forinfo,metadata,statisticsandpointendpoints (ref: developmentseed/titiler!374)
titiler.application¶
- switch to
starlette_cramjamcompression middleware (ref: developmentseed/titiler#369)
0.3.9 (2021-09-07)¶
titiler.core¶
- update FastAPI requirements to
>=0.65,<0.68(ref: developmentseed/titiler#366) - surface
asset_expressionandband_expressionin Multi*TilerFactory (ref: developmentseed/titiler#367)
0.3.8 (2021-09-02)¶
titiler.core¶
- move
titiler.application.middlewaretotitiler.core.middleware(developmentseed/titiler!365)
0.3.7 (2021-09-01)¶
titiler.core¶
- Update the TileJSON model for better validation and to match with the specification (center is optional) (developmentseed/titiler!363)
0.3.6 (2021-08-23)¶
titiler.core¶
- fix morecantile related tests (developmentseed/titiler#358)
- fix float parsing when datatype is float32 (developmentseed/rio-viz#39)
titiler.application¶
- fix morecantile related tests (developmentseed/titiler#358)
0.3.5 (2021-08-17)¶
titiler.mosaic¶
- add
/{z}/{x}/{y}/assets,/{lon},{lat}/assets,/{minx},{miny},{maxx},{maxy}/assetsGET endpoints to return a list of assets that intersect a given geometry (author @mackdelany, developmentseed/titiler!351)
0.3.4 (2021-08-02) - Not published on PyPi #355¶
titiler.core¶
- add
/cropPOST endpoint to return an image from a GeoJSON feature (developmentseed/titiler!339) - add
/statistics(GET and POST) endpoints to return advanced images statistics (developmentseed/titiler!347)
titiler.application¶
- add optional
root_pathsetting to specify a url path prefix to use when running the app behind a reverse proxy (developmentseed/titiler!343)
0.3.3 (2021-06-29) - Not published on PyPi #355¶
titiler.core¶
- fix possible bug when querystring parameter are case insensitive (developmentseed/titiler!323)
titiler.mosaic¶
- update
tilejsonandWMTSCapabilities.xmlendpoints to allow list querystrings (as done previously in developmentseed/titiler#319)
titiler.application¶
- add
titiler.application.middleware.LowerCaseQueryStringMiddlewareto cast all query string parameter to lowercase (author @lorenzori, developmentseed/titiler!321)
code and repo¶
- move
titilercode tosrc/titiler
0.3.2 (2021-05-26)¶
titiler.core¶
- update rio-tiler dependency to
>=2.1version and updaterescalequery-parameter (developmentseed/titiler#319)
# before
# previously, rio-tiler was splitting a list of input range in tuple of 2
rescale=0,1000,0,1000,0,1000
# now
# rio-tiler 2.1 now expect sequence of tuple in form of Sequence[Tuple[Num, Num]]
rescale=0,1000&rescale=0,1000&rescale=0,1000
titiler.mosaic¶
- update
cogeo-mosaicversion to>=3.0,<3.1.
titiler.application¶
- re-order middlewares (developmentseed/titiler#311)
- update rio-cogeo version to
>=2.2and userio_cogeo.modelsinstead of custom ones.
0.3.1 (2021-04-27)¶
- add
exclude_pathoptions intitiler.application.middleware.CacheControlMiddlewareto avoid adding cache-control headers to specific paths. - allow
histogram_binsto be a single value or a,delimited scalar (developmentseed/titiler!307) -
change error status from
404to500forRasterioIOErrorexception (author @kylebarron, developmentseed/titiler!300)Sometimes GDAL/Rasterio can lose track of the file handler (might be related to cache issue + threading) and raise
RasterioIOError: file not found, while the file exists for real. To avoid caching this, we changed the error code to 500 (errors >= 500 do not getcache-controlheader on titiler.application).
0.3.0 (2021-04-19)¶
- add support for
.jpgand.jpegextensions (developmentseed/titiler!271) - better error message when parsing the colormap value fails (developmentseed/titiler!279)
breaking change
-
split
titilerinto a set of namespaces packages (developmentseed/titiler!284)titiler.core
The
corepackage host the low level tiler factories.# before from titiler.endpoints.factory import TilerFactory # now from titiler.core.factory import TilerFactorytitiler.mosaic
The
mosaicpackage is a plugin totitiler.corewhich adds support for MosaicJSON# before from titiler.endpoints.factory import MosaicTilerFactory # now from titiler.mosaic.factory import MosaicTilerFactorytitiler.application
The
applicationpackage is a fullready to useFastAPI application with support of STAC, COG and MosaicJSON.# before $ pip install titiler $ uvicorn titiler.main:app --reload # now $ pip install titiler.application uvicorn $ uvicorn titiler.application.main:app --reload
0.2.0 (2021-03-09)¶
- adapt for cogeo-mosaic
3.0.0rc2and addbackend_optionsattribute in MosaicTilerFactory (developmentseed/titiler!247) - update FastAPI requirements
- update minimal python version to 3.6
- add
**render_params.kwargsto pass custom render params inimage.rendermethod (developmentseed/titiler!259) - Changed probe url from
/pingto/healthzin k8s deployment
breaking change
- renamed
OptionalHeaders,MimeTypesandImageDriversenums to the singular form (developmentseed/titiler!258) - renamed titiler.dependencies's Enums (
ColorMapName,ResamplingNameandTileMatrixSetName) to the singular form (developmentseed/titiler!260) - renamed
MimeTypetoMediaType(developmentseed/titiler!258) - add
ColorMapParamsdependency to ease the creation of custom colormap dependency (developmentseed/titiler!252) - renamed
PathParamstoDatasetPathParamsand also made it a simple callable (developmentseed/titiler!260) -
renamed
colormapquery-parameter tocolormap_name(developmentseed/titiler!262)# before /cog/preview.png?colormap=viridis # now /cog/preview.png?colormap_name=viridis -
use
colormapquery-parameter to pass custom colormap (developmentseed/titiler!262)/cog/preview.png?colormap={"0": "#FFFF00FF", ...}
0.1.0 (2021-02-17)¶
- update FastAPI requirements
- add
validateinMosaicTilerFactory(developmentseed/titiler!206, author @drnextgis) - rename
ressourcespackage toresources(developmentseed/titiler!210, author @drnextgis) - renamed environment variables prefixes for API and STACK configurations:
TITILER_STACKas prefix to CDK andTITILER_APIas prefix to API (developmentseed/titiler!211, author @fredliporace) - remove MosaicTilerFactory
createandupdateendpoints (developmentseed/titiler!218) - deleted
titiler.models.mosaicsbecause the models are not used anymore (developmentseed/titiler!221) - update rio-tiler and cogeo-mosaic minimal versions (developmentseed/titiler!220, developmentseed/titiler!213)
- move STAC related dependencies to `titiler.dependencies (developmentseed/titiler!225)
- add
rio_tiler.io.MultiBandReaderbands dependencies (developmentseed/titiler!226) - add
MultiBaseTilerFactoryandMultiBandTilerFactorycustom tiler factories (developmentseed/titiler!230) - Update STAC tiler to use the new
MultiBaseTilerFactoryfactory - depreciate empty GET endpoint for MosaicTilerFactory read (developmentseed/titiler!232)
- better
debugconfiguration and make reponse headers metadata optional (developmentseed/titiler!232)
breaking change
- update
titiler.dependencies.AssetsBidxParamsto makeasseta required parameter (developmentseed/titiler!230 - the STAC
/infoendpoint now expect theassetsparameter to be passed. To ge the list of available assets we added a new/assetsendpoint within the tiler factory - remove
COGReaderas defaultreaderintitiler.endpoints.factory.BaseTilerFactory
0.1.0a14 (2021-01-05)¶
- add
rio_tiler.errors.MissingBandsin known errors. - add
titiler.endpoints.factory.TMSFactoryto enable custom TMS endpoints. - breaking rename
BaseFactorytoBaseTilerFactoryintitiler.endpoints.factory
0.1.0a13 (2020-12-20)¶
- allow
API_DISABLE_{COG/STAC/MOSAIC}environment variables to control default endpoints in titiler main app (developmentseed/titiler#156) - add
overwriting=False/Trueon MosaicJSON creation (developmentseed/titiler#164) - add
gdal_configoption to Tiler factories to replace customAPIRouteclass (developmentseed/titiler#168) - add
info.geojsonendpoint to return dataset info as a GeoJSON feature (developmentseed/titiler#166) - update
rio-tiler,cogeo-mosaicand optional dependencies
0.1.0a12 (2020-11-18)¶
- require
rio-tiler>=2.0.0rc2 - update Enums for Image types. (breaking)
- Add more output datatype (jpeg2000, pngraw)
- add
width/heightin/cropendpoint path
/crop/{minx},{miny},{maxx},{maxy}.{format}
/crop/{minx},{miny},{maxx},{maxy}/{width}x{height}.{format}
0.1.0a11.post1 (2020-11-12)¶
- relax version for rio-tiler and cogeo-mosaic
"rio-cogeo~=2.0"
"rio-tiler>=2.0.0rc1,<2.1"
"cogeo-mosaic>=3.0.0a17,<3.1"
0.1.0a11 (2020-11-12)¶
- split
tile()forMosaicTilerFactorymethod (developmentseed/titiler#147)
0.1.0a10 (2020-11-09)¶
- update for rio-tiler==2.0.0rc1, cogeo-mosaic==3.0.0a17 and morecantile==2.0
- split
tile()factory method (developmentseed/titiler#141, author @fredliporace)
0.1.0a9 (2020-10-26)¶
- avoid changing mutable TMS and Colormap list by using deepcopy.
- quiet/turn off logs
- add logger middleware (developmentseed/titiler!139)
0.1.0a8 (2020-10-13)¶
- update for rio-tiler 2.0.0b17, which now support TMS (morecantile) by default.
- update fastapi minimum version to 0.61
breaking changes
- removed TMSTilerFactory (because default reader built with rio_tiler BaseReader should support TMS).
Note: We changed the versioning scheme to {major}.{minor}.{path}{pre}{prenum}
0.1.0-alpha.7 (2020-10-13)¶
- remove
pkg_resources(pypa/setuptools#510)
0.1.0-alpha.6 (2020-10-05)¶
- refactor CacheControl Middleware
- rename headers value
X-Server-TimingstoServer-Timing. - add
total;dur={}in response headerServer-Timing, using newtitiler.middleware.TotalTimeMiddlewaremiddleware (113)
from titiler.middleware import CacheControlMiddleware, TotalTimeMiddleware
from fastapi import FastAPI
app.add_middleware(CacheControlMiddleware, cachecontrol="public, max-age=3600")
app.add_middleware(TotalTimeMiddleware)
- Add Brotli compression support (#126, author @kylebarron)
- Numerous fix to CDK app.py (co-author @kylebarron)
0.1.0-alpha.5 (2020-09-22)¶
- exclude
tests/anstack/in titiler python package. - add
EPSG6933in TMS
breaking changes
* [FACTORY] the additional_dependency should be a Callable which return a dict.
```python
@dataclass # type: ignore
class BaseFactory(metaclass=abc.ABCMeta):
"""BaseTiler Factory."""
...
# provide custom dependency
additional_dependency: Callable[..., Dict] = field(default=lambda: dict())
```
```python
def AssetsParams(
assets: Optional[str] = Query(
None,
title="Asset indexes",
description="comma (',') delimited asset names (might not be an available options of some readers)",
)
) -> Dict:
"""Assets Dependency."""
kwargs = {}
if assets:
kwargs["assets"] = assets.split(",")
return kwargs
```
- [FACTORY] remove
_prefix in factory methods (e.g_tile->tile) -
[FACTORY] refactor dependencies to better align with rio_tiler.io.BaseReader method definition.
Example:
In the
metadata, theMetadataParamswill be used to passpminandpmaxbecause they are the only required parameters for the metadata method. All other params will be passed to akwargsdict.* [FACTORY] refactor dependencies definition@dataclass class MetadataParams(DefaultDependency): """Common Metadada parameters.""" # Required params pmin: float = Query(2.0, description="Minimum percentile") pmax: float = Query(98.0, description="Maximum percentile") # Optional parameters bidx: Optional[str] = Query( None, title="Band indexes", description="comma (',') delimited band indexes", ) ... def __post_init__(self): """Post Init.""" if self.bidx is not None: self.kwargs["indexes"] = tuple( int(s) for s in re.findall(r"\d+", self.bidx) ) ... # metadata method in factory def metadata( src_path=Depends(self.path_dependency), metadata_params=Depends(self.metadata_dependency), kwargs: Dict = Depends(self.additional_dependency), ): """Return metadata.""" reader = src_path.reader or self.reader with reader(src_path.url, **self.reader_options) as src_dst: info = src_dst.metadata( metadata_params.pmin, metadata_params.pmax, **metadata_params.kwargs, **kwargs, ) return info@dataclass # type: ignore class BaseFactory(metaclass=abc.ABCMeta): """BaseTiler Factory.""" reader: default_readers_type = field(default=COGReader) reader_options: Dict = field(default_factory=dict) # FastAPI router router: APIRouter = field(default_factory=APIRouter) # Path Dependency path_dependency: Type[PathParams] = field(default=PathParams) # Rasterio Dataset Options (nodata, unscale, resampling) dataset_dependency: default_deps_type = field(default=DatasetParams) # Indexes/Expression Dependencies layer_dependency: default_deps_type = field(default=BidxExprParams) # Image rendering Dependencies render_dependency: default_deps_type = field(default=RenderParams) # TileMatrixSet dependency tms_dependency: Callable[..., TileMatrixSet] = WebMercatorTMSParams # provide custom dependency additional_dependency: Callable[..., Dict] = field(default=lambda: dict()) -
remove
PathParams.readerattribute. This option was not used and would have been technically difficult to use.@dataclass class PathParams: """Create dataset path from args""" url: str = Query(..., description="Dataset URL")
0.1.0-alpha.4 (2020-09-14)¶
-
Update
.npyoutput format to follow the numpyTile format (#103)import numpy import requests from io import BytesIO endpoint = ... url = "https://opendata.digitalglobe.com/events/mauritius-oil-spill/post-event/2020-08-12/105001001F1B5B00/105001001F1B5B00.tif" r = requests.get(f"{endpoint}/cog/tiles/14/10818/9146.npy", params = { "url": url, } ) data = numpy.load(BytesIO(r.content)) print(data.shape) > (4, 256, 256) -
Add
titiler.custom.routing.apiroute_factory. This function enable the creation of custom fastapi.routing.APIRoute class withrasterio.Env()block.from fastapi import FastAPI, APIRouter from rasterio._env import get_gdal_config from titiler.custom.routing import apiroute_factory app = FastAPI() route_class = apiroute_factory({"GDAL_DISABLE_READDIR_ON_OPEN": "FALSE"}) router = APIRouter(route_class=route_class) @router.get("/simple") def simple(): """should return FALSE.""" res = get_gdal_config("GDAL_DISABLE_READDIR_ON_OPEN") return {"env": res} app.include_router(router)Note: This has only be tested for python 3.6 and 3.7.
0.1.0-alpha.3 (2020-09-03)¶
- add custom
url_formethod in TilerFactory to retrieveprefixedendpoint URL (#95) - remove magic
titiler.dependencies.PathParamsmosaicid path translation, where a user could passurl=mosaicid://to the endpoint. -
switch to
pydantic.BaseSettingsfor FastAPI application setting management.List of Settings:
name: str = "titiler" cors_origins: str = "*" cachecontrol: str = "public, max-age=3600"
API Settings can now be set by adding a .env file in your local project or by setting environment variables (e.g API_CORS_ORIGIN="https://mywebsite.com/*")
0.1.0-alpha.2 (2020-09-01)¶
- add Transform and CRS information in
/partGeoTIFF output - pin rio-tiler-crs to
>=3.0b4,<3.1and cogeo-mosaic to>=3.0a10,<3.1
0.1.0-alpha.1 (2020-09-01)¶
- rename titiler.models.cog.py to titiler.models.dataset.py
- remove cog* prefix to Bounds, Info and Metadata models
- allow Union[str, int] for key in Metadata.statistics (as defined in rio-tiler-pds)
e.g Create a Landsat 8 Tiler
from titiler.endpoints.factory import TilerFactory, MosaicTilerFactory
from titiler.dependencies import BandsParams
from rio_tiler_pds.landsat.aws.landsat8 import L8Reader # Not in TiTiler dependencies
from fastapi import FastAPI
app = FastAPI(title="Landsat Tiler", openapi_url="/api/v1/openapi.json")
scene = TilerFactory(
reader=L8Reader, additional_dependency=BandsParams, router_prefix="scenes"
)
mosaic = MosaicTilerFactory(
dataset_reader=L8Reader,
additional_dependency=BandsParams,
add_update=False,
add_create=False,
router_prefix="mosaic",
)
app.include_router(scene.router, prefix="/scenes", tags=["Scenes"])
app.include_router(mosaic.router, prefix="/mosaic", tags=["Mosaic"])
0.1a0 (2020-08-31)¶
First release on pypi
Tiler Factory¶
For this release we created new Tiler Factories class which handle creation of FastAPI routers for a given rio_tiler Readers.
from titiler.endpoints.factory import TilerFactory
from rio_tiler.io import COGReader, STACReader
from fastapi import FastAPI
app = FastAPI()
cog = TilerFactory()
app.include_router(cog.router, tags=["Cloud Optimized GeoTIFF"])
Readers / TileMatrixSets¶
The titiler.endpoints.factory.TilerFactory class will create a tiler with Web Mercator as uniq supported Tile Matrix Set.
For other TMS support, tiler needs to be created with titiler.endpoints.factory.TMSTilerFactory and with a TMS friendly reader (e.g rio_tiler_crs.COGReader).
Simple tiler with only Web Mercator support
from rio_tiler.io import COGReader
from titiler.endpoints import factory
from titiler.dependencies import WebMercatorTMSParams
app = factory.TilerFactory(reader=COGReader)
assert app.tms_dependency == WebMercatorTMSParams
Tiler with more TMS support (from morecantile)
from rio_tiler_crs import COGReader
from titiler.endpoints import factory
from titiler.dependencies import TMSParams
app = factory.TMSTilerFactory(reader=COGReader)
assert app.tms_dependency == TMSParams
Other changes¶
- add mosaic support (#17 author @geospatial-jeff)
- update to rio-tiler-crs>=3.0b* and rio-tiler>=2.0b*
- Pin fastapi version to 0.60.1
- Remove titiler.core in favor of starlette settings (#55, author @geospatial-jeff)
- Add fastapi exception handlers (#56, author @geospatial-jeff)
- Remove intermediary routers (#57, author @geospatial-jeff)
- Remove /titiler/api submodule (e.g titiler.api.utils -> titiler.utils)
- Add Cache-Control middleware. Endpoints do not define any cache-control headers. (part of #43, co-author with @geospatial-jeff)
- Add 'X-Assets' in response headers for mosaic tiles (#51)
- add cog validation via rio-cogeo (co-author with @geospatial-jeff, #37)
Breaking changes¶
- default tiler to Web Mercator only
- removed cache layer for tiles
- updated html templates
template_dir = pkg_resources.resource_filename("titiler", "templates")
templates = Jinja2Templates(directory=template_dir)
cog_template = templates.TemplateResponse(
name="cog_index.html",
context={
"request": request,
"tilejson": request.url_for("cog_tilejson"),
"metadata": request.url_for("cog_metadata"),
},
media_type="text/html",
)
stac_template = templates.TemplateResponse(
name="stac_index.html",
context={
"request": request,
"tilejson": request.url_for("stac_tilejson"),
"metadata": request.url_for("stac_info"),
},
media_type="text/html",
)
Pre Pypi releases¶
2.1.2 (2020-06-24)¶
- add
width&heightparameters in API docs to force output size for part/preview endpoints. - add
resampling_methodin API docs.
link: developmentseed/titiler@725da5f
2.1.1 (2020-06-22)¶
- add minimum fastapi version (0.54.0) and update docker config
link: developmentseed/titiler@95b98a3
2.1.0 (2020-06-11)¶
- add
/preview,/crop,/pointendpoints
link: developmentseed/titiler@8b63fc6
2.0.0 (2020-06-09)¶
- support STAC items (#16)
- better API documentation via response models
- update UI (
/stac/viewer,/cog/viewer) - re-order OpenAPI route tags
- update documentation
link: developmentseed/titiler@fa2cb78
1.0.0 (2020-06-04)¶
Initial release