{
  "database_license": "https://opendatacommons.org/licenses/odbl/1-0/",
  "attribution": "\u00a9 OpenStreetMap contributors",
  "source": {
    "url": "https://download.geofabrik.de/north-america/us/kentucky-260907.osm.pbf",
    "sha256": "8d6bfd71467703ac4836dcfa596ebbb7f1e3ac839cf4b506783637cd5d086492",
    "date": "2026-09-07",
    "region": "kentucky"
  },
  "tools": {
    "tilemaker": "3.0.0",
    "osmium": "1.18.0"
  },
  "commands": [
    "osmium renumber INPUT.osm.pbf --index-directory renumber-index --fsync --output renumbered.osm.pbf",
    "osmium tags-filter renumbered.osm.pbf w/highway --remove-tags --fsync --output highways.osm.pbf",
    "tilemaker --input highways.osm.pbf --output roads.mbtiles --config config.json --process process.lua --store store --shard-stores --threads 1"
  ],
  "schema": "tfh-roads/1",
  "files": {
    "config.json": "{\n  \"layers\": {\n    \"tfh_roads\": {\n      \"minzoom\": 8,\n      \"maxzoom\": 14,\n      \"simplify_below\": 13,\n      \"simplify_level\": 4e-05,\n      \"simplify_ratio\": 2,\n      \"z_order_ascending\": true\n    }\n  },\n  \"settings\": {\n    \"minzoom\": 8,\n    \"maxzoom\": 14,\n    \"basezoom\": 14,\n    \"include_ids\": false,\n    \"compress\": \"gzip\",\n    \"combine_below\": 13,\n    \"name\": \"TheFireHorn roads\",\n    \"version\": \"1.0.0\",\n    \"description\": \"Original TFH cartographic road schema from OpenStreetMap; not a routing graph\",\n    \"mvt_version\": 2,\n    \"metadata\": {\n      \"attribution\": \"<a href=\\\"https://www.openstreetmap.org/copyright\\\">\\u00a9 OpenStreetMap contributors</a>\",\n      \"license\": \"ODbL-1.0\",\n      \"tfh_schema\": \"tfh-roads/1\",\n      \"source\": \"OpenStreetMap via Geofabrik dated US extracts\",\n      \"tfh_source_date\": \"2026-09-07\",\n      \"tfh_source_region\": \"kentucky\",\n      \"tfh_source_sha256\": \"8d6bfd71467703ac4836dcfa596ebbb7f1e3ac839cf4b506783637cd5d086492\"\n    }\n  }\n}\n",
    "process.lua": "-- Original TFH cartographic rules. Written for tilemaker 3's public Lua API.\n-- This file does not load or derive rules from another vector-tile schema.\nnode_keys = {}\nway_keys = { \"highway\" }\n\nlocal classes = {\n    motorway = {\"motorway\", 8, 0}, motorway_link = {\"motorway\", 8, 0},\n    trunk = {\"trunk\", 8, 1}, trunk_link = {\"trunk\", 8, 1},\n    primary = {\"primary\", 8, 2}, primary_link = {\"primary\", 8, 2},\n    secondary = {\"secondary\", 9, 3}, secondary_link = {\"secondary\", 9, 3},\n    tertiary = {\"local\", 10, 4}, tertiary_link = {\"local\", 10, 4},\n    residential = {\"local\", 11, 4}, unclassified = {\"local\", 11, 4},\n    living_street = {\"local\", 11, 4}, road = {\"local\", 11, 4},\n    service = {\"service\", 12, 5}, busway = {\"service\", 12, 5},\n    bus_guideway = {\"service\", 12, 5},\n    path = {\"path\", 13, 6}, footway = {\"path\", 13, 6},\n    cycleway = {\"path\", 13, 6}, bridleway = {\"path\", 13, 6},\n    steps = {\"path\", 13, 6}, pedestrian = {\"path\", 13, 6},\n    track = {\"path\", 13, 6}\n}\n\nlocal function text(value, maximum)\n    -- Do not cut a UTF-8 sequence halfway through. Unusually long tags are\n    -- omitted, not reinterpreted as another road name or reference.\n    value = string.gsub(value or \"\", \"[%z\\1-\\31\\127]\", \" \")\n    if #value > maximum then return \"\" end\n    return value\nend\n\nlocal function positive(value)\n    return value ~= \"\" and value ~= \"no\" and value ~= \"false\" and value ~= \"0\"\nend\n\nfunction node_function() end\n\nfunction way_function()\n    local rule = classes[Find(\"highway\")]\n    if not rule or Find(\"area\") == \"yes\" then return end\n    if positive(Find(\"disused\")) or positive(Find(\"abandoned\")) then return end\n    local bridge = positive(Find(\"bridge\"))\n    local tunnel = positive(Find(\"tunnel\"))\n    local raw_oneway = Find(\"oneway\")\n    local oneway = 0\n    if raw_oneway == \"yes\" or raw_oneway == \"true\" or raw_oneway == \"1\" then\n        oneway = 1\n    elseif raw_oneway == \"-1\" then\n        oneway = -1\n    end\n    -- Network is explicit OSM way tagging only. We do not guess networks from\n    -- names or infer unsigned routes; empty means unavailable in this schema.\n    local network = text(Find(\"network\"), 128)\n    local level = tonumber(Find(\"layer\")) or 0\n    level = math.max(-5, math.min(5, math.floor(level)))\n    if level == 0 then\n        if bridge then level = 1 elseif tunnel then level = -1 end\n    end\n    Layer(\"tfh_roads\", false)\n    MinZoom(rule[2])\n    Attribute(\"kind\", rule[1])\n    Attribute(\"name\", text(Find(\"name\"), 256))\n    Attribute(\"ref\", text(Find(\"ref\"), 128))\n    Attribute(\"network\", network)\n    AttributeBoolean(\"bridge\", bridge)\n    AttributeBoolean(\"tunnel\", tunnel)\n    AttributeNumeric(\"oneway\", oneway)\n    AttributeNumeric(\"rank\", rule[3])\n    ZOrder(level * 100 + 10 - rule[3])\nend\n"
  },
  "output_sha256": "1c14dcf94d5d363c967e8316dd5eec21068e5b06c5c7c07970763eb721b2b0ac"
}
