From 74a867a308cc01a745629364a177acfe6f95a011 Mon Sep 17 00:00:00 2001
From: Jayktopus <179423526+Jayktopus@users.noreply.github.com>
Date: Tue, 4 Aug 2026 23:35:49 +0200
Subject: [PATCH] Polish the public beta community launch
---
KNOWN_LIMITATIONS.md | 43 ++++++++++
README.md | 137 ++++++++++++++++++++------------
README_DE.md | 136 +++++++++++++++++++++----------
ROADMAP.md | 39 +++++++++
docs/COMMUNITY_POSTING_PLAN.md | 74 +++++++++++++++++
docs/releases/0.3.0-beta.8.md | 31 ++++++++
media/demo/scan2sketch-demo.gif | Bin 0 -> 5296106 bytes
package.xml | 4 +-
scan2sketch/__init__.py | 2 +-
9 files changed, 371 insertions(+), 95 deletions(-)
create mode 100644 KNOWN_LIMITATIONS.md
create mode 100644 ROADMAP.md
create mode 100644 docs/COMMUNITY_POSTING_PLAN.md
create mode 100644 docs/releases/0.3.0-beta.8.md
create mode 100644 media/demo/scan2sketch-demo.gif
diff --git a/KNOWN_LIMITATIONS.md b/KNOWN_LIMITATIONS.md
new file mode 100644
index 0000000..c30d54a
--- /dev/null
+++ b/KNOWN_LIMITATIONS.md
@@ -0,0 +1,43 @@
+# Known limitations
+
+Scan2Sketch is a public beta. This document describes the current boundaries so
+that results can be evaluated responsibly.
+
+## Geometry and measurement
+
+- A single flatbed scan contains a 2D silhouette, not complete 3D geometry.
+- Hidden features, part height, thread dimensions and functional tolerances
+ cannot be inferred reliably from one image.
+- Scanner DPI metadata is only a nominal scale. Accurate work requires a saved
+ Scan2Sketch calibration for every resolution in use.
+- Shadows, chamfers, translucent materials, reflections and parts that do not
+ sit flat can make the physical material edge ambiguous.
+- Subpixel fitting can improve a visible edge location but cannot prove which
+ of several visible edge bands is the intended functional boundary.
+- Critical dimensions must be checked with suitable measuring equipment.
+
+## Performance
+
+- 1200 dpi scans require substantially more memory and processing time than
+ 300 or 600 dpi scans.
+- The optional SAM and Light HQ-SAM modes require additional model weights and
+ isolated dependencies. OpenCV remains the deterministic fallback.
+- Very large full-bed scans should be cropped to the relevant region when
+ practical.
+
+## Platform support
+
+- Windows with FreeCAD 1.1.1 is the primary tested configuration.
+- macOS support is beta. The OpenCV workflow has been tested on Apple silicon;
+ full-vision model backends are experimental.
+- Linux is not yet an officially supported installation target.
+- Scan2Sketch is not yet distributed through the FreeCAD Addon Manager.
+
+## Input recommendations
+
+For the most repeatable results, use lossless PNG, a flat opaque part, fixed
+scanner settings, disabled automatic sharpening and a valid calibration for
+the selected DPI. Avoid JPEG for measurement work.
+
+When reporting a problem, attach the exported diagnostic report and, if its
+licence and privacy allow it, the smallest scan that reproduces the issue.
diff --git a/README.md b/README.md
index 9df3cf5..723cb6f 100644
--- a/README.md
+++ b/README.md
@@ -1,73 +1,110 @@
+
+
# Scan2Sketch
-Scan2Sketch is an open-source FreeCAD add-on that converts calibrated flatbed
-scans of flat parts into editable, validated Sketcher geometry. It can also
-create a uniform Part Design pad with a user-specified height.
+**Turn calibrated flatbed scans into clean, editable FreeCAD sketches.**
+
+[](https://www.freecad.org/)
+[](https://github.com/Jayktopus/Scan2Sketch-OpenSource/actions/workflows/core-tests.yml)
+[](LICENSE)
+[](https://github.com/Jayktopus/Scan2Sketch-OpenSource/releases)
+
+[Install](#installation) · [How it works](#how-it-works) · [Roadmap](ROADMAP.md) · [Contribute](CONTRIBUTING.md) · [Deutsch](README_DE.md)
+
+
+
+
+
+Scan2Sketch is an open-source FreeCAD add-on for reconstructing the measurable
+2D silhouette of a flat physical part. It combines scanner calibration,
+computer vision and CAD-aware contour fitting, then validates the result before
+creating a real `Sketcher::SketchObject`.
+
+> Scan2Sketch is beta software. Always verify safety-critical and
+> manufacturing-critical dimensions against the physical part.
-> **Beta software:** verify critical dimensions and the final FreeCAD shape
-> before manufacturing a part.
+## How it works
-Deutsch: [README_DE.md](README_DE.md)
+1. **Scan** the part flat on the scanner glass and save it as a lossless PNG.
+2. **Calibrate** the scanner once for each resolution you use.
+3. **Analyze** the scan and select the intended component and holes.
+4. **Review** colour-coded contours, measurements and geometric candidates.
+5. **Create** a validated FreeCAD sketch and, optionally, a uniform pad.
-## Highlights
+The correction workspace supports both a guided workflow for new users and
+fine-grained tools for advanced contour editing.
-- PNG, JPEG and TIFF input with DPI metadata and scanner calibration
-- hybrid OpenCV, SAM and Light HQ-SAM object detection with an OpenCV fallback
-- local, full-resolution material-edge refinement and uncertainty estimates
-- selectable components, holes and colour-coded smart segments
-- guided correction workflow plus an expert toolbox
-- line, circle, arc and B-spline fitting with continuity-aware smoothing
-- freehand material-edge guidance, masks, undo/redo and direct measurement
-- topology validation before creating a real `Sketcher::SketchObject`
-- optional XY clearance and `PartDesign::Pad`
-- German UI on German systems and English fallback
-- local processing: scans are not uploaded by Scan2Sketch
+## Capabilities
-Scan2Sketch reconstructs a 2D silhouette. It does not infer hidden geometry or
-part height from a single scan.
+| Area | What Scan2Sketch provides |
+| --- | --- |
+| Input and scale | PNG, JPEG and TIFF input; DPI metadata; ruler and grid calibration; measurements in millimetres |
+| Detection | Hybrid OpenCV, SAM and Light HQ-SAM workflow with a deterministic OpenCV fallback |
+| Edge quality | Full-resolution material-edge refinement, multiple contour candidates and uncertainty estimates |
+| Geometry | Lines, circles, arcs and continuity-aware B-splines; holes and colour-coded smart segments |
+| Correction | Guided review, freehand edge guidance, masks, direct measurement, undo and redo |
+| FreeCAD output | Topology validation, real Sketcher geometry, optional XY clearance and `PartDesign::Pad` |
+| Privacy | Local processing; Scan2Sketch does not upload scans |
+
+Scan2Sketch reconstructs a **2D silhouette**. It does not infer hidden geometry,
+functional dimensions or part height from a single image. See
+[Known limitations](KNOWN_LIMITATIONS.md) for the current boundaries.
## Installation
-The primary supported environment is **Windows with FreeCAD 1.1.1**; macOS
-support is in beta. The OpenCV workflow has been tested on Apple silicon, while
-the optional SAM / Light HQ-SAM full-vision mode remains experimental on
-macOS. Install from source using [INSTALL.md](INSTALL.md)
-(Windows) or [INSTALL_MACOS.md](INSTALL_MACOS.md). The installation stays inside the
-current user's FreeCAD data directory and uses isolated Python environments;
-it does not modify FreeCAD program files or install global Python packages.
+### Windows
+
+Windows with FreeCAD 1.1.1 is the primary tested environment. Follow the
+[Windows installation guide](INSTALL.md). Installation is confined to the
+current user's FreeCAD data directory and isolated Python environments; no
+FreeCAD program files or global Python packages are modified.
+
+### macOS
+
+macOS support is in beta. The OpenCV workflow has been tested on Apple silicon;
+the optional SAM and Light HQ-SAM full-vision mode remains experimental. Follow
+the [macOS installation guide](INSTALL_MACOS.md).
+
+Uninstallation instructions: [Windows](UNINSTALL.md).
+
+## Recommended scan settings
+
+For reproducible input, use NAPS2 with the scanner's WIA or TWAIN driver:
-Uninstallation: [UNINSTALL.md](UNINSTALL.md).
+- save as lossless PNG;
+- disable automatic sharpening and enhancement where possible;
+- use 600 dpi for general work or 1200 dpi for small critical features;
+- calibrate every DPI mode used by Scan2Sketch;
+- keep the part flat against the glass; and
+- verify important dimensions with a caliper.
-## Recommended scanning workflow
+## Project status
-For reproducible results, NAPS2 is recommended: select the scanner's WIA or
-TWAIN driver, save as lossless PNG, disable automatic sharpening where
-possible, and use 600 dpi for normal work or 1200 dpi for small critical
-features. Complete Scan2Sketch's calibration sequence for every DPI mode used.
-Keep the part flat against the glass and verify important dimensions with a
-caliper.
+Scan2Sketch is an active public beta. The current priorities are reliable
+installation, broader scanner testing, measurable contour quality and a clear
+path toward the FreeCAD Addon Manager.
-## Development and tests
+- [Roadmap: Now, Next and Ideas](ROADMAP.md)
+- [Known limitations](KNOWN_LIMITATIONS.md)
+- [Open issues](https://github.com/Jayktopus/Scan2Sketch-OpenSource/issues)
+- [Community discussions](https://github.com/Jayktopus/Scan2Sketch-OpenSource/discussions)
-```powershell
-& '.\.venv-opencv\Scripts\python.exe' -m unittest discover -s tests -p 'test_*.py'
-```
+## Contributing
-On macOS and Linux:
+Bug reports, licensed example scans, documentation improvements and code
+contributions are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md) and the
+issues labelled
+[`good first issue`](https://github.com/Jayktopus/Scan2Sketch-OpenSource/labels/good%20first%20issue)
+or [`help wanted`](https://github.com/Jayktopus/Scan2Sketch-OpenSource/labels/help%20wanted).
-```bash
-./.venv-opencv/bin/python -m unittest discover -s tests -p 'test_*.py'
-```
+> I’m looking for contributors interested in contour fitting, FreeCAD
+> integration, documentation and testing across different scanners.
Development setup is documented in
-[docs/development_setup.md](docs/development_setup.md). Contributions and
-reproducible issue reports are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md).
+[docs/development_setup.md](docs/development_setup.md).
## License
Scan2Sketch is free software licensed under
-[GNU GPL v3 or later](LICENSE). The GPL permits use, modification,
-redistribution and commercial use, while requiring distributed derivative
-works to preserve the corresponding source and GPL freedoms. Third-party
-libraries and optional model weights retain their own licenses; see
-[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
+[GNU GPL v3 or later](LICENSE). Third-party libraries and optional model weights
+retain their own licences; see [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
diff --git a/README_DE.md b/README_DE.md
index ad438ac..f61bf9f 100644
--- a/README_DE.md
+++ b/README_DE.md
@@ -1,58 +1,110 @@
+
+
# Scan2Sketch
-Scan2Sketch ist ein quelloffenes FreeCAD-Add-on, das kalibrierte
-Flachbettscans flacher Bauteile in bearbeitbare und geprüfte
-Sketcher-Geometrie umwandelt. Optional entsteht daraus ein Part-Design-Pad mit
-einer ausdrücklich eingegebenen Höhe.
+**Aus kalibrierten Flachbettscans werden saubere, bearbeitbare FreeCAD-Skizzen.**
+
+[](https://www.freecad.org/)
+[](https://github.com/Jayktopus/Scan2Sketch-OpenSource/actions/workflows/core-tests.yml)
+[](LICENSE)
+[](https://github.com/Jayktopus/Scan2Sketch-OpenSource/releases)
+
+[Installation](#installation) · [Funktionsweise](#so-funktioniert-es) · [Roadmap](ROADMAP.md) · [Mitwirken](CONTRIBUTING.md) · [English](README.md)
+
+
+
+
+
+Scan2Sketch ist ein quelloffenes FreeCAD-Add-on zur Rekonstruktion der
+messbaren 2D-Silhouette eines flachen realen Bauteils. Es verbindet
+Scannerkalibrierung, Bildverarbeitung und CAD-gerechte Konturanpassung. Vor der
+Erzeugung eines echten `Sketcher::SketchObject` wird das Ergebnis geprüft.
+
+> Scan2Sketch ist Beta-Software. Sicherheits- und fertigungsrelevante Maße
+> müssen immer am realen Bauteil kontrolliert werden.
+
+## So funktioniert es
+
+1. **Scannen:** Bauteil flach auf das Scannerglas legen und verlustfrei als PNG speichern.
+2. **Kalibrieren:** Den Scanner einmal für jede verwendete Auflösung vermessen.
+3. **Analysieren:** Gewünschtes Bauteil und Innenkonturen auswählen.
+4. **Prüfen:** Farbcodierte Konturen, Messwerte und Geometrievorschläge kontrollieren.
+5. **Erzeugen:** Eine geprüfte FreeCAD-Skizze und optional ein gleichmäßiges Pad erstellen.
-> **Beta-Software:** Kritische Maße und das endgültige FreeCAD-Modell müssen
-> vor der Fertigung kontrolliert werden.
+Das Korrekturfenster bietet einen geführten Ablauf für neue Nutzer und präzise
+Einzelwerkzeuge für fortgeschrittene Konturbearbeitung.
-## Wichtigste Funktionen
+## Funktionsumfang
-- PNG-, JPEG- und TIFF-Import mit DPI-Metadaten und Scannerkalibrierung
-- hybride OpenCV-/SAM-/Light-HQ-SAM-Erkennung mit OpenCV-Rückfallmodus
-- lokale Materialkantenverfeinerung in Originalauflösung
-- auswählbare Bauteile, Löcher und farbcodierte Smart-Segmente
-- geführte Korrektur sowie ein erweiterter Werkzeugbereich
-- Geraden, Kreise, Bögen und stetigkeitsbewusste B-Splines
-- Nachzeichnen der Materialkante, Maskenwerkzeuge, Undo/Redo und Maßband
-- Topologieprüfung vor der echten `Sketcher::SketchObject`-Erzeugung
-- optionales XY-Spiel und `PartDesign::Pad`
-- deutsche und englische Oberfläche
-- ausschließlich lokale Verarbeitung durch Scan2Sketch
+| Bereich | Funktionen |
+| --- | --- |
+| Eingabe und Maßstab | PNG, JPEG und TIFF; DPI-Metadaten; Zollstock- und Rasterkalibrierung; Messungen in Millimetern |
+| Erkennung | Hybrider OpenCV-, SAM- und Light-HQ-SAM-Ablauf mit deterministischem OpenCV-Rückfallmodus |
+| Kantenqualität | Materialkantenverfeinerung in Originalauflösung, mehrere Konturkandidaten und Unsicherheitsangaben |
+| Geometrie | Geraden, Kreise, Bögen und stetigkeitsbewusste B-Splines; Löcher und farbcodierte Smart-Segmente |
+| Korrektur | Geführte Prüfung, Nachzeichnen der Materialkante, Masken, Maßband sowie Rückgängig/Wiederholen |
+| FreeCAD-Ausgabe | Topologieprüfung, echte Sketcher-Geometrie, optionales XY-Spiel und `PartDesign::Pad` |
+| Datenschutz | Lokale Verarbeitung; Scan2Sketch lädt keine Scans hoch |
-Scan2Sketch rekonstruiert eine 2D-Silhouette. Verdeckte Geometrie oder die Höhe
-eines Bauteils werden nicht aus einem einzelnen Scan erfunden.
+Scan2Sketch rekonstruiert eine **2D-Silhouette**. Verdeckte Geometrie,
+Funktionsmaße oder die Höhe eines Bauteils werden nicht aus einem einzelnen
+Bild abgeleitet. Die aktuellen Grenzen stehen unter
+[Bekannte Einschränkungen](KNOWN_LIMITATIONS.md).
## Installation
-Primär unterstützt wird **Windows mit FreeCAD 1.1.1**. macOS-Unterstützung ist
-als Beta verfügbar: Der OpenCV-Ablauf wurde auf Apple Silicon getestet, der
-optionale SAM-/Light-HQ-SAM-Vollmodus gilt dort noch als experimentell. Die
-Anleitungen stehen in [INSTALL_DE.md](INSTALL_DE.md) für Windows und
-[INSTALL_MACOS.md](INSTALL_MACOS.md) für macOS. Die Installation bleibt im
-FreeCAD-Benutzerordner und verändert weder FreeCAD-Systemdateien noch die
-globale Python-Installation.
+### Windows
+
+Primär getestet wird Windows mit FreeCAD 1.1.1. Die
+[deutsche Windows-Anleitung](INSTALL_DE.md) führt durch die Installation. Das
+Add-on bleibt im FreeCAD-Benutzerordner und verändert weder
+FreeCAD-Programmdateien noch die globale Python-Installation.
+
+### macOS
+
+macOS-Unterstützung ist im Beta-Stadium. Der OpenCV-Ablauf wurde auf Apple
+Silicon getestet; der optionale SAM-/Light-HQ-SAM-Vollmodus ist dort noch
+experimentell. Anleitung: [INSTALL_MACOS.md](INSTALL_MACOS.md).
Deinstallation: [UNINSTALL_DE.md](UNINSTALL_DE.md).
-## Empfohlener Scanablauf
+## Empfohlene Scan-Einstellungen
+
+Für reproduzierbare Eingaben wird NAPS2 mit dem WIA- oder TWAIN-Treiber des
+Scanners empfohlen:
+
+- verlustfrei als PNG speichern;
+- automatische Schärfung und Bildverbesserung möglichst abschalten;
+- 600 dpi für normale Bauteile oder 1200 dpi für kleine kritische Merkmale;
+- jede verwendete DPI-Stufe in Scan2Sketch kalibrieren;
+- das Bauteil flach auf das Glas legen; und
+- wichtige Maße mit einer Schieblehre kontrollieren.
+
+## Projektstatus
+
+Scan2Sketch ist eine aktive öffentliche Beta. Im Mittelpunkt stehen eine
+zuverlässige Installation, Tests mit weiteren Scannern, messbare Konturqualität
+und die Vorbereitung für den FreeCAD Addon Manager.
+
+- [Roadmap: Jetzt, Als Nächstes und Ideen](ROADMAP.md)
+- [Bekannte Einschränkungen](KNOWN_LIMITATIONS.md)
+- [Offene Issues](https://github.com/Jayktopus/Scan2Sketch-OpenSource/issues)
+- [Community-Diskussionen](https://github.com/Jayktopus/Scan2Sketch-OpenSource/discussions)
+
+## Mitwirken
-Empfohlen wird NAPS2 mit WIA- oder TWAIN-Treiber und verlustfreiem PNG. Soweit
-möglich automatische Schärfung abschalten. 600 dpi eignen sich für normale
-Bauteile, 1200 dpi für kleine kritische Merkmale. Jede verwendete DPI-Stufe
-muss in Scan2Sketch kalibriert werden. Das Bauteil flach auflegen und wichtige
-Maße zusätzlich mit einer Schieblehre prüfen.
+Fehlerberichte, lizenzierte Beispielscans, Dokumentationsverbesserungen und
+Codebeiträge sind willkommen. Der Einstieg steht in
+[CONTRIBUTING.md](CONTRIBUTING.md). Besonders geeignete Aufgaben sind mit
+[`good first issue`](https://github.com/Jayktopus/Scan2Sketch-OpenSource/labels/good%20first%20issue)
+oder [`help wanted`](https://github.com/Jayktopus/Scan2Sketch-OpenSource/labels/help%20wanted)
+markiert.
-## Mitwirken und Lizenz
+Gesucht werden Mitwirkende für Konturanpassung, FreeCAD-Integration,
+Dokumentation und Tests mit unterschiedlichen Scannern.
-Tests und Entwicklungsaufbau stehen in
-[docs/development_setup.md](docs/development_setup.md). Hinweise zum Mitwirken:
-[CONTRIBUTING.md](CONTRIBUTING.md).
+## Lizenz
-Scan2Sketch steht unter der [GNU GPL v3 oder neuer](LICENSE). Die GPL erlaubt
-Nutzung, Veränderung, Weitergabe und auch kommerzielle Nutzung; bei der
-Weitergabe abgeleiteter Versionen müssen der zugehörige Quellcode und die
-GPL-Freiheiten erhalten bleiben. Hinweise zu Fremdkomponenten stehen in
-[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
+Scan2Sketch ist freie Software unter der [GNU GPL v3 oder neuer](LICENSE).
+Fremdbibliotheken und optionale Modellgewichte behalten ihre eigenen Lizenzen;
+Einzelheiten stehen in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
diff --git a/ROADMAP.md b/ROADMAP.md
new file mode 100644
index 0000000..78a89d1
--- /dev/null
+++ b/ROADMAP.md
@@ -0,0 +1,39 @@
+# Scan2Sketch roadmap
+
+This roadmap communicates direction, not a promise of dates. Priorities may
+change as real scanner data and contributor feedback reveal better paths.
+
+## Now
+
+- Stabilise the public beta on FreeCAD 1.1.1 for Windows.
+- Validate installation and diagnostics on clean user systems.
+- Expand the scanner and real-part compatibility matrix.
+- Measure contour accuracy on reproducible synthetic and real benchmarks.
+- Improve documentation, examples and first-time contributor tasks.
+- Complete the packaging review for a future FreeCAD Addon Manager submission.
+- Validate the OpenCV workflow on macOS and clearly document the limits of the
+ optional full-vision backends.
+
+## Next
+
+- Investigate a supported Linux installation path.
+- Improve line, circle, arc and B-spline fitting on mixed technical contours.
+- Add more licensed example scans with expected measurements and topology.
+- Reduce manual correction effort for difficult shadows, chamfers and
+ reflective surfaces.
+- Expand translations and platform-specific troubleshooting.
+- Automate more FreeCAD integration tests across supported platforms.
+
+## Ideas
+
+- Optional paired scans with the part rotated by 180 degrees to distinguish
+ illumination artefacts from stable material edges.
+- A specialised boundary model trained on opt-in, reviewed flatbed-scan data.
+- Opt-in export of user-corrected masks for benchmark and training datasets.
+- Additional vectorisation backends evaluated against the same CAD metrics.
+- Carefully constrained multi-view reconstruction for simple parts, kept
+ separate from the primary 2D workflow.
+
+Please open or join a
+[discussion](https://github.com/Jayktopus/Scan2Sketch-OpenSource/discussions)
+before starting a large roadmap item.
diff --git a/docs/COMMUNITY_POSTING_PLAN.md b/docs/COMMUNITY_POSTING_PLAN.md
new file mode 100644
index 0000000..cf171ea
--- /dev/null
+++ b/docs/COMMUNITY_POSTING_PLAN.md
@@ -0,0 +1,74 @@
+# Community launch material
+
+These drafts are starting points. Each community should receive a message
+written for its audience rather than an identical cross-post.
+
+## FreeCAD forum: Addon Development
+
+**Title:** Scan2Sketch public beta: calibrated flatbed scans to validated Sketcher geometry
+
+Scan2Sketch is a GPL-licensed FreeCAD add-on that converts calibrated flatbed
+scans of flat parts into editable `Sketcher::SketchObject` geometry. The
+workflow covers scanner calibration, local computer-vision analysis, visual
+contour correction, topology validation and an optional Part Design pad.
+
+Windows with FreeCAD 1.1.1 is the primary tested setup. macOS support is in
+beta, and Linux installation still needs investigation. I am particularly
+looking for feedback on FreeCAD integration, geometric fitting, installation
+and reproducible tests with different scanners.
+
+Repository: https://github.com/Jayktopus/Scan2Sketch-OpenSource
+
+## FreeCAD Users Showcase
+
+**Title:** Reconstructing a flat physical part from a scanner in FreeCAD
+
+This demonstration shows the complete Scan2Sketch workflow: select a lossless
+flatbed scan, review the detected material edge, create a real FreeCAD sketch
+and optionally pad it into a solid. The goal is to shorten the repetitive
+tracing step while keeping the result inspectable and editable.
+
+Scan2Sketch remains a beta, so critical dimensions still need verification
+against the physical part. Feedback and real-world test cases are welcome.
+
+Repository: https://github.com/Jayktopus/Scan2Sketch-OpenSource
+
+## Hacker News
+
+**Title:** Show HN: Scan2Sketch – calibrated flatbed scans to editable FreeCAD sketches
+
+I built an open-source FreeCAD add-on that reconstructs the 2D silhouette of a
+flat physical part from a calibrated scanner image. It combines local computer
+vision with CAD-aware line, circle, arc and B-spline fitting, exposes candidate
+contours for correction, validates topology, and writes a real Sketcher object
+rather than a pixel-sized polyline.
+
+All scan processing is local. The project is GPL-3.0-or-later and currently a
+public beta focused on Windows and FreeCAD 1.1.1. I would value feedback on the
+measurement pipeline, packaging and cross-platform support.
+
+Repository: https://github.com/Jayktopus/Scan2Sketch-OpenSource
+
+## Reddit: r/FreeCAD and r/CAD
+
+**Title:** Open-source FreeCAD add-on for turning calibrated flatbed scans into sketches
+
+I have released Scan2Sketch as a public beta. It imports a scan of a flat part,
+uses a scanner-specific calibration, lets the user review or correct detected
+contours, and creates editable Sketcher geometry with optional padding.
+
+The project is intended for measurable 2D silhouettes, not automatic 3D
+reconstruction. I am looking for testers with different scanners and for
+contributors interested in contour fitting, FreeCAD integration,
+documentation and installation.
+
+Repository and demo: https://github.com/Jayktopus/Scan2Sketch-OpenSource
+
+## Posting checklist
+
+- Use the demonstration that best matches the community.
+- State that the software is beta and identify supported platforms.
+- Link to one focused issue when asking for a specific kind of help.
+- Answer questions and turn reproducible reports into issues.
+- Thank testers and contributors in release notes.
+- Publish meaningful updates rather than repeating the launch post.
diff --git a/docs/releases/0.3.0-beta.8.md b/docs/releases/0.3.0-beta.8.md
new file mode 100644
index 0000000..e31fe7f
--- /dev/null
+++ b/docs/releases/0.3.0-beta.8.md
@@ -0,0 +1,31 @@
+# Scan2Sketch 0.3.0 beta 8
+
+This source-only public beta improves the project's community entry points and
+incorporates the initial macOS contribution.
+
+## Highlights
+
+- Added a complete visual demonstration to the English and German landing pages.
+- Added beta installation support for macOS, including Apple silicon paths.
+- Documented that OpenCV is tested on Apple silicon while SAM and Light HQ-SAM
+ remain experimental on macOS.
+- Added a public roadmap and a central list of known limitations.
+- Added focused contribution tasks and community launch drafts.
+- Improved installation, platform and scan-quality guidance.
+
+## Important limitations
+
+- Windows with FreeCAD 1.1.1 remains the primary supported environment.
+- Scan2Sketch reconstructs 2D silhouettes; it does not infer complete 3D parts.
+- Critical dimensions must be checked against the physical part.
+- Linux installation and FreeCAD Addon Manager distribution are not yet supported.
+
+## Installation
+
+Download the source archive attached automatically by GitHub and follow:
+
+- [Windows installation](../../INSTALL.md)
+- [macOS installation](../../INSTALL_MACOS.md)
+
+This release contains source code only. It does not include executable
+installers, model weights or private beta artefacts.
diff --git a/media/demo/scan2sketch-demo.gif b/media/demo/scan2sketch-demo.gif
new file mode 100644
index 0000000000000000000000000000000000000000..fc3a20e1eff59078cecb3975f01585cda1c2d0d9
GIT binary patch
literal 5296106
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