# GeoGIF
[![Documentation Status](https://readthedocs.org/projects/geogif/badge/?version=latest)](https://geogif.readthedocs.io/en/latest/?badge=latest)
Make GIFs from time-stacked `xarray.DataArray`s (`time`, [optional `band`], `y`, `x`), dead-simple.
```python
from geogif import gif, dgif
gif(data_array)
dgif(dask_data_array).compute()
```
![Animation of shoreline moving on the coast of Cape Cod](docs/capecod.gif)
The "geo" part is a lie, actually. The arrays don't have to be geospatial in nature. But I called it GeoGIF because:
1. Wanting to animate a time-stack of imagery (like you'd get from [stackstac](https://stackstac.readthedocs.io/)) is a common task in the earth-observation/geospatial world.
1. I think `GeoGIF` is a hilarious idea<sup>[1](#geotiff)</sup>.
<a name="geotiff">1</a>: To ruin the joke, it sounds like GeoTIFF, a ubiquitous geospatial image format. If you also think this is a funny idea, and believe you'd have a better use for the name than I do, I'd happily cede it to you.
## Installation
```bash
pip install geogif
```
## Documentation
See https://geogif.readthedocs.io/en/latest/.
## Development
GeoGIF is managed by [Poetry](https://python-poetry.org/), so be sure that's installed first. To develop locally, first fork or clone the repo. Then, to set up a virtual environment and install the necessary dependencies:
```bash
cd geogif
poetry install
```
### Running Tests
GeoGIF has some basic end-to-end tests, written with [Hypothesis](https://hypothesis.readthedocs.io/en/latest/index.html). To run:
```bash
pytest
```
This will take ~30 seconds (longer the first time), as Hypothesis generates fake data to root out possible errors.
### Code style
GeoGIF is formatted with [shed](https://github.com/Zac-HD/shed), in order to allow for as few opinions as possible.
Raw data
{
"_id": null,
"home_page": "https://geogif.readthedocs.io/en/latest/index.html",
"name": "geogif",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Gabe Joseph",
"author_email": "gjoseph92@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/a1/c1/6e1fdf9339ae7e211e2b22c9fa9c07ff1653d208de8fb329cc404d95e6d0/geogif-0.3.tar.gz",
"platform": null,
"description": "# GeoGIF\n[![Documentation Status](https://readthedocs.org/projects/geogif/badge/?version=latest)](https://geogif.readthedocs.io/en/latest/?badge=latest)\n\n\nMake GIFs from time-stacked `xarray.DataArray`s (`time`, [optional `band`], `y`, `x`), dead-simple.\n\n```python\nfrom geogif import gif, dgif\ngif(data_array)\ndgif(dask_data_array).compute()\n```\n\n![Animation of shoreline moving on the coast of Cape Cod](docs/capecod.gif)\n\nThe \"geo\" part is a lie, actually. The arrays don't have to be geospatial in nature. But I called it GeoGIF because:\n\n1. Wanting to animate a time-stack of imagery (like you'd get from [stackstac](https://stackstac.readthedocs.io/)) is a common task in the earth-observation/geospatial world.\n1. I think `GeoGIF` is a hilarious idea<sup>[1](#geotiff)</sup>.\n\n\n<a name=\"geotiff\">1</a>: To ruin the joke, it sounds like GeoTIFF, a ubiquitous geospatial image format. If you also think this is a funny idea, and believe you'd have a better use for the name than I do, I'd happily cede it to you.\n\n## Installation\n\n```bash\npip install geogif\n```\n\n## Documentation\n\nSee https://geogif.readthedocs.io/en/latest/.\n\n## Development\n\nGeoGIF is managed by [Poetry](https://python-poetry.org/), so be sure that's installed first. To develop locally, first fork or clone the repo. Then, to set up a virtual environment and install the necessary dependencies:\n\n```bash\ncd geogif\npoetry install\n```\n\n### Running Tests\n\nGeoGIF has some basic end-to-end tests, written with [Hypothesis](https://hypothesis.readthedocs.io/en/latest/index.html). To run:\n\n```bash\npytest\n```\n\nThis will take ~30 seconds (longer the first time), as Hypothesis generates fake data to root out possible errors.\n\n### Code style\n\nGeoGIF is formatted with [shed](https://github.com/Zac-HD/shed), in order to allow for as few opinions as possible.\n",
"bugtrack_url": null,
"license": null,
"summary": "Render xarray timestacks into GIFs",
"version": "0.3",
"project_urls": {
"Homepage": "https://geogif.readthedocs.io/en/latest/index.html",
"Repository": "https://github.com/gjoseph92/geogif"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1332a2d6608ae23970b3cd84fa74201a40d68bc9ab93f08c38a64ee63f4cac4f",
"md5": "419f7e1a3fda6a8ee9629300138162f4",
"sha256": "8af0ad05a5e87d315d2bd56390d4aecddc9eecc5a3ee062cb6b63a7b765f989d"
},
"downloads": -1,
"filename": "geogif-0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "419f7e1a3fda6a8ee9629300138162f4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 8827,
"upload_time": "2025-01-24T18:21:50",
"upload_time_iso_8601": "2025-01-24T18:21:50.136569Z",
"url": "https://files.pythonhosted.org/packages/13/32/a2d6608ae23970b3cd84fa74201a40d68bc9ab93f08c38a64ee63f4cac4f/geogif-0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a1c16e1fdf9339ae7e211e2b22c9fa9c07ff1653d208de8fb329cc404d95e6d0",
"md5": "325e63b89dfde7b495b4c506d40ef96a",
"sha256": "559ad993d8cb9d4c86347a75aae9c38ec920a273abf9b29cba14ed1264dc143d"
},
"downloads": -1,
"filename": "geogif-0.3.tar.gz",
"has_sig": false,
"md5_digest": "325e63b89dfde7b495b4c506d40ef96a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 8276,
"upload_time": "2025-01-24T18:21:52",
"upload_time_iso_8601": "2025-01-24T18:21:52.039725Z",
"url": "https://files.pythonhosted.org/packages/a1/c1/6e1fdf9339ae7e211e2b22c9fa9c07ff1653d208de8fb329cc404d95e6d0/geogif-0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-24 18:21:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "gjoseph92",
"github_project": "geogif",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "geogif"
}