{"id":17654293,"url":"https://github.com/pgaskin/windy","last_synced_at":"2025-09-11T06:36:44.613Z","repository":{"id":204380475,"uuid":"711443324","full_name":"pgaskin/windy","owner":"pgaskin","description":"Android live wallpaper visualizing local wind patterns. Based on the official Pixel 2017 windy live wallpaper, but has up-to-date data and additional options.","archived":false,"fork":false,"pushed_at":"2025-02-19T09:58:41.000Z","size":2226,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-11T13:31:15.576Z","etag":null,"topics":["android","gfs","gles3","go","golang","grib2","java","live-wallpaper","opengl","pixel","wind"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pgaskin.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,"zenodo":null}},"created_at":"2023-10-29T09:38:44.000Z","updated_at":"2025-02-05T20:50:26.000Z","dependencies_parsed_at":"2023-11-24T12:08:20.590Z","dependency_job_id":"bd3fcaf1-c552-4c3f-a8a6-69cf50d27335","html_url":"https://github.com/pgaskin/windy","commit_stats":{"total_commits":62,"total_committers":1,"mean_commits":62.0,"dds":0.0,"last_synced_commit":"082362817cf003d58de348655d9072ec535d4faf"},"previous_names":["pgaskin/windy"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/pgaskin/windy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgaskin%2Fwindy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgaskin%2Fwindy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgaskin%2Fwindy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgaskin%2Fwindy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pgaskin","download_url":"https://codeload.github.com/pgaskin/windy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgaskin%2Fwindy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274589627,"owners_count":25312971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-11T02:00:13.660Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["android","gfs","gles3","go","golang","grib2","java","live-wallpaper","opengl","pixel","wind"],"created_at":"2024-10-23T12:09:21.788Z","updated_at":"2025-09-11T06:36:44.580Z","avatar_url":"https://github.com/pgaskin.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eWindy Live Wallpaper\u003c/h1\u003e\n\n\u003ca href=\"https://github.com/pgaskin/windy/actions/workflows/ci.yml\"\u003e\u003cimg align=\"right\" src=\"https://github.com/pgaskin/windy/actions/workflows/ci.yml/badge.svg\" alt=\"ci\"\u003e\u003c/a\u003e\n\n**Android live wallpaper visualizing local wind patterns.**\n\nThe shaders are based on the official Pixel windy live wallpaper, but this has:\n\n- Completely rewritten Java code.\n- More color schemes.\n- Updated wind data (the official data was last updated in 2019).\n- Better location handling.\n- Lower memory and CPU usage.\n- Updated libGDX.\n- Other fixes.\n\n\u003e [!NOTE]\n\u003e On some devices (e.g., the Pixel 8), the shaders are buggy, causing the lines to appear jagged or straight left/right/up/down. I'm still working on figuring out the root cause when I have time.\n\n[**`Download`**](https://github.com/pgaskin/windy/releases/latest)\n\n#### Screenshots\n\n\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_blue.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_green.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_blush.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_maroon.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_midnight.jpg\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_sepia.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_skybluewhirled.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_sunsetwhirled.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_turquoisewhirled.jpg\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"app/src/main/res/drawable/windy_sparkwhirled.jpg\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\n#### Wind field images\n\nThe wind field images used by the live wallpaper are generated from [NOAA GFS](https://www.ncei.noaa.gov/products/weather-climate-models/global-forecast) [0.25° ANL](https://www.nco.ncep.noaa.gov/pmb/products/gfs/) data ([updated](https://www.nco.ncep.noaa.gov/pmb/nwprod/prodstat/) every 6 hours) using the wind vector values ([UGRD, VGRD](https://origin.cpc.ncep.noaa.gov/products/wesley/wgrib2/wind_uv.html)) at 850 mb elevation (this is arbitrary).\n\nThe wind vector (in m/s) is extracted from the [GRIB2](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/) forecast data and mapped into a RGB 8bpp image (equirectangular projection, y: latitude 90° to -90°, longitude -180° to 180°) with one pixel per grid cell (1440x721). The red/green values are the u/v components (east/north) of the unit vector mapped from -1-1 to 0-255, and the blue value is the magnitude of the unit vector clamped and mapped from 0-30 (this value is arbitrary) to 0-255. The image is encoded as a JPEG.\n\nThe elevation and wind vector magnitude range I chose seems to produce similar images as the old official one from 2019 (available at [`www.gstatic.com/pixel/livewallpaper/windy/gfs_wind_1000.jpg`](https://www.gstatic.com/pixel/livewallpaper/windy/gfs_wind_1000.jpg)), and the red/green/blue level curves are similar.\n\nTo create the texture passed to the particle system and background shaders, the image is scaled down to 1/4 of the size (i.e., 360x180) using bilinear filtering, then blurred using a gaussian kernel of radius 2. This matches what was done by the original live wallpaper. This filtering is done to smooth out the streamlines and remove local outlier values, resulting in less detailed and rounder wallpaper wind trails. Since the wallpaper still looks good, and is interesting in its own way before this filtering, I'm probably going to add variants with an unfiltered wind field later.\n\nSee [`windy.api.pgaskin.net/wind_field.jpg`](https://windy.api.pgaskin.net/wind_field.jpg) for the latest wind field image generated by this [code](./api/windy.go), and [`windy.api.pgaskin.net/wind_cache.png?filter=1`](https://windy.api.pgaskin.net/wind_cache.png?filter=1) for the latest filtered texture.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpgaskin%2Fwindy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpgaskin%2Fwindy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpgaskin%2Fwindy/lists"}