{"id":50927616,"url":"https://github.com/davideferigato/lumix","last_synced_at":"2026-06-17T01:00:22.510Z","repository":{"id":324433424,"uuid":"1030571578","full_name":"davideFerigato/Lumix","owner":"davideFerigato","description":"Modular, multilingual CLI converter for 30+ units: temperature, currency, base, weight, length, volume, area, speed, time, energy, pressure, power, data, bitrate, hash, color, IP tools, timezones, date, calendar, age, passwords, country, language, unit symbols, Roman numerals, Morse code, spoken numbers, NATO. Supports 5 languages, Docker, ...","archived":false,"fork":false,"pushed_at":"2026-06-16T00:59:04.000Z","size":3564,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T02:23:46.866Z","etag":null,"topics":["bash-completion","cli","converter","docker","multilingual","pytest","python"],"latest_commit_sha":null,"homepage":"https://davideferigato.github.io/Lumix/","language":"Python","has_issues":false,"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/davideFerigato.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","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-08-01T21:58:05.000Z","updated_at":"2026-06-16T00:59:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/davideFerigato/Lumix","commit_stats":null,"previous_names":["davideferigato/lumix"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/davideFerigato/Lumix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davideFerigato%2FLumix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davideFerigato%2FLumix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davideFerigato%2FLumix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davideFerigato%2FLumix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davideFerigato","download_url":"https://codeload.github.com/davideFerigato/Lumix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davideFerigato%2FLumix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34429493,"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-06-16T02:00:06.860Z","response_time":126,"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":["bash-completion","cli","converter","docker","multilingual","pytest","python"],"created_at":"2026-06-17T01:00:21.259Z","updated_at":"2026-06-17T01:00:22.454Z","avatar_url":"https://github.com/davideFerigato.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/logo.png\" alt=\"Lumix Logo\" width=\"200\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eOne CLI to convert everything – from temperature to Morse code, in 5 languages.\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/lumix/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/lumix\" alt=\"PyPI version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/lumix/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/lumix\" alt=\"Python versions\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/psf/black\"\u003e\u003cimg src=\"https://img.shields.io/badge/code%20style-black-000000.svg\" alt=\"Code style: black\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/davideFerigato/lumix/actions/workflows/tests.yml\"\u003e\u003cimg src=\"https://github.com/davideFerigato/lumix/actions/workflows/tests.yml/badge.svg\" alt=\"Tests\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/davideFerigato/lumix\"\u003e\u003cimg src=\"https://codecov.io/gh/davideFerigato/lumix/branch/main/graph/badge.svg\" alt=\"codecov\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/davideferigato/lumix\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/davideferigato/lumix\" alt=\"Docker Pulls\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://davideferigato.github.io/Lumix/\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-mkdocs-blue.svg\" alt=\"Documentation\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://doi.org/10.5281/zenodo.20709879\"\u003e\u003cimg src=\"https://zenodo.org/badge/1030571578.svg\" alt=\"DOI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/pre-commit/pre-commit\"\u003e\u003cimg src=\"https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white\" alt=\"Pre-commit\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/davideFerigato/Lumix\"\u003e\u003cimg src=\"https://img.shields.io/badge/Maintenance-yes-green\" alt=\"Maintenance\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://conventionalcommits.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196\" alt=\"Conventional Commits\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/davideFerigato/Lumix\"\u003e\u003cimg src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey\" alt=\"Platform\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**Lumix** is a **modular**, **multilingual** command-line converter for physical units, digital data, time, security tools, and creative utilities.\nDesigned to be **easily extensible**, it features **shell autocompletion** – all in one sleek package.\n\n🌐 **Supported languages:** English, Italian, French, Spanish, Japanese.\n⚙️ **Modular core:** add your own converters in minutes.\n\n## 📋 Table of contents\n\n- [✨ Features](#-features)\n- [🤔 Why Lumix?](#-why-lumix-instead-of-units-or-qalc)\n- [🧱 Architecture overview](#-architecture-overview)\n- [📦 Installation](#-installation)\n- [🚀 Basic Usage](#-basic-usage)\n- [📊 Complete converter reference (30+ categories)](#-complete-converter-reference-30-categories)\n- [⏩ Shell Autocompletion](#-shell-autocompletion)\n- [🐳 Docker](#-docker)\n- [🧪 Testing](#-testing)\n- [🙏 Acknowledgements](#-acknowledgements)\n\n---\n\n## ✨ Features\n\n- **🌍 Multilingual by design** – Use Lumix in your native language (en, it, fr, es, jp).\n- **🧩 Modular architecture** – Each converter is independent; adding a new one is as simple as creating a new folder.\n- **🚀 Rich set of converters** – From physical units to digital data, from time zones to creative tools (see [reference table](#-complete-converter-reference-30-categories)).\n- **⌨️ Shell autocompletion** – Works with bash and zsh via `argcomplete`.\n- **🐳 Docker‑ready** – Run Lumix anywhere without installing dependencies.\n- **🧪 Fully tested** – High test coverage with `pytest`.\n\n---\n\n## 🤔 Why Lumix instead of `units` or `qalc`?\n\n| Feature | Lumix | GNU Units | qalc |\n|---------|-------|-----------|------|\n| Multilingual CLI (5 languages) | ✅ | ❌ | ❌ |\n| 30+ categories out of the box | ✅ | ✅ | ✅ |\n| Shell autocompletion | ✅ (argcomplete) | ❌ | ❌ |\n| Modular, add your own converter in 5 min | ✅ | ❌ | ❌ |\n| Docker image with 0 config | ✅ | ❌ | ❌ |\n| Native hashing, IP tools, Morse | ✅ | ❌ | ❌ |\n| Open source, Python, easily hackable | ✅ | ❌ | ❌ |\n\nLumix is **not** just another unit converter – it's a **pluggable framework** for CLI conversions, designed to be extended by developers and used by anyone in their native language.\n\n---\n\n## 🧱 Architecture overview\n\n```mermaid\nflowchart TD\n    User[User types: lumix en currency from EUR to USD 50]\n    CLI[cli.py + argcomplete]\n    Dispatcher[cli/main.py: parses lang and module name]\n    Parser[currency/parser.py: localizes keywords]\n    Convert[currency/convert.py: calls API/cache]\n    Output[Formatted result printed]\n\n    User --\u003e CLI\n    CLI --\u003e Dispatcher\n    Dispatcher --\u003e Parser\n    Parser --\u003e Convert\n    Convert --\u003e Output\n```\n\n*Every converter follows the same pattern: `parser.py` → `convert.py` → output.*\n\n---\n\n## 📦 Installation\n\n### From PyPI (recommended)\n\n```bash\npip install lumix\n```\n\n### From source\n\n```bash\ngit clone https://github.com/davideFerigato/lumix.git\ncd lumix\npython -m venv venv \u0026\u0026 source venv/bin/activate   # or `venv\\Scripts\\activate` on Windows\npip install --upgrade pip\npip install -e .\n```\n\n---\n\n## 🚀 Basic Usage\n\n```bash\nlumix --help\n```\n\nLumix follows a simple pattern:\n\n```bash\nlumix \u003clanguage\u003e \u003cconverter\u003e from \u003csource\u003e to \u003ctarget\u003e \u003cvalue\u003e\n```\n\nFor example:\n\n```bash\nlumix en temperature from C to F 36.5\nlumix it temperatura da C a F 36,5      # Italian uses comma as decimal separator\n```\n\n---\n\n## 📊 Complete converter reference (30+ categories)\n\n| Category | Example command | Input units | Output units |\n|----------|----------------|-------------|---------------|\n| Temperature | `lumix en temperature from C to F 36.5` | C, F, K | C, F, K |\n| Currency | `lumix en currency from EUR to USD 50` | EUR, USD, GBP, JPY, ... | EUR, USD, GBP, JPY, ... |\n| Number bases | `lumix en base from dec to hex 255` | dec, bin, hex, oct | dec, bin, hex, oct |\n| Weight | `lumix en weight from kg to lb 75` | kg, lb, oz, g, mg, st, t | same |\n| Length | `lumix en length from m to ft 1.80` | m, km, cm, mm, mi, yd, ft, in, nmi | same |\n| Volume | `lumix en volume from l to gal 2` | l, ml, m3, gal, qt, pt, cup, fl oz | same |\n| Area | `lumix en area from m2 to ft2 50` | m2, km2, ft2, mi2, ha, acre, cm2, mm2, yd2, in2 | same |\n| Speed | `lumix en speed from km/h to mph 130` | km/h, mph, m/s, kn | same |\n| Time | `lumix en time from days to hours 3` | s, min, h, d, w | same |\n| Energy | `lumix en energy from J to kcal 500` | J, kJ, cal, kcal, Wh, kWh, eV | same |\n| Pressure | `lumix en pressure from bar to psi 2` | Pa, bar, atm, mmHg, psi | same |\n| Power | `lumix en power from W to hp 1000` | W, kW, hp | same |\n| Digital Data | `lumix en data from MB to GB 1500` | B, KB, MB, GB, TB | same |\n| Bitrate | `lumix en bitrate from Mbps to Kbps 100` | bps, kbps, Mbps, Gbps, Tbps | same |\n| Hash | `lumix en hash sha256 \"hello world\"` | md5, sha1, sha224, sha256, sha384, sha512 | hash string |\n| Color | `lumix en color from rgb to hex 255,255,255` | rgb, hex | rgb, hex |\n| IP Tools | `lumix en iptools cidr-to-range 192.168.1.0/24` | CIDR, IP, binary | range, binary, netmask, etc. |\n| Time Zones | `lumix en timezones from Europe/Rome to Asia/Tokyo \"2025-08-02 14:00\"` | any IANA timezone | any IANA timezone |\n| Date | `lumix en date from us to iso 08/02/2025` | us, iso, eu, jp | us, iso, eu, jp |\n| Calendar | `lumix en calendar diff 2025-01-01 2025-12-31` | YYYY-MM-DD | days |\n| Age | `lumix en age from 1990-05-23` | YYYY-MM-DD | years |\n| Passwords | `lumix en passwords generate length 16 symbols true` | length, symbols flag | random password |\n| Country | `lumix en country from code to name IT` | country code | country name |\n| Language | `lumix en language from name to code \"Italian\"` | language name | ISO code |\n| Unit Symbols | `lumix en unitsymbols from W to \"unit name\"` | symbol or name | symbol, name, type |\n| Roman | `lumix en roman from 2025` | 1‑3999 | Roman numeral |\n| Morse | `lumix en morse to-text \"... --- ...\"` | text or Morse | text or Morse |\n| Timezone Bot | `lumix en timezonebot what-time Tokyo` | city name | current local time |\n| Spoken | `lumix en spoken from 123456` | integer | number in words (en/it) |\n| Phonetic | `lumix en phonetic for CIAO` | text | NATO phonetic alphabet |\n\n---\n\n## ⏩ Shell Autocompletion\n\nLumix integrates with `argcomplete` to provide smart tab completion.\n\n```bash\npip install argcomplete\neval \"$(register-python-argcomplete lumix)\"\n# Add the eval line to your ~/.bashrc or ~/.zshrc to make it permanent\n```\n\n\u003e **Note:** Autocompletion is still under active improvement.\n\n---\n\n## 🐳 Docker\n\nRun Lumix in a container without any local installation:\n\n```bash\ndocker build -t lumix .\ndocker run --rm lumix en temperature from C to F 36.5\n```\n\n---\n\n## 🧪 Testing\n\nWe use `pytest` for unit tests. To run the full suite:\n\n```bash\npytest tests/\n```\n\nEach module has its own test file (`test_\u003cmodule\u003e.py`) to ensure reliability.\n\n---\n\n## 🙏 Acknowledgements\n\n- [Frankfurter API](https://frankfurter.dev) for real‑time exchange rates.\n- [argcomplete](https://github.com/kislyuk/argcomplete) for shell completion magic.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavideferigato%2Flumix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavideferigato%2Flumix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavideferigato%2Flumix/lists"}