Skip to main content

Save clipboard content (text and images) to files with smart format detection

Project description

ClipDrop

PyPI version Python Downloads License: MIT GitHub issues

Save clipboard content to files with one command. ClipDrop automatically detects formats (JSON, Markdown, CSV), suggests appropriate extensions, prevents accidental overwrites, and provides rich visual feedback.

๐Ÿ“‹ Problem We're Solving

The Pain: macOS users face a cumbersome 6-step workflow to save clipboard content:

  1. Copy content to clipboard
  2. Open text editor or image application
  3. Paste content
  4. Navigate to save location
  5. Choose file name and format
  6. Click save

Our Solution: Transform those 6 steps into 1 simple command โ†’ clipdrop filename

This workflow interruption is especially painful for:

  • Developers saving code snippets, API responses, or terminal outputs
  • Product Managers capturing screenshots and meeting notes
  • Content Creators storing drafts, research clips, and visual content
  • Students organizing research notes and screenshots

Features

  • Audio Transcription: On-device audio transcription using Apple Intelligence (macOS 26.0+) ๐ŸŽต
    • Auto-detects audio in clipboard - just run clipdrop
    • Real-time progress feedback with segment count
    • Supports SRT, TXT, and MD output formats
    • Multi-language support with --lang option
  • YouTube Transcripts: Download video transcripts in multiple formats (SRT, VTT, TXT, MD) ๐ŸŽฅ
  • Web Content Support: Save content from web pages with embedded images ๐ŸŒ
  • PDF Creation: Save mixed content (text + images) as PDF to preserve context ๐Ÿ“„
  • HTML Clipboard Parsing: Automatically extracts text and images from web copies
  • Image Support: Save images from clipboard (PNG, JPG, GIF, BMP, WebP) ๐Ÿ“ท
  • Smart Format Detection: Automatically detects JSON, Markdown, CSV, PDF, HTML, and image formats
  • Extension Auto-Suggestion: No extension? ClipDrop suggests the right one
  • Content Priority: Intelligently handles mixed content (HTML โ†’ PDF, text + image โ†’ PDF)
  • Safe by Default: Interactive overwrite protection (bypass with --force)
  • Paranoid Mode: Optional pre-save secret scan with prompt, redact, block, and warn workflows
  • Preview Mode: See content before saving (text with syntax highlighting, images with dimensions)
  • Rich CLI: Beautiful, informative output with colors and icons
  • Performance: Caches clipboard content for speed (<200ms operations)
  • Image Optimization: Automatic compression for PNG/JPEG formats
  • Large File Support: Handles files up to 100MB with size warnings
  • Unicode Support: Full international character support
  • Multi-language Support: YouTube transcripts in 150+ languages with auto-detection

๐Ÿ“ฆ Installation

Quick Install

# Basic installation
pip install clipdrop

# With YouTube transcript support
pip install clipdrop[youtube]

Alternative Installation Methods

# Using uv (fast Python package manager)
uv add clipdrop

# Using pipx (for isolated environments)
pipx install clipdrop

From Source

# Clone the repository
git clone https://github.com/prateekjain24/clipdrop.git
cd clipdrop

# Install with uv
uv pip install -e .

# Or with pip
pip install -e .

Usage

Basic Usage

# Save clipboard to file (auto-detects format)
clipdrop notes              # โ†’ notes.txt (text only)
clipdrop screenshot         # โ†’ screenshot.png (image only)
clipdrop document           # โ†’ document.pdf (mixed content auto-detected)
clipdrop data               # โ†’ data.json (if JSON detected)
clipdrop readme             # โ†’ readme.md (if Markdown detected)

# Audio transcription (macOS 26.0+)
clipdrop                    # โ†’ transcript_20240323_143022.srt (auto-detects audio)
clipdrop meeting.srt        # โ†’ meeting.srt (if audio in clipboard)
clipdrop notes.txt          # โ†’ notes.txt (transcribed as plain text)

# Specify extension explicitly
clipdrop report.pdf         # Save any content as PDF
clipdrop photo.jpg          # Save as JPEG
clipdrop diagram.png        # Save as PNG
clipdrop config.yaml        # Save as YAML

Options

# Force overwrite without confirmation
clipdrop notes.txt --force
clipdrop notes.txt -f

# Preview content before saving (with syntax highlighting for text, dimensions for images)
clipdrop data.json --preview
clipdrop screenshot.png -P

# Paranoid pre-save secret checks
clipdrop notes.txt -p                     # prompt on findings
clipdrop secrets.json --paranoid=redact   # redact matches then save
clipdrop secrets.txt --paranoid=block     # block if secrets found
clipdrop log.txt --paranoid=warn          # warn but save as-is
clipdrop env.txt -p --yes                 # auto-save in non-TTY contexts
clipdrop env.txt --paranoid=prompt --yes  # explicit prompt mode with auto-yes

# Force text mode when both image and text are in clipboard
clipdrop notes.txt --text

# Transcribe audio from clipboard (macOS 26.0+)
clipdrop --transcribe                    # Auto-generate: transcript_YYYYMMDD_HHMMSS.srt
clipdrop --transcribe meeting.txt        # Save as plain text
clipdrop -tr notes.md --lang en-US       # Specify language and format

# Download YouTube video transcripts
clipdrop --youtube                        # Download from clipboard URL (defaults to English)
clipdrop --youtube --lang es             # Download Spanish captions
clipdrop --youtube transcript.srt        # Save as SRT format
clipdrop -yt meeting.txt                 # Short flag, save as plain text
clipdrop --youtube --chapters notes.md   # Include chapter markers in markdown

# Show version
clipdrop --version

# Get help
clipdrop --help

Examples

Save copied text

# Copy some text, then:
clipdrop notes
# โœ… Saved 156 B to notes.txt

Save web article with images

# Copy article from Medium, Wikipedia, etc., then:
clipdrop article
# ๐Ÿ“„ HTML with images detected. Creating PDF: article.pdf
# โœ… Created PDF from HTML (2048 chars, 5 images, 245.3 KB) at article.pdf

Auto-detect JSON and pretty-print

# Copy JSON data, then:
clipdrop config
# ๐Ÿ“ Auto-detected format. Saving as: config.json
# โœ… Saved 2.3 KB to config.json

Preview with syntax highlighting

clipdrop script.py --preview
# Shows colored preview with line numbers
# Save this content? [Y/n]:

Save copied image

# Copy an image (screenshot, etc.), then:
clipdrop screenshot
# ๐Ÿ“ท Auto-detected image format. Saving as: screenshot.png
# โœ… Saved image (1920x1080, 245.3 KB) to screenshot.png

Handle mixed content

# When both image and text are in clipboard:
clipdrop document         # Auto-creates PDF with both (NEW!)
clipdrop content.png      # Save image only
clipdrop content --text   # Forces text mode

Create PDFs from clipboard

# Mixed content (text + image) โ†’ PDF automatically
clipdrop notes            # Has both? โ†’ notes.pdf

# Explicitly create PDF from any content
clipdrop report.pdf       # Always creates PDF

# PDF preserves content order (WYCWYG - What You Copy is What You Get)
# โ€ข Text with code โ†’ formatted in PDF
# โ€ข Screenshots โ†’ embedded in PDF
# โ€ข Mixed notes โ†’ structured document

Transcribe audio from clipboard (macOS 26.0+)

# Copy audio file to clipboard, then:
clipdrop                         # Auto-detects and transcribes
# ๐ŸŽต Audio detected in clipboard
# โณ Transcribing audio...
# ๐Ÿ“ Processing segments: 42
# โœ… Saved 2.1 KB to transcript_20240323_143022.srt

# Explicit transcription with custom filename
clipdrop meeting.srt            # Transcribe to SRT format
clipdrop notes.txt              # Transcribe to plain text
clipdrop summary.md             # Transcribe to Markdown

# Specify language for better accuracy
clipdrop --lang en-US           # American English
clipdrop --lang es-ES           # Spanish (Spain)
clipdrop --lang fr-FR           # French (France)

# Use --transcribe flag when auto-detection fails
clipdrop --transcribe           # Force transcription mode
clipdrop -tr meeting.txt        # Short flag variant

Download YouTube transcripts

# Copy YouTube URL to clipboard, then:
clipdrop --youtube
# ๐ŸŽฅ Found YouTube video: dQw4w9WgXcQ
# ๐Ÿ“บ Title: Example Video Title
# โœ“ Selected: English
# โœ… Transcript saved to 'Example Video Title.srt'

# Specify language (supports 150+ languages)
clipdrop --youtube --lang fr            # French
clipdrop --youtube --lang es            # Spanish
clipdrop --youtube --lang ja            # Japanese

# Different output formats
clipdrop --youtube video.txt            # Plain text
clipdrop --youtube video.srt            # SRT subtitles
clipdrop --youtube video.vtt            # WebVTT format
clipdrop --youtube video.md             # Markdown with timestamps

# Advanced options
clipdrop --youtube --chapters video.md  # Include chapter markers
clipdrop --youtube --lang en-US         # Specific language variant

๐ŸŽ™๏ธ On-device Transcription (macOS)

ClipDrop leverages Apple Intelligence for fast, private audio transcription directly on your Mac. Your audio never leaves your device.

Requirements

  • macOS 26.0+ with Apple Intelligence enabled
  • Supported formats: .m4a, .mp3, .wav, .aiff, .caf
  • Languages: 50+ languages supported (auto-detected or specify with --lang)

How to Use

  1. Copy an audio file to clipboard (select in Finder, press โŒ˜C)
  2. Run ClipDrop - it auto-detects audio and transcribes
# Auto-detect and transcribe
clipdrop                        # Creates: transcript_YYYYMMDD_HHMMSS.srt

# Custom filename and format
clipdrop meeting.srt            # SRT with timestamps
clipdrop notes.txt              # Plain text only
clipdrop summary.md             # Markdown with time headers

# Specify language for accuracy
clipdrop --lang en-US meeting.srt   # US English
clipdrop --lang es-ES acta.txt      # Spanish
clipdrop --lang ja-JP memo.md       # Japanese

# Force transcription mode if auto-detection fails
clipdrop --transcribe           # Uses -tr short flag

Output Formats

Format Extension Description
SRT .srt Standard subtitle format with timestamps
Plain Text .txt Just the transcribed text
Markdown .md Text with timestamp headers

Performance

  • Speed: ~5 seconds for 1-minute audio
  • Accuracy: High accuracy using Apple's latest models
  • Privacy: 100% on-device, no internet required

Not on macOS?

This feature requires macOS 26.0+ with Apple Intelligence. For other platforms:

  • Linux/Windows users: Consider cloud-based alternatives like:

    • OpenAI Whisper API
    • Google Cloud Speech-to-Text
    • Azure Speech Services
  • Older macOS: Upgrade to macOS 26.0 or use online transcription services

Troubleshooting

Issue Solution
"No audio in clipboard" Copy audio file using Finder (โŒ˜C)
"Platform not supported" Requires macOS 26.0+
"No speech detected" Check audio has speech content
"Helper not found" Reinstall: pip install --force-reinstall clipdrop

See Exit Codes for automation and scripting.

๐Ÿšช Exit Codes

The audio transcription feature uses standardized exit codes for better automation and debugging:

Code Name Description
0 SUCCESS Transcription completed successfully
1 NO_AUDIO No audio file found in clipboard
2 PLATFORM_ERROR Not on macOS or version < 26.0
3 NO_SPEECH Audio found but no speech detected
4 TRANSCRIPTION_ERROR General transcription failure

Using Exit Codes in Scripts

# Check for specific errors
clipdrop transcript.srt -tr
case $? in
  0) echo "Success!" ;;
  1) echo "No audio in clipboard" ;;
  2) echo "Wrong platform/version" ;;
  3) echo "No speech in audio" ;;
  4) echo "Transcription failed" ;;
esac

# Or simply check success/failure
if clipdrop -tr; then
  echo "Transcription successful"
else
  echo "Transcription failed with code: $?"
fi

๐Ÿ”ง Development

Setup Development Environment

# Clone the repository
git clone https://github.com/prateekjain24/clipdrop.git
cd clipdrop

# Install with dev dependencies
uv pip install -e .[dev]

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov --cov-report=term-missing

# Run specific test file
pytest tests/test_clipboard.py

Code Quality

# Format code
black src tests

# Lint code
ruff check .

# Type checking (if using mypy)
mypy src

Project Status

Completed Features (Sprints 1-3) โœ…

  • Project setup with uv package manager
  • CLI skeleton with Typer
  • Clipboard text and image reading with caching
  • File writing with atomic operations
  • Extension detection for text and image formats
  • Overwrite protection
  • Rich success/error messages
  • JSON, Markdown, CSV format detection
  • Path validation and sanitization
  • Image clipboard support (PNG, JPG, GIF, BMP, WebP)
  • Content priority logic (image > text, with --text override)
  • Image optimization with format-specific compression
  • Comprehensive test suite (89 tests)
  • Preview mode with syntax highlighting (text) and dimensions (images)

Enhanced Features ๐ŸŒŸ

  • Custom exception hierarchy for better error handling
  • Advanced clipboard operations (stats, monitoring, binary detection, images)
  • Enhanced file operations (atomic writes, backups, compression)
  • Image format conversion (RGBAโ†’RGB for JPEG)
  • Performance optimizations with content caching
  • Smart format detection for images and text

Future Roadmap (Sprint 4) ๐Ÿšง

  • PyPI package release
  • Performance profiling for large files
  • Cross-platform support (Windows, Linux)
  • Configuration file support

๐Ÿ—๏ธ Architecture

clipdrop/
โ”œโ”€โ”€ src/clipdrop/
โ”‚   โ”œโ”€โ”€ __init__.py         # Version management
โ”‚   โ”œโ”€โ”€ main.py            # CLI entry point
โ”‚   โ”œโ”€โ”€ clipboard.py       # Clipboard operations (text + images)
โ”‚   โ”œโ”€โ”€ files.py           # File operations
โ”‚   โ”œโ”€โ”€ images.py          # Image-specific operations
โ”‚   โ”œโ”€โ”€ detect.py          # Format detection
โ”‚   โ”œโ”€โ”€ pdf.py             # PDF creation (NEW)
โ”‚   โ””โ”€โ”€ exceptions.py      # Custom exceptions
โ”œโ”€โ”€ tests/                 # Comprehensive test suite (124 tests)
โ”‚   โ”œโ”€โ”€ test_clipboard.py  # 27 tests
โ”‚   โ”œโ”€โ”€ test_files.py      # 37 tests
โ”‚   โ”œโ”€โ”€ test_images.py     # 25 tests
โ”‚   โ””โ”€โ”€ test_pdf.py        # 35 tests (NEW)
โ”œโ”€โ”€ pyproject.toml         # Modern Python packaging
โ””โ”€โ”€ README.md              # This file

๐Ÿ“ Requirements

  • Python: 3.10, 3.11, 3.12, or 3.13
  • OS: macOS 10.15+ (general features)
    • macOS 26.0+ required for on-device audio transcription using Apple Intelligence
  • Dependencies:
    • typer[all] >= 0.17.4
    • rich >= 14.1.0
    • pyperclip >= 1.9.0
    • Pillow >= 11.3.0
    • reportlab >= 4.0.0

๐Ÿ“„ License

MIT License - See LICENSE file for details.

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Issues

Found a bug or have a feature request? Please open an issue on GitHub Issues.


Current Version: 0.50 | Status: Available on PyPI

NOT RELATED to https://clipdrop.co/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clipdrop-1.0.tar.gz (123.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clipdrop-1.0-py3-none-any.whl (113.8 kB view details)

Uploaded Python 3

File details

Details for the file clipdrop-1.0.tar.gz.

File metadata

  • Download URL: clipdrop-1.0.tar.gz
  • Upload date:
  • Size: 123.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.16

File hashes

Hashes for clipdrop-1.0.tar.gz
Algorithm Hash digest
SHA256 2fdee1113bb03898fc12c6c371afec251402e641e36306e0a3f6b4e3d2220794
MD5 3e08e6747bf36fa9ae62e4aef0259f44
BLAKE2b-256 1d1fd6e20352c310a64ca0f3af80a212f862590847d21cb556baf5a8cacf851c

See more details on using hashes here.

File details

Details for the file clipdrop-1.0-py3-none-any.whl.

File metadata

  • Download URL: clipdrop-1.0-py3-none-any.whl
  • Upload date:
  • Size: 113.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.16

File hashes

Hashes for clipdrop-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae8914d7446eda5b5631e150cdedf2e50ad0e9f668985ace9832d8679da2e038
MD5 caa9d27116ca570270bfe3694ead0b78
BLAKE2b-256 e8092608d19c33963a88c82ce8263d454f7519420a6f4e6a01d98427a83d3924

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page