Skip to content

Commit 431cbbd

Browse files
committed
Add burn_iso and html_to_text tools, consolidate categories
New tools: - burn_iso.py: Burn ISO files to USB with safety checks and progress - html_to_text.py: Fetch webpage and convert to plain text Category consolidation (6 → 2): - 'data' (Data Processing): 7 tools - 'dev' (Development): 2 tools - Removed: files, media, web, system Migrated from my-scripts repo with click conversion.
1 parent c8ad3f4 commit 431cbbd

9 files changed

Lines changed: 681 additions & 145 deletions

File tree

README.md

Lines changed: 132 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Inspired by [Simon Willison's tools collection](https://github.com/simonw/tools)
1616
<!-- TOOLS_START -->
1717

1818
<details>
19-
<summary><strong>📊 Data</strong> (2 tools)</summary>
19+
<summary><strong>📊 Data Processing</strong> (7 tools)</summary>
2020

2121
<details>
2222
<summary><a href="python/convert_arrow_to_parquet_streaming.py"><code>convert_arrow_to_parquet_streaming.py</code></a></summary>
@@ -92,50 +92,6 @@ Options:
9292

9393
</details>
9494

95-
</details>
96-
97-
<details>
98-
<summary><strong>🛠️ Dev</strong> (1 tool)</summary>
99-
100-
<details>
101-
<summary><a href="python/ipynb_to_py_sphinx.py"><code>ipynb_to_py_sphinx.py</code></a></summary>
102-
103-
Output of <code>uv run https://tools.ricardodecal.com/python/ipynb_to_py_sphinx.py --help</code>:
104-
105-
<pre><code>Usage: ipynb_to_py_sphinx.py [OPTIONS] NOTEBOOK
106-
107-
Convert a Jupyter notebook to a Sphinx Gallery Python script.
108-
109-
This tool converts a .ipynb file to a .py file formatted for Sphinx Gallery.
110-
It converts Markdown cells to RST (using pypandoc) and comments them out,
111-
while preserving code cells. It also handles magic commands by commenting
112-
them out.
113-
114-
Based on: https://gist.github.com/chsasank/7218ca16f8d022e02a9c0deb94a310fe
115-
116-
Arguments: NOTEBOOK: The path to the input Jupyter notebook (.ipynb).
117-
118-
Examples:
119-
120-
uv run https://tools.ricardodecal.com/python/ipynb_to_py_sphinx.py
121-
notebook.ipynb
122-
123-
uv run https://tools.ricardodecal.com/python/ipynb_to_py_sphinx.py
124-
notebook.ipynb --output my_gallery_script.py
125-
126-
Options:
127-
-o, --output PATH Output Python file path. Defaults to notebook name with
128-
.py extension.
129-
--help Show this message and exit.
130-
</code></pre>
131-
132-
</details>
133-
134-
</details>
135-
136-
<details>
137-
<summary><strong>📁 Files</strong> (2 tools)</summary>
138-
13995
<details>
14096
<summary><a href="python/dedup_dirs.py"><code>dedup_dirs.py</code></a></summary>
14197

@@ -179,28 +135,6 @@ Options:
179135

180136
</details>
181137

182-
<details>
183-
<summary><a href="python/strip_pdf_metadata.py"><code>strip_pdf_metadata.py</code></a></summary>
184-
185-
Output of <code>uv run https://tools.ricardodecal.com/python/strip_pdf_metadata.py --help</code>:
186-
187-
<pre><code>Usage: strip_pdf_metadata.py [OPTIONS] INPUT_FILE [OUTPUT_FILE]
188-
189-
Strip metadata from a PDF file.
190-
191-
If OUTPUT_FILE is not provided, writes to 'stripped_<INPUT_FILE>'.
192-
193-
Options:
194-
--help Show this message and exit.
195-
</code></pre>
196-
197-
</details>
198-
199-
</details>
200-
201-
<details>
202-
<summary><strong>🎬 Media</strong> (2 tools)</summary>
203-
204138
<details>
205139
<summary><a href="python/download_video.py"><code>download_video.py</code></a></summary>
206140

@@ -234,6 +168,59 @@ Options:
234168

235169
</details>
236170

171+
<details>
172+
<summary><a href="python/html_to_text.py"><code>html_to_text.py</code></a></summary>
173+
174+
Output of <code>uv run https://tools.ricardodecal.com/python/html_to_text.py --help</code>:
175+
176+
<pre><code>Usage: html_to_text.py [OPTIONS] URL
177+
178+
Fetch a webpage and convert its readable content to plain text.
179+
180+
Uses inscriptis to extract text from HTML while preserving basic structure.
181+
Automatically adds https:// if no scheme is provided.
182+
183+
Arguments:
184+
185+
URL: The webpage URL to fetch (e.g., example.com or
186+
https://example.com).
187+
188+
Examples:
189+
190+
uv run https://tools.ricardodecal.com/python/html_to_text.py example.com
191+
192+
uv run https://tools.ricardodecal.com/python/html_to_text.py
193+
https://news.ycombinator.com --timeout 30
194+
195+
uv run https://tools.ricardodecal.com/python/html_to_text.py
196+
wikipedia.org/wiki/Python --raw
197+
198+
Options:
199+
-t, --timeout INTEGER Request timeout in seconds.
200+
--raw Skip whitespace cleanup (preserve original
201+
formatting).
202+
--help Show this message and exit.
203+
</code></pre>
204+
205+
</details>
206+
207+
<details>
208+
<summary><a href="python/strip_pdf_metadata.py"><code>strip_pdf_metadata.py</code></a></summary>
209+
210+
Output of <code>uv run https://tools.ricardodecal.com/python/strip_pdf_metadata.py --help</code>:
211+
212+
<pre><code>Usage: strip_pdf_metadata.py [OPTIONS] INPUT_FILE [OUTPUT_FILE]
213+
214+
Strip metadata from a PDF file.
215+
216+
If OUTPUT_FILE is not provided, writes to 'stripped_<INPUT_FILE>'.
217+
218+
Options:
219+
--help Show this message and exit.
220+
</code></pre>
221+
222+
</details>
223+
237224
<details>
238225
<summary><a href="python/yt_transcript.py"><code>yt_transcript.py</code></a></summary>
239226

@@ -262,6 +249,84 @@ Options:
262249

263250
</details>
264251

252+
<details>
253+
<summary><strong>🛠️ Development</strong> (2 tools)</summary>
254+
255+
<details>
256+
<summary><a href="python/burn_iso.py"><code>burn_iso.py</code></a></summary>
257+
258+
Output of <code>uv run https://tools.ricardodecal.com/python/burn_iso.py --help</code>:
259+
260+
<pre><code>Usage: burn_iso.py [OPTIONS] ISO_FILE
261+
262+
Burn an ISO file to a USB drive with safety checks and progress monitoring.
263+
264+
This tool will verify the ISO file, check the target device, unmount any
265+
mounted partitions, and burn the ISO using dd with progress reporting.
266+
267+
DANGER: This will completely erase all data on the target USB device!
268+
269+
Arguments:
270+
271+
ISO_FILE: Path to the ISO file to burn.
272+
273+
Examples:
274+
275+
uv run https://tools.ricardodecal.com/python/burn_iso.py --list
276+
277+
uv run https://tools.ricardodecal.com/python/burn_iso.py ubuntu.iso
278+
--device /dev/sdb --dry-run
279+
280+
uv run https://tools.ricardodecal.com/python/burn_iso.py
281+
~/Downloads/debian.iso -d /dev/sdc
282+
283+
Options:
284+
-d, --device TEXT USB device path (e.g., /dev/sdb). Use --list to see
285+
available devices. [required]
286+
--list List available block devices and exit.
287+
-n, --dry-run Show what would be done without actually doing it.
288+
-f, --force Skip confirmation prompts.
289+
--help Show this message and exit.
290+
</code></pre>
291+
292+
</details>
293+
294+
<details>
295+
<summary><a href="python/ipynb_to_py_sphinx.py"><code>ipynb_to_py_sphinx.py</code></a></summary>
296+
297+
Output of <code>uv run https://tools.ricardodecal.com/python/ipynb_to_py_sphinx.py --help</code>:
298+
299+
<pre><code>Usage: ipynb_to_py_sphinx.py [OPTIONS] NOTEBOOK
300+
301+
Convert a Jupyter notebook to a Sphinx Gallery Python script.
302+
303+
This tool converts a .ipynb file to a .py file formatted for Sphinx Gallery.
304+
It converts Markdown cells to RST (using pypandoc) and comments them out,
305+
while preserving code cells. It also handles magic commands by commenting
306+
them out.
307+
308+
Based on: https://gist.github.com/chsasank/7218ca16f8d022e02a9c0deb94a310fe
309+
310+
Arguments: NOTEBOOK: The path to the input Jupyter notebook (.ipynb).
311+
312+
Examples:
313+
314+
uv run https://tools.ricardodecal.com/python/ipynb_to_py_sphinx.py
315+
notebook.ipynb
316+
317+
uv run https://tools.ricardodecal.com/python/ipynb_to_py_sphinx.py
318+
notebook.ipynb --output my_gallery_script.py
319+
320+
Options:
321+
-o, --output PATH Output Python file path. Defaults to notebook name with
322+
.py extension.
323+
--help Show this message and exit.
324+
</code></pre>
325+
326+
</details>
327+
328+
</details>
329+
265330
<!-- TOOLS_END -->
266331

267332
## License

ci/generate_readme.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
2222
START_MARKER = "<!-- TOOLS_START -->"
2323
END_MARKER = "<!-- TOOLS_END -->"
2424

25-
# Category display order and titles (alphabetical)
26-
CATEGORY_ORDER = ["data", "dev", "files", "media"]
25+
# Category display order and titles
26+
CATEGORY_ORDER = [
27+
"data",
28+
"dev",
29+
# "misc", # Uncomment when needed
30+
]
2731
CATEGORY_TITLES = {
28-
"data": "📊 Data",
29-
"dev": "🛠️ Dev",
30-
"files": "📁 Files",
31-
"media": "🎬 Media",
32+
"data": "📊 Data Processing",
33+
"dev": "🛠️ Development",
34+
# "misc": "📦 Misc", # Uncomment when needed
3235
}
3336

3437

0 commit comments

Comments
 (0)