Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Open Wine Appellation Map
翻訳待ち
Loading the full README. The saved excerpt is shown below.
A reference wiki + map of European wine appellations, generated mechanically
from public regulator data. France (INAO + JORF) is the canonical pipeline;
Spain (eAmbrosia + EUR-Lex) lives under scripts/es/; Portugal (eAmbrosia +
IVV) under scripts/pt/; Italy under scripts/it/; Austria under
scripts/at/; Slovenia under scripts/si/. Every per-record fact traces
back to a public-source document — nothing here is hand-written narrative.Read the full README ↗A reference wiki + map of European wine appellations, generated mechanically
from public regulator data. France (INAO + JORF) is the canonical pipeline;
the other 20 countries, the United Kingdom included, each have a sibling
pipeline under scripts/<cc>/ sourced from the eAmbrosia EU register, the
national regulator, the Swiss federal repertoire or the UK GI register. The
per-country list, coverage and mechanics live in CLAUDE.md. Every
per-record fact traces back to a public-source document — nothing here is
hand-written narrative.
The FR pipeline runs end-to-end across the full AOC/AOP/IGP corpus, emitting
per-denomination markdown pages (one per appellation plus one per DGC —
Muscadet sub-crus, Côtes du Rhône Villages, Alsace grands crus, Chablis
premier-cru climats, etc.). The other 20 country pipelines follow the same
stage layout (00 fetch → 01 fetch documents → 02 extract → 02d/02e terroir
facts → 03 wiki), each with its own document source and geometry chain;
coverage per country is a function of which wines have a fetchable
specification, and CLAUDE.md documents every country's sources, coverage
and curator workflow. Stage 04 merges all 21 streams into a single
four-locale interactive map (EN / FR / ES / NL). The site is deployed at
https://www.openwinemap.com.
Requires Python 3.12 and uv.
uv sync
For LLM-driven stages (machine translation in 02c/02e, terroir-fact extraction in 02d), set:
export ANTHROPIC_API_KEY=...
Each of those stages also supports --provider=ollama (local Ollama HTTP
API) and --provider=manual (round-trip flow — see below).
Stages are independent and re-runnable. Each writes a manifest, so reruns
are no-ops when nothing upstream changed. Run them in order from a clean
checkout to rebuild wiki/ from scratch.
For the unattended happy path, scripts/run_pipeline.py drives FR + ES
end-to-end (then stage 04). It forwards --provider / --workers /
--model / --ollama-url to the LLM stages (02c / 02d / 02e), and
supports slicing with --fr / --es / --from=STAGE / --to=STAGE.
Stage names are the script path under scripts/ minus .py (e.g.
02_extract_cahiers, es/02_extract_pliegos). Use --list to preview
the resolved plan. The PT pipeline is run directly (see below) — it's
not yet wired into the driver.
.venv/bin/python scripts/run_pipeline.py --provider=ollama --workers=2
.venv/bin/python scripts/run_pipeline.py --fr --from=02_extract_cahiers --provider=ollama
.venv/bin/python scripts/run_pipeline.py --es --from=02_extract_pliegos --list
Caveat for stage 01: PDF downloads are content-addressed and skip when the
sha is already on disk, but the INAO product-page → show_texte → BO Agri
resolution walk runs on every invocation (thousands of HTTP requests at
--delay 0.8). This is intentional — it's how newly-published modifying
arrêtés get discovered — so a rerun against a fully-populated manifest is
still chatty, just bandwidth-light.
FR pipeline:
uv run scripts/00_fetch_data.py # public datasets → raw/
uv run scripts/01_scrape_cahiers.py # cahier PDFs → raw/inao/cahiers/
uv run scripts/01b_solve_legifrance.py # Legifrance-only AOCs via headless Chromium (optional)
uv run scripts/02_extract_cahiers.py # PDF → JSON → raw/inao/cahier-extracted/
uv run scripts/02b_fetch_grape_lexicon.py # Wikipedia (grapes) → raw/wikipedia/grapes/
uv run scripts/02b_fetch_aoc_lexicon.py # Wikipedia (AOCs, fr) → raw/wikipedia/aocs/fr/
uv run scripts/02b_fetch_style_lexicon.py # Wikipedia (styles) → raw/wikipedia/styles/
uv run scripts/02b_translate_grapes.py # grape-tooltip i18n → raw/translations/grapes/
uv run scripts/02b_translate_styles.py # style-tooltip i18n → raw/translations/styles/
uv run scripts/02g_fetch_vivc.py # VIVC IDs + prime names → raw/vivc/
uv run scripts/02d_extract_terroir_facts.py # cahier+wiki bullets → raw/terroir-facts/
uv run scripts/02c_translate_summaries.py # FR → en/es/nl → raw/translations/summaries/
uv run scripts/02e_translate_terroir_facts.py # FR → en/es/nl → raw/translations/terroir-facts/
uv run scripts/03_generate_wiki.py # markdown pages → wiki/*.md
ES pipeline (run before stage 04 so its records merge into the map):
uv run scripts/es/00_fetch_data.py # eAmbrosia + GISCO + SIGPAC → raw/es/
uv run scripts/es/01_fetch_pliegos.py # EU-OJ HTML pliegos → raw/es/oj-pages/
uv run scripts/es/01b_solve_waf.py # WAF-blocked subset via headless Chromium
uv run scripts/es/02_extract_pliegos.py # HTML → JSON → raw/es/pliegos-extracted/
uv run scripts/es/02f_extract_national_pliegos.py --all # national-pliego variety augmentation
uv run scripts/02b_fetch_aoc_lexicon.py --lang es --source raw/es/pliegos-extracted/
uv run scripts/es/02d_extract_terroir_facts.py
uv run scripts/es/02e_translate_terroir_facts.py
uv run scripts/es/03_generate_wiki.py # markdown pages → wiki/*.md
PT pipeline (run before stage 04 so its records merge into the map):
uv run scripts/pt/00_fetch_data.py # eAmbrosia + IVV + CAOP 2025 → raw/pt/
uv run scripts/pt/01_fetch_cadernos.py # IVV caderno PDFs → raw/pt/ivv/cadernos/
uv run scripts/pt/02_extract_cadernos.py # PDF → JSON → raw/pt/cadernos-extracted/
uv run scripts/02b_fetch_aoc_lexicon.py --lang pt --source raw/pt/cadernos-extracted/
uv run scripts/pt/02d_extract_terroir_facts.py
uv run scripts/pt/02e_translate_terroir_facts.py
uv run scripts/pt/03_generate_wiki.py # markdown pages → wiki/*.md
Then build the combined map:
uv run scripts/04_build_maps.py # map + tiles (FR + ES + PT merged) → wiki/index.html, wiki/{fr,es,nl}/, wiki/map-data/
To preview the built site locally:
This is the beginning of the README. Read the rest at the original. Read the full README ↗