<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex YAN</title>
    <description>The latest articles on DEV Community by Alex YAN (@alex_yan_6135f8195a1a3b01).</description>
    <link>https://dev.to/alex_yan_6135f8195a1a3b01</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3914010%2F14ba65f5-563a-45ee-8041-81b07513c01d.png</url>
      <title>DEV Community: Alex YAN</title>
      <link>https://dev.to/alex_yan_6135f8195a1a3b01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alex_yan_6135f8195a1a3b01"/>
    <language>en</language>
    <item>
      <title>Imgclip: A Cross-Platform CLI for Clipboard ↔ Image File Conversion</title>
      <dc:creator>Alex YAN</dc:creator>
      <pubDate>Tue, 05 May 2026 12:38:07 +0000</pubDate>
      <link>https://dev.to/alex_yan_6135f8195a1a3b01/imgclip-a-cross-platform-cli-for-clipboard-image-file-conversion-2i1l</link>
      <guid>https://dev.to/alex_yan_6135f8195a1a3b01/imgclip-a-cross-platform-cli-for-clipboard-image-file-conversion-2i1l</guid>
      <description>&lt;p&gt;You take a screenshot. You mean to paste it somewhere. You get distracted. The next copy overwrites your clipboard, and the screenshot is gone forever.&lt;/p&gt;

&lt;p&gt;That kept happening to me — especially on Linux, where there's no built-in "screenshot → file" flow like macOS. So I built &lt;a href="https://github.com/alexyan0431/imgclip" rel="noopener noreferrer"&gt;imgclip&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Imgclip is a single-binary CLI that moves images between your clipboard and files. Four modes, one tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Save clipboard image to a file&lt;/span&gt;
imgclip &lt;span class="nt"&gt;-o&lt;/span&gt; screenshot.png

&lt;span class="c"&gt;# Watch clipboard, auto-save every new image&lt;/span&gt;
imgclip &lt;span class="nt"&gt;--watch&lt;/span&gt;

&lt;span class="c"&gt;# Watch clipboard, but choose which ones to keep&lt;/span&gt;
imgclip &lt;span class="nt"&gt;--interactive&lt;/span&gt;

&lt;span class="c"&gt;# Copy an image file back to clipboard (for pasting into Slack, docs, etc.)&lt;/span&gt;
imgclip &lt;span class="nt"&gt;--copy&lt;/span&gt; diagram.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqagb0qgmxg6214xsom3g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqagb0qgmxg6214xsom3g.gif" alt="imgclip demo" width="760" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use...
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ShareX / Snipaste?&lt;/strong&gt; Great GUI tools, but they need a desktop. Imgclip works over SSH, in headless environments, and in shell scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;xclip -selection clipboard -t image/png -o &amp;gt; file.png&lt;/code&gt;?&lt;/strong&gt; That works for one-shot saves, but it's a pain to remember — and it doesn't do watch mode, interactive filtering, or auto-start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A shell script?&lt;/strong&gt; I tried. Handling clipboard APIs across Windows, Linux, and macOS gets ugly fast. Imgclip wraps &lt;code&gt;arboard&lt;/code&gt; for cross-platform clipboard access and handles the edge cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few things I found useful
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auto-start on login:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;imgclip &lt;span class="nt"&gt;--install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sets up platform-native auto-start (VBS on Windows, &lt;code&gt;.desktop&lt;/code&gt; on Linux, LaunchAgent on macOS). Every screenshot gets saved automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pipeline-friendly output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get a data URI for HTML embedding&lt;/span&gt;
imgclip &lt;span class="nt"&gt;--data-uri&lt;/span&gt;

&lt;span class="c"&gt;# Write to temp file and print the path (great for scripts)&lt;/span&gt;
imgclip &lt;span class="nt"&gt;--temp&lt;/span&gt;

&lt;span class="c"&gt;# Pipe JPEG to another command&lt;/span&gt;
imgclip &lt;span class="nt"&gt;-f&lt;/span&gt; jpeg &lt;span class="nt"&gt;-q&lt;/span&gt; 80 | curl &lt;span class="nt"&gt;-T&lt;/span&gt; - https://upload.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Interactive mode for selective capture:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're taking lots of screenshots but only want to keep some of them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;imgclip &lt;span class="nt"&gt;--interactive&lt;/span&gt;
imgclip: interactive mode — watching clipboard &lt;span class="k"&gt;for &lt;/span&gt;changes
         &lt;span class="o"&gt;[&lt;/span&gt;s] save  &lt;span class="o"&gt;[&lt;/span&gt;d] discard  &lt;span class="o"&gt;[&lt;/span&gt;q] quit
imgclip: new image &lt;span class="o"&gt;(&lt;/span&gt;1920x1080&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="o"&gt;[&lt;/span&gt;s]ave &lt;span class="o"&gt;[&lt;/span&gt;d]iscard &lt;span class="o"&gt;[&lt;/span&gt;q]uit? s
imgclip: saved ~/Pictures/imgclip/imgclip-1746359722000-1.png
imgclip: new image &lt;span class="o"&gt;(&lt;/span&gt;800x600&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="o"&gt;[&lt;/span&gt;s]ave &lt;span class="o"&gt;[&lt;/span&gt;d]iscard &lt;span class="o"&gt;[&lt;/span&gt;q]uit? d
imgclip: discarded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Download a prebuilt binary from &lt;a href="https://github.com/alexyan0431/imgclip/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt; (6 targets: x86_64 + aarch64 for Windows/Linux/macOS), or build from source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--git&lt;/span&gt; https://github.com/alexyan0431/imgclip.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Single binary, no runtime dependencies. Drop it in your PATH and you're done.&lt;/p&gt;




&lt;p&gt;Imgclip is &lt;a href="https://github.com/alexyan0431/imgclip/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT-licensed&lt;/a&gt; and written in Rust. Feedback and contributions welcome — especially around new output formats, platform-specific quirks, or package manager recipes (Homebrew, scoop, AUR).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/alexyan0431/imgclip" rel="noopener noreferrer"&gt;Star on GitHub&lt;/a&gt; ⭐&lt;/p&gt;

</description>
      <category>cli</category>
      <category>rust</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
