Python library for automated DXF file marking and manipulation to engrave your cut files
Project description
SnapMark
SnapMark is a Python library for applying intelligent, customizable text markings and engraving paths on DXF (AutoCAD) files.
It is designed to generate laser-engraving traces (not cutting paths) that make each part identifiable through incised labels, codes, and metadata.
Markings are rendered as vector segments (polylines), not DXF text entities — ensuring compatibility with CAM software that reads geometry, not fonts.
Built on top of the excellent ezdxf, it provides a simple API for marking, alignment, hole analysis, and batch processing — tailored for manufacturing, CNC workflows, and automated drawing preparation.
⚠️ Unit & Scale Notice
SnapMark is designed for sheet-metal parts measured in millimeters.
Since DXF files may contain arbitrary units (meters, inches, kilometers, or undefined scale), loading a drawing in a different unit system may produce text markings that appear extremely large, extremely small, or misplaced.
If your DXF is not in millimeters, you must rescale it before processing, or the resulting engraving paths may not match the actual geometry.
⚠️ 3D Geometry Notice
SnapMark works exclusively with 2D DXF geometry. If the drawing contains 3D entities (non-zero Z values, 3D polylines, meshes, solids, or blocks with elevation), SnapMark will refuse processing to avoid unpredictable text placement.
Please ensure your DXF is flattened before use.
Installation
pip install snapmark
Quick Start
import snapmark as sm
# Mark all DXF files with their filename
sm.mark_by_name("path/to/drawings")
# Custom sequence: filename + folder name
seq = (sm.SequenceBuilder()
.file_name()
.folder(num_chars=2) # firts 2 chars of folder name
.build())
sm.mark_with_sequence("path/to/drawings", seq, scale_factor=100)
Features
- ✅ Simple API - Mark files in a single function call
- ✅ Custom sequences - Combine filename parts, folder names, literals, and custom logic
- ✅ Automatic Alignment - Normalize orientation before marking
- ✅ Batch Processing - Process folders and subfolders with IterationManager
- ✅ Backup System - Automatic .bak creation and restoration
- ✅ Hole Utilities - Fast hole detection and counting for quality checks
- ✅ Extensible Architecture - Add your own operations and processing steps
Use Cases
- Manufacturing: Add part numbers and quantities to production drawings
- CAM workflows: Automatically mark drawings before CNC processing
- Quality control: Count holes and verify drawing specifications
- Batch processing: Apply consistent markings across large drawing sets
API Overview (Essentials)
Shortcuts (Simple Usage)
mark_by_name(folder)- Mark with filenamemark_by_splitted_text(folder, separator, part_index)- Mark with filename partmark_with_sequence(folder, sequence)- Mark with custom sequencequick_count_holes(folder, min_diam, max_diam)- Count holesrestore_backup(folder)- Restore from backupsprocess_single_file(file, *operations)- Pipeline on single file
SequenceBuilder (core)
seq = (sm.SequenceBuilder()
.file_name()
.file_part(separator="_", index=0)
.folder(num_chars=2)
.literal("TEXT")
.custom(lambda folder, file: "X")
.set_separator("-")
.build())
Operations (Advanced)
AddMark(sequence)- Add a numeric/alphanumeric marking rendered as vector segments (CAM-ready engraving paths)AddText(texts)- Add a DXF MTEXT entity (native text, not vectors — CAM support may vary)Aligner()- Aligns the drawing along its longest side in the X direction.CountHoles(find_func)- Count circlesAddX(find_func, x_size)- Add X marksRemoveCircle(find_func)- Remove circlesSubstituteCircle(find_func, new_radius)- Replace circles
📘 Documentation: (Documentation files will be available in the docs/ directory.)
Requirements
- Python 3.8+
- ezdxf >= 1.0.0
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details.
Author
Federico Sidraschi
LinkedIn | GitHub
Acknowledgments
Built with ezdxf - the excellent DXF library for Python.
Examples
SnapMark comes with a set of ready-to-run examples located in the examples/ folder.
These examples demonstrate common operations, including restoring backups, counting holes, and basic marking.
Keywords: DXF, CAD, AutoCAD, marking, automation, batch processing, manufacturing, CNC, CAM
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snapmark-2.1.0.tar.gz.
File metadata
- Download URL: snapmark-2.1.0.tar.gz
- Upload date:
- Size: 42.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc878a3789c9d98650911d90b2ee54918b9d36f560125668ff0ecd55568ea4d5
|
|
| MD5 |
d19b35b776a01472223d38da11ce20e4
|
|
| BLAKE2b-256 |
56a5f1b02e1d15dd2926990a523d68be5f670cbfc778df970760dd0974742b4a
|
File details
Details for the file snapmark-2.1.0-py3-none-any.whl.
File metadata
- Download URL: snapmark-2.1.0-py3-none-any.whl
- Upload date:
- Size: 47.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
152dc31b85b1bac989ae14701ab82011450032c2ede4a78d552c1137d371bdb2
|
|
| MD5 |
797b257fc347c530440b35b810d28584
|
|
| BLAKE2b-256 |
c5bd6257bedf4f44e1108fab31b7790f8849e31cc9754338e1ab9e6aadb3c911
|