{"id":29051320,"url":"https://github.com/soeren-kirchner/pyimgbatch","last_synced_at":"2025-08-30T04:08:15.791Z","repository":{"id":57456034,"uuid":"217741475","full_name":"soeren-kirchner/pyimgbatch","owner":"soeren-kirchner","description":"PyImgBatch is a batch image processor for python including a command line interface.","archived":false,"fork":false,"pushed_at":"2020-10-20T17:30:39.000Z","size":38949,"stargazers_count":1,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-22T19:37:13.712Z","etag":null,"topics":["batch-image-processor","cli","hacktoberfest","hacktoberfest2020","image","image-processing","pil","pillow","python","python-3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soeren-kirchner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-26T17:01:04.000Z","updated_at":"2020-10-20T17:41:57.000Z","dependencies_parsed_at":"2022-09-02T10:11:07.221Z","dependency_job_id":null,"html_url":"https://github.com/soeren-kirchner/pyimgbatch","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/soeren-kirchner/pyimgbatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soeren-kirchner%2Fpyimgbatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soeren-kirchner%2Fpyimgbatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soeren-kirchner%2Fpyimgbatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soeren-kirchner%2Fpyimgbatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soeren-kirchner","download_url":"https://codeload.github.com/soeren-kirchner/pyimgbatch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soeren-kirchner%2Fpyimgbatch/sbom","scorecard":{"id":835861,"data":{"date":"2025-08-11","repo":{"name":"github.com/soeren-kirchner/pyimgbatch","commit":"c37cd205533da55311f416ec933456ff71e261f8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/17 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"42 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-3f63-hfp8-52jq","Warn: Project is vulnerable to: PYSEC-2021-41 / GHSA-3wvg-mj6g-m9cv","Warn: Project is vulnerable to: PYSEC-2020-77 / GHSA-3xv8-3j54-hgrp","Warn: Project is vulnerable to: PYSEC-2020-80 / GHSA-43fq-w8qq-v88h","Warn: Project is vulnerable to: GHSA-44wm-f244-xhp3","Warn: Project is vulnerable to: GHSA-4fx9-vc88-q2xc","Warn: Project is vulnerable to: PYSEC-2021-35 / GHSA-57h3-9rgr-c24m","Warn: Project is vulnerable to: PYSEC-2020-172 / GHSA-5gm3-px64-rw72","Warn: Project is vulnerable to: PYSEC-2021-331 / GHSA-7534-mm45-c74v","Warn: Project is vulnerable to: PYSEC-2021-137 / GHSA-77gc-v2xv-rvvh","Warn: Project is vulnerable to: PYSEC-2021-92 / GHSA-7r7m-5h27-29hp","Warn: Project is vulnerable to: PYSEC-2020-78 / GHSA-8843-m7mw-mxqm","Warn: Project is vulnerable to: PYSEC-2023-227 / GHSA-8ghj-p4vj-mr35","Warn: Project is vulnerable to: PYSEC-2022-10 / GHSA-8vj2-vxx3-667w","Warn: Project is vulnerable to: PYSEC-2021-36 / GHSA-8xjq-8fcg-g5hw","Warn: Project is vulnerable to: PYSEC-2021-42 / GHSA-95q3-8gr9-gm8w","Warn: Project is vulnerable to: PYSEC-2021-317 / GHSA-98vv-pw6r-q6q4","Warn: Project is vulnerable to: PYSEC-2021-38 / GHSA-9hx2-hgq2-2g4f","Warn: Project is vulnerable to: PYSEC-2022-168 / GHSA-9j59-75qj-795w","Warn: Project is vulnerable to: PYSEC-2020-76 / GHSA-cqhg-xjhh-p8hf","Warn: Project is vulnerable to: PYSEC-2021-40 / GHSA-f4w8-cv6p-x6r5","Warn: Project is vulnerable to: PYSEC-2021-69 / GHSA-f5g8-5qq7-938w","Warn: Project is vulnerable to: PYSEC-2021-139 / GHSA-g6rj-rv7j-xwp4","Warn: Project is vulnerable to: PYSEC-2021-71 / GHSA-hf64-x4gq-p99h","Warn: Project is vulnerable to: PYSEC-2020-84 / GHSA-hj69-c76v-86wr","Warn: Project is vulnerable to: PYSEC-2021-94 / GHSA-hjfx-8p6c-g7gx","Warn: Project is vulnerable to: GHSA-j7hp-h8jx-5ppr","Warn: Project is vulnerable to: GHSA-jgpv-4h4c-xhw3","Warn: Project is vulnerable to: PYSEC-2022-42979 / GHSA-m2vv-5vj5-2hm7","Warn: Project is vulnerable to: PYSEC-2021-37 / GHSA-mvg9-xffr-p774","Warn: Project is vulnerable to: PYSEC-2021-39 / GHSA-p43w-g3c5-g5mq","Warn: Project is vulnerable to: PYSEC-2020-83 / GHSA-p49h-hjvm-jg3h","Warn: Project is vulnerable to: PYSEC-2022-8 / GHSA-pw3c-h7wp-cvhx","Warn: Project is vulnerable to: PYSEC-2021-93 / GHSA-q5hq-fp76-qmrc","Warn: Project is vulnerable to: PYSEC-2020-82 / GHSA-r7rm-8j6h-r933","Warn: Project is vulnerable to: PYSEC-2021-138 / GHSA-rwv7-3v45-hg29","Warn: Project is vulnerable to: PYSEC-2020-81 / GHSA-vcqg-3p29-xw73","Warn: Project is vulnerable to: PYSEC-2020-79 / GHSA-vj42-xq3r-hr3r","Warn: Project is vulnerable to: PYSEC-2021-70 / GHSA-vqcj-wrf2-7v73","Warn: Project is vulnerable to: PYSEC-2022-9 / GHSA-xrcv-f9gm-v42c","Warn: Project is vulnerable to: PYSEC-2023-175","Warn: Project is vulnerable to: GHSA-g7vv-2v7x-gj9p"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T19:02:01.657Z","repository_id":57456034,"created_at":"2025-08-23T19:02:01.657Z","updated_at":"2025-08-23T19:02:01.657Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272800967,"owners_count":24995185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"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":["batch-image-processor","cli","hacktoberfest","hacktoberfest2020","image","image-processing","pil","pillow","python","python-3"],"created_at":"2025-06-26T22:03:54.532Z","updated_at":"2025-08-30T04:08:15.786Z","avatar_url":"https://github.com/soeren-kirchner.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PyImgBatch\n\nPyImgBatch is a batch image processor for python including a command line interface.\n\n## Installation\nFor installation open a terminal and type the following line into the command line.\n\n```\npip install pyimgbatch\n```\n\n## Documentation\n\nFor further information please read the documentation: \n\n[https://soeren-kirchner.github.io/pyimgbatch/quickstart.html](https://soeren-kirchner.github.io/pyimgbatch/quickstart.html)\n\n## Usage on command line\n\nThe simplest usage is to change to the folder containing the images with\n\n```\ncd /folder/with/images\n```\nand type \n\n```\npyimgbatch --width 300\n```\nThis will resize all supported image files in the current folder to a width of 300 pixels respecting the aspect ratio of the source file. The results will be written to a \"dest\" subfolder.\n\nAlternatively, you can set a source folder with the images to be converted and/or a destination folder for the results as follow.\n\n```\npyimgbatch --source source_folder --dest destination_folder --height 400\n```\nor shorter\n```\npyimgbatch -s source_folder -d destination_folder --height 400\n```\nThis will convert the images from the *source_folder* to a height of 400px and stores the results in the destination folder.  \n*Note: For every source image a subfolder will be created inside the destination_folder. To avoid this behavior use the --nosubfolder argument.*\n\n## Project Files\nOne of PyImgBatch features is to create multiple different versions from given image files. \n\nFor this, you can use project files. Project files are JSON files containing the specifications for the image processing. \n\n### The very short one\n\nHere an example of a very short one.\n\n```json\n[\n    { \"width\": 1000, \"suffix\": \".w1000\" },\n    { \"height\": 1200, \"suffix\": \".h1200\" }\n]\n```\nFor example (may the project named \"myprj.json\"):\n```\npyimgbatch -c myprj.json\n```\nproduces the following output:\n```\nprocessing: french-bulldog-4530685.jpg\ncreating: french-bulldog-4530685.w1000.jpg\ncreating: french-bulldog-4530685.h1200.jpg\nprocessing: coast-4478424.jpg\ncreating: coast-4478424.w1000.jpg\ncreating: coast-4478424.h1200.jpg\n...\nprocessing: beaded-2137080_1920-cmyk-iso-eci.tif\ncreating: beaded-2137080_1920-cmyk-iso-eci.w1000.jpg\ncreating: beaded-2137080_1920-cmyk-iso-eci.h1200.jpg\n...\n```\nand creates two images per source images, resized to the specified width or height with suffix added to the original name. \n\n### The short one\n\nImagine, you need to create different sizes for all your images for your web project. For instance, you need the images in widths 180px, 300px, 400px and one in a height of 800 and each 2x and 3x the size for higher pixel density display like in smartphones.\nAn example could look as follow.\n\n```JSON\n{\n    \"name\": \"web set\",\n    \"comment\": \"some sample pictures\",\n    \"source\": \"webset/source\",\n    \"dest\": \"webset/dest\",\n    \"prefix\": \"web.\",\n    \"configs\": [\n        { \"width\": 180, \"suffix\": \".w180\", \"webset\": \"@3x\" },\n        { \"width\": 300, \"suffix\": \".w300\", \"webset\": \"@3x\" },\n        { \"width\": 400, \"suffix\": \".w400\", \"webset\": \"@3x\" },\n        { \"height\": 800, \"prefix\": \"preview.\", \"webset\": \"@3x\" }\n    ]\n}\n```\nThis will create 12 destination images for each imput image. For a image \"lama-4540160.jpg\" you get:\n\n```\n...\ncreating: lama-4540160/web.lama-4540160.w180@1x.jpg\ncreating: lama-4540160/web.lama-4540160.w180@2x.jpg\ncreating: lama-4540160/web.lama-4540160.w180@3x.jpg\ncreating: lama-4540160/web.lama-4540160.w300@1x.jpg\ncreating: lama-4540160/web.lama-4540160.w300@2x.jpg\ncreating: lama-4540160/web.lama-4540160.w300@3x.jpg\ncreating: lama-4540160/web.lama-4540160.w400@1x.jpg\ncreating: lama-4540160/web.lama-4540160.w400@2x.jpg\ncreating: lama-4540160/web.lama-4540160.w400@3x.jpg\ncreating: lama-4540160/preview.lama-4540160@1x.jpg\ncreating: lama-4540160/preview.lama-4540160@2x.jpg\ncreating: lama-4540160/preview.lama-4540160@3x.jpg\n...\n```\n\nAs you see you can specify defaults, so you don't need to repeat yourself.\nThe more specific option is used instead of the more general one. So in this example, all images get the prefix \"web.\" except the last, because the more specific prefix is here given as \"preview.\"\n\n*Hint: The file names are a little strange because I've downloaded the images from the free image stock [pixabay](https://pixabay.com) and I haven't changed the Name so you can search for the pics or the photographer if you want.*\n\n### Full image project file\n\nlooks as follow.\n\n```JSON\n{\n    \"comment\": \"pyImgBatch demo project\",\n    \"debug\": true,\n    \"no-progess\": false,\n    \"projects\": [\n        {\n            \"name\": \"web set\",\n            \"comment\": \"some sample pictures\",\n            \"source\": \"webset/source\",\n            \"dest\": \"webset/dest\",\n            \"prefix\": \"web.\",\n            \"configs\": [\n                { \"width\": 180, \"suffix\": \".w180\", \"webset\": \"@3x\" },\n                { \"width\": 300, \"suffix\": \".w300\", \"webset\": \"@3x\" },\n                { \"width\": 400, \"suffix\": \".w400\", \"webset\": \"@3x\" },\n                { \"height\": 800, \"prefix\": \"preview.\", \"webset\": \"@3x\" }\n            ]\n        },\n        {\n            \"name\": \"images to thumbnails\",\n            \"source\": \"to-thumbnails/originals\",\n            \"dest\": \"to-thumbnails/thumbnails\",\n            \"subfolder\": false,\n            \"prefix\": \"thumb.\",\n            \"configs\": [\n                {\"height\": 300}, \n                {\"prefix\": \"smallthumb.\", \"height\": 200}\n            ]\n        }\n    ]\n}\n```\n\nThis project contains two projects. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoeren-kirchner%2Fpyimgbatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoeren-kirchner%2Fpyimgbatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoeren-kirchner%2Fpyimgbatch/lists"}