{"id":15720681,"url":"https://github.com/a-bentofreire/renametoix","last_synced_at":"2025-06-11T13:35:43.648Z","repository":{"id":241866367,"uuid":"805127975","full_name":"a-bentofreire/renametoix","owner":"a-bentofreire","description":"RenameToIX is a visual Linux Gtk file renamer featuring an advanced macro ecosystem, seamlessly integrating with Nemo, Nautilus, and Thunar file managers.","archived":false,"fork":false,"pushed_at":"2025-02-13T14:42:06.000Z","size":148,"stargazers_count":21,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-25T08:07:28.322Z","etag":null,"topics":["gtk","gtk3","linux","linux-mint","python","rename-files","thunar","ubuntu"],"latest_commit_sha":null,"homepage":"https://www.devtoix.com/en/projects/renametoix","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/a-bentofreire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"abentofreire","thanks_dev":null,"custom":null}},"created_at":"2024-05-24T00:01:58.000Z","updated_at":"2025-02-26T22:16:32.000Z","dependencies_parsed_at":"2024-05-30T12:03:44.501Z","dependency_job_id":"96a98ace-f3ef-4ce1-932d-1acb98b087e3","html_url":"https://github.com/a-bentofreire/renametoix","commit_stats":null,"previous_names":["a-bentofreire/renametoix"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-bentofreire%2Frenametoix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-bentofreire%2Frenametoix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-bentofreire%2Frenametoix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-bentofreire%2Frenametoix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/a-bentofreire","download_url":"https://codeload.github.com/a-bentofreire/renametoix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-bentofreire%2Frenametoix/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259274436,"owners_count":22832510,"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","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":["gtk","gtk3","linux","linux-mint","python","rename-files","thunar","ubuntu"],"created_at":"2024-10-03T21:59:49.167Z","updated_at":"2025-06-11T13:35:43.605Z","avatar_url":"https://github.com/a-bentofreire.png","language":"Python","funding_links":["https://buymeacoffee.com/abentofreire","https://www.paypal.com/donate/?business=MCZDHYSK6TCKJ\u0026no_recurring=0\u0026item_name=Support+Open+Source\u0026currency_code=EUR"],"categories":[],"sub_categories":[],"readme":"# Description\n\n[RenameToIX](https://www.devtoix.com/en/projects/renametoix) is a visual Linux Gtk file renamer featuring an advanced macro ecosystem, seamlessly integrating with Nemo, Nautilus, and Thunar file managers.\n\nFor `crenametoix`, the console version without Gtk dependencies, read [here](https://www.devtoix.com/en/projects/renametoix#crenametoix)\n\nSimple macro example:\n\n![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Index-Macro-1.gif)\n\nPython lambda expression example:\n\n![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Python-Expressions-1.gif)\n\nReverse Geocoding macro example:\n\n![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Reverse-Geocoding-1.gif)\n\nDoc Header macro example:\n\n![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Doc-Header-1.gif)\n\nRead section [Integrate](#integrate) on now to integrate with Nemo, Nautilus and Thunar.\n\nIf you find this project useful, please, read the [Support this Project](#support-this-project) on how to contribute.  \n\n## Features\n\n- GUI and Console mode. (¹)\n- **Single click macro**.\n- Counter, file datetime, and extension Macros.\n- Function Macros with regex group capture: `lower`, `upper`, `capitalize` and `title`.\n- Python lambda expressions macro.\n- Reverse geocoding of JPEG images from GPS information macro via [geo plugin](#geo-plugin).\n- Header of Word documents macro via [doc plugin](#doc-plugin).\n- Custom macro extensions using [plugins](#plugins).\n- Start index for counter macro.\n- Configurable list of macros.\n- Drag'n'Drop.\n- Move files up and down.\n\n- Revert previous renames (first activate on Settings dialog). (¹)\n- Send notification after renames (first activate on Settings dialog). (¹)\n- Integration with Nemo, Nautilus and Thunar File Manager. (¹)\n- Limited support for [mtp devices](#mtp-devices) (Smartphones, Cameras, etc...). (¹)\n- Translated into multiple languages *1*\n\n(¹) - supported only on renametoix but not on [crenametoix](#crenametoix)\n\n## Installation\n\n```bash\nsudo add-apt-repository ppa:a-bentofreire/toix\nsudo apt-get update\nsudo apt install renametoix\n```\n\n## crenametoix\n\n**crenametoix** is a version of renametoix for console only without Gtk dependencies,\nit supports all the features including plugins, except: translations, mtp devices, revert and notifications.  \nConfiguration files aren't generated.\n\n```bash\nsudo add-apt-repository ppa:a-bentofreire/toix\nsudo apt-get update\nsudo apt install crenametoix\n```\n\n**crenametoix** can also be installed via pip\n\n```bash\npip install crenametoix\n```\n\n## Requirements\n\nRenameToIX uses `xdg-open` and `notify-send` external commands.\n\n## Macros\n\n- `%n, %0n ... %00000n` - counter\n- `%B` - file basename (without extension)\n- `%E` - file extension\n- `%Y` - file 4-digit year\n- `%m` - file 2-digit month\n- `%d` - file 2-digit day\n- `%H` - file 2-digit hour\n- `%M` - file 2-digit minute\n- `%S` - file 2-digit second\n- `%0{upper}` `%0{u}` - uppercase  (function)\n- `%0{lower}` `%0{l}` - lowercase (function)\n- `%0{capitalize}` `%0{c}` - capitalize (function)\n- `%0{title}` `%0{t}` - capitalize (function)\n- `%:{expr}` - evaluates [python lambda expressions](#python-lambda-expressions)\n- `%!{geo:%country%, %city%}` - replaces with the \"country\", \"city\" from the JPEG image GPS info via [geo plugin](#geo-plugin)\n- `%!{doc:%header%}` - replaces with the \"header\" with the first header in a doc file [doc plugin](#doc-plugin)\n\n## Macro functions\n\nThe macro functions can also be used with regular expressions to capture groups.\n\nex1:\n- Replace: `%0{title}`\n- Filename: `my document.png` will become `My Document.png`\n\nex2:\n- Find: `..(NEW).(design)`\n- Replace: `%1{l}-%2{u}`\n- Filename: `n-myNEW design.png` will become `n-new-DESIGN.png`\n\nex3:\n- Find: ``\n- Replace: `new-%B ready`\n- Filename: `design.png` will become `new-design ready.png`\n\n## Python Lambda Expressions\n\nThe `%:{expr}` will internally evaluate a lambda expression: `eval(f\"lambda m: {expr}\")(groups)`\n\nwhere groups are:\n- if regular expressions, then are the captured groups from a regular expression.\n- otherwise, it's the text to find.\n\nex:\n- Find: `^(.*)-(.*)$`\n- Replace: `%:{m[2] - m[1]}`\n- Regular Expression: `checked`.\n- Filename: `code-actions.py` will become `Actions - Code.py`\n\n### Features and Limitations\n\n- The expression can't contain a closed curly bracket `}`.\n- The evaluator doesn't do any security checks, so run it at your own risk.\n\n## Plugins\n\nThe `%!{plugin_name:expr}` will call an external plugin to evaluate the expression.  \n\n- Plugins are python scripts located on `/usr/lib/renametoix/plugins`.\n- A plugin must have a function named `get_worker()`, returning an instance of a class with the following methods:\n- The expression can't contain a closed curly bracket `}`.\n\n| Method | Description |\n| -- | -- |\n| `is_slow(self)` | returns `True` if the plugin requires slow operations |\n| `get_extensions(self)` | returns a list of file extensions supported |\n| `eval_expr(self, macro, filename, groups)` | evaluates a macro. It should be a fast operation |\n| `prepare(self, files)` | for each file, it will prepare the macro evaluation\u003cbr\u003eif `is_slow` is `True`, it will run in a working thread if it's GUI mode |\n\n## Geo Plugin\n\nGeo Plugin performs reverse geocoding.\n\n- Requires install python packages: `pip install geopy piexif`.\n- Supports the following geocoding fields: `country`, `state`, `city`, `postcode`, `suburb`.\n- Supports `.jpg` and `.jpeg` file extensions.\n- Ending spaces, commas and semi-commas are striped.\n\nex:\n- Replace: `%!{geo:%country%, %city%}`\n- Filename: `IMG_.jpg` will become `MyCountry, MyCity.jpg`\n\n## Doc Plugin\n\nDoc Plugin extracts the first header from a Word doc/docx file.\n\n- Requires install python package: `pip install python-docx`.\n- Supports the following geocoding fields: `header`.\n- Supports `.doc` and `.docx` file extensions.\n\nex:\n- Replace: `%!{doc:%header%}`\n- Filename: `a.docx` will become `MyHeaderH1.docx`\n\n## Running in console mode\n\nTo activate on console mode, use `--console` on command line:\n\n```plaintext\nusage: renametoix [-h] [-console] [-start-index START_INDEX] [-reg-ex] [-include-ext] [-find FIND] [-replace REPLACE] [-allow-revert] [-test-mode] [-revert-last] [files ...]\n\npositional arguments:\n  files                 Source files\n\noptions:\n  -h, --help            show this help message and exit\n  -console              Console mode (¹)\n  -start-index START_INDEX\n                        Start index used with there is a %0n macro\n  -reg-ex               Uses regular expressions on the find field\n  -include-ext          Renames including the file extension\n  -find FIND            Text to Find\n  -replace REPLACE      Text to Replace\n  -allow-revert         Generates a revert file (console mode) (¹)\n  -test-mode            Outputs only the new result, doesn't rename (console mode) (¹)\n  -revert-last          Reverts last rename and exits (¹)\n```\n\n(¹) - supported only on renametoix but not on [crenametoix](#crenametoix)\n\n## Revert the last rename in console mode\n\nIf the previous console mode rename was executed with `-allow-revert`, then:  \n`renametoix -revert-last` will revert the last rename.\n\n## Integrate\n\nRenameToIX can be integrated with Nemo, Nautilus and Thunar.\nOn RenameToIX application, click on the Settings button, and then `Integrate` button.\n\n- Nemo Bulk Rename: When you press F2 it will use **RenameToIX** instead of bulky.\n- Nemo Action: On context menu, it will include an item named **RenameToIX**.\n- Nautilus Script: On context menu Scripts, it will include an item named **RenameToIX**.\n- Thunar Action: On context menu, it will include an item named **RenameToIX**.\n\n## Languages\n\n- English\n- Portuguese\n- Spanish\n- German\n- Russian\n- Ukrainian\n\n## Mtp Devices\n\nRenameToIX can rename files on mtp devices with the following limitations:\n- It doesn't support revert.\n- The file is copied and the deleted the original, this is a slow operation and doesn't preserves the timestamp.\n- When modifying the Find Replace fields, it's checking if the new filename exists on the destination. This is a slow operation.\n\n## Translations\n\nTo improve translations:\n- Clone the project from [Github](https://github.com/a-bentofreire).\n- Update the translation on `tools/l10n.po`.\n- Run `convert-l10n.sh`.\n\n## Support this Project\n\nIf you find this project useful, consider supporting it:\n\n- Donate:  \n\n[![Donate via PayPal](https://www.paypalobjects.com/webstatic/en_US/i/btn/png/blue-rect-paypal-34px.png)](https://www.paypal.com/donate/?business=MCZDHYSK6TCKJ\u0026no_recurring=0\u0026item_name=Support+Open+Source\u0026currency_code=EUR)\n\n[![Buy me a Coffee](https://www.devtoix.com/assets/buymeacoffee-small.png)](https://buymeacoffee.com/abentofreire)\n\n- Visit the project [homepage](https://www.devtoix.com/en/projects/renametoix)\n- Give the project a ⭐ on [Github](https://github.com/a-bentofreire/renametoix)\n- [Translate into your language](#translations)\n- Spread the word\n- Follow me:\n  - [Github](https://github.com/a-bentofreire)\n  - [LinkedIn](https://www.linkedin.com/in/abentofreire)\n  - [Twitter/X](https://x.com/devtoix)\n\n## License\n\nGPLv3 License\n\n## Contributions\n\n- [claimsecond](https://github.com/claimsecond) - Translations in Russian and Ukrainian\n\n## Copyrights\n\n(c) 2024-2025 [Alexandre Bento Freire](https://www.a-bentofreire.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa-bentofreire%2Frenametoix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fa-bentofreire%2Frenametoix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa-bentofreire%2Frenametoix/lists"}