{"id":18096145,"url":"https://github.com/bbilly1/tilefy","last_synced_at":"2026-02-16T08:08:06.403Z","repository":{"id":40123042,"uuid":"502772964","full_name":"bbilly1/tilefy","owner":"bbilly1","description":"Create beautiful tiles for your project","archived":false,"fork":false,"pushed_at":"2024-02-20T13:28:51.000Z","size":1520,"stargazers_count":37,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-13T10:07:47.940Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbilly1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-13T01:48:42.000Z","updated_at":"2025-04-01T02:43:20.000Z","dependencies_parsed_at":"2024-10-31T19:13:15.209Z","dependency_job_id":"17d02093-0f4a-40d6-bb2a-04eac28acf48","html_url":"https://github.com/bbilly1/tilefy","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/bbilly1/tilefy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbilly1%2Ftilefy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbilly1%2Ftilefy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbilly1%2Ftilefy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbilly1%2Ftilefy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbilly1","download_url":"https://codeload.github.com/bbilly1/tilefy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbilly1%2Ftilefy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29503221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T08:07:58.651Z","status":"ssl_error","status_checked_at":"2026-02-16T08:07:56.823Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-31T19:12:49.250Z","updated_at":"2026-02-16T08:08:06.386Z","avatar_url":"https://github.com/bbilly1.png","language":"Python","funding_links":["https://paypal.me/bbilly1","https://www.paypal.com/webapps/billing/plans/subscribe?plan_id=P-03770005GR991451KMFGVPMQ","https://ko-fi.com/bbilly1"],"categories":[],"sub_categories":[],"readme":"![Tilefy](assets/tilefy-banner.jpg?raw=true \"Tilefy Banner\")  \n\n\u003ch1 align=\"center\"\u003eCreate beautiful tiles for your project\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://www.tilefy.me\" target=\"_blank\"\u003e\u003cimg src=\"https://tiles.tilefy.me/t/tilefy-github-stars.png\" alt=\"tilefy-github-stars\" title=\"Tilefy GitHub Stars\" height=\"50\" width=\"200\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://www.tilefy.me\" target=\"_blank\"\u003e\u003cimg src=\"https://tiles.tilefy.me/t/tilefy-docker.png\" alt=\"tilefy-docker\" title=\"Tilefy Docker Pulls\" height=\"50\" width=\"200\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## Table of contents\n- [Core functionality](#core-functionality)\n- [Screenshots](#screenshots)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [API requests](#api-requests)\n- [Plugins](#plugins)\n- [Donate](#donate)\n\n## Core functionality\n- Dynamically create and recreate PNG tiles\n- Showcase any project stats accessible over a public API\n- Customize to your liking with your branding and color scheme\n- Embed your tiles anywhere you can embed a image\n- Self Hosted with Docker\n\n## Screenshots\n![home screenshot](assets/screenshot.png?raw=true \"Tilefy Home Page\")  \n\n## Installation\nTake a look at the example `docker-compose.yml` file provided. Tilefy depends on two containers:\n\n### Tilefy\nMain Python application to create and serve your tiles, built with Flask.\n- Serves the interface on port `8000`\n- Needs a volume at **/data** to store your tiles, custom fonts and logos and your **tiles.yml** config file.\n- Set your Redis connection with the environment variables `REDIS_HOST` and `REDIS_PORT`.\n- Set the environment variable `TILEFY_HOST` to your full url from where you are hosting this application. Needed to build links and templates to embed your tiles. Don't add a trailing `/`.\n- Set your timezone with the `TZ` environment variable to configure the scheduler, defaults to *UTC*.\n\n### Redis JSON\nFunctions as a cache, holds your configurations.\n- Needs a volume at **/data** to store your configurations permanently.\n\n## Configuration\nCreate a yml config file at `/data/tiles.yml`. Take a look at the provided `tiles.example.yml` for the basic syntax. *tiles* is the top level key, list your tiles below. The main key of the tile is your slug and will become your url, so use no spaces or special characters. \n\n### tile_name\nGive your tile a unique human readable name.\n\n### background_color, font_color\nHex color code for background and font, make sure to add the *\"\"* to escape the *#* symbol. \n\n### width, height\nSize of the tile in pixels.\n\n### logos\nList of logos, get a list of pre installed logos:\n```bash\ndocker exec -it tilefy ls logos\n```\nAdd the pre installed logos by providing the file name. Contribute by adding additional commonly used logos. \n\nProvide your custom logos by adding them to `/data/logos/`, in PNG file format with transparent background. Add your custom logos by providing a relative path like `logos/file-name.png`.\n\n### font: optional\nFont defaults to *Vera.ttf*. Use a pre installed font from the *liberation* or *ttf-bitstream-vera* packages by providing the relative path from the truetype folder.\nList available pre installed fonts:\n```bash\ndocker exec -it tilefy ls /usr/share/fonts/truetype/liberation\ndocker exec -it tilefy ls /usr/share/fonts/truetype/ttf-bitstream-vera\n```\n\nProvide your custom font by adding them to `/data/fonts`, in TTF format only and add them with their relative path like `fonts/font-name.ttf`.\n\n### humanize: optional\nDefaults to `true` for all numbers. Shorten long numbers in to a more human readable string, like *14502* to *14.5K*.\n\n### recreate: optional\nSet the lifetime of your tiles and define when the tile will be recreated if requested. Defaults to *1d*, e.g. recreate every day.\n\nValid options:\n- *120*: A number indicates seconds till expire\n- *10min*: Minutes till expire\n- *2h*: Hours till expire\n- *1d*: Days till expire\n- *on_demand*: Will recreate for every request.\n\nNote: \n- Be aware of any rate limiting and API quotas you might face with a too short expiration.\n- There is a failsafe in place to block recreating tiles faster than every 60 seconds.\n\n## API requests\nGet values from a public API by providing the url and key_map.\n\n### url\nJSON API endpoint. If you can, filter and reduce the API response size by requesting only the required fields.\n\n### key_map\nNavigate the JSON object to find your desired value. Each item in the list navigates one level deeper, a `string` accesses a key and a `int` accesses an index in an array. \n\n*Example 1*\n```json\n{\n    \"pull_count\": 269912,\n    \"star_count\": 11,\n}\n```\nTo for example access the *pull_count* key in the top level of the response:\n```yml\nkey_map:\n  - pull_count\n```\n\n*Example 2*\n```json\n{\n    \"results\": [\n        {\n            \"status\": \"success\",\n            \"last_run\": \"timestamp\",\n        }\n    ]\n}\n```\n\nTo for example access the *status* key in the first dictionary of the results list:\n```yml\nkey_map:\n  - results\n  - 0\n  - status\n```\n\n## Plugins\nFor all values not accessible over a JSON API endpoint, this will need a dedicated solution by for example scraping the website. This is inherently less reliable as websites change more frequently than APIs.\n\n### Chrome extension users\nGet the amount of active chrome extension users.\n```yml\nplugin:\n  name: chrome-extension-users\n  id: jjnkmicfnfojkkgobdfeieblocadmcie\n```\n\nPlease contribute and open feature requests to add more.\n\n## Donate\nThe best donation to **Tilefy** is your time, contribute in any way you can to improve this project.  \nSecond best way to support the development is to provide for caffeinated beverages:\n* [Paypal.me](https://paypal.me/bbilly1) for a one time coffee\n* [Paypal Subscription](https://www.paypal.com/webapps/billing/plans/subscribe?plan_id=P-03770005GR991451KMFGVPMQ) for a monthly coffee\n* [ko-fi.com](https://ko-fi.com/bbilly1) for an alternative platform\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbilly1%2Ftilefy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbilly1%2Ftilefy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbilly1%2Ftilefy/lists"}