Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
6a27ef7
initial experimentation
blaylockbk Nov 27, 2025
9be27f1
progress on experimenting with a new subset downloader
blaylockbk Nov 28, 2025
1ce4b22
more progress on experimental inventory and subset downloader
blaylockbk Nov 29, 2025
b201a4c
don't precompute byte_range, just use start and end byte
blaylockbk Nov 29, 2025
64f947f
download/extract from both remote and local file
blaylockbk Dec 3, 2025
81e9a28
implement NewHerbie class from Herbie base class
blaylockbk Dec 3, 2025
71dd3ae
update
blaylockbk Dec 3, 2025
bd9213d
provide classic filter behavior
blaylockbk Dec 4, 2025
f7aef99
improved inventory filtering
blaylockbk Dec 4, 2025
116ed73
refactor xarray method into its own file
blaylockbk Dec 12, 2025
7df0f0b
more development
blaylockbk Dec 12, 2025
585d386
progress on using new model templates
blaylockbk Dec 13, 2025
1d3c651
updates
blaylockbk Dec 14, 2025
4763f7c
lets give ty a try
blaylockbk Dec 20, 2025
9a145d8
begin to write a changelog so I can remember what I did
blaylockbk Dec 20, 2025
ea3783d
better type hints in original core.py
blaylockbk Dec 20, 2025
6727423
from herbie.experimental import Herbie
blaylockbk Dec 20, 2025
9ce28b2
I have DEBUG on for now
blaylockbk Dec 20, 2025
2c37f79
still just playing around in a notebook
blaylockbk Dec 20, 2025
713abe4
lazy load all available templates, and don't subclass from original H…
blaylockbk Dec 20, 2025
b4454a2
some details about template files
blaylockbk Dec 20, 2025
3494525
udates to rich display and more changes in default template
blaylockbk Dec 20, 2025
f837445
name downloaded subsets with a hash label on end
blaylockbk Dec 24, 2025
534f358
update
blaylockbk Dec 24, 2025
2faecc7
some unfinished updates
blaylockbk Jan 24, 2026
a3dce33
Merge branch 'main' of https://github.com/blaylockbk/Herbie into pola…
blaylockbk Feb 12, 2026
ae374ad
upgrade dev dependencies to latest
blaylockbk Feb 12, 2026
0e73e20
add new model templates (not yet tested)
blaylockbk Feb 12, 2026
30acf14
update model list
blaylockbk Feb 12, 2026
82c152e
claude automatically converted some model template files to the exper…
blaylockbk Feb 12, 2026
bb3e2c6
add aifs template
blaylockbk Feb 12, 2026
9305909
refactor: unify URMA model templates with a new domain parameter and …
blaylockbk Mar 6, 2026
f634db7
feat: Implement a cascading configuration system via TOML files and e…
blaylockbk Mar 6, 2026
d35472c
fix reassignment of save_dir
blaylockbk Mar 6, 2026
72d96f7
Merge branch 'main' of https://github.com/blaylockbk/Herbie into pola…
blaylockbk Mar 7, 2026
4a52586
sample herbie.toml file
blaylockbk Mar 15, 2026
a859e12
made a _rep_html_ for notebook view. Not exactly what I want, but it'…
blaylockbk Apr 1, 2026
9d6af3b
added more descriptive error message for failed range downloads.
blaylockbk Apr 10, 2026
5f267dc
initial commit for herbie.v2
blaylockbk Apr 21, 2026
cb4ba7e
updates (formatting)
blaylockbk Apr 21, 2026
8fd441c
updated display
blaylockbk Apr 21, 2026
2e18eb1
add new method to show that a file was found
blaylockbk Apr 21, 2026
33c87f7
minor formatting
blaylockbk Apr 21, 2026
1905f87
display honor priority order
blaylockbk Apr 23, 2026
2fd0690
make public self.SOURCES instead of self._sources
blaylockbk Apr 23, 2026
dec66d7
support type checking and IDE intellisense
blaylockbk Apr 23, 2026
255107c
add more display elements to html display
blaylockbk Apr 25, 2026
083f560
update display with info modal
blaylockbk Apr 26, 2026
6d077d9
add file size indicator for resolved sources
blaylockbk Apr 26, 2026
809839b
updates to resolve() indicator for active source.
blaylockbk Apr 28, 2026
814b7a2
Preliminary Zarr support
blaylockbk Apr 29, 2026
a9d03b5
complete rewrite of FastHerbie, return a single concated file (or par…
blaylockbk Apr 29, 2026
5ef9fc7
open hypercube in a DataTree
blaylockbk Apr 29, 2026
fa75290
Begin replacing "fxx" arguments with "step"
blaylockbk Apr 30, 2026
5e4a6a4
fix status checks
blaylockbk Apr 30, 2026
6d6c5c5
udpates
blaylockbk Apr 30, 2026
cb49eaf
start adding new docs
blaylockbk Apr 30, 2026
6fa9dcf
add v2 to api docs page
blaylockbk Apr 30, 2026
0c4cc12
add v2 api section to docs
blaylockbk Apr 30, 2026
7eceb10
update header
blaylockbk Apr 30, 2026
6a65763
include notebooks in v2 docs
blaylockbk Apr 30, 2026
21716d4
Update pull request event types in workflow
blaylockbk Apr 30, 2026
2fd68c8
Add pull request types to workflow triggers
blaylockbk Apr 30, 2026
1dcf2ab
upates with generating index files
blaylockbk May 2, 2026
9f95676
allow user-specified label
blaylockbk May 2, 2026
b4b9f21
update labeling for partitions
blaylockbk May 2, 2026
1428245
update fast example
blaylockbk May 2, 2026
3d6e937
update docs pages with more api
blaylockbk May 2, 2026
f8bbad0
update api docs caption
blaylockbk May 2, 2026
25fdcee
updates
blaylockbk May 2, 2026
c7af941
Merge branch 'main' of https://github.com/blaylockbk/Herbie into pola…
blaylockbk May 5, 2026
77133af
updates
blaylockbk May 5, 2026
b62681a
progress on downloading GRIB2 files from a directory listing where on…
blaylockbk May 6, 2026
26949ca
rename the extras for herbie.v2
blaylockbk May 17, 2026
730f105
moved navy models to own file
blaylockbk May 19, 2026
88e043b
typo
blaylockbk May 19, 2026
03e1740
initial support for RRFS and REFS model
blaylockbk May 22, 2026
783cacd
update to RRFS and REFS templates and example
blaylockbk May 22, 2026
4f2a8b6
added a HRRR demo notebook
blaylockbk Jun 4, 2026
298d3d8
add section for models
blaylockbk Jun 4, 2026
a14977f
add models
blaylockbk Jun 4, 2026
99242b4
added plot to hrrr example
blaylockbk Jun 4, 2026
ddaa4c5
add glob pattern to docs toctree
blaylockbk Jun 4, 2026
02d2e88
try the grid for migration guide
blaylockbk Jun 4, 2026
f7827e0
use rst for migration guide
blaylockbk Jun 4, 2026
2a42206
update migration guide
blaylockbk Jun 4, 2026
2e7091f
minor change to migration guide
blaylockbk Jun 4, 2026
c30fdcf
added a GFS example
blaylockbk Jun 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/tests-conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches: [main]
pull_request:
branches: [main]
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:

# Cancel in-progress jobs when pushing to the same branch.
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/tests-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches: [main]
pull_request:
branches: [main]
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:

# Cancel in-progress jobs when pushing to the same branch.
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13
7 changes: 7 additions & 0 deletions docs/api_reference/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Docstring reference for the ``herbie`` module

.. toctree::
:maxdepth: 2
:caption: Herbie - Legacy API

core
accessors
Expand All @@ -14,3 +15,9 @@ Docstring reference for the ``herbie`` module
paint
wgrib2
misc

.. toctree::
:maxdepth: 2
:caption: Herbie - v2 API

v2
38 changes: 38 additions & 0 deletions docs/api_reference/v2.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
=========
herbie.v2
=========


I recommend importing the Herbie Namespace or a specific model directly


.. code-block:: python

from herbie.v2 import Herbie

H = Herbie.HRRR('2025-01-01')

.. code-block:: python

from herbie.v2 import HRRR

H = HRRR('2025-01-01')


.. toctree::
:maxdepth: 2

.. currentmodule:: herbie.v2

.. autosummary::
:toctree: _autosummary

Herbie
_base
_config
_download
_inventory
_search_help
_sources
_xarray
fast
5 changes: 5 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@
"navbar_center": ["navbar-nav"],
"footer_start": ["copyright"],
"footer_center": ["sphinx-version"],
"announcement": (
"🚧 <b>Herbie v2</b> is in active development — a redesigned API with "
"Polars, Rich, and a cleaner model interface. "
"<a href='/en/stable/v2/index.html'>See the v2 preview docs →</a>"
),
}

html_sidebars = {}
Expand Down
11 changes: 10 additions & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ Herbie: Download Weather Forecast Model Data in Python

**Access HRRR, GFS, RAP, GEFS, ECMWF and 15+ Weather Models**

.. note::
A redesigned **Herbie v2** API is in active development.
See :doc:`/v2/index` for a preview.

**Herbie** is a Python package that makes downloading and working with numerical weather prediction (NWP) model data simple and fast. Whether you're a researcher, meteorologist, data scientist, or weather enthusiast, Herbie provides easy access to forecast data from NOAA, ECMWF, and other sources.

Expand All @@ -34,8 +37,9 @@ Herbie: Download Weather Forecast Model Data in Python

/user_guide/index
/gallery/index
/grib_reference/index
/api_reference/index
/v2/index
/grib_reference/index

.. grid:: 2
:gutter: 3
Expand All @@ -46,6 +50,11 @@ Herbie: Download Weather Forecast Model Data in Python

Learn how to use Herbie with tutorials and examples

.. grid-item-card:: 🧪 Herbie v2 Preview
:link: v2/index
:link-type: doc
New API with Polars, Rich, and cleaner model templates

.. grid-item-card:: 🖼️ Model Gallery
:link: gallery/index
:link-type: doc
Expand Down
112 changes: 112 additions & 0 deletions docs/v2/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# New Herbie

New Dependencies

- Polars: I much prefer using this DataFrame library over Pandas.
- Rich: For printing information for the user in a fancy way.

The default save directory is now `~/herbie-data/`

```python
from herbie.v2 import Herbie
```

Herbie is now a namespace, with many model HerbieModel classes for different models.

```python
H = Herbie.HRRR('2025-01-01')
```

you may also just import the model you want to use instead

```python
from herbie.v2 import HRRR
H = HRRR('2025-01-01')
```

## Herbie config file

There is a new config file that can be used

...

## Default download directory structure

Herbie by default downloads ata to `~/herbie-data`, and the file structure matches the directory structure of the original model source.

## `fxx` is now `step`

The forecast lead time is now controlled with the step parameter, and may be a timedelta object (which is converted to integer hours). The following are equivalent:

```python
from herbie.v2 import Herbie
from datetime import datetime, timedelta

H = Herbie.HRRR('2025-01-01', step=12)

H = Herbie.HRRR(datetime(2025,1,1), step=timedelta(hours=12))
```

## Notebook HTML Representor

For convenient user exploration, when displaying a Herbie object in a Jupyter Notebook, there is a new HTML display showing the parameters selected and sources.

## Model Templates

Big change to the model templates. These are subclassed from the base class HerbieModel.

## Inventory

Use Polars as the DataFrame. I'm a big Polars fan, and find it much easier to read and write than Pandas.

Since I'm using Polars for the DataFrame, users can filter the inventory with expressions for each column rather than just the "search_this" column.

The data and index source are now included in the inventory dataframe. This will enable downloading fields from multiple files and "build your own GRIB files."

## Download

Download for subsets are now done with multiple threads, one thread for each subset group.

Use rich progress bars for downloads.

Remote file paths are preserved rather than specifying a custom data path. I wanted to make it possible to use rclone to quickly pre-fill your `herbie-data/` directory, then use Herbie to access those files locally.

## xarray

Multiple hypercubes are returned as a DataTree.

## status

Display the sources and which sources have been checked and if the files exist.

## resolve

Manually check if files exist

```python
# Find first available file
H.resolve()

# Check specific source
H.resolve('google')

# Check all
H.resolve('all')
```

## FastHerbie

This behaves _very_ different. Inventory DataFrames are concatted together for many files, then parallel downloads happen and join the fields into a new, custom grib file. It's a "build your own GRIB" feature.

Examples:

- Get all 6-hr `TMP:2 m` forecasts for the day in one file.
- Get all `GRD:10 m` forecasts initialized at a single time.

## Zarr Support

Built infrastructure to support access to Zarr model sources

```python
Herbie.HRRR.from_zarr('dynamical', 'analysis')
```
2,418 changes: 2,418 additions & 0 deletions docs/v2/example_datatree.ipynb

Large diffs are not rendered by default.

Loading
Loading