{"_id":"@cordfuse/nux-qr-tool","_rev":"9-3e16f704c5934d955e187fad93018686","name":"@cordfuse/nux-qr-tool","dist-tags":{"latest":"1.5.0"},"versions":{"1.0.0":{"name":"@cordfuse/nux-qr-tool","version":"1.0.0","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.0.0","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"1aaa0a9b3e3a3f136d46e4bad5c47439aa9a91f1","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.0.0.tgz","fileCount":4,"integrity":"sha512-02pAEfCY7w+2UoWNobEIZ4esy9KYMGaw1waufOLiCGvSQbVpTeRdGaaz3y6yCEwSHDZZqXBKEgeBRXJqSDxKHA==","signatures":[{"sig":"MEUCIQDzP+JivuVZ4HnH3fv9B0q+hBfETRTvaP0bgluWT0K8xQIgFSlviD1ygLcWG2gKZuqrVi9wcEyNedQpjMl6wWbClZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63339543},"type":"module","engines":{"node":">=18"},"gitHead":"e1108ef8ee2a3c65537bdccd7f225822f04862b7","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm"},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.0.0_1779739373846_0.0620522761911626","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cordfuse/nux-qr-tool","version":"1.1.0","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.1.0","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"3e61fbb0b4ea0cdedecf59fed15755172797b88f","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.1.0.tgz","fileCount":4,"integrity":"sha512-M19FmNCL+9fr9ZbgK6v7iHVyx+Ke4bfF4crPbdIjc8jlnDVJ4Ia7AinWp4PgPhNTkjnUjPZYf95UVECgNVRQtQ==","signatures":[{"sig":"MEUCIGZ7+2SqH1sZyrFNprojNbgdMcrWKX/HHWb7HTXtip7FAiEA1WVzjSi7Y7Kn+HVhtCwYXOuZsxGoziDz9YhTp0lwIDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63339852},"type":"module","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"82a83e05218d017c55f8dd3a78b4558dfa8371b4","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm"},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.1.0_1779739743137_0.01237244117816072","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@cordfuse/nux-qr-tool","version":"1.1.1","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.1.1","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"f3fdae99382dac78cf1b681830f2accf6d773a46","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.1.1.tgz","fileCount":5,"integrity":"sha512-ueIRxIbEzvCv43zqCYqgGVHqHguUtYxcQewEu7apEm6USQAMZLIVpWw8j4813JJoKFLVDVlA9xLrkkK7ehduxg==","signatures":[{"sig":"MEUCIHPmUfsBu628JPeO7H+J4hVvD6IXwFVNbnYc3CSYnu6jAiEAgO+s0rCbfHGv9/BLLrxbdi4PTExd+fzPSf5yf9e3sNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63340100},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"993562ef572cc647c3999e96504ccc695f97b4b6","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm"},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.1.1_1779739908845_0.1433916146278229","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@cordfuse/nux-qr-tool","version":"1.1.2","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.1.2","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"b5185fa1ec24ecea6c0f1beeec6fb3e1c85c93b4","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.1.2.tgz","fileCount":5,"integrity":"sha512-zP9/gMsUKP6iD9tWLmnY464Ry334T/x3KzCjpSOhTcU2wQLnh972AKW6npL9k4EsEBZO9SxcM3/oSbIPDPRsAA==","signatures":[{"sig":"MEQCIAz6rv6gBjXouM+YMipGTkT/3d4HseadDivAH2zPz6KtAiBT2JZeUdpnvZ4rzkszb6ze11m8fnXY80yS9+nLdyLmeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63340254},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"eb7555c9dc167770f89392bb7f12c3c9275322b5","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm && node -e \"const fs=require('fs'),f='dist/qr-generator.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'))\""},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.1.2_1779740047436_0.25673483587914725","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@cordfuse/nux-qr-tool","version":"1.2.0","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.2.0","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"4021b0620812b8b4de6aa3521b9c5d91bd4e876e","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.2.0.tgz","fileCount":6,"integrity":"sha512-N+PkXPtN4hMRRIaDvXeKBHvsdCxFNtJ1Kxp49tb3tV3FQ2Nx3uMROHXpK4Jm+8q2WWxneEntJx9SNSEQVStJtg==","signatures":[{"sig":"MEYCIQCnzJy3mFJKC55dECSi6XX8phzl8ie0ecPB+W5LSoFxcQIhAJ6c/hb5J2RW3fYPGWcp9fkBZ6oXXtKi/ihwwGRPP9IZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63350979},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"67a2fd11468e398bfda64007f536699db21a91f3","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm && node -e \"const fs=require('fs'),f='dist/qr-generator.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'))\""},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.2.0_1779740772114_0.24461100080227438","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@cordfuse/nux-qr-tool","version":"1.3.0","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.3.0","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"19ccbaf338bf9efbf6d9d643939386f23af1c5ab","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.3.0.tgz","fileCount":6,"integrity":"sha512-fGHJHLIHKLnGBSrrgkROJi6uIGAHhOQzNvRhv3IJl5l4MabSFC9/JgErdcaldr9bh5hZ5niKvk2rV5T42IMzgQ==","signatures":[{"sig":"MEUCIATDK/w9pMMnmClnXByU7vlnJVI11argMUKCuT5SLe5UAiEA4N5JJFa1M5ZEuKDOZGeYd6TmslBFCvdULs4gB/OsZgQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63351645},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"c613370ecbc62d5a1ae96aa851de7d11e9180261","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm && node -e \"const fs=require('fs'),f='dist/qr-generator.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'))\""},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.3.0_1779741233714_0.9769664769816073","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@cordfuse/nux-qr-tool","version":"1.3.1","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.3.1","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"19022d6ba56059d55ba5afbc867a0884547f9057","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.3.1.tgz","fileCount":6,"integrity":"sha512-VGNqmmkYiTgdGumg4MfrrxOUFh1TN0aRj7qE1vyD/xS/Cz5SuI+tL+uU8hsSx7izHudzRd/IjXCKIrQCPts3Ww==","signatures":[{"sig":"MEUCIQDAvjVg4KnfJ52hKlxUG3cg2apjYDQELb6/Wl3kkDSwiwIgGX2wPsDggRovBf9OlQlhlkewC2qhLwFoQ+hOfllsE7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63351689},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"528a0a338ab05dbd2c4028863342cf5360d00539","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm && node -e \"const fs=require('fs'),f='dist/qr-generator.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'))\""},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.3.1_1779741591576_0.32382974636433937","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@cordfuse/nux-qr-tool","version":"1.4.0","author":{"name":"Steve Krisjanovs"},"license":"MIT","_id":"@cordfuse/nux-qr-tool@1.4.0","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"bin":{"nux-qr-tool":"dist/qr-generator.js"},"dist":{"shasum":"019b24c5efb9a6dbcb38c62555667734a3bdf1d4","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.4.0.tgz","fileCount":6,"integrity":"sha512-TV6bhbrsFJVN+D6Q6KByn+StaHgJLKLDuKO1LSXTn/VUqsUyp8mW7KN01ghagP5NgaF72Fh1dahmdNDYbDuGpg==","signatures":[{"sig":"MEUCIQCaZzywM2HQJvbCS1WgTgal6NkqWKu3+ACp8KsYu8TbQQIgN8kWtwt4KMyhgE892Ihs5m/2IrbZuRv6IFa9M7q5zRc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63353260},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":"./dist/qr-generator.js","gitHead":"388fbd9085893664da8e61c046a029aff4e42261","scripts":{"dev":"bun src/qr-generator.ts","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm && node -e \"const fs=require('fs'),f='dist/qr-generator.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'))\""},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"repository":{"url":"git+https://github.com/cordfuse/nux-qr-tool.git","type":"git"},"_npmVersion":"10.8.2","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","directories":{},"_nodeVersion":"20.20.2","dependencies":{"qrcode":"^1.5.4","@napi-rs/canvas":"^0.1.68"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nux-qr-tool_1.4.0_1779744242237_0.12652138268574387","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@cordfuse/nux-qr-tool","version":"1.5.0","description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","type":"module","bin":{"nux-qr-tool":"dist/qr-generator.js"},"exports":"./dist/qr-generator.js","types":"./index.d.ts","scripts":{"gen-fonts":"node scripts/gen-fonts.mjs","build":"bun build src/qr-generator.ts --outdir dist --target node --format esm && node -e \"const fs=require('fs'),f='dist/qr-generator.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'))\"","dev":"bun src/qr-generator.ts"},"dependencies":{"opentype.js":"^2.0.0","pureimage":"^0.4.18","qrcode":"^1.5.4"},"devDependencies":{"@types/opentype.js":"^1.3.10","bun-types":"latest","typescript":"^5.0.0"},"engines":{"node":">=18"},"author":{"name":"Steve Krisjanovs"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/cordfuse/nux-qr-tool.git"},"_id":"@cordfuse/nux-qr-tool@1.5.0","gitHead":"edcf5c6b87159b2408078f8b2fe50f83e5d73b97","bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"homepage":"https://github.com/cordfuse/nux-qr-tool#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-p1STrReS0VmIDrmq5PmEbbJt4A75PRTY8cU5z0Jw86zhAhuZzTy3vLj81YQi1uNfZQk6pth7y3vFK4wU2++KGw==","shasum":"e592c436be2b09d046af29b153f8cdddbc382d0e","tarball":"https://registry.npmjs.org/@cordfuse/nux-qr-tool/-/nux-qr-tool-1.5.0.tgz","fileCount":5,"unpackedSize":1489540,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGQZ33reaHGg1sLfo2PUaGRGwAI87XxkJk9QJlUtYcZpAiEA/UCsEbE1lfERzE1y8Prw+G2RM/Eq9cGdnhrlSFs3jKk="}]},"_npmUser":{"name":"cordfuse","email":"cordfuseinc@gmail.com"},"directories":{},"maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nux-qr-tool_1.5.0_1782600225889_0.9574565333282765"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-25T20:02:53.635Z","modified":"2026-06-27T22:43:46.193Z","1.0.0":"2026-05-25T20:02:58.101Z","1.1.0":"2026-05-25T20:09:03.647Z","1.1.1":"2026-05-25T20:11:49.318Z","1.1.2":"2026-05-25T20:14:08.087Z","1.2.0":"2026-05-25T20:26:12.583Z","1.3.0":"2026-05-25T20:33:54.360Z","1.3.1":"2026-05-25T20:39:52.070Z","1.4.0":"2026-05-25T21:24:02.690Z","1.5.0":"2026-06-27T22:43:46.082Z"},"bugs":{"url":"https://github.com/cordfuse/nux-qr-tool/issues"},"author":{"name":"Steve Krisjanovs"},"license":"MIT","homepage":"https://github.com/cordfuse/nux-qr-tool#readme","repository":{"type":"git","url":"git+https://github.com/cordfuse/nux-qr-tool.git"},"description":"NUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON","maintainers":[{"name":"cordfuse","email":"cordfuseinc@gmail.com"}],"readme":"# @cordfuse/nux-qr-tool\n\nNUX MightyAmp QR preset encoder — generates decorated QR PNG cards from preset JSON.\n\nTakes a JSON file describing a NUX MightyAmp tone preset (amp model, effects chain, device target) and outputs a dark-themed PNG card containing a scannable QR code. Works as both a CLI tool (via `npx`) and a Node.js library.\n\n[![npm](https://img.shields.io/npm/v/@cordfuse/nux-qr-tool)](https://www.npmjs.com/package/@cordfuse/nux-qr-tool)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n---\n\n## Used by\n\n| Repo | How it's used |\n|---|---|\n| [cordfuse/toneai-nux-imprint](https://github.com/cordfuse/toneai-nux-imprint) | Agent invokes `npx @cordfuse/nux-qr-tool` to generate QR cards mid-conversation |\n| [cordfuse/toneai-nux-cli](https://github.com/cordfuse/toneai-nux-cli) | Imports `decorateQR` as a library to decorate QR PNGs inside the compiled binary |\n\n---\n\n## Install\n\n**Run without installing (recommended for agent use):**\n```bash\nnpx @cordfuse/nux-qr-tool preset.json\n```\n\n**Install globally:**\n```bash\nnpm install -g @cordfuse/nux-qr-tool\nnux-qr-tool preset.json\n```\n\n**Install as a library:**\n```bash\nnpm install @cordfuse/nux-qr-tool\n```\n\n---\n\n## CLI Usage\n\n```bash\nnpx @cordfuse/nux-qr-tool <preset-json-file> [--output <dir>] [--app-name <name>] [--app-version <ver>]\n```\n\nReads the preset JSON, encodes the NUX QR payload, generates a decorated PNG, writes it to `<dir>/<artist>-<song>.png`, and prints the full output path to stdout.\n\nThe output directory defaults to the current working directory. Use `--output` (or `-o`) to write elsewhere. Use `--app-name` and `--app-version` to override the branding shown in the card header (defaults to `ToneAI` and the package version).\n\n### Example\n\n```bash\ncat > preset.json << 'EOF'\n{\n  \"artist\": \"Led Zeppelin\",\n  \"song\": \"Whole Lotta Love\",\n  \"device\": \"plugpro\",\n  \"preset_name\": \"Page Sunburst\",\n  \"preset_name_short\": \"Page SB\",\n  \"amp\": { \"id\": 3, \"gain\": 72, \"master\": 75, \"bass\": 55, \"mid\": 50, \"treble\": 48 },\n  \"cabinet\": { \"id\": 5, \"level_db\": 0, \"low_cut_hz\": 80, \"high_cut\": 50 },\n  \"noise_gate\": { \"enabled\": true, \"sensitivity\": 35, \"decay\": 50 },\n  \"efx\": { \"id\": 7, \"enabled\": true, \"p1\": 60, \"p2\": 50, \"p3\": 55 },\n  \"reverb\": { \"id\": 1, \"enabled\": true, \"p1\": 20, \"p2\": 40 },\n  \"master_db\": 0\n}\nEOF\n\nnpx @cordfuse/nux-qr-tool preset.json\n# → /current/working/dir/led-zeppelin-whole-lotta-love.png\n\nnpx @cordfuse/nux-qr-tool preset.json --output ./cards\n# → ./cards/led-zeppelin-whole-lotta-love.png\n```\n\nThe output directory is created automatically if it doesn't exist.\n\n---\n\n## Output Card\n\nEach PNG is a 548×620px decorated card:\n\n- **Header:** app name (top-left) and version (top-right) in red/grey on a dark background\n- **QR code:** 500×500px, high error correction (level H), white on black\n- **Footer:** artist and song title (bold), device name and embedded-name indicator\n\nPro format devices embed the preset name directly into the QR payload. The footer notes this with `· name embedded in QR`.\n\n---\n\n## Library Usage\n\n```typescript\nimport { decorateQR } from '@cordfuse/nux-qr-tool'\n```\n\n### `decorateQR(qrPng, artist, song, deviceId, deviceName, options?)`\n\nTakes a raw QR PNG buffer and adds the dark card decoration around it.\n\n```typescript\nimport QRCode from 'qrcode'\nimport { decorateQR } from '@cordfuse/nux-qr-tool'\n\nconst qrBuffer = await QRCode.toBuffer('nux://MightyAmp:...', {\n  errorCorrectionLevel: 'H',\n  width: 500,\n  margin: 4,\n  color: { dark: '#000000', light: '#ffffff' },\n}) as Buffer\n\nconst decorated = await decorateQR(\n  qrBuffer,\n  'Led Zeppelin',\n  'Whole Lotta Love',\n  'plugpro',\n  'Mighty Plug Pro',\n  { appName: 'my-app', appVersion: '1.0.0' }  // optional — defaults to 'ToneAI' + package version\n)\n\nfs.writeFileSync('output.png', decorated)\n```\n\n#### Parameters\n\n| Param | Type | Description |\n|---|---|---|\n| `qrPng` | `Buffer` | Raw QR code PNG at 500×500px |\n| `artist` | `string` | Artist name — shown in footer |\n| `song` | `string` | Song title — shown in footer |\n| `deviceId` | `string` | NUX device ID (e.g. `plugpro`) — determines footer note |\n| `deviceName` | `string` | Human-readable device name — shown in footer |\n| `options.appName` | `string` | App name in header (default: `'ToneAI'`) |\n| `options.appVersion` | `string` | Version in header (default: package version) |\n\nReturns `Promise<Buffer>` — the decorated PNG as a Buffer.\n\n---\n\n## Preset JSON Format\n\nThe CLI input JSON must include at minimum `artist`, `song`, `device`, and `amp`. All other fields are optional and default to off/zero.\n\n### Top-level fields\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `artist` | `string` | yes | Artist name — used for output filename and card footer |\n| `song` | `string` | yes | Song title — used for output filename and card footer |\n| `device` | `string` | yes | Target NUX device ID (see Devices table below) |\n| `preset_name` | `string` | yes | Full preset name |\n| `preset_name_short` | `string` | no | Short name for Pro QR payload (max 15 chars) — falls back to `preset_name` |\n| `amp` | `AmpParams` | yes | Amp model and EQ settings |\n| `cabinet` | `CabinetParams` | no | Cabinet IR settings (Pro and most Standard devices) |\n| `noise_gate` | `NoiseGateParams` | yes | Noise gate settings |\n| `efx` | `EffectParams` | no | EFX slot (drive/wah effects) |\n| `compressor` | `EffectParams` | no | Compressor (Pro format only) |\n| `modulation` | `EffectParams` | no | Modulation effect |\n| `delay` | `EffectParams` | no | Delay effect |\n| `reverb` | `EffectParams` | no | Reverb effect |\n| `eq` | `EQParams` | no | EQ (Pro format only) |\n| `wah` | `WahParams` | no | Wah pedal (2040bt/40bt only) |\n| `master_db` | `number` | yes | Master volume offset in dB (range: −12 to +12) |\n\n### AmpParams\n\n| Field | Type | Range | Description |\n|---|---|---|---|\n| `id` | `number` | device-specific | Amp model ID (nux index, 0- or 1-indexed depending on device) |\n| `gain` | `number` | 0–100 | Gain |\n| `master` | `number` | 0–100 | Master volume |\n| `bass` | `number` | 0–100 | Bass EQ |\n| `mid` | `number` | 0–100 | Mid EQ |\n| `treble` | `number` | 0–100 | Treble EQ |\n| `param6` | `number` | 0–100 | Amp-specific 6th parameter (presence, resonance, etc.) |\n| `param7` | `number` | 0–100 | Amp-specific 7th parameter (rare) |\n\n### CabinetParams\n\n| Field | Type | Range | Description |\n|---|---|---|---|\n| `id` | `number` | device-specific | Cabinet IR model ID |\n| `level_db` | `number` | −12 to +12 | Cabinet output level in dB |\n| `low_cut_hz` | `number` | 20–300 | Low cut frequency |\n| `high_cut` | `number` | 0–100 | High cut amount |\n\n### NoiseGateParams\n\n| Field | Type | Range | Description |\n|---|---|---|---|\n| `enabled` | `boolean` | — | Whether noise gate is active |\n| `sensitivity` | `number` | 0–100 | Gate sensitivity (threshold) |\n| `decay` | `number` | 0–100 | Gate decay/release |\n\n### EffectParams (efx, compressor, modulation, delay, reverb)\n\n| Field | Type | Range | Description |\n|---|---|---|---|\n| `id` | `number` | device-specific | Effect model ID (nux index) |\n| `enabled` | `boolean` | — | Whether effect is active |\n| `p1` | `number` | 0–100 | Parameter 1 |\n| `p2` | `number` | 0–100 | Parameter 2 |\n| `p3` | `number` | 0–100 | Parameter 3 (effect-dependent) |\n\n### EQParams (Pro format only)\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | `number` | `1` = 6-Band, `3` = 10-Band |\n| `enabled` | `boolean` | Whether EQ is active |\n| `bands` | `number[]` | Per-band dB values (−15 to +15). 6 values for 6-Band, 11 for 10-Band |\n\n### WahParams (2040bt and 40bt only)\n\n| Field | Type | Range | Description |\n|---|---|---|---|\n| `enabled` | `boolean` | — | Whether wah is active |\n| `pedal` | `number` | 0–100 | Pedal position |\n\n---\n\n## Devices\n\n| ID | Device | Format | Notes |\n|---|---|---|---|\n| `plugpro` | Mighty Plug Pro | Pro (113 bytes) | Full chain, preset name in QR |\n| `space` | Mighty Space | Pro (113 bytes) | Full chain, preset name in QR |\n| `litemk2` | Mighty Lite MkII | Pro (113 bytes) | Full chain, preset name in QR |\n| `8btmk2` | Mighty 8BT MkII | Pro (113 bytes) | Full chain, preset name in QR |\n| `20btmk2` | Mighty 20BT MkII | Pro (113 bytes) | Full chain, preset name in QR |\n| `40btmk2` | Mighty 40BT MkII | Pro (113 bytes) | Full chain, preset name in QR |\n| `60btmk2` | Mighty 60BT MkII | Pro (113 bytes) | Full chain, preset name in QR |\n| `plugair_v1` | Mighty Plug (v1) | Standard (40 bytes) | EFX slot, no preset name |\n| `plugair_v2` | Mighty Plug (v2) | Standard (40 bytes) | EFX slot, no preset name |\n| `mightyair_v1` | Mighty Air (v1) | Standard (40 bytes) | EFX slot, no preset name |\n| `mightyair_v2` | Mighty Air (v2) | Standard (40 bytes) | EFX slot, no preset name |\n| `mightygo` | Mighty Go | Standard (40 bytes) | EFX slot, no preset name |\n| `lite` | Mighty Lite BT | Standard (40 bytes) | Single ambience slot (delay OR reverb) |\n| `8bt` | Mighty 8BT | Standard (40 bytes) | Separate delay and reverb |\n| `2040bt` | Mighty 20/40BT (original) | Standard (40 bytes) | Wah pedal, bass/mid/treble EQ |\n| `40bt` | Mighty 40BT (original) | Standard (40 bytes) | Same format as 2040bt, separate QR ID |\n\n### Pro vs Standard format\n\n**Pro** devices use a 113-byte payload with the full effects chain (Compressor, EFX, Amp, EQ, Noise Gate, Modulation, Delay, Reverb, Cabinet) and embed the preset name in bytes 98–112.\n\n**Standard** devices use a 40-byte device-specific payload. Amp and effect IDs are different from Pro devices and are 0-indexed. Cabinets and EQ are absent on Lite/8BT/2040BT. The Lite BT uses a single ambience slot shared between delay and reverb — reverb takes priority.\n\n### QR string format\n\nThe encoded QR string has the form:\n\n```\nnux://MightyAmp:<base64>\n```\n\nWhere the base64 decodes to `[deviceQRId, deviceQRVersion, ...payload]`.\n\n---\n\n## Requirements\n\n- Node.js 18+ (for `npx` / global install)\n- Or any runtime that can execute Node-compatible ESM (Bun, Deno with compat flag)\n\nNo external binaries required. Canvas rendering is handled by [`@napi-rs/canvas`](https://github.com/Brooooooklyn/canvas) — pre-built native binaries are downloaded automatically on install for Linux x64 (glibc and musl), macOS (arm64 and x64), and Windows x64.\n\n---\n\n## QR format reference\n\nThe NUX QR format was reverse-engineered from the open-source [mightier_amp](https://github.com/tuntorius/mightier_amp) Flutter app by [tuntorius](https://github.com/tuntorius). Key reference files: `NuxConstants.dart` and the per-device effect files under `lib/bluetooth/devices/effects/`.\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}