{"id":36808907,"url":"https://github.com/patrickziegler/mediacopier","last_synced_at":"2026-01-12T13:43:09.569Z","repository":{"id":36562593,"uuid":"168935105","full_name":"patrickziegler/mediacopier","owner":"patrickziegler","description":"Tools for copying media files and removing duplicates in your photo collections","archived":false,"fork":false,"pushed_at":"2026-01-11T13:17:11.000Z","size":1345,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-11T15:55:05.560Z","etag":null,"topics":["avformat","avutil","cmake","exif","exiv2","filesystem","libjpeg"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patrickziegler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-02-03T10:49:59.000Z","updated_at":"2025-09-06T22:06:50.000Z","dependencies_parsed_at":"2025-01-25T10:20:02.182Z","dependency_job_id":"68421e4d-24f2-4151-b1c0-75810aa88bba","html_url":"https://github.com/patrickziegler/mediacopier","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/patrickziegler/mediacopier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickziegler%2Fmediacopier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickziegler%2Fmediacopier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickziegler%2Fmediacopier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickziegler%2Fmediacopier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrickziegler","download_url":"https://codeload.github.com/patrickziegler/mediacopier/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickziegler%2Fmediacopier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28339343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avformat","avutil","cmake","exif","exiv2","filesystem","libjpeg"],"created_at":"2026-01-12T13:43:08.986Z","updated_at":"2026-01-12T13:43:09.559Z","avatar_url":"https://github.com/patrickziegler.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg width=\"64px\" src=\"https://raw.githubusercontent.com/patrickziegler/mediacopier/refs/heads/master/app/mediacopier/mediacopier.svg\"\u003e mediacopier\n\n[![Build Status](https://github.com/patrickziegler/MediaCopier/actions/workflows/build-and-test.yml/badge.svg?branch=master)](https://github.com/patrickziegler/MediaCopier/actions/workflows/build-and-test.yml?query=branch%3Amaster)\n[![Coverage Status](https://coveralls.io/repos/github/patrickziegler/mediacopier/badge.svg?branch=master)](https://coveralls.io/github/patrickziegler/mediacopier?branch=master)\n\nThis app searches for **tagged media files** in a given directory and copies or moves those files to another directory while renaming them according to the specified format.\nThe original creation date is used to **generate a folder structure** and unique filenames.\nIt supports a wide variety of image and videos formats (including raw) and features **lossless on-the-fly auto-rotation of JPEG files**.\n\n\u003c!--gif was created with 'ffmpeg -i capture.mp4 -r 10 -vf \"fps=10,scale=830:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop 0 demo.gif'--\u003e\nThe app focusses on integrating into the native [KDE Plasma](https://kde.org/de/) notification system and context menu ([screenshot](https://i.imgur.com/LF5Vnj9.mp4)) but other desktop environments are supported as well.\n\nValid format specifiers for the renaming pattern can be found [here](https://en.cppreference.com/w/cpp/chrono/system_clock/formatter.html).\n\n## Getting Started\n\n### :anchor: Install via Package Manager\n\n#### openSUSE\n\n[![build result](https://build.opensuse.org/projects/home:zipat:mediacopier/packages/mediacopier/badge.svg?type=default)](https://build.opensuse.org/package/show/home:zipat:mediacopier/mediacopier)\n\nThere are packages being built with the [Open Build Service](https://openbuildservice.org/). You can add the repostory to your distribution and install `mediacopier` easily with the following commands:\n\n```\nzypper ar -f https://download.opensuse.org/repositories/home:/zipat:/mediacopier/openSUSE_Tumbleweed/ mediacopier\nzypper in mediacopier-plasma\n```\n\n### :hammer: Manually Build and Install\n\nDependencies:\n- Exiv2 (https://exiv2.org/)\n- ffmpeg (https://www.ffmpeg.org/download.html)\n- libjpeg-turbo (https://libjpeg-turbo.org/)\n- spdlog (https://github.com/gabime/spdlog) \u003e=[1.9.2](https://github.com/gabime/spdlog/releases/tag/v1.9.2)\n- toml11 (https://github.com/ToruNiina/toml11)\n- CLI11 (https://github.com/CLIUtils/CLI11)\n- Qt5 or Qt6 (https://doc.qt.io/qt-6/)\n- KJobWidgets (https://api.kde.org/frameworks/kjobwidgets/html/index.html)\n\nFor openSUSE, these dependencies can be installed via the following commands\n\n```sh\nzypper install spdlog-devel toml11-devel libexiv2-devel libjpeg8-devel ffmpeg-7-libavformat-devel ffmpeg-7-libavutil-devel # for the core library\nzypper install cli11-devel # for the pure command line interface\nzypper install qt6-core-devel qt6-widgets-devel qt6-statemachine-devel qt6-linguist-devel # for Qt based graphical user interface \nzypper install kf6-ki18n-devel kf6-kjobwidgets-devel # for the KDE Plasma integration\nzypper install gtest lcov clang exiftool ImageMagick # for testing\n```\n\nClone this repository and create a build directory\n\n```sh\ngit clone https://github.com/patrickziegler/MediaCopier.git\ncd MediaCopier \u0026\u0026 mkdir build \u0026\u0026 cd $_\n```\n\nBuild and install the package\n```sh\nexport CC=gcc-14 CXX=g++-14 # set specific compiler (optional)\ncmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release .. \u0026\u0026 make -j$(nproc) \u0026\u0026 sudo make install\n```\n\nAvailable cmake flags\n\n| Flag                   | Description                                      | Default |\n|------------------------|--------------------------------------------------|---------|\n| `SKIP_GUI`             | Don't build graphical user interface             | `OFF`   |\n| `SKIP_CLI`             | Don't build plain command line interface         | `OFF`   |\n| `SKIP_KDE`             | Don't build KDE Plasma integration               | `OFF`   |\n| `USE_QT5`              | Build against Qt5 libraries (legacy)             | `OFF`   |\n| `ENABLE_TEST`          | Enable test targets                              | `OFF`   |\n| `ENABLE_TEST_COVERAGE` | Enable test and coverage targets                 | `OFF`   |\n| `ENABLE_CLANG_TIDY`    | Enable static code analysis with `clang-tidy`    | `OFF`   |\n\n### :factory: Containerized Build Environment (for development purposes)\n\nBuild und run the container image as specified in the `Dockerfile` with the following commands\n\n```sh\ndocker build -t mediacopier-build .\ndocker run -it --rm -v ${PWD}:/run/src/mediacopier -u $(id -u):$(id -g) mediacopier-build\n```\n\nInside the container, run the test suite or generate coverage reports with the following commands\n\n```sh\ncmake -DUSE_QT5=ON -DENABLE_TEST_COVERAGE=ON -DENABLE_CLANG_TIDY=ON /run/src/mediacopier/ \u0026\u0026 make formatcheck \u0026\u0026 make -j $(nproc) \u0026\u0026 make test \u0026\u0026 make coverage\n```\n\n### :paperclip: Build Instructions for Windows\n\nPrepare the [vcpkg](https://github.com/microsoft/vcpkg#using-vcpkg-with-cmake) environment like described in a very helpful [article by Sam Elborai](https://sam.elborai.me/articles/vscode-cpp-dev-environment-2020/)\n```sh\n.\\bootstrap-vcpkg.bat -disableMetrics\n.\\vcpkg.exe install spdlog exiv2 libjpeg-turbo ffmpeg qt5 --triplet=x64-windows\n.\\vcpkg.exe list --triplet=x64-windows # check installed packages\n```\n\nUse the vcpkg toolchain file with cmake\n```sh\ncmake -DCMAKE_TOOLCHAIN_FILE=${VCPKG_DIR}\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DSKIP_KDE=ON -B build -S .\ncmake --build build --config Release\n```\n\n## License\n\nThis project is licensed under the GPL - see the [LICENSE](LICENSE) file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickziegler%2Fmediacopier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrickziegler%2Fmediacopier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickziegler%2Fmediacopier/lists"}