Technical blog on oriented object detection for Earth Observation and the oriented-det package: https://deeplearning.earth
- Home (
/) — recent posts (blog index) - About (
/about/) — author bio, photo, company, and social links - Demo — optical satellite demo on dl4eo.com (opens in a new tab)
Built with Hugo and the hugo-coder theme (git submodule at themes/hugo-coder). Site language is en so Hugo loads the theme’s i18n/en.toml.
git submodule update --init --recursive
hugo server -DOpen http://localhost:1313/.
Posts dated in the future are omitted from a default hugo / Netlify build until their date: timestamp. New posts publish at 06:00 +07, on Monday or Thursday. The v0.4.0 note is dated 10 October 2026 so it is included from that morning. Preview later posts locally with:
hugo server -D -FOn each publish day, run make publish so Netlify rebuilds from main and Hugo includes that day’s post. LinkedIn teasers and the partner email live under drafts/v0.3/ (not Hugo content).
Requires Hugo Extended (for SCSS). The Netlify config pins HUGO_VERSION in netlify.toml.
Posts that run oriented-det inference expect the package’s uv venv. This repo does not vendor Python deps; direnv activates the sibling install when you cd here.
Default path: ~/Projects/oriented-det/.venv. One-time:
direnv allowIf the repo lives elsewhere, copy .envrc.local.example to .envrc.local and set ORIENTED_DET_ROOT. Verify:
which odet
odet --version # or: python -c "import oriented_det; print(oriented_det.__file__)"Create the venv in the oriented-det repo (see its installation docs):
cd ~/Projects/oriented-det
uv venv --python 3.12
uv pip install torch torchvision
uv pip install -r requirements.txt
uv pip install -e .Settings are defined in netlify.toml:
- Build command:
hugo --minify - Publish directory:
public - Environment:
HUGO_VERSION,GIT_SUBMODULE_STRATEGY=recursive
Pushing to main also triggers a Netlify build. If the Netlify UI still overrides build settings, either clear those overrides or align them with netlify.toml.
Requires the Netlify CLI for a rebuild without a new commit:
npm install -g netlify-cli
netlify login # once| Command | Purpose |
|---|---|
make check |
Strict local Hugo build (also run by make test) |
make publish |
Run make check, then netlify deploy --prod --trigger so deeplearning.earth rebuilds from git |
make publish does not upload public/. Use it on each Mon/Thu after 06:00 +07; Hugo omits posts until that timestamp.
Posts live under content/posts/. The about page is content/about.md (layout: layouts/_default/about.html). Static assets (images, favicon) are under static/.
Taxonomies: tags, categories, and series (see config.toml). The oriented-det series hub is at /series/oriented-det/ (content/series/oriented-det/_index.md). Legacy YOLO/Kaggle posts use categories: ["archive"].
URLs: Blog home is /. /posts/ redirects to / on Netlify (individual posts stay at /posts/<slug>/).
layouts/index.html— blog home (post list) instead of the theme’s avatar landing pagelayouts/posts/li.html— post title plusdescriptionon list pageslayouts/_default/about.html— about page with avatar and social linkslayouts/partials/header.html— menutarget/relsupport and theme header build fixlayouts/partials/list.html— taxonomy/series list pages use the same post list markuplayouts/_default/list.html— term pages (tags, categories, series) use the term name as the title; tag names are not i18n keyslayouts/posts/list.html—/posts/section list (redirects to/on Netlify)assets/css/custom.css— single-column blog layout (post list, about page, post meta)assets/css/medium-zoom.css— overlay styles for click-to-zoom images (medium-zoom)assets/js/medium-zoom.min.js+assets/js/image-zoom.js— click-to-zoom on post imageslayouts/_default/_markup/render-image.html— markdown images get classpost-image-zoom(strips#layoutTextWidthfrom URLs)