lathe-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lathe_mcp-0.1.0/.github/workflows/test.yml +45 -0
- lathe_mcp-0.1.0/.gitignore +14 -0
- lathe_mcp-0.1.0/LICENSE +6 -0
- lathe_mcp-0.1.0/PKG-INFO +198 -0
- lathe_mcp-0.1.0/README.md +165 -0
- lathe_mcp-0.1.0/pyproject.toml +61 -0
- lathe_mcp-0.1.0/src/lathe/__init__.py +3 -0
- lathe_mcp-0.1.0/src/lathe/image_ops.py +247 -0
- lathe_mcp-0.1.0/src/lathe/media_ops.py +211 -0
- lathe_mcp-0.1.0/src/lathe/pdf_ops.py +251 -0
- lathe_mcp-0.1.0/src/lathe/security.py +134 -0
- lathe_mcp-0.1.0/src/lathe/server.py +328 -0
- lathe_mcp-0.1.0/tests/Dockerfile.test +14 -0
- lathe_mcp-0.1.0/tests/conftest.py +124 -0
- lathe_mcp-0.1.0/tests/fixtures/LARGE_IMAGE_README.md +9 -0
- lathe_mcp-0.1.0/tests/generate_fixtures.py +85 -0
- lathe_mcp-0.1.0/tests/test_image.py +209 -0
- lathe_mcp-0.1.0/tests/test_media.py +60 -0
- lathe_mcp-0.1.0/tests/test_pdf.py +91 -0
- lathe_mcp-0.1.0/tests/test_security.py +151 -0
- lathe_mcp-0.1.0/tests/test_server.py +150 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
|
|
20
|
+
- name: Install external deps
|
|
21
|
+
run: |
|
|
22
|
+
sudo apt-get update
|
|
23
|
+
sudo apt-get install -y ffmpeg tesseract-ocr ghostscript
|
|
24
|
+
|
|
25
|
+
- name: Install Python deps
|
|
26
|
+
run: |
|
|
27
|
+
pip install -e ".[test]"
|
|
28
|
+
pip install pip-audit
|
|
29
|
+
|
|
30
|
+
- name: Generate test fixtures
|
|
31
|
+
run: python tests/generate_fixtures.py
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: pytest -v --cov=lathe --cov-report=xml --cov-fail-under=55
|
|
35
|
+
|
|
36
|
+
- name: Security audit
|
|
37
|
+
run: pip-audit
|
|
38
|
+
|
|
39
|
+
- name: Leakage scan
|
|
40
|
+
run: |
|
|
41
|
+
! grep -ri "charlieseay\|seaynicroute\|192\.168\.0" src/ || (echo "LEAK DETECTED" && exit 1)
|
|
42
|
+
|
|
43
|
+
- name: Path traversal audit
|
|
44
|
+
run: |
|
|
45
|
+
! grep -rn "os\.system\|subprocess\.call\|subprocess\.Popen.*shell=True" src/ || (echo "UNSAFE SHELL DETECTED" && exit 1)
|
lathe_mcp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Copyright (c) 2026 Seaynic Labs LLC. All rights reserved.
|
|
2
|
+
|
|
3
|
+
This software is proprietary and confidential. Unauthorized copying, distribution,
|
|
4
|
+
modification, or use of this software, via any medium, is strictly prohibited.
|
|
5
|
+
|
|
6
|
+
A valid license is required for use. See https://seayniclabs.com for licensing terms.
|
lathe_mcp-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lathe-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: File and media processing MCP server — resize, convert, optimize, extract.
|
|
5
|
+
Project-URL: Homepage, https://seayniclabs.com
|
|
6
|
+
Project-URL: Repository, https://github.com/seayniclabs/lathe
|
|
7
|
+
Author-email: Charlie Seay <charlie@seayniclabs.com>
|
|
8
|
+
License-Expression: LicenseRef-Proprietary
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: audio,file-processing,image,mcp,ocr,pdf,video
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: Other/Proprietary License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Multimedia :: Graphics
|
|
17
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
|
|
18
|
+
Classifier: Topic :: Text Processing
|
|
19
|
+
Requires-Python: >=3.12
|
|
20
|
+
Requires-Dist: httpx
|
|
21
|
+
Requires-Dist: mcp[cli]
|
|
22
|
+
Requires-Dist: pillow
|
|
23
|
+
Provides-Extra: full
|
|
24
|
+
Requires-Dist: ffmpeg-python; extra == 'full'
|
|
25
|
+
Requires-Dist: pypdf; extra == 'full'
|
|
26
|
+
Requires-Dist: pytesseract; extra == 'full'
|
|
27
|
+
Provides-Extra: test
|
|
28
|
+
Requires-Dist: pip-audit; extra == 'test'
|
|
29
|
+
Requires-Dist: pypdf; extra == 'test'
|
|
30
|
+
Requires-Dist: pytest; extra == 'test'
|
|
31
|
+
Requires-Dist: pytest-cov; extra == 'test'
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# Lathe — File & Media Processing MCP Server
|
|
35
|
+
|
|
36
|
+
Transforming raw files into precision output — the Swiss army knife for file processing.
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## What It Does
|
|
43
|
+
|
|
44
|
+
Lathe is an MCP server that gives AI assistants direct access to file and media processing operations. 16 tools across four categories handle the most common file transformation tasks: image manipulation, PDF operations, audio/video processing, and OCR text extraction.
|
|
45
|
+
|
|
46
|
+
Install the core package for image processing, or install with extras to unlock PDF, media, and OCR capabilities.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Tool Reference
|
|
51
|
+
|
|
52
|
+
### Image
|
|
53
|
+
|
|
54
|
+
| Tool | Description | Key Parameters |
|
|
55
|
+
|------|-------------|----------------|
|
|
56
|
+
| `image_info` | Get image metadata (dimensions, format, mode, EXIF) | `input_path` |
|
|
57
|
+
| `image_resize` | Resize with aspect ratio preservation | `input_path`, `output_path`, `width`, `height`, `percentage` |
|
|
58
|
+
| `image_convert` | Convert format (png, jpeg, webp, avif, bmp) | `input_path`, `output_path`, `format` |
|
|
59
|
+
| `image_optimize` | Optimize for web delivery | `input_path`, `output_path`, `quality`, `strip_metadata` |
|
|
60
|
+
| `image_crop` | Crop a rectangular region | `input_path`, `output_path`, `x`, `y`, `width`, `height` |
|
|
61
|
+
| `image_thumbnail` | Generate a square-fit thumbnail | `input_path`, `output_path`, `size` |
|
|
62
|
+
|
|
63
|
+
### PDF
|
|
64
|
+
|
|
65
|
+
| Tool | Description | Key Parameters |
|
|
66
|
+
|------|-------------|----------------|
|
|
67
|
+
| `pdf_info` | Get PDF metadata (pages, title, author, encryption) | `input_path` |
|
|
68
|
+
| `pdf_extract_text` | Extract text, with OCR fallback | `input_path`, `pages` |
|
|
69
|
+
| `pdf_merge` | Merge multiple PDFs into one | `input_paths`, `output_path` |
|
|
70
|
+
| `pdf_to_images` | Convert pages to images (requires ghostscript) | `input_path`, `output_dir`, `pages`, `format` |
|
|
71
|
+
|
|
72
|
+
### Audio / Video
|
|
73
|
+
|
|
74
|
+
| Tool | Description | Key Parameters |
|
|
75
|
+
|------|-------------|----------------|
|
|
76
|
+
| `audio_convert` | Convert audio format (mp3, wav, flac, aac, ogg) | `input_path`, `output_path`, `format` |
|
|
77
|
+
| `audio_info` | Get audio metadata (duration, bitrate, sample rate) | `input_path` |
|
|
78
|
+
| `video_thumbnail` | Extract a frame from video as image | `input_path`, `output_path`, `timestamp` |
|
|
79
|
+
| `video_info` | Get video metadata (duration, resolution, codec) | `input_path` |
|
|
80
|
+
|
|
81
|
+
### OCR
|
|
82
|
+
|
|
83
|
+
| Tool | Description | Key Parameters |
|
|
84
|
+
|------|-------------|----------------|
|
|
85
|
+
| `ocr_image` | Extract text from image via Tesseract | `input_path` |
|
|
86
|
+
|
|
87
|
+
### Utility
|
|
88
|
+
|
|
89
|
+
| Tool | Description | Key Parameters |
|
|
90
|
+
|------|-------------|----------------|
|
|
91
|
+
| `health` | Server status, version, dependency availability | — |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Installation
|
|
96
|
+
|
|
97
|
+
Core install (image tools only):
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
pip install lathe-mcp
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Full install (PDF, audio/video, OCR):
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
pip install "lathe-mcp[full]"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### System Dependencies
|
|
110
|
+
|
|
111
|
+
Some tools require external binaries. Install only what you need:
|
|
112
|
+
|
|
113
|
+
| Dependency | Required For | Install |
|
|
114
|
+
|------------|-------------|---------|
|
|
115
|
+
| ffmpeg | Audio/video tools | `brew install ffmpeg` / `apt install ffmpeg` |
|
|
116
|
+
| tesseract | OCR tools | `brew install tesseract` / `apt install tesseract-ocr` |
|
|
117
|
+
| ghostscript | `pdf_to_images` | `brew install ghostscript` / `apt install ghostscript` |
|
|
118
|
+
|
|
119
|
+
The `health` tool reports which dependencies are available at runtime.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
Run the server directly:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
lathe
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Or via the MCP CLI:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
mcp run lathe
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Claude Code
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
claude mcp add lathe -- /path/to/venv/bin/lathe
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Claude Desktop
|
|
144
|
+
|
|
145
|
+
Add to your Claude Desktop config (`claude_desktop_config.json`):
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"mcpServers": {
|
|
150
|
+
"lathe": {
|
|
151
|
+
"command": "/path/to/venv/bin/lathe",
|
|
152
|
+
"env": {
|
|
153
|
+
"LATHE_WORKING_DIR": "/path/to/allowed/directory"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Configuration
|
|
163
|
+
|
|
164
|
+
| Variable | Description | Default |
|
|
165
|
+
|----------|-------------|---------|
|
|
166
|
+
| `LATHE_WORKING_DIR` | Root directory for all file operations | Current working directory |
|
|
167
|
+
|
|
168
|
+
All input and output paths are resolved relative to and constrained within `LATHE_WORKING_DIR`.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Security
|
|
173
|
+
|
|
174
|
+
- **Sandboxed file access** — all paths validated against `LATHE_WORKING_DIR`
|
|
175
|
+
- **Path traversal protection** — `../` and absolute paths outside the sandbox are rejected
|
|
176
|
+
- **Symlink escape detection** — symlinks resolving outside the working directory are blocked
|
|
177
|
+
- **Decompression bomb guard** — Pillow's built-in protections are active
|
|
178
|
+
- **File size limits** — 500 MB maximum per input file
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Development
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git clone https://github.com/seayniclabs/lathe.git
|
|
186
|
+
cd lathe
|
|
187
|
+
python -m venv .venv && source .venv/bin/activate
|
|
188
|
+
pip install -e ".[test,full]"
|
|
189
|
+
python -m pytest tests/ -q
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## License
|
|
195
|
+
|
|
196
|
+
Proprietary. Copyright (c) 2026 Seaynic Labs LLC. All rights reserved.
|
|
197
|
+
|
|
198
|
+
See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Lathe — File & Media Processing MCP Server
|
|
2
|
+
|
|
3
|
+
Transforming raw files into precision output — the Swiss army knife for file processing.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What It Does
|
|
10
|
+
|
|
11
|
+
Lathe is an MCP server that gives AI assistants direct access to file and media processing operations. 16 tools across four categories handle the most common file transformation tasks: image manipulation, PDF operations, audio/video processing, and OCR text extraction.
|
|
12
|
+
|
|
13
|
+
Install the core package for image processing, or install with extras to unlock PDF, media, and OCR capabilities.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Tool Reference
|
|
18
|
+
|
|
19
|
+
### Image
|
|
20
|
+
|
|
21
|
+
| Tool | Description | Key Parameters |
|
|
22
|
+
|------|-------------|----------------|
|
|
23
|
+
| `image_info` | Get image metadata (dimensions, format, mode, EXIF) | `input_path` |
|
|
24
|
+
| `image_resize` | Resize with aspect ratio preservation | `input_path`, `output_path`, `width`, `height`, `percentage` |
|
|
25
|
+
| `image_convert` | Convert format (png, jpeg, webp, avif, bmp) | `input_path`, `output_path`, `format` |
|
|
26
|
+
| `image_optimize` | Optimize for web delivery | `input_path`, `output_path`, `quality`, `strip_metadata` |
|
|
27
|
+
| `image_crop` | Crop a rectangular region | `input_path`, `output_path`, `x`, `y`, `width`, `height` |
|
|
28
|
+
| `image_thumbnail` | Generate a square-fit thumbnail | `input_path`, `output_path`, `size` |
|
|
29
|
+
|
|
30
|
+
### PDF
|
|
31
|
+
|
|
32
|
+
| Tool | Description | Key Parameters |
|
|
33
|
+
|------|-------------|----------------|
|
|
34
|
+
| `pdf_info` | Get PDF metadata (pages, title, author, encryption) | `input_path` |
|
|
35
|
+
| `pdf_extract_text` | Extract text, with OCR fallback | `input_path`, `pages` |
|
|
36
|
+
| `pdf_merge` | Merge multiple PDFs into one | `input_paths`, `output_path` |
|
|
37
|
+
| `pdf_to_images` | Convert pages to images (requires ghostscript) | `input_path`, `output_dir`, `pages`, `format` |
|
|
38
|
+
|
|
39
|
+
### Audio / Video
|
|
40
|
+
|
|
41
|
+
| Tool | Description | Key Parameters |
|
|
42
|
+
|------|-------------|----------------|
|
|
43
|
+
| `audio_convert` | Convert audio format (mp3, wav, flac, aac, ogg) | `input_path`, `output_path`, `format` |
|
|
44
|
+
| `audio_info` | Get audio metadata (duration, bitrate, sample rate) | `input_path` |
|
|
45
|
+
| `video_thumbnail` | Extract a frame from video as image | `input_path`, `output_path`, `timestamp` |
|
|
46
|
+
| `video_info` | Get video metadata (duration, resolution, codec) | `input_path` |
|
|
47
|
+
|
|
48
|
+
### OCR
|
|
49
|
+
|
|
50
|
+
| Tool | Description | Key Parameters |
|
|
51
|
+
|------|-------------|----------------|
|
|
52
|
+
| `ocr_image` | Extract text from image via Tesseract | `input_path` |
|
|
53
|
+
|
|
54
|
+
### Utility
|
|
55
|
+
|
|
56
|
+
| Tool | Description | Key Parameters |
|
|
57
|
+
|------|-------------|----------------|
|
|
58
|
+
| `health` | Server status, version, dependency availability | — |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Installation
|
|
63
|
+
|
|
64
|
+
Core install (image tools only):
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install lathe-mcp
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Full install (PDF, audio/video, OCR):
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install "lathe-mcp[full]"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### System Dependencies
|
|
77
|
+
|
|
78
|
+
Some tools require external binaries. Install only what you need:
|
|
79
|
+
|
|
80
|
+
| Dependency | Required For | Install |
|
|
81
|
+
|------------|-------------|---------|
|
|
82
|
+
| ffmpeg | Audio/video tools | `brew install ffmpeg` / `apt install ffmpeg` |
|
|
83
|
+
| tesseract | OCR tools | `brew install tesseract` / `apt install tesseract-ocr` |
|
|
84
|
+
| ghostscript | `pdf_to_images` | `brew install ghostscript` / `apt install ghostscript` |
|
|
85
|
+
|
|
86
|
+
The `health` tool reports which dependencies are available at runtime.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Usage
|
|
91
|
+
|
|
92
|
+
Run the server directly:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
lathe
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Or via the MCP CLI:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
mcp run lathe
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Claude Code
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
claude mcp add lathe -- /path/to/venv/bin/lathe
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Claude Desktop
|
|
111
|
+
|
|
112
|
+
Add to your Claude Desktop config (`claude_desktop_config.json`):
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"mcpServers": {
|
|
117
|
+
"lathe": {
|
|
118
|
+
"command": "/path/to/venv/bin/lathe",
|
|
119
|
+
"env": {
|
|
120
|
+
"LATHE_WORKING_DIR": "/path/to/allowed/directory"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Configuration
|
|
130
|
+
|
|
131
|
+
| Variable | Description | Default |
|
|
132
|
+
|----------|-------------|---------|
|
|
133
|
+
| `LATHE_WORKING_DIR` | Root directory for all file operations | Current working directory |
|
|
134
|
+
|
|
135
|
+
All input and output paths are resolved relative to and constrained within `LATHE_WORKING_DIR`.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Security
|
|
140
|
+
|
|
141
|
+
- **Sandboxed file access** — all paths validated against `LATHE_WORKING_DIR`
|
|
142
|
+
- **Path traversal protection** — `../` and absolute paths outside the sandbox are rejected
|
|
143
|
+
- **Symlink escape detection** — symlinks resolving outside the working directory are blocked
|
|
144
|
+
- **Decompression bomb guard** — Pillow's built-in protections are active
|
|
145
|
+
- **File size limits** — 500 MB maximum per input file
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Development
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
git clone https://github.com/seayniclabs/lathe.git
|
|
153
|
+
cd lathe
|
|
154
|
+
python -m venv .venv && source .venv/bin/activate
|
|
155
|
+
pip install -e ".[test,full]"
|
|
156
|
+
python -m pytest tests/ -q
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
Proprietary. Copyright (c) 2026 Seaynic Labs LLC. All rights reserved.
|
|
164
|
+
|
|
165
|
+
See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "lathe-mcp"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "File and media processing MCP server — resize, convert, optimize, extract."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = "LicenseRef-Proprietary"
|
|
11
|
+
requires-python = ">=3.12"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Charlie Seay", email = "charlie@seayniclabs.com" },
|
|
14
|
+
]
|
|
15
|
+
keywords = ["mcp", "file-processing", "image", "pdf", "audio", "video", "ocr"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"License :: Other/Proprietary License",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Topic :: Multimedia :: Graphics",
|
|
23
|
+
"Topic :: Multimedia :: Sound/Audio :: Conversion",
|
|
24
|
+
"Topic :: Text Processing",
|
|
25
|
+
]
|
|
26
|
+
dependencies = [
|
|
27
|
+
"mcp[cli]",
|
|
28
|
+
"Pillow",
|
|
29
|
+
"httpx",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.urls]
|
|
33
|
+
Homepage = "https://seayniclabs.com"
|
|
34
|
+
Repository = "https://github.com/seayniclabs/lathe"
|
|
35
|
+
|
|
36
|
+
[project.optional-dependencies]
|
|
37
|
+
full = [
|
|
38
|
+
"ffmpeg-python",
|
|
39
|
+
"pytesseract",
|
|
40
|
+
"pypdf",
|
|
41
|
+
]
|
|
42
|
+
test = [
|
|
43
|
+
"pytest",
|
|
44
|
+
"pytest-cov",
|
|
45
|
+
"pip-audit",
|
|
46
|
+
"pypdf",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
[project.scripts]
|
|
50
|
+
lathe = "lathe.server:main"
|
|
51
|
+
|
|
52
|
+
[tool.hatch.build.targets.wheel]
|
|
53
|
+
packages = ["src/lathe"]
|
|
54
|
+
|
|
55
|
+
[tool.pytest.ini_options]
|
|
56
|
+
testpaths = ["tests"]
|
|
57
|
+
markers = [
|
|
58
|
+
"requires_ffmpeg: test requires ffmpeg binary",
|
|
59
|
+
"requires_tesseract: test requires tesseract binary",
|
|
60
|
+
"requires_ghostscript: test requires ghostscript binary",
|
|
61
|
+
]
|