{"id":45889263,"url":"https://github.com/mdsanima-lab/mdsanima-cli","last_synced_at":"2026-02-27T17:18:34.414Z","repository":{"id":65852224,"uuid":"598302243","full_name":"mdsanima-lab/mdsanima-cli","owner":"mdsanima-lab","description":"A command-line tool for image processing, generating pixel art, adding logos to images, and more","archived":false,"fork":false,"pushed_at":"2025-01-20T12:02:05.000Z","size":850,"stargazers_count":3,"open_issues_count":19,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-26T11:38:03.335Z","etag":null,"topics":["cli","command-line","console-application","image-processing","mdsanima","pixelart","python","python3","shell-script"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mdsanima-lab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-06T20:32:08.000Z","updated_at":"2024-10-21T16:46:43.000Z","dependencies_parsed_at":"2023-10-17T04:30:14.428Z","dependency_job_id":"b8af032d-151b-46ac-9059-a0c9dc428369","html_url":"https://github.com/mdsanima-lab/mdsanima-cli","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/mdsanima-lab/mdsanima-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdsanima-lab%2Fmdsanima-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdsanima-lab%2Fmdsanima-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdsanima-lab%2Fmdsanima-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdsanima-lab%2Fmdsanima-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mdsanima-lab","download_url":"https://codeload.github.com/mdsanima-lab/mdsanima-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdsanima-lab%2Fmdsanima-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29905893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T14:46:13.553Z","status":"ssl_error","status_checked_at":"2026-02-27T14:46:10.522Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["cli","command-line","console-application","image-processing","mdsanima","pixelart","python","python3","shell-script"],"created_at":"2026-02-27T17:18:33.762Z","updated_at":"2026-02-27T17:18:34.407Z","avatar_url":"https://github.com/mdsanima-lab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mdsanima-cli\n\n[![GitHub Repo Stars](https://img.shields.io/github/stars/mdsanima-lab/mdsanima-cli?logo=github)][link-github-repo-stars]\n[![PePy Total Downloads](https://img.shields.io/pepy/dt/mdsanima-cli?logo=python\u0026logoColor=lightgray)][link-pepy-total-downloads]\n[![PyPi Latest Version](https://img.shields.io/pypi/v/mdsanima-cli?logo=python\u0026logoColor=lightgray)][link-pypi-project]\n[![PyPi Python Version](https://img.shields.io/pypi/pyversions/mdsanima-cli?logo=python\u0026logoColor=lightgray)][link-pypi-project]\n[![PyPi Format](https://img.shields.io/pypi/format/mdsanima-cli?logo=python\u0026logoColor=lightgray)][link-pypi-project]\n[![Code Style Black](https://img.shields.io/badge/code_style-black-black?logo=python\u0026logoColor=lightgray)][link-code-style-black]\n\nA command-line tool for image processing, generating pixel art, adding logos to images, and much more. These command-line tool are readily available for a multitude of image processing tasks, such as manipulating images, generating mesmerizing pixel art, seamlessly integrating logos into visuals, and accomplishing a diverse array of other creative endeavors. By harnessing the power of these tools, users can unlock endless possibilities for creating captivating artwork that can greatly enhance a wide range of projects.\n\n## Package Installation\n\nInstall or update the latest version using pip:\n\n```shell\npython3 -m pip install --upgrade mdsanima-cli\n```\n\nThe package is now installed, and you can start using it.\n\n## CLI Terminal Commands\n\nAfter installing the package, you can now use the `mdsanima` command in the terminal, and the response will provide instructions on how to use these command-line tools. You can also use the `mds` alias, which has the same functionality.\n\nBelow are the available commands that have been marked as completed, along with some ideas for commands that we would like to implement in this package:\n\n- [x] `mdsanima` main command showing help\n- [x] `mdsanima check` print directory info\n- [x] `mdsanima uuid` rename to uuid\n- [x] `mdsanima number` rename to seq numbers\n- [x] `mdsanima logo` append a logo\n- [x] `mdsanima watermark` append a watermark\n- [x] `mdsanima ico` convert to ico\n- [x] `mdsanima jpg` convert to jpg\n- [x] `mdsanima png` convert to png\n- [x] `mdsanima webp` convert to webp\n- [x] `mdsanima pixelart` generate pixel art 32px\n- [x] `mdsanima grid` generate grid 2x2\n- [x] `mdsanima thumbnail` generate jpeg thumbnail 128px\n- [x] `mdsanima gifmaker` generate gif animation pixel art\n- [x] `mdsanima resize` resizing to 512px width\n- [ ] `mdsanima multi` generate multi resolution\n- [ ] `mdsanima caption` adding caption\n- [ ] `mdsanima bg` adding background\n- [ ] `mdsanima filter` adding filter\n- [ ] `mdsanima crop` cropping image\n\nThe `pixelart` command works in a folder that contains only `.png` images and converts these images into pixel art by creating a new file and appending the suffix `pixelart` to the original file name. After executing this command, all image files in the folder you are in will be processed. The command does not delete any files in the folder, it only adds new ones and displays directory information.\n\n## Development\n\nHere are some helpful instructions in the development process of this Python package.\n\n### Python Setup\n\nThis package is built using specific tools and will be published on PyPI using Twine. Instructions on how to activate the **virtual environment** for this project and how to configure and build the package. We will use specific package versions and the latest **Python 3.12** environment.\n\n#### Virtual Environment\n\nMake sure you have `virtualenv` installed on your system. If not, enter this command:\n\n```shell\nsudo apt update \u0026\u0026 sudo apt install virtualenv\npython3 -m pip install --upgrade virtualenv\n```\n\nCreating and activating the development environment, and then installing the necessary packages, enter the following commands in the terminal:\n\n```shell\nvirtualenv --pip=24.2 --python=python3.12 .venv\nsource .venv/bin/activate\npip install \".[dev]\"\n```\n\nAll dependencies for this project are specified in the project's TOML configuration.\n\nYou can install these dependencies using the `pip install .` command, which will build our package and install the basic dependencies along with the new version of our package. To install dev dependencies, you can use the `pip install \".[dev]\"` command instead of specifying a `-r` flag and file as mentioned earlier.\n\nAfter following the above instructions, we can start writing the program. You can also refer to the instructions regarding the configuration of the development environment, which are included in this [workflow](https://docs.mdsanima.dev/development/workflow/) guide.\n\n#### Build Package\n\nBuilding our **Python** package is done using the `build` module, which was previously installed as a requirement when activating the development environment.\n\nTo build the package, enter the following command in the terminal:\n\n```shell\npython -m build\n```\n\nAfter building, the package will be placed in a folder named `dist`, and the filename will have the `.whl` extension, including the package name and version.\n\n#### Install Package\n\nAfter building the package, you can install it by entering the following command in the terminal:\n\n```shell\npip install --force-reinstall dist/mdsanima_cli-0.3.0-py3-none-any.whl\n```\n\nThe `--force-reinstall` flag is necessary when installing the package because if you have a previous version installed, the installation will fail. Please note that the above command may change depending on the version you are currently building.\n\n#### Testing Package\n\nAfter building and installing our package, we can test it. You can use the appropriate **CLI** command mentioned above or test individual modules by entering the following command in the terminal:\n\n```shell\npython -m mdsanima_cli.commands.pixelart\n```\n\nYou can also run and test before building and installing the package, type in the terminal:\n\n```shell\npython3 mdsanima_cli/commands/pixelart.py\n```\n\nAfter running the above command, you will test only the selected module.\n\n#### Test with pytest\n\nRun pytest:\n\n```shell\npytest tests\n```\n\nRun coverage:\n\n```shell\ncoverage run --branch -m pytest tests\ncoverage xml\n```\n\n#### Extracts Version\n\nThe _setuptools-scm_ tool allows you to extract the **Python** package version from _git_ instead of declaring it as a version argument.\n\nIf you need to confirm which version string is being generated, you can use the _setuptools-scm_ tool, which will display the current version you are working with. Enter the following command in the terminal:\n\n```shell\npython -m setuptools_scm\n```\n\nCheck the [pyproject.toml](pyproject.toml) file and this [instruction](https://pypi.org/project/setuptools-scm/) for more info.\n\n### Creating Release\n\nBelow is the instruction on how to create a release version of our Python package.\n\nHere are the steps to create a release version:\n\n- Add new code to the package\n- Test new functionality\n- Commit the changes\n- Bump the package version\n- Generate the CHANGELOG.md file\n- Commit the release\n- Add and push the new tag\n- Build and Update on PyPI\n\nThis is done manually for now, but we plan to set up a _GitHub Action_ workflow for testing and automatic release version creation in the future.\n\n#### Conventional Commits\n\nIn this project, we use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) - a specification for adding human and machine readable meaning to commit messages.\n\nTherefore, a crucial step is to commit your code changes using this specification. A commit message should look like this:\n\n```shell\ngit commit -m \"feat: Add generating pixel art command\"\n```\n\nAlways use this format for committing to Git, as it enables generating a changelog from the commit message.\n\n#### Standard Version\n\nThe [manifest.json](manifest.json) file is used to store the version number that generates the changelog. In the [.versionrc](.versionrc) file, there is a section that lists the types you can use in commit messages. You can also check the [examples](https://www.conventionalcommits.org/en/v1.0.0/#examples) in the _Conventional Commits_ documentation.\n\nThe process is straightforward. First, update the version number in the [manifest.json](manifest.json) file and generate the [CHANGELOG.md](CHANGELOG.md) file with new release information.\n\nMake sure that the `standard-version` package is installed on your system. If it's not, you need to install it globally on your system. You can do this by running the following command in your terminal:\n\n```shell\nnpm install -g standard-version\n```\n\nOnce it's installed, you can use the `standard-version --dry-run` command to check the output. You can use the `--help` flag to see the help.\n\nThe `standard-version` is configured to only bump versions and generate changelogs. In the [.versionrc](.versionrc) configuration file, you can set it up to also create commits and add Git tags with version numbers.\n\nNow, after you've confirmed that it's working correctly, you can execute the following commands:\n\n```shell\nstandard-version\ngit commit -am \"chore(release): 0.3.0\"\n```\n\nThe version above is the result of the `standard-version` command, and this is just an example version. The version must always be changed when a new release is made.\n\nThe next step is to create a tag and push the changes to the remote repository with the tag. The command should look like this:\n\n```shell\ngit tag v0.3.0\ngit push \u0026\u0026 git push origin --tag\n```\n\nAfter completing the above steps, you can verify the package version by entering this command in the terminal:\n\n```shell\npython -m setuptools_scm\n```\n\nFinally, create the build and update this build on [test.pypi.org][link-pypi-test-project] and [pypi.org][link-pypi-project], but first, make sure to check everything, and then proceed with the update.\n\nEnter the following commands in the terminal:\n\n```shell\nrm -rf dist\npython -m build\ntwine check dist/*\ntwine upload -r testpypi dist/*\ntwine upload dist/*\n```\n\nRemember, only the package owner can perform this operation and must have the secrets configured in the `.pypirc` file in the system.\n\n#### Commit Lint\n\nHere is the help regarding `commitlint`, a tool for checking if commits meet specific requirements.\n\nTo perform a local check, you should install the required packages and then run `npx commitlint` in your terminal:\n\n```shell\nnpm install --save-dev @commitlint/{cli,config-conventional}\nnpx commitlint --from HEAD~1 --to HEAD --verbose --config .commitlintrc.mjs\n```\n\nThis will validate the last commit and return an error if it's invalid or success if it's valid.\n\nHere is an example of possible values for the rules:\n\n- `lower-case` - **default**\n- `upper-case` - **UPPERCASE**\n- `camel-case` - **camelCase**\n- `kebab-case` - **kebab-case**\n- `pascal-case` - **PascalCase**\n- `sentence-case` - **Sentence case**\n- `snake-case` - **snake_case**\n- `start-case` - **Start Case**\n\nCheck the [reference rules](https://commitlint.js.org/#/reference-rules) documentation for more info.\n\n#### Label Config\n\nIn the `./.github/labels.yaml` file, you'll find the configuration for labels in this repository. If you want to change an old name, you need to use `aliases: [ ... ]` and provide a list of old names inside square brackets.\n\nTo automatically synchronize the labels, you should add the `sync-labels.yaml` workflow to GitHub Actions. Take a look at the example of how they did it in [Sentry](https://github.com/getsentry/sentry/blob/master/.github/workflows/sync-labels.yml), but remember that you need to modify the code to fit this repository.\n\nHere is a command that you can execute in the terminal to manually synchronize. You will need a GitHub access token for this. You can use the `--dry-run` flag to test, and then run the command without this flag to synchronize the labels:\n\n```shell\nnpm install -g github-label-sync\ngithub-label-sync --access-token xxxxxx --labels ./.github/labels.yaml --dry-run mdsanima-lab/mdsanima-cli\n```\n\nHere is the [documentation](https://github.com/Financial-Times/github-label-sync) if you want to check the details. You can [generate an access token here](https://github.com/settings/tokens), be sure to allow the _repo_ scope.\n\n## License\n\nPackage [mdsanima-cli][link-pypi-project] developed by [Marcin Różewski][link-mdsanima-github-account] is released under the terms of [Apache-2.0][link-github-repo-license] license.\n\n[![GitHub Followers MDSANIMA](https://img.shields.io/github/followers/mdsanima?style=social)][link-mdsanima-github-account]\n[![X Follow MDSANIMA](https://img.shields.io/twitter/follow/mdsanima?style=social)][link-mdsanima-x-account]\n[![Reddit Subreddit Subscribers MDSANIMA](https://img.shields.io/reddit/subreddit-subscribers/mdsanima?style=social)][link-mdsanima-reddit-account]\n[![YouTube Subscribers MDSANIMA](https://img.shields.io/youtube/channel/subscribers/UCB5na2BRwrnwx00LCspbG5Q?style=social)][link-mdsanima-youtube-account]\n[![Discord Channel Chat MDSANIMA](https://img.shields.io/discord/621477380359454742?style=social\u0026logo=discord)][link-mdsanima-discord-account]\n\n[link-github-repo-license]: https://github.com/mdsanima-lab/mdsanima-cli/blob/main/LICENSE\n[link-github-repo-stars]: https://github.com/mdsanima-lab/mdsanima-cli/stargazers\n[link-pepy-total-downloads]: https://www.pepy.tech/projects/mdsanima-cli\n[link-pypi-project]: https://pypi.org/project/mdsanima-cli\n[link-pypi-test-project]: https://test.pypi.org/project/mdsanima-cli\n[link-code-style-black]: https://github.com/psf/black\n[link-mdsanima-github-account]: https://github.com/mdsanima\n[link-mdsanima-x-account]: https://twitter.com/intent/follow?mdsanima\u0026screen_name=mdsanima\n[link-mdsanima-reddit-account]: https://reddit.com/r/mdsanima\n[link-mdsanima-youtube-account]: https://youtube.com/mdsanima?sub_confirmation=1\n[link-mdsanima-discord-account]: https://discord.gg/c3m7pTF\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdsanima-lab%2Fmdsanima-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmdsanima-lab%2Fmdsanima-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdsanima-lab%2Fmdsanima-cli/lists"}