<?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: Datvex</title>
    <description>The latest articles on DEV Community by Datvex (@datvex).</description>
    <link>https://dev.to/datvex</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%2F3955212%2F262188ca-e616-416b-b260-694118a6a033.png</url>
      <title>DEV Community: Datvex</title>
      <link>https://dev.to/datvex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datvex"/>
    <language>en</language>
    <item>
      <title>I wrote a script to clean metadata from photos before sharing them online</title>
      <dc:creator>Datvex</dc:creator>
      <pubDate>Wed, 27 May 2026 21:26:25 +0000</pubDate>
      <link>https://dev.to/datvex/i-wrote-a-script-to-clean-metadata-from-photos-before-sharing-them-online-gjk</link>
      <guid>https://dev.to/datvex/i-wrote-a-script-to-clean-metadata-from-photos-before-sharing-them-online-gjk</guid>
      <description>&lt;p&gt;I was sending some photos to a friend and realized I had no idea what metadata was baked into them. Checked with exiftool and sure enough, GPS coordinates, phone model, exact timestamp, lens info. All sitting right there in the file.&lt;/p&gt;

&lt;p&gt;Some platforms strip this stuff when you upload. Some don't. And if you send photos as files in a messenger, nothing gets removed.&lt;/p&gt;

&lt;p&gt;So I wrote a Python script to handle it. I called it ZeroExif.&lt;/p&gt;

&lt;p&gt;The main thing I wanted was to pick what gets removed. Sometimes I just want to kill the GPS data but keep everything else. Sometimes I want to nuke all of it. So there are four modes you can toggle:&lt;/p&gt;

&lt;p&gt;Everything (EXIF, XMP, ICC profiles). This is what I use most of the time.&lt;br&gt;
Just GPS coordinates.&lt;br&gt;
Just camera and lens info.&lt;br&gt;
Just dates and timestamps.&lt;/p&gt;

&lt;p&gt;You can mix and match.&lt;/p&gt;

&lt;p&gt;One problem I ran into early: if you just strip EXIF from a JPEG, the photo can end up sideways or upside down. The orientation was stored in the metadata. So the script applies the rotation physically before cleaning. Your photos stay the way they should.&lt;/p&gt;

&lt;p&gt;For JPEG it saves at quality 95 with subsampling 0, so you're not losing quality.&lt;/p&gt;

&lt;p&gt;It also handles animated GIFs and WebPs properly. Keeps all the frames, timing, loop count. Most quick Pillow solutions I found online just destroy the animation.&lt;/p&gt;

&lt;p&gt;Works with JPG, PNG, WebP, BMP, TIFF.&lt;/p&gt;

&lt;p&gt;You can drag photos or a whole folder into the terminal. It remembers which files you excluded last time. If a file with the same name already exists in the output folder, it adds _1, _2 etc.&lt;/p&gt;

&lt;p&gt;Only dependency is Pillow. There's a Termux version too. Three languages (EN, RU, CN).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Datvex/ZeroExif" rel="noopener noreferrer"&gt;https://github.com/Datvex/ZeroExif&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT license. Happy to hear any feedback.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>privacy</category>
      <category>security</category>
    </item>
    <item>
      <title>I wrote a Python script to stop copy-pasting files into ChatGPT one by one</title>
      <dc:creator>Datvex</dc:creator>
      <pubDate>Wed, 27 May 2026 21:24:50 +0000</pubDate>
      <link>https://dev.to/datvex/i-wrote-a-python-script-to-stop-copy-pasting-files-into-chatgpt-one-by-one-5254</link>
      <guid>https://dev.to/datvex/i-wrote-a-python-script-to-stop-copy-pasting-files-into-chatgpt-one-by-one-5254</guid>
      <description>&lt;p&gt;So here's what kept bugging me. I'm working on a project, I need ChatGPT to help me fix something, and I start copying files into the chat. One file, paste, another file, paste. By the fifth file I'm already annoyed. And half the time I forget to include something important.&lt;/p&gt;

&lt;p&gt;I figured I'd write a quick script to just merge the files I need into one .txt. It turned out more useful than I expected, so I cleaned it up and put it on GitHub.&lt;/p&gt;

&lt;p&gt;It's called FileCLI. You run it, give it a folder, it shows you all the files. You type the numbers of the ones you want, press 0, done. One .txt file with everything separated cleanly.&lt;/p&gt;

&lt;p&gt;The part I actually use the most is the memory. It remembers what I picked last time for each folder. So when I come back to the same project a week later, my selection is already there.&lt;/p&gt;

&lt;p&gt;Some other stuff it does:&lt;/p&gt;

&lt;p&gt;You can drag a folder straight into the terminal instead of typing the path. Works on Windows, Linux, Mac, even Termux on my phone.&lt;/p&gt;

&lt;p&gt;It handles ZIP files. Just drop one in and it'll unpack it and let you pick files from inside.&lt;/p&gt;

&lt;p&gt;It figures out the encoding automatically. UTF-8, UTF-16, CP1251, CP1252. Useful when you have old files with weird encodings.&lt;/p&gt;

&lt;p&gt;Skips all the junk on its own. No node_modules, no .pyc files, no images, no binaries in your output.&lt;/p&gt;

&lt;p&gt;Settings (where to save, language) open in a little floating menu with mouse support. That's the only "fancy" part, everything else is just typing numbers.&lt;/p&gt;

&lt;p&gt;No dependencies at all, just Python 3.8 or newer. There's a simpler version without the floating menu for Termux.&lt;/p&gt;

&lt;p&gt;Three languages: English, Russian, Chinese.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Datvex/FileCLI" rel="noopener noreferrer"&gt;https://github.com/Datvex/FileCLI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you end up trying it let me know what you think. Or if there's something you'd want it to do differently.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
