{"id":37068085,"url":"https://github.com/vividsystem/wisort","last_synced_at":"2026-01-14T08:00:05.016Z","repository":{"id":318666460,"uuid":"1072248043","full_name":"vividsystem/wisort","owner":"vividsystem","description":"Your file-sorting wizard 🧙 that manages your file magically 🔮","archived":false,"fork":false,"pushed_at":"2025-10-19T15:33:13.000Z","size":86,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-28T20:36:47.688Z","etag":null,"topics":["software"],"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/vividsystem.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":"2025-10-08T13:10:12.000Z","updated_at":"2025-11-02T18:14:27.000Z","dependencies_parsed_at":"2025-10-08T15:13:51.530Z","dependency_job_id":"c9ef5d33-4b03-4339-b6c7-48bdca4343bb","html_url":"https://github.com/vividsystem/wisort","commit_stats":null,"previous_names":["vividsystem/wisort"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/vividsystem/wisort","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fwisort","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fwisort/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fwisort/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fwisort/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vividsystem","download_url":"https://codeload.github.com/vividsystem/wisort/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fwisort/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"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":["software"],"created_at":"2026-01-14T08:00:04.303Z","updated_at":"2026-01-14T08:00:05.009Z","avatar_url":"https://github.com/vividsystem.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wisort :magic_wand:\nYour file-sorting wizard :mage: that manages your file magically :crystal_ball:\n\n[Demo video](https://hc-cdn.hel1.your-objectstorage.com/s/v3/dd46e010fbe6f39cc6f77a354aec082f867420af_wisort_demo.mp4)\n\n\n## Requirements\n- python `\u003e=3.14`\n- uv (heavily recommended)\n- a UNIX OS\n\n## Installation\n`wisort` is published on [PyPi](https://pypi.org/project/wisort/)\n```bash\n# using uv (recommended)\nuv tool install wisort\n\n# or with pip\npip install wisort\n```\nif you want to just try out and run the project you can use `uvx wisort`.\nMake sure to copy the default `config.json` to `$XDG_CONFIG_HOME`(fallback to `$HOME/.config`).\n\n## Concept and features\n`wisort` is supposed to be a file sorting cli. Below can be seen my ideas for the project even if they might not be fully implemented yet. To see the progress go read the [ROADMAP](./ROADMAP.md)\nIt has different characters:\n- apprentice\n- magician (coming soon)\n- witch (not fully implemented yet - only deduplication as of now)\n- dragon (coming soon)\n\nThese are different magical users so they clean your file system differently.\nThe apprentice is unsure about his work so he leave the most things to you to manually handle (confirmations when deleting etc.).\nThe magician works way more autonomously but is very calm and doesn't destroy anything. This means a lot of capabilties with a good amount of safety.\nThe witch is a brazen sorcerer not afraid of destruction. She cleans your filesystem very very thoroughly.\n\n(As of now magician and witch are not implemented)\n\n### The :sparkles: magic :sparkles:\n* smart unzip:\narchives can be automatically unpacked before being moved.\nthey get moved into a new folder or directly to the destination depending on the content \n* file duplicate removal strategies\n    - replace the (older) duplicate by symlink\n    - matching exact contents\n    - diffing contents\n    - intentional duplicate recognition -\u003e diffing file names\n* auto-remove empty files\n* automatic move conflict resolution\nwhen the programm wants to move a file somewhere where a file with the same name already exist it can handle that automatically\n\n## Config\nConfiguration is done through `config.json` file in `$XDG_CONFIG_HOME/wisort/`\n\nExample:\n```json\n{\n\t\"runes\": {\n\t\t\"images\": [\"png\", \"jpeg\", \"jpg\"]\n\t},\n\t\"libraries\": {\n\t\t\"pics\": {\n\t\t\t\"destination\": \"~/Pictures/\",\n\t\t\t\"filetypes\": \"@images\",\n\t\t\t\"flatten\": true\n\t\t}\n\t},\n\t\"orders\": {\n\t\t\"recurse\": true,\n\t\t\"honor_gitignore\": true,\n\t\t\"ignore_dotfiles\": true\n\t},\n\t\"args\": {\n\t\t\"quiet\": true,\n\t\t\"force\": false\n\t}\n}\n```\n### `\"runes\"` \nRunes are like a key-value store for your config file to create shorthands like above. This works with all filetypes supported by json as values.\n### `\"orders\"` - Specify wisort's behaviour\n| Order | Default | Description | \n| ----- | ------- | ----------- |\n| `\"recurse\"` | `true` | Enables recursion through subdirectories of the target directory |\n| `\"dedupe_strategy\"` | `\"portal\"` | Specifies how to resolve duplicates. `\"portal\"` replaces the duplicate files by symlinks to the original. `\"remove\"` deletes the duplicates. |\n| `\"move_strategy\"` | `\"flatten\"` | By default this flattens out the file structure in the destination and doesn't preserve the file structure || `\"move_conflict_strategy\"` | `\"mode\"` | This determines what to do when a file is already present where another is supposed to be moved. When configured to `\"manual\"` the user is prompted to decide n a strategy on every conflict. `\"remove\"` removes the original, `\"skip\"` doesn't move the file on duplicate and using `\"rename\"` the user is prompted to rename the original filename. `\"mode\"` is a placeholder to decide the strategy based on the characters. |\n| `\"honor_gitignore\"` | `true` | This option specifies wether to ignore files as specified in the respective `.gitignore` files |\n| `\"delete_empty_files` | `true` | Wether to delete empty files on deduplication or not |\n\n### `\"args\"` - Default overwrite for CLI arguments\n| Argument | Default | Description |\n| -------- | ------- | ----------- |\n| `\"quiet\"` | `false` | Disable dialog and non critical messages |\n| `\"force\"` | `false` | Overwrites move_conflict_strategy to remove |\n| `\"verbose\"` | `false` | Shows more information |\n\n## Usage\nFor the exact CLI usage do `wisort --help`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvividsystem%2Fwisort","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvividsystem%2Fwisort","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvividsystem%2Fwisort/lists"}