{"id":50377099,"url":"https://github.com/viaacode/batch-folder-sorter","last_synced_at":"2026-05-30T10:02:55.414Z","repository":{"id":344852930,"uuid":"1183415877","full_name":"viaacode/batch-folder-sorter","owner":"viaacode","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-27T15:14:33.000Z","size":175,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T16:05:31.503Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/viaacode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-03-16T15:29:56.000Z","updated_at":"2026-05-27T15:14:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/viaacode/batch-folder-sorter","commit_stats":null,"previous_names":["9elmaz9/batch-folder-sorter","viaacode/batch-folder-sorter"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/viaacode/batch-folder-sorter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viaacode%2Fbatch-folder-sorter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viaacode%2Fbatch-folder-sorter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viaacode%2Fbatch-folder-sorter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viaacode%2Fbatch-folder-sorter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/viaacode","download_url":"https://codeload.github.com/viaacode/batch-folder-sorter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viaacode%2Fbatch-folder-sorter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33687722,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-05-30T10:02:54.496Z","updated_at":"2026-05-30T10:02:55.408Z","avatar_url":"https://github.com/viaacode.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Batch Folder Sorter\n\nBatch Folder Sorter is a desktop helper app for preparing ingest folders from CSV metadata.\n\nIt is intended as a helper tool for working with the meemoo instroom tool workflow.\n\nIt is meant for people who need to sort large batches of files into a clean folder structure before ingest, archiving, delivery, or internal review, without having to do the folder work manually.\n\n## Why This Tool Exists\n\nWhen file batches arrive, they are often:\n\n- mixed together in one folder\n- inconsistently named\n- partially matching the metadata\n- full of files that do not belong in the final ingest structure\n\nBatch Folder Sorter helps turn that messy starting point into a structured output that is easier to review and ingest.\n\n## Important\n\nThis app is a helper tool, not a replacement for collection review or ingest quality control.\n\nPlease keep in mind:\n\n- this tool modifies file structures (creates folders and moves files), so if you are unsure, please use it on a copy of your data\n- always work on a copy of your source material when possible\n- always review the output before final ingest or delivery\n- unmatched files may be moved to `_EXTRA_FILES`, so they still need human review\n- `Undo` restores only the last successful batch action\n\n## What The App Does\n\nThe app takes:\n\n- a `ROOT` folder with files\n- a CSV file with a `Mapnaam` column\n\nIt then matches files to the identifiers in the CSV and moves them into the correct folders automatically.\n\nFiles that do not match are moved into `_EXTRA_FILES` instead of being mixed into the main structure.\n\n## Workflows\n\n### Standard Mode\n\nUse this when filenames directly match the values in the CSV.\n\nExample:\n\n```text\nCSV Mapnaam: ITEM_001\nFile: ITEM_001.jpg\n```\n\nOutput:\n\n```text\nROOT/\n  ITEM_001/\n    jpg/\n      ITEM_001.jpg\n```\n\n### Artwork Batch Mode\n\nUse this for artwork-style batches where the filename contains:\n\n- an IE identifier\n- a sequence number\n- a master suffix like `_M`\n\nExample:\n\n```text\nOBJ001_001+FO+FDP_M.tif\nOBJ001_001+FO+FDP_B.tif\nOBJ001_002+FO+FDP.tif\n```\n\nOutput:\n\n```text\nROOT/\n  OBJ001/\n    Masters_16bit/\n      OBJ001_001+FO+FDP_M.tif\n    Bewerkt_8bit/\n      OBJ001_001+FO+FDP_B.tif\n      OBJ001_002+FO+FDP.tif\n```\n\nAdditional example with a dashed IE identifier:\n\n```text\nCSV Mapnaam: 2814-001\nFiles:\n2814-001_001_M.tif\n2814-001_001_B.tif\n\nOutput:\nROOT/\n  2814-001/\n    Masters_16bit/\n      2814-001_001_M.tif\n    Bewerkt_8bit/\n      2814-001_001_B.tif\n```\n\nNotes:\n\n- `Artwork batch mode` keeps the original filenames\n- `_M` is treated as master\n- `_B` and files without a suffix go to `Bewerkt_8bit`\n- IE identifiers that contain dashes, such as `2814-001`, are supported when that exact value exists in the CSV\n\n## Main Features\n\n- Clean desktop interface\n- Standard mode and artwork batch mode\n- CSV validation before processing\n- `_EXTRA_FILES` handling for unmatched files\n- `Undo` for the last successful batch\n- Release downloads for macOS and Windows\n\n## Downloads\n\nDownload the latest release from:\n\n- [GitHub Releases](https://github.com/viaacode/batch-folder-sorter/releases)\n\nChoose the file that matches your system:\n\n- `BatchFolderSorter-macos-arm64.zip`  \n  For Apple Silicon Macs (`M1`, `M2`, `M3`, `M4`)\n- `BatchFolderSorter-macos-x86_64.zip`  \n  For Intel Macs\n- `BatchFolderSorter-windows-x64.zip`  \n  For 64-bit Windows systems\n- `checksums.txt`  \n  SHA256 checksums for release verification\n\n## First Launch\n\n### macOS\n\n1. Download the correct macOS zip.\n2. Unzip it.\n3. Move `BatchFolderSorter.app` to `Applications` if desired.\n4. Open the app.\n5. If macOS blocks it on first launch:\n   Open `System Settings -\u003e Privacy \u0026 Security` and allow the app to run.\n\nNote:\n\n- The app is not notarized yet, so the first launch may require manual confirmation in macOS.\n\n### Windows\n\n1. Download `BatchFolderSorter-windows-x64.zip`.\n2. Unzip it.\n3. Open the extracted `BatchFolderSorter` folder.\n4. Run the application executable.\n\nIf Windows SmartScreen appears, continue only if you trust the release source.\n\n## How To Use\n\n1. Open the app.\n2. Choose the `ROOT` folder.\n3. Choose the CSV file.\n4. Select `Standard mode` or `Artwork batch mode`.\n5. Click `Run Batch`.\n6. Review the result in the `Status` area.\n7. If needed, click `Undo` to restore the last successful batch.\n\n## CSV Requirements\n\nThe CSV must contain a `Mapnaam` column.\n\nExample:\n\n```csv\nMapnaam\nOBJ001\nOBJ002\nOBJ003\n```\n\nIf the selected CSV does not match the selected `ROOT` folder, the app will stop and show an error instead of moving everything into `_EXTRA_FILES`.\n\n## Hidden macOS Files\n\nBatch Folder Sorter does not create hidden `._*` files.\n\nThese files are usually created by macOS as metadata sidecar files, especially when data is copied to or used from external drives that move between macOS and Windows or other non-Apple filesystems.\n\nIf these files appear in a batch or in an ingest workflow, they should be handled separately before ingest.\n\nFor a practical explanation and cleanup example, see this Apple Community discussion:\n\n- [How do I delete ._ on mac USB file names](https://discussions.apple.com/thread/252896362?sortBy=rank)\n\n## Screenshots\n\n### Standard mode: base structure by extensions\n\n![Image 19-03-2026 at 17 15](https://github.com/user-attachments/assets/5d2b2ce3-c939-4e35-804a-1f7046777df2)\n\n![Image 19-03-2026 at 17 17](https://github.com/user-attachments/assets/24c75d1c-fa40-4bbf-bb78-32bbbd03d089)\n\n![Image 19-03-2026 at 17 18](https://github.com/user-attachments/assets/7e60d95b-16d1-43d8-884f-787d7f2cf0a8)\n \n### Artwork batch mode: structure by artwork filenames\n\n![Image 19-03-2026 at 17 19](https://github.com/user-attachments/assets/225b823e-449f-4784-923b-83fcf18ca2d4)\n\n![Image 19-03-2026 at 17 20](https://github.com/user-attachments/assets/7f6f95cd-2b18-4364-836c-ce0aff2ae7e6)\n\n![Image 19-03-2026 at 17 20 (1)](https://github.com/user-attachments/assets/4cb2f6f2-379a-4b52-a22e-ea1200001cd6)\n\n## For Developers\n\n### Requirements\n\n- Python 3.9+\n\nInstall dependencies:\n\n```bash\npython3 -m venv venv_gui\nsource venv_gui/bin/activate\npip install -r requirements.txt\n```\n\n### Run From Source\n\n```bash\nsource venv_gui/bin/activate\npython gui.py\n```\n\n### Build Locally\n\n```bash\nsource venv_gui/bin/activate\npyinstaller BatchFolderSorter.spec\n```\n\n### Automated Builds\n\nGitHub Actions is configured to build release artifacts for:\n\n- `macOS arm64`\n- `macOS x86_64`\n- `Windows x64`\n\nManual build workflow:\n\n- Open the `Actions` tab in GitHub\n- Run `Build And Release`\n- Download the generated artifacts\n\nTag-based release workflow:\n\n```bash\ngit tag v1.0.0\ngit push origin v1.0.0\n```\n\nWhen a tag like `v1.0.0` is pushed, GitHub Actions will:\n\n- build all three platform artifacts\n- create or update a GitHub Release\n- upload the zip files\n- upload `checksums.txt`\n\n## Development Notes\n\n- `Undo` restores the last successful batch only\n- The repository ignores local builds, test samples, and virtual environments\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviaacode%2Fbatch-folder-sorter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviaacode%2Fbatch-folder-sorter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviaacode%2Fbatch-folder-sorter/lists"}