Floating button to download page text, selected text, or clipboard. Click: download, Hold: copy, Shift+Click: clipboard.
☕ If you find this tool helpful & would like to support its maintenance, please consider leaving a tip on:
Thank you! :-)
🖼 For a quick impression of this script, refer to the screenshots at the bottom.
Instantly download any webpage's visible text content as a file. One click for full page, select text for partial export, or download directly from clipboard. Minimal, unobtrusive floating button.
Saving webpage content is surprisingly tedious:
This script reduces all of that to a single click.
| Action | Result |
|---|---|
| Click | Download entire page as .md (NOT MarkDown Formatted!) |
| Select + Click | Download only selected text (prompts for extension) |
| Shift + Click | Download clipboard contents (prompts for extension) |
| Hold (300ms) | Copy page text to clipboard |
| Double-click | Hide button for 5 seconds |
Article_Title_example-com.md)Downloaded files include an HTML comment header:
<!--
Source: https://example.com/article/123
Title: Article Title
Domain: example.com
Downloaded: 2025-01-15T10:30:00.000Z
-->
Header included for full page downloads only—selection and clipboard exports remain clean.
When downloading selections or clipboard content:
md, txt, py, json, ps1, etc..md file downloads instantly with full metadatapy, js, sh)*://*/* and file:///*| Permission | Purpose |
|---|---|
GM_download |
Trigger file downloads with custom filenames |
GM_setClipboard |
Copy text to clipboard on hold action |
GM_getValue / GM_setValue |
Remember last-used file extension |
Edit the CONFIG object at the top of the script:
const CONFIG = {
file: {
defaultExtension: 'md', // Change default download format
includeHeader: true, // Toggle metadata header
},
button: {
size: 24, // Button size in pixels
position: {
vertical: 'bottom', // 'top' or 'bottom'
horizontal: 'right', // 'left' or 'right'
offsetX: 1,
offsetY: 1
},
opacity: {
default: 0.15, // Idle opacity
hover: 1 // Hover opacity
}
},
timing: {
copyHoldThreshold: 300, // Hold duration for copy (ms)
hideTemporarilyDuration: 5000 // Double-click hide duration (ms)
}
};
Q: The button is in my way.
A: Double-click to hide it for 5 seconds. Or edit CONFIG.button.position to move it to a different corner.
Q: Can I change the default file format?
A: Yes. Change CONFIG.file.defaultExtension from 'md' to 'txt' or any other extension.
Q: Why does selection/clipboard prompt for extension but full page doesn't?
A: Full page downloads use the configured default (.md). Selections and clipboard are assumed to be varied content (code, notes, etc.) where you'd want to specify the format.
Q: Does this work on local HTML files?
A: Yes. The script matches file:///* URLs.
Q: The download shows "Downloading..." but nothing happens.
A: Some userscript managers require explicit download permissions. Try the fallback: if GM_download fails, the script automatically uses a blob URL approach.
Q: Can I disable the metadata header?
A: Yes. Set CONFIG.file.includeHeader to false.