alchemux 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.
- alchemux-0.1.0/LICENSE +8 -0
- alchemux-0.1.0/PKG-INFO +242 -0
- alchemux-0.1.0/README.md +211 -0
- alchemux-0.1.0/backend/alchemux.egg-info/PKG-INFO +242 -0
- alchemux-0.1.0/backend/alchemux.egg-info/SOURCES.txt +69 -0
- alchemux-0.1.0/backend/alchemux.egg-info/dependency_links.txt +1 -0
- alchemux-0.1.0/backend/alchemux.egg-info/entry_points.txt +3 -0
- alchemux-0.1.0/backend/alchemux.egg-info/requires.txt +15 -0
- alchemux-0.1.0/backend/alchemux.egg-info/top_level.txt +1 -0
- alchemux-0.1.0/backend/app/__init__.py +1 -0
- alchemux-0.1.0/backend/app/cli/__init__.py +7 -0
- alchemux-0.1.0/backend/app/cli/app.py +308 -0
- alchemux-0.1.0/backend/app/cli/batch_parsing.py +80 -0
- alchemux-0.1.0/backend/app/cli/commands/__init__.py +4 -0
- alchemux-0.1.0/backend/app/cli/commands/accept_eula.py +38 -0
- alchemux-0.1.0/backend/app/cli/commands/audio_format.py +116 -0
- alchemux-0.1.0/backend/app/cli/commands/batch.py +367 -0
- alchemux-0.1.0/backend/app/cli/commands/config.py +603 -0
- alchemux-0.1.0/backend/app/cli/commands/debug.py +53 -0
- alchemux-0.1.0/backend/app/cli/commands/distill.py +537 -0
- alchemux-0.1.0/backend/app/cli/commands/doctor.py +281 -0
- alchemux-0.1.0/backend/app/cli/commands/inspect.py +66 -0
- alchemux-0.1.0/backend/app/cli/commands/invoke.py +77 -0
- alchemux-0.1.0/backend/app/cli/commands/mux.py +57 -0
- alchemux-0.1.0/backend/app/cli/commands/plain.py +53 -0
- alchemux-0.1.0/backend/app/cli/commands/save_default.py +105 -0
- alchemux-0.1.0/backend/app/cli/commands/seal.py +50 -0
- alchemux-0.1.0/backend/app/cli/commands/setup.py +142 -0
- alchemux-0.1.0/backend/app/cli/commands/storage.py +283 -0
- alchemux-0.1.0/backend/app/cli/commands/update.py +276 -0
- alchemux-0.1.0/backend/app/cli/commands/verbose.py +53 -0
- alchemux-0.1.0/backend/app/cli/commands/video_format.py +133 -0
- alchemux-0.1.0/backend/app/cli/output.py +651 -0
- alchemux-0.1.0/backend/app/cli/prompts.py +260 -0
- alchemux-0.1.0/backend/app/cli/selectors.py +281 -0
- alchemux-0.1.0/backend/app/cli/url_input.py +270 -0
- alchemux-0.1.0/backend/app/core/__init__.py +1 -0
- alchemux-0.1.0/backend/app/core/config_manager.py +836 -0
- alchemux-0.1.0/backend/app/core/config_wizard.py +605 -0
- alchemux-0.1.0/backend/app/core/downloader.py +569 -0
- alchemux-0.1.0/backend/app/core/eula.py +156 -0
- alchemux-0.1.0/backend/app/core/logger.py +145 -0
- alchemux-0.1.0/backend/app/core/setup_wizard.py +789 -0
- alchemux-0.1.0/backend/app/core/toml_config.py +193 -0
- alchemux-0.1.0/backend/app/core/tracebacks.py +98 -0
- alchemux-0.1.0/backend/app/entrypoint.py +195 -0
- alchemux-0.1.0/backend/app/main.py +20 -0
- alchemux-0.1.0/backend/app/services/__init__.py +1 -0
- alchemux-0.1.0/backend/app/services/gcp_upload.py +221 -0
- alchemux-0.1.0/backend/app/services/s3_upload.py +216 -0
- alchemux-0.1.0/backend/app/templates/config.toml.example +87 -0
- alchemux-0.1.0/backend/app/templates/env.example +38 -0
- alchemux-0.1.0/backend/app/tests/__init__.py +1 -0
- alchemux-0.1.0/backend/app/tests/test_batch_command.py +56 -0
- alchemux-0.1.0/backend/app/tests/test_batch_file_discovery.py +70 -0
- alchemux-0.1.0/backend/app/tests/test_batch_parsing.py +88 -0
- alchemux-0.1.0/backend/app/tests/test_batch_playlist_expansion.py +64 -0
- alchemux-0.1.0/backend/app/tests/test_cli_clipboard_input.py +82 -0
- alchemux-0.1.0/backend/app/tests/test_cli_config_smoke.py +108 -0
- alchemux-0.1.0/backend/app/tests/test_cli_interactive_input.py +160 -0
- alchemux-0.1.0/backend/app/tests/test_config_doctor_repair.py +188 -0
- alchemux-0.1.0/backend/app/tests/test_config_manager.py +262 -0
- alchemux-0.1.0/backend/app/tests/test_downloader_path_resolution.py +54 -0
- alchemux-0.1.0/backend/app/tests/test_ephemeral_config.py +49 -0
- alchemux-0.1.0/backend/app/tests/test_update_command.py +116 -0
- alchemux-0.1.0/backend/app/tests/test_video_enabled_gating.py +132 -0
- alchemux-0.1.0/backend/app/utils/__init__.py +1 -0
- alchemux-0.1.0/backend/app/utils/file_utils.py +299 -0
- alchemux-0.1.0/backend/app/utils/metadata.py +227 -0
- alchemux-0.1.0/pyproject.toml +62 -0
- alchemux-0.1.0/setup.cfg +4 -0
alchemux-0.1.0/LICENSE
ADDED
alchemux-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: alchemux
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: CLI wrapper for yt-dlp & FFmpeg with cloud upload optionality
|
|
5
|
+
License: AGPL-3.0
|
|
6
|
+
Classifier: Development Status :: 4 - Beta
|
|
7
|
+
Classifier: Environment :: Console
|
|
8
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
9
|
+
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
|
|
14
|
+
Requires-Python: >=3.12
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: yt-dlp>=2024.1.0
|
|
18
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
19
|
+
Requires-Dist: mutagen>=1.47.0
|
|
20
|
+
Requires-Dist: typer>=0.12.0
|
|
21
|
+
Requires-Dist: rich>=13.0.0
|
|
22
|
+
Requires-Dist: InquirerPy>=0.3.4
|
|
23
|
+
Requires-Dist: pyperclip>=1.8.0
|
|
24
|
+
Requires-Dist: platformdirs>=4.0.0
|
|
25
|
+
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
26
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
27
|
+
Requires-Dist: tomlkit>=0.12.0
|
|
28
|
+
Requires-Dist: google-cloud-storage>=2.10.0
|
|
29
|
+
Requires-Dist: boto3>=1.28.0
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
<div align="center">
|
|
33
|
+
|
|
34
|
+
# Alchemux
|
|
35
|
+
|
|
36
|
+
**Magically intuitive CLI for yt-dlp & FFmpeg** — download, convert, and optionally upload to **S3** or **GCP**.
|
|
37
|
+
|
|
38
|
+
*Interactive terminal alchemy for YouTube and 1,000+ media sources.*
|
|
39
|
+
|
|
40
|
+
[](https://github.com/bmurrtech/alchemux)
|
|
41
|
+
[](https://pypi.org/project/alchemux/)
|
|
42
|
+
[](https://pypi.org/project/alchemux/)
|
|
43
|
+
[](https://github.com/bmurrtech/alchemux/actions/workflows/ci.yml?query=branch%3Amain)
|
|
44
|
+
[](https://github.com/bmurrtech/alchemux/releases)
|
|
45
|
+
[](https://docs.astral.sh/uv/)
|
|
46
|
+
[](https://www.python.org/)
|
|
47
|
+
[](https://docs.astral.sh/uv/)
|
|
48
|
+
[](LICENSE)
|
|
49
|
+
[](https://ko-fi.com/bmurrtech)
|
|
50
|
+
[](https://www.buymeacoffee.com/bmurrtech)
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<img src="https://i.imgur.com/coG2REg.png" width="700" alt="Alchemux CLI transmuting media">
|
|
54
|
+
<br><br>
|
|
55
|
+
<img src="https://i.imgur.com/iDFjVCw.png" width="700" alt="Alchemux usage example">
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
## About
|
|
61
|
+
|
|
62
|
+
Alchemux is a **terminal-first** media CLI built on [yt-dlp](https://github.com/yt-dlp/yt-dlp) and **system FFmpeg**. It wraps complex download and conversion workflows in an interactive wizard, batch mode, optional cloud upload, and arcane (or plain) terminal output.
|
|
63
|
+
|
|
64
|
+
- **Distribution**: [PyPI](https://pypi.org/project/alchemux/) — install with [uv](https://docs.astral.sh/uv/) (`uv tool install` / `uvx`)
|
|
65
|
+
- **Platforms**: macOS, Linux, Windows (shell + Python 3.12+)
|
|
66
|
+
- **Config**: Per-user TOML via `alchemux setup` — no manual file editing required
|
|
67
|
+
- **Status**: Pre-release — bugs and limitations are expected; see [docs/known-issues.md](docs/known-issues.md)
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
- 🎵 **Download & Convert Media**: Extract audio or video from YouTube, Facebook, and other [yt-dlp supported sources](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md)
|
|
72
|
+
- 🧙♂️ **Interactive Simplicity**: Delightfully easy terminal UI—just run and follow prompts; configure everything in seconds (including cloud storage and presets) interactively
|
|
73
|
+
- 📋 **Batch Processing**: Process many URLs from a YouTube playlist, TXT/CSV files, or pasted lists of URLs with automatic rate-limit mitigation logic built-in. See [commands.md](docs/commands.md) for batch mode details
|
|
74
|
+
- 🏷️ **Metadata Embedding**: Automatically embeds source URLs and metadata into media files
|
|
75
|
+
- ☁️ **Cloud Storage**: Upload media to **S3** and **GCP buckets** after interactive setup ([commands.md](docs/commands.md))
|
|
76
|
+
- 🎚️ **Multiple Formats**: Audio (MP3, AAC, FLAC, Opus, WAV, etc.) and video (MP4, MKV, WebM, etc.)
|
|
77
|
+
- 🤖 **AI Agent Support**: CLI guidance for agents like [OpenClaw](https://openclaw.ai), [Agent Zero](https://github.com/agent0ai/agent-zero), and Claude Skills — see [backend/AGENTS.md](backend/AGENTS.md)
|
|
78
|
+
- 🛠️ **`config` Command**: Interactive wizard for formats, cloud credentials, download folder, batch defaults, and more
|
|
79
|
+
- 🩺 **`doctor` Command**: Diagnose cloud misconfigurations, missing FFmpeg, permissions, and common failures
|
|
80
|
+
- ✨ **Arcane Interface**: Optional stylized output (disable with `arcane_terms = "false"` or during setup)
|
|
81
|
+
- 🔄 **`update` Command**: Refresh the bundled yt-dlp dependency from the community release channel
|
|
82
|
+
|
|
83
|
+
Full command reference: [docs/commands.md](docs/commands.md).
|
|
84
|
+
|
|
85
|
+
## Quick Start
|
|
86
|
+
|
|
87
|
+
### Prerequisites
|
|
88
|
+
|
|
89
|
+
- **Shell**: Terminal (macOS/Linux) or PowerShell (Windows)
|
|
90
|
+
- **uv**: [Astral’s uv](https://docs.astral.sh/uv/) — one-time install below
|
|
91
|
+
- **FFmpeg**: Required for conversion — [docs/install.md](docs/install.md)
|
|
92
|
+
|
|
93
|
+
### Install from PyPI (recommended)
|
|
94
|
+
|
|
95
|
+
Installing with **uv** avoids macOS Gatekeeper and Windows SmartScreen prompts that often affect downloaded executables.
|
|
96
|
+
|
|
97
|
+
#### 1) Install uv (one-time)
|
|
98
|
+
|
|
99
|
+
**macOS/Linux:**
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Windows (PowerShell):**
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Verify: `uv --version`
|
|
112
|
+
|
|
113
|
+
#### 2) Try without installing
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
uvx alchemux --help
|
|
117
|
+
uvx amx -h
|
|
118
|
+
uvx amx "https://youtu.be/…"
|
|
119
|
+
uvx amx --no-config --download-dir . "…"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### 3) Install as a persistent CLI tool
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
uv tool install alchemux
|
|
126
|
+
alchemux setup
|
|
127
|
+
alchemux "https://youtu.be/…"
|
|
128
|
+
amx "https://…"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
#### 4) Upgrade / uninstall
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
uv tool upgrade alchemux
|
|
135
|
+
uv tool uninstall alchemux
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Run from source (development)
|
|
139
|
+
|
|
140
|
+
For unreleased or experimental features:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
git clone https://github.com/bmurrtech/alchemux.git
|
|
144
|
+
cd alchemux
|
|
145
|
+
uv pip install -e .
|
|
146
|
+
uv run alchemux --help
|
|
147
|
+
uv run amx setup
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
See [docs/install.md](docs/install.md) for platform-specific FFmpeg and config paths.
|
|
151
|
+
|
|
152
|
+
## Arcane terms
|
|
153
|
+
|
|
154
|
+
Alchemux can use arcane-themed wording (transmute, distill, seal, etc.). Prefer plain terms? Set `arcane_terms = "false"` in `config.toml` or choose technical mode during `alchemux setup`. Legend: [docs/legend.md](docs/legend.md).
|
|
155
|
+
|
|
156
|
+
## Known issues
|
|
157
|
+
|
|
158
|
+
Alchemux is pre-release. Documented limitations, workarounds, and what to check before filing a report: **[docs/known-issues.md](docs/known-issues.md)**.
|
|
159
|
+
|
|
160
|
+
## Troubleshooting
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
alchemux -h # or: amx -h
|
|
164
|
+
alchemux doctor
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
| Problem | Solution |
|
|
168
|
+
|---------|----------|
|
|
169
|
+
| Config not found | Run `alchemux setup` or `alchemux doctor` — paths in [docs/install.md](docs/install.md) |
|
|
170
|
+
| Downloads fail | Try audio-only or `--flac`; run `alchemux update`; see [known-issues.md](docs/known-issues.md) (KI-002, KI-003) |
|
|
171
|
+
| `ffmpeg not found` | Install system FFmpeg (`brew install ffmpeg`, `apt install ffmpeg`, etc.) — [docs/install.md](docs/install.md) |
|
|
172
|
+
|
|
173
|
+
## Contributing
|
|
174
|
+
|
|
175
|
+
Bug reports, feature requests, and feedback are welcome via **[GitHub Issues](https://github.com/bmurrtech/alchemux/issues/new/choose)**. Please read **[docs/known-issues.md](docs/known-issues.md)** first.
|
|
176
|
+
|
|
177
|
+
Maintainers: local tooling, tests, and CI — **[docs/contributors.md](docs/contributors.md)**. Release process — **[docs/release.md](docs/release.md)**.
|
|
178
|
+
|
|
179
|
+
## Support open source
|
|
180
|
+
|
|
181
|
+
If Alchemux saves you time, consider:
|
|
182
|
+
|
|
183
|
+
- ⭐ **Starring the repo** — [](https://github.com/bmurrtech/alchemux)
|
|
184
|
+
- 🐛 **[Open a GitHub Issue](https://github.com/bmurrtech/alchemux/issues/new/choose)** — bugs, ideas, and feedback
|
|
185
|
+
- 📣 **Sharing** with others who download or archive media from the terminal
|
|
186
|
+
- ☕ **[Buy Me a Coffee](https://www.buymeacoffee.com/bmurrtech)** or **[Ko-fi](https://ko-fi.com/bmurrtech)**
|
|
187
|
+
|
|
188
|
+
<p align="center">
|
|
189
|
+
<a href="https://www.buymeacoffee.com/bmurrtech" target="_blank" rel="noopener">
|
|
190
|
+
<img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Support%20the%20project-FFDD00?style=for-the-badge&logo=buymeacoffee&logoColor=black" alt="Buy Me a Coffee">
|
|
191
|
+
</a>
|
|
192
|
+
<a href="https://ko-fi.com/bmurrtech" target="_blank" rel="noopener">
|
|
193
|
+
<img src="https://img.shields.io/badge/Ko--fi-Support%20the%20project-FF5E5B?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Ko-fi">
|
|
194
|
+
</a>
|
|
195
|
+
</p>
|
|
196
|
+
|
|
197
|
+
## Acknowledgements
|
|
198
|
+
|
|
199
|
+
- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)** — core downloader
|
|
200
|
+
- **[FFmpeg](https://ffmpeg.org/)** — audio/video conversion (system install)
|
|
201
|
+
- **[uv](https://docs.astral.sh/uv/)** — install and run via `uv tool install` / `uvx`
|
|
202
|
+
- **[prek](https://github.com/j178/prek)** — pre-commit hooks in CI and locally
|
|
203
|
+
- **[PyPI](https://pypi.org/)** — package distribution
|
|
204
|
+
- **[Typer](https://typer.tiangolo.com/)**, **[Rich](https://github.com/Textualize/rich)**, **[InquirerPy](https://github.com/kazhala/InquirerPy)** — CLI UX
|
|
205
|
+
- **[pyperclip](https://github.com/pyperclip/pyperclip)**, **[mutagen](https://github.com/quodlibet/mutagen)**, **[python-dotenv](https://github.com/theskumar/python-dotenv)** — clipboard, metadata, env helpers
|
|
206
|
+
|
|
207
|
+
## License
|
|
208
|
+
|
|
209
|
+
[](https://www.gnu.org/licenses/agpl-3.0.html)
|
|
210
|
+
|
|
211
|
+
This repository is licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). The badge links to the official license text; the [`LICENSE`](LICENSE) file in this repo is the binding copy.
|
|
212
|
+
|
|
213
|
+
### License permissions and restrictions
|
|
214
|
+
|
|
215
|
+
*Keeping open-source open.*
|
|
216
|
+
|
|
217
|
+
| Use case | Permitted | Notes / conditions |
|
|
218
|
+
|----------|-----------|-------------------|
|
|
219
|
+
| Private / internal use | ✅ | No obligation to publish changes if you do not distribute or offer the software as a network service to others. |
|
|
220
|
+
| Modify for own private use | ✅ | Obligations attach when you distribute or run modified code as a networked service for users. |
|
|
221
|
+
| Share / distribute (unmodified) | ✅ | Include AGPL license and corresponding source (or compliant written offer). |
|
|
222
|
+
| Distribute with modifications | ✅ | Modified source must be available under AGPL-3.0 to recipients. |
|
|
223
|
+
| Provide as SaaS / network service | ✅ | Users interacting with your modified version over a network must be able to obtain complete corresponding source. |
|
|
224
|
+
| Closed / proprietary redistribution | ❌ | Public distribution or SaaS without corresponding source under AGPL is not allowed. |
|
|
225
|
+
| Restricting source access for users you serve | ❌ | Network users must be able to get complete corresponding source as AGPL defines. |
|
|
226
|
+
| Sublicensing under more restrictive terms | ❌ | AGPL terms must flow through. |
|
|
227
|
+
|
|
228
|
+
### Commercial / proprietary licensing
|
|
229
|
+
|
|
230
|
+
Need use **without** AGPL copyleft (closed-source distribution, SaaS without source-offer obligations, etc.)? **Commercial licenses may be available.** Open a [GitHub Issue](https://github.com/bmurrtech/alchemux/issues/new/choose) to discuss licensing and pricing.
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Disclaimer
|
|
235
|
+
|
|
236
|
+
This software is provided **as-is**, without warranty of any kind. The author(s) are **not liable** for damages or losses from use of this project, including data loss, failed downloads, or cloud storage misconfiguration.
|
|
237
|
+
|
|
238
|
+
By using Alchemux you accept responsibility for:
|
|
239
|
+
|
|
240
|
+
- Complying with this license and the **terms of service** of sites you download from (e.g. YouTube)
|
|
241
|
+
- Ensuring **yt-dlp**, **FFmpeg**, and cloud provider usage comply with their respective licenses and policies
|
|
242
|
+
- Securing your own credentials for S3/GCP and local config files
|
alchemux-0.1.0/README.md
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Alchemux
|
|
4
|
+
|
|
5
|
+
**Magically intuitive CLI for yt-dlp & FFmpeg** — download, convert, and optionally upload to **S3** or **GCP**.
|
|
6
|
+
|
|
7
|
+
*Interactive terminal alchemy for YouTube and 1,000+ media sources.*
|
|
8
|
+
|
|
9
|
+
[](https://github.com/bmurrtech/alchemux)
|
|
10
|
+
[](https://pypi.org/project/alchemux/)
|
|
11
|
+
[](https://pypi.org/project/alchemux/)
|
|
12
|
+
[](https://github.com/bmurrtech/alchemux/actions/workflows/ci.yml?query=branch%3Amain)
|
|
13
|
+
[](https://github.com/bmurrtech/alchemux/releases)
|
|
14
|
+
[](https://docs.astral.sh/uv/)
|
|
15
|
+
[](https://www.python.org/)
|
|
16
|
+
[](https://docs.astral.sh/uv/)
|
|
17
|
+
[](LICENSE)
|
|
18
|
+
[](https://ko-fi.com/bmurrtech)
|
|
19
|
+
[](https://www.buymeacoffee.com/bmurrtech)
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<img src="https://i.imgur.com/coG2REg.png" width="700" alt="Alchemux CLI transmuting media">
|
|
23
|
+
<br><br>
|
|
24
|
+
<img src="https://i.imgur.com/iDFjVCw.png" width="700" alt="Alchemux usage example">
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
## About
|
|
30
|
+
|
|
31
|
+
Alchemux is a **terminal-first** media CLI built on [yt-dlp](https://github.com/yt-dlp/yt-dlp) and **system FFmpeg**. It wraps complex download and conversion workflows in an interactive wizard, batch mode, optional cloud upload, and arcane (or plain) terminal output.
|
|
32
|
+
|
|
33
|
+
- **Distribution**: [PyPI](https://pypi.org/project/alchemux/) — install with [uv](https://docs.astral.sh/uv/) (`uv tool install` / `uvx`)
|
|
34
|
+
- **Platforms**: macOS, Linux, Windows (shell + Python 3.12+)
|
|
35
|
+
- **Config**: Per-user TOML via `alchemux setup` — no manual file editing required
|
|
36
|
+
- **Status**: Pre-release — bugs and limitations are expected; see [docs/known-issues.md](docs/known-issues.md)
|
|
37
|
+
|
|
38
|
+
## Features
|
|
39
|
+
|
|
40
|
+
- 🎵 **Download & Convert Media**: Extract audio or video from YouTube, Facebook, and other [yt-dlp supported sources](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md)
|
|
41
|
+
- 🧙♂️ **Interactive Simplicity**: Delightfully easy terminal UI—just run and follow prompts; configure everything in seconds (including cloud storage and presets) interactively
|
|
42
|
+
- 📋 **Batch Processing**: Process many URLs from a YouTube playlist, TXT/CSV files, or pasted lists of URLs with automatic rate-limit mitigation logic built-in. See [commands.md](docs/commands.md) for batch mode details
|
|
43
|
+
- 🏷️ **Metadata Embedding**: Automatically embeds source URLs and metadata into media files
|
|
44
|
+
- ☁️ **Cloud Storage**: Upload media to **S3** and **GCP buckets** after interactive setup ([commands.md](docs/commands.md))
|
|
45
|
+
- 🎚️ **Multiple Formats**: Audio (MP3, AAC, FLAC, Opus, WAV, etc.) and video (MP4, MKV, WebM, etc.)
|
|
46
|
+
- 🤖 **AI Agent Support**: CLI guidance for agents like [OpenClaw](https://openclaw.ai), [Agent Zero](https://github.com/agent0ai/agent-zero), and Claude Skills — see [backend/AGENTS.md](backend/AGENTS.md)
|
|
47
|
+
- 🛠️ **`config` Command**: Interactive wizard for formats, cloud credentials, download folder, batch defaults, and more
|
|
48
|
+
- 🩺 **`doctor` Command**: Diagnose cloud misconfigurations, missing FFmpeg, permissions, and common failures
|
|
49
|
+
- ✨ **Arcane Interface**: Optional stylized output (disable with `arcane_terms = "false"` or during setup)
|
|
50
|
+
- 🔄 **`update` Command**: Refresh the bundled yt-dlp dependency from the community release channel
|
|
51
|
+
|
|
52
|
+
Full command reference: [docs/commands.md](docs/commands.md).
|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
### Prerequisites
|
|
57
|
+
|
|
58
|
+
- **Shell**: Terminal (macOS/Linux) or PowerShell (Windows)
|
|
59
|
+
- **uv**: [Astral’s uv](https://docs.astral.sh/uv/) — one-time install below
|
|
60
|
+
- **FFmpeg**: Required for conversion — [docs/install.md](docs/install.md)
|
|
61
|
+
|
|
62
|
+
### Install from PyPI (recommended)
|
|
63
|
+
|
|
64
|
+
Installing with **uv** avoids macOS Gatekeeper and Windows SmartScreen prompts that often affect downloaded executables.
|
|
65
|
+
|
|
66
|
+
#### 1) Install uv (one-time)
|
|
67
|
+
|
|
68
|
+
**macOS/Linux:**
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Windows (PowerShell):**
|
|
75
|
+
|
|
76
|
+
```powershell
|
|
77
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Verify: `uv --version`
|
|
81
|
+
|
|
82
|
+
#### 2) Try without installing
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
uvx alchemux --help
|
|
86
|
+
uvx amx -h
|
|
87
|
+
uvx amx "https://youtu.be/…"
|
|
88
|
+
uvx amx --no-config --download-dir . "…"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
#### 3) Install as a persistent CLI tool
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
uv tool install alchemux
|
|
95
|
+
alchemux setup
|
|
96
|
+
alchemux "https://youtu.be/…"
|
|
97
|
+
amx "https://…"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### 4) Upgrade / uninstall
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
uv tool upgrade alchemux
|
|
104
|
+
uv tool uninstall alchemux
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Run from source (development)
|
|
108
|
+
|
|
109
|
+
For unreleased or experimental features:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
git clone https://github.com/bmurrtech/alchemux.git
|
|
113
|
+
cd alchemux
|
|
114
|
+
uv pip install -e .
|
|
115
|
+
uv run alchemux --help
|
|
116
|
+
uv run amx setup
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
See [docs/install.md](docs/install.md) for platform-specific FFmpeg and config paths.
|
|
120
|
+
|
|
121
|
+
## Arcane terms
|
|
122
|
+
|
|
123
|
+
Alchemux can use arcane-themed wording (transmute, distill, seal, etc.). Prefer plain terms? Set `arcane_terms = "false"` in `config.toml` or choose technical mode during `alchemux setup`. Legend: [docs/legend.md](docs/legend.md).
|
|
124
|
+
|
|
125
|
+
## Known issues
|
|
126
|
+
|
|
127
|
+
Alchemux is pre-release. Documented limitations, workarounds, and what to check before filing a report: **[docs/known-issues.md](docs/known-issues.md)**.
|
|
128
|
+
|
|
129
|
+
## Troubleshooting
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
alchemux -h # or: amx -h
|
|
133
|
+
alchemux doctor
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
| Problem | Solution |
|
|
137
|
+
|---------|----------|
|
|
138
|
+
| Config not found | Run `alchemux setup` or `alchemux doctor` — paths in [docs/install.md](docs/install.md) |
|
|
139
|
+
| Downloads fail | Try audio-only or `--flac`; run `alchemux update`; see [known-issues.md](docs/known-issues.md) (KI-002, KI-003) |
|
|
140
|
+
| `ffmpeg not found` | Install system FFmpeg (`brew install ffmpeg`, `apt install ffmpeg`, etc.) — [docs/install.md](docs/install.md) |
|
|
141
|
+
|
|
142
|
+
## Contributing
|
|
143
|
+
|
|
144
|
+
Bug reports, feature requests, and feedback are welcome via **[GitHub Issues](https://github.com/bmurrtech/alchemux/issues/new/choose)**. Please read **[docs/known-issues.md](docs/known-issues.md)** first.
|
|
145
|
+
|
|
146
|
+
Maintainers: local tooling, tests, and CI — **[docs/contributors.md](docs/contributors.md)**. Release process — **[docs/release.md](docs/release.md)**.
|
|
147
|
+
|
|
148
|
+
## Support open source
|
|
149
|
+
|
|
150
|
+
If Alchemux saves you time, consider:
|
|
151
|
+
|
|
152
|
+
- ⭐ **Starring the repo** — [](https://github.com/bmurrtech/alchemux)
|
|
153
|
+
- 🐛 **[Open a GitHub Issue](https://github.com/bmurrtech/alchemux/issues/new/choose)** — bugs, ideas, and feedback
|
|
154
|
+
- 📣 **Sharing** with others who download or archive media from the terminal
|
|
155
|
+
- ☕ **[Buy Me a Coffee](https://www.buymeacoffee.com/bmurrtech)** or **[Ko-fi](https://ko-fi.com/bmurrtech)**
|
|
156
|
+
|
|
157
|
+
<p align="center">
|
|
158
|
+
<a href="https://www.buymeacoffee.com/bmurrtech" target="_blank" rel="noopener">
|
|
159
|
+
<img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Support%20the%20project-FFDD00?style=for-the-badge&logo=buymeacoffee&logoColor=black" alt="Buy Me a Coffee">
|
|
160
|
+
</a>
|
|
161
|
+
<a href="https://ko-fi.com/bmurrtech" target="_blank" rel="noopener">
|
|
162
|
+
<img src="https://img.shields.io/badge/Ko--fi-Support%20the%20project-FF5E5B?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Ko-fi">
|
|
163
|
+
</a>
|
|
164
|
+
</p>
|
|
165
|
+
|
|
166
|
+
## Acknowledgements
|
|
167
|
+
|
|
168
|
+
- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)** — core downloader
|
|
169
|
+
- **[FFmpeg](https://ffmpeg.org/)** — audio/video conversion (system install)
|
|
170
|
+
- **[uv](https://docs.astral.sh/uv/)** — install and run via `uv tool install` / `uvx`
|
|
171
|
+
- **[prek](https://github.com/j178/prek)** — pre-commit hooks in CI and locally
|
|
172
|
+
- **[PyPI](https://pypi.org/)** — package distribution
|
|
173
|
+
- **[Typer](https://typer.tiangolo.com/)**, **[Rich](https://github.com/Textualize/rich)**, **[InquirerPy](https://github.com/kazhala/InquirerPy)** — CLI UX
|
|
174
|
+
- **[pyperclip](https://github.com/pyperclip/pyperclip)**, **[mutagen](https://github.com/quodlibet/mutagen)**, **[python-dotenv](https://github.com/theskumar/python-dotenv)** — clipboard, metadata, env helpers
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
[](https://www.gnu.org/licenses/agpl-3.0.html)
|
|
179
|
+
|
|
180
|
+
This repository is licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). The badge links to the official license text; the [`LICENSE`](LICENSE) file in this repo is the binding copy.
|
|
181
|
+
|
|
182
|
+
### License permissions and restrictions
|
|
183
|
+
|
|
184
|
+
*Keeping open-source open.*
|
|
185
|
+
|
|
186
|
+
| Use case | Permitted | Notes / conditions |
|
|
187
|
+
|----------|-----------|-------------------|
|
|
188
|
+
| Private / internal use | ✅ | No obligation to publish changes if you do not distribute or offer the software as a network service to others. |
|
|
189
|
+
| Modify for own private use | ✅ | Obligations attach when you distribute or run modified code as a networked service for users. |
|
|
190
|
+
| Share / distribute (unmodified) | ✅ | Include AGPL license and corresponding source (or compliant written offer). |
|
|
191
|
+
| Distribute with modifications | ✅ | Modified source must be available under AGPL-3.0 to recipients. |
|
|
192
|
+
| Provide as SaaS / network service | ✅ | Users interacting with your modified version over a network must be able to obtain complete corresponding source. |
|
|
193
|
+
| Closed / proprietary redistribution | ❌ | Public distribution or SaaS without corresponding source under AGPL is not allowed. |
|
|
194
|
+
| Restricting source access for users you serve | ❌ | Network users must be able to get complete corresponding source as AGPL defines. |
|
|
195
|
+
| Sublicensing under more restrictive terms | ❌ | AGPL terms must flow through. |
|
|
196
|
+
|
|
197
|
+
### Commercial / proprietary licensing
|
|
198
|
+
|
|
199
|
+
Need use **without** AGPL copyleft (closed-source distribution, SaaS without source-offer obligations, etc.)? **Commercial licenses may be available.** Open a [GitHub Issue](https://github.com/bmurrtech/alchemux/issues/new/choose) to discuss licensing and pricing.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Disclaimer
|
|
204
|
+
|
|
205
|
+
This software is provided **as-is**, without warranty of any kind. The author(s) are **not liable** for damages or losses from use of this project, including data loss, failed downloads, or cloud storage misconfiguration.
|
|
206
|
+
|
|
207
|
+
By using Alchemux you accept responsibility for:
|
|
208
|
+
|
|
209
|
+
- Complying with this license and the **terms of service** of sites you download from (e.g. YouTube)
|
|
210
|
+
- Ensuring **yt-dlp**, **FFmpeg**, and cloud provider usage comply with their respective licenses and policies
|
|
211
|
+
- Securing your own credentials for S3/GCP and local config files
|