View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
View watershedmodeling's full-sized avatar

Block or report watershedmodeling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Watershed Modeling — Python for Hydrology & Watershed Modeling Automation

Watershed Modeling

Python for Hydrology & Watershed Modeling Automation

Live siteBuilt with EleventyDeployed on Cloudflare Pages

A focused, production-grade reference for automating hydrologic workflows in Python — from raw elevation data all the way to simulated runoff hydrographs.

🌐 www.watershedmodeling.com


What this is

Watershed Modeling is a deep, code-first knowledge base for hydrologists, environmental engineers, and Python GIS teams who need to move hydrologic analysis out of desktop GIS and into reproducible, scalable pipelines. Every guide is built around concrete, runnable patterns: which library to reach for, why an algorithm behaves the way it does on a given terrain, and how to wrap it in a defensible pipeline with logging, idempotency, topology validation, and QA/QC against authoritative hydrography.

It is not a collection of surface-level tutorials. Each page pairs the underlying hydrology and algorithm mechanics with complete, copy-pasteable Python, validation protocols, and the failure modes that actually bite in operational work — memory exhaustion on 1 m LiDAR, projection artifacts, flat-area stagnation, equifinality in calibration, and more.

Who it's for

  • Hydrologists & environmental engineers automating delineation, routing, and rainfall-runoff modeling.
  • Python GIS developers building spatial pipelines with rasterio, richdem, pysheds, whitebox, geopandas, and shapely.
  • Research & agency technical teams who need auditable, reproducible workflows at regional-to-continental scale.

What's covered

The site is organized into four in-depth areas covering the full hydrologic pipeline:

Every guide is cross-linked so you can follow a technique from a broad overview down to a specific parameter, tool integration, or decision ("SRTM vs LiDAR", "10 m vs 1 m", "MFD vs D-Infinity").

How it's built

A static site generated with Eleventy from Markdown source, and deployed to Cloudflare Pages. Content lives in content/, templates and assets in src/, and the Eleventy configuration in .eleventy.js.

npm install # install dependencies
npm run serve # local dev server with live reload
npm run build # production build into _site/
npm run deploy # build + publish to Cloudflare Pages

Repository layout

PathPurpose
content/All page content (Markdown with JSON-LD, inline SVG diagrams, and Python examples)
src/Layouts, includes, CSS, JS, and image assets
index.njkHome page template
sitemap.njkGenerated sitemap.xml
.eleventy.jsEleventy build configuration
scripts/Build helpers (icon generation, code-block QA)

Commits

All commits to this repository are authored solely by the repository owner (watershedmodeling). No co-authors or additional trailers are attached to any commit.

License

Content and code © Watershed Modeling. All rights reserved.

Popular repositories Loading

  1. watershedmodeling watershedmodelingPublic

    Python for hydrology & watershed modeling automation — production-grade guides for DEM processing, flow routing, watershed delineation, and rainfall-runoff modeling.

    JavaScript