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.
Files changed (71) hide show
  1. alchemux-0.1.0/LICENSE +8 -0
  2. alchemux-0.1.0/PKG-INFO +242 -0
  3. alchemux-0.1.0/README.md +211 -0
  4. alchemux-0.1.0/backend/alchemux.egg-info/PKG-INFO +242 -0
  5. alchemux-0.1.0/backend/alchemux.egg-info/SOURCES.txt +69 -0
  6. alchemux-0.1.0/backend/alchemux.egg-info/dependency_links.txt +1 -0
  7. alchemux-0.1.0/backend/alchemux.egg-info/entry_points.txt +3 -0
  8. alchemux-0.1.0/backend/alchemux.egg-info/requires.txt +15 -0
  9. alchemux-0.1.0/backend/alchemux.egg-info/top_level.txt +1 -0
  10. alchemux-0.1.0/backend/app/__init__.py +1 -0
  11. alchemux-0.1.0/backend/app/cli/__init__.py +7 -0
  12. alchemux-0.1.0/backend/app/cli/app.py +308 -0
  13. alchemux-0.1.0/backend/app/cli/batch_parsing.py +80 -0
  14. alchemux-0.1.0/backend/app/cli/commands/__init__.py +4 -0
  15. alchemux-0.1.0/backend/app/cli/commands/accept_eula.py +38 -0
  16. alchemux-0.1.0/backend/app/cli/commands/audio_format.py +116 -0
  17. alchemux-0.1.0/backend/app/cli/commands/batch.py +367 -0
  18. alchemux-0.1.0/backend/app/cli/commands/config.py +603 -0
  19. alchemux-0.1.0/backend/app/cli/commands/debug.py +53 -0
  20. alchemux-0.1.0/backend/app/cli/commands/distill.py +537 -0
  21. alchemux-0.1.0/backend/app/cli/commands/doctor.py +281 -0
  22. alchemux-0.1.0/backend/app/cli/commands/inspect.py +66 -0
  23. alchemux-0.1.0/backend/app/cli/commands/invoke.py +77 -0
  24. alchemux-0.1.0/backend/app/cli/commands/mux.py +57 -0
  25. alchemux-0.1.0/backend/app/cli/commands/plain.py +53 -0
  26. alchemux-0.1.0/backend/app/cli/commands/save_default.py +105 -0
  27. alchemux-0.1.0/backend/app/cli/commands/seal.py +50 -0
  28. alchemux-0.1.0/backend/app/cli/commands/setup.py +142 -0
  29. alchemux-0.1.0/backend/app/cli/commands/storage.py +283 -0
  30. alchemux-0.1.0/backend/app/cli/commands/update.py +276 -0
  31. alchemux-0.1.0/backend/app/cli/commands/verbose.py +53 -0
  32. alchemux-0.1.0/backend/app/cli/commands/video_format.py +133 -0
  33. alchemux-0.1.0/backend/app/cli/output.py +651 -0
  34. alchemux-0.1.0/backend/app/cli/prompts.py +260 -0
  35. alchemux-0.1.0/backend/app/cli/selectors.py +281 -0
  36. alchemux-0.1.0/backend/app/cli/url_input.py +270 -0
  37. alchemux-0.1.0/backend/app/core/__init__.py +1 -0
  38. alchemux-0.1.0/backend/app/core/config_manager.py +836 -0
  39. alchemux-0.1.0/backend/app/core/config_wizard.py +605 -0
  40. alchemux-0.1.0/backend/app/core/downloader.py +569 -0
  41. alchemux-0.1.0/backend/app/core/eula.py +156 -0
  42. alchemux-0.1.0/backend/app/core/logger.py +145 -0
  43. alchemux-0.1.0/backend/app/core/setup_wizard.py +789 -0
  44. alchemux-0.1.0/backend/app/core/toml_config.py +193 -0
  45. alchemux-0.1.0/backend/app/core/tracebacks.py +98 -0
  46. alchemux-0.1.0/backend/app/entrypoint.py +195 -0
  47. alchemux-0.1.0/backend/app/main.py +20 -0
  48. alchemux-0.1.0/backend/app/services/__init__.py +1 -0
  49. alchemux-0.1.0/backend/app/services/gcp_upload.py +221 -0
  50. alchemux-0.1.0/backend/app/services/s3_upload.py +216 -0
  51. alchemux-0.1.0/backend/app/templates/config.toml.example +87 -0
  52. alchemux-0.1.0/backend/app/templates/env.example +38 -0
  53. alchemux-0.1.0/backend/app/tests/__init__.py +1 -0
  54. alchemux-0.1.0/backend/app/tests/test_batch_command.py +56 -0
  55. alchemux-0.1.0/backend/app/tests/test_batch_file_discovery.py +70 -0
  56. alchemux-0.1.0/backend/app/tests/test_batch_parsing.py +88 -0
  57. alchemux-0.1.0/backend/app/tests/test_batch_playlist_expansion.py +64 -0
  58. alchemux-0.1.0/backend/app/tests/test_cli_clipboard_input.py +82 -0
  59. alchemux-0.1.0/backend/app/tests/test_cli_config_smoke.py +108 -0
  60. alchemux-0.1.0/backend/app/tests/test_cli_interactive_input.py +160 -0
  61. alchemux-0.1.0/backend/app/tests/test_config_doctor_repair.py +188 -0
  62. alchemux-0.1.0/backend/app/tests/test_config_manager.py +262 -0
  63. alchemux-0.1.0/backend/app/tests/test_downloader_path_resolution.py +54 -0
  64. alchemux-0.1.0/backend/app/tests/test_ephemeral_config.py +49 -0
  65. alchemux-0.1.0/backend/app/tests/test_update_command.py +116 -0
  66. alchemux-0.1.0/backend/app/tests/test_video_enabled_gating.py +132 -0
  67. alchemux-0.1.0/backend/app/utils/__init__.py +1 -0
  68. alchemux-0.1.0/backend/app/utils/file_utils.py +299 -0
  69. alchemux-0.1.0/backend/app/utils/metadata.py +227 -0
  70. alchemux-0.1.0/pyproject.toml +62 -0
  71. alchemux-0.1.0/setup.cfg +4 -0
alchemux-0.1.0/LICENSE ADDED
@@ -0,0 +1,8 @@
1
+ LICENSE
2
+ ================================================================================
3
+
4
+ This project is licensed under the GNU Affero General Public License v3.0
5
+ (AGPL-3.0).
6
+
7
+ Full license text:
8
+ https://www.gnu.org/licenses/agpl-3.0.en.html
@@ -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
+ [![Star on GitHub](https://img.shields.io/badge/Star-on_GitHub-blue?logo=github)](https://github.com/bmurrtech/alchemux)
41
+ [![PyPI version](https://img.shields.io/pypi/v/alchemux?label=pypi)](https://pypi.org/project/alchemux/)
42
+ [![PyPI downloads](https://img.shields.io/pypi/dm/alchemux?label=downloads&color=success)](https://pypi.org/project/alchemux/)
43
+ [![CI](https://img.shields.io/github/actions/workflow/status/bmurrtech/alchemux/ci.yml?branch=main&logo=github&label=CI)](https://github.com/bmurrtech/alchemux/actions/workflows/ci.yml?query=branch%3Amain)
44
+ [![Latest Release](https://img.shields.io/github/v/release/bmurrtech/alchemux?include_prereleases&label=release&logo=github)](https://github.com/bmurrtech/alchemux/releases)
45
+ [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-blue.svg)](https://docs.astral.sh/uv/)
46
+ [![Python](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/)
47
+ [![uv](https://img.shields.io/badge/distributed_with-uv-DE5FE9.svg)](https://docs.astral.sh/uv/)
48
+ [![License: AGPL v3](https://img.shields.io/badge/license-GNU%20AGPLv3-blue.svg)](LICENSE)
49
+ [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?logo=ko-fi)](https://ko-fi.com/bmurrtech)
50
+ [![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Support-FFDD00?logo=buymeacoffee&logoColor=black)](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** — [![Star on GitHub](https://img.shields.io/badge/Star-on_GitHub-blue?logo=github)](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
+ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](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
@@ -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
+ [![Star on GitHub](https://img.shields.io/badge/Star-on_GitHub-blue?logo=github)](https://github.com/bmurrtech/alchemux)
10
+ [![PyPI version](https://img.shields.io/pypi/v/alchemux?label=pypi)](https://pypi.org/project/alchemux/)
11
+ [![PyPI downloads](https://img.shields.io/pypi/dm/alchemux?label=downloads&color=success)](https://pypi.org/project/alchemux/)
12
+ [![CI](https://img.shields.io/github/actions/workflow/status/bmurrtech/alchemux/ci.yml?branch=main&logo=github&label=CI)](https://github.com/bmurrtech/alchemux/actions/workflows/ci.yml?query=branch%3Amain)
13
+ [![Latest Release](https://img.shields.io/github/v/release/bmurrtech/alchemux?include_prereleases&label=release&logo=github)](https://github.com/bmurrtech/alchemux/releases)
14
+ [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-blue.svg)](https://docs.astral.sh/uv/)
15
+ [![Python](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/)
16
+ [![uv](https://img.shields.io/badge/distributed_with-uv-DE5FE9.svg)](https://docs.astral.sh/uv/)
17
+ [![License: AGPL v3](https://img.shields.io/badge/license-GNU%20AGPLv3-blue.svg)](LICENSE)
18
+ [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?logo=ko-fi)](https://ko-fi.com/bmurrtech)
19
+ [![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Support-FFDD00?logo=buymeacoffee&logoColor=black)](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** — [![Star on GitHub](https://img.shields.io/badge/Star-on_GitHub-blue?logo=github)](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
+ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](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