{"_id":"@boof2015/astra-signal","name":"@boof2015/astra-signal","dist-tags":{"latest":"0.3.0"},"versions":{"0.3.0":{"name":"@boof2015/astra-signal","version":"0.3.0","description":"Encode song metadata into a scannable, service-agnostic audio-spectrum barcode (Astra Signal)","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","test":"vitest run","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"repository":{"type":"git","url":"git+https://github.com/Boof2015/astra-signal.git"},"keywords":["music","barcode","astra","signal","spectrum"],"author":{"name":"Boof2015"},"license":"MIT","devDependencies":{"@types/node":"^20.12.12","tsup":"^8.0.2","typescript":"^5.4.5","vitest":"^1.6.0"},"bugs":{"url":"https://github.com/Boof2015/astra-signal/issues"},"homepage":"https://github.com/Boof2015/astra-signal#readme","gitHead":"ab0896ebd22a44d00feafa656d97c8c384b8ac59","_id":"@boof2015/astra-signal@0.3.0","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-hPzi9Qv7VUK7DE+GWxciAIKm7QSgt5szdy+vwtavP0KvQEt8H8AqHO81xAgEPuR5d5EeaeEDXCF86PNXVJ9n5w==","shasum":"85f66059bcd727a64fd223a709d025a137f1c33b","tarball":"https://registry.npmjs.org/@boof2015/astra-signal/-/astra-signal-0.3.0.tgz","fileCount":8,"unpackedSize":127899,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDUvofbTMBmQo9KNAPSY5SyrWUjI9DL6DtRad0QZj7aWgIhAJ0wAlqHFJygpnopf6QQa7b8c77FGAZ4KprGpq/SsHGQ"}]},"_npmUser":{"name":"boof2015","email":"contact@novaml.ai"},"directories":{},"maintainers":[{"name":"boof2015","email":"contact@novaml.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/astra-signal_0.3.0_1784090781166_0.2016635931969335"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T04:46:20.911Z","0.3.0":"2026-07-15T04:46:21.307Z","modified":"2026-07-15T04:46:21.584Z"},"maintainers":[{"name":"boof2015","email":"contact@novaml.ai"}],"description":"Encode song metadata into a scannable, service-agnostic audio-spectrum barcode (Astra Signal)","homepage":"https://github.com/Boof2015/astra-signal#readme","keywords":["music","barcode","astra","signal","spectrum"],"repository":{"type":"git","url":"git+https://github.com/Boof2015/astra-signal.git"},"author":{"name":"Boof2015"},"bugs":{"url":"https://github.com/Boof2015/astra-signal/issues"},"license":"MIT","readme":"# @boof2015/astra-signal\n\nPortable TypeScript encoding and camera decoding for Astra Signal: a connected,\naudio-spectrum-shaped mark carrying song metadata without accounts, database\nregistration, or provider-specific IDs.\n\nVersion 0.3.0 implements the clean-break v3 format. It preserves ASCII case and\npunctuation exactly, supports Unicode metadata,\nthree payload sizes, Reed–Solomon errors and erasures, CRC validation, reference\nrasterization, perspective and bounded lens-distortion recovery, and strict\n`astra:signal:v3:` links. There are no runtime dependencies.\n\n```ts\nimport {\n  decodeSignalImage,\n  decodeSignalLink,\n  encodeSignal,\n  encodeSignalLink,\n  rasterizeSignal,\n} from \"@boof2015/astra-signal\";\n\nconst input = {\n  artist: \"ナナツカゼ\",\n  title: \"Replay\",\n  durationSec: 161,\n};\n\nconst layout = encodeSignal(input);\nconst rgba = rasterizeSignal(layout, { scale: 6 });\nconst decoded = decodeSignalImage(rgba);\n\nconsole.log(decoded.payload.artist); // ナナツカゼ\nconsole.log(decodeSignalLink(encodeSignalLink(input)));\n```\n\n## API\n\n- `encodeSignal(input)` → render-agnostic connected-envelope `SignalLayout`\n- `decodeSignalImage(image, options?)` → validated `SignalDecodeResult`\n- `encodeSignalLink(input)` / `decodeSignalLink(value)`\n- `encodeSignalFrame(input)` / `decodeSignalFrame(bytes)` for wire-level use\n- `decodeSignalColumns(tier, columns)` for already-sampled optical data\n- `rasterizeSignal(layout, options?)` for a portable RGBA reference render\n- `SIGNAL_SPEC`, `tierSpec`, and geometry helpers\n\nSee [SPEC.md](./SPEC.md) for the frozen wire and optical contract.\n\n## Development\n\n```sh\nnpm test\nnpm run typecheck\nnpm run build\nnpm pack\n```\n\n`prepublishOnly` runs typecheck, tests, and the ESM/CJS/declaration build. The\ncamera suite covers Unicode golden vectors, fractional scale, perspective,\nrotation, blur, resampling, noise, lighting gradients, glare fragmentation,\ndisplay bloom on dark scenes, bounded lens distortion, block artifacts, clutter,\nand negative images. Real phone-to-phone acceptance remains a required device\ncheck because screen optics cannot be proven in Node.\n","readmeFilename":"README.md","_rev":"1-11dacd781590e6ab95c9a94ac80e5a6c"}