{"_id":"@amplib/steganography","_rev":"10-6e618b73ba0a3197b8c84297d47ffcaa","name":"@amplib/steganography","dist-tags":{"latest":"1.5.3"},"versions":{"0.1.0":{"name":"@amplib/steganography","version":"0.1.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@0.1.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"f6b7eb1fb73de2dfce911a71ee298e4d1f9d3879","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-0.1.0.tgz","fileCount":18,"integrity":"sha512-W9hbJygIGcjuOdoUYur6ISWEvqDjtQmATmSHxsFo/hNKxpCrAmVI9o5hTeZ+9C8DL6HnOqozfwrHcOo3ILpIFA==","signatures":[{"sig":"MEYCIQChj5UchMuqu07RkOdHWwK3d5gGUnyzWAK4qkDbYnajHAIhAMtvfZ44umkPz0v9Tj0ozW99dU7EJjHduLwEUP3kwzT9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1281903},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"12d2a635a582bea9ae238081cadb15924fd5ffac","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_0.1.0_1785526816982_0.5634390188454561","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@amplib/steganography","version":"1.0.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.0.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"d49e7d7d7641e0920c54f475ddda865806520f9a","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.0.0.tgz","fileCount":18,"integrity":"sha512-gU8TBzFJ/Zz0RjEdnWyr4iNcjf7ZxKMlM/T2bxTwxuc6/q7pymg/59ANR3E+fynnK9HZpJtgcG9epkKPTjpC8A==","signatures":[{"sig":"MEUCIEdKuJ6AoBsXhBGioA0vntRRlvvFsg8vs1K1YuyI1LDKAiEAqx2DdZrsOSjxi9pWirEF/zyT3gtA8s1BtZ3XytM9Alc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1070499},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"36afb74ac982cbdf7db71bb8c6ede0305b44ba35","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.0.0_1785544543396_0.8361186033705175","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@amplib/steganography","version":"1.1.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.1.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"9572db06f25c521366ad1d221d8cf836a3adee06","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.1.0.tgz","fileCount":18,"integrity":"sha512-s+vqCL328ZK0l6eDYkTPm3nW379JHPNfd1sU6UGYCiVbbki1ZBqYTnHqrZHJ3oUVLeSJ1/CR8CX3mapmCVaiHw==","signatures":[{"sig":"MEUCIEGw1cEe4j44Zf//8UKbkytsy/qyTuFqVWIbT55yAJbbAiEA4Eg4rM9y9a2coZZp1Yze+x+z/Bh312RAGVSp+Zg3Br8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1124200},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"fa42a4b168c4385e78470c0096bcb52be323a62b","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.1.0_1785548159376_0.18252421671640318","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@amplib/steganography","version":"1.2.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.2.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"362c16fed0319a1a099b93c9519dfc8a472a8c11","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.2.0.tgz","fileCount":18,"integrity":"sha512-XJv5tHv7g+wM8YLtN2gJdD0AlDn/jXyJfQDv2vvMXLdMgmtwJn7QzQhcnidywcSIXuIcSIgdvTrScS6fsPFjCg==","signatures":[{"sig":"MEUCIBqdn+yW3MLicI2OoSm7/OXSRNdgMkc9cInfNMy01cllAiEA022cXx0T3qvR8se/KpOvbqBf4cG9bvmQt+FWOdDT/Vg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1116674},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"537756ba72ea9e3fb37dfcc06a9c60eaf6ddbca0","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.2.0_1785551677918_0.1227366521549087","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@amplib/steganography","version":"1.3.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.3.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"fbdc47b8e57241c0c3ab1426ab8a3b371ae14ab2","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.3.0.tgz","fileCount":18,"integrity":"sha512-v0ecDbOr+iZI+N1rWMWAmJlbRlNtz3PupAxQDGOwTnE2Y2zCtKD7L1gapjDhxfE6C5jx3ggATHFjiQofh4Mwtg==","signatures":[{"sig":"MEYCIQCxbFByn+BfQ+lWuqO9B2WIa0/ULpbN+UsyH4GHva2VHAIhAKYwS9fsGSTZNRF+nir2BBTYiTbZrYaYZKZfy+hpJpe/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1189274},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","_from":"file:/private/tmp/claude-501/-Users-jake-projects-another-machine/7c25e286-f52f-47ff-b753-dc158aaa5ad5/scratchpad/amplib-steganography-1.3.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","test:radial":"esbuild scripts/test-radial.ts --bundle --platform=node --format=esm --outfile=.tmp/radial.mjs --log-level=warning && node .tmp/radial.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"_resolved":"/private/tmp/claude-501/-Users-jake-projects-another-machine/7c25e286-f52f-47ff-b753-dc158aaa5ad5/scratchpad/amplib-steganography-1.3.0.tgz","_integrity":"sha512-v0ecDbOr+iZI+N1rWMWAmJlbRlNtz3PupAxQDGOwTnE2Y2zCtKD7L1gapjDhxfE6C5jx3ggATHFjiQofh4Mwtg==","repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","dependencies":{"pngjs":"^7.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.3.0_1786821293143_0.29085020212848023","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@amplib/steganography","version":"1.4.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.4.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"ec83f2809069d1945079c253ca3b7c90af173802","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.4.0.tgz","fileCount":18,"integrity":"sha512-R5YDiM7058XM+joZy24xKwdEbRtbFZGnusceofRHHtDZ6drYfxq5EyvLSSTWkPQAPxwzvhPr4/BRi9KRK/Bpjw==","signatures":[{"sig":"MEUCIQC0I1VDnMEszaMI/PMKzokpADJSUwej6PkTrz9OvcN8EQIgDwsUX+WqXaRTEUDsE3Eh1IOmesC6Zh/TJLuCUNKh6F8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1201637},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"698fc6679d04f3c6e45060e59738c29e54310054","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","test:radial":"esbuild scripts/test-radial.ts --bundle --platform=node --format=esm --outfile=.tmp/radial.mjs --log-level=warning && node .tmp/radial.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.4.0_1786995047214_0.29279924211093467","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@amplib/steganography","version":"1.5.0","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.5.0","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"88a7be76abee9bbfa7ceb85b396da735c234ab94","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.5.0.tgz","fileCount":18,"integrity":"sha512-rfmz4ZSsFCMkgYLbxnh/MccRrLKE7Wz/FaljgfNdR7zRLgPWL9e3R/fGlLP78Zr/yfATpHOU02g7rBYhnAgrWA==","signatures":[{"sig":"MEQCIFTkX3ywASHwQDkjwLcQeb+XvYknzumB11GPdiGNsjfcAiADM4aJQ9ogqrxDnWx1BVMFr+4peZ+DleGYBLEpJlpkpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1206387},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"7c4cd7606a827479dfb8f810e24bd308f7c24fcb","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","test:radial":"esbuild scripts/test-radial.ts --bundle --platform=node --format=esm --outfile=.tmp/radial.mjs --log-level=warning && node .tmp/radial.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.5.0_1787095634069_0.06519376677360245","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@amplib/steganography","version":"1.5.1","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.5.1","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"0d3a1e5d9e58690a5f373ade902bea90118dd6f9","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.5.1.tgz","fileCount":18,"integrity":"sha512-hng9XV1EicLwsfhOZp0d63DoHruS4vnLy6CpbYNOg3OX70G/gwaeohLS7QasMSGBoV2PcPkPoPfkeMyPK2o22g==","signatures":[{"sig":"MEUCICvdA8jIC6Aro+DGWPv4/SPA8zKZTApWTZPzFk9K9eNBAiEAjk2qI5+1nWppM2EavvXxY0SAUDZzBRS+nPE1/ASE9Og=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1552283},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"c0914adc7e8b5c8e6d5f3ea166fbca8ae961a159","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","verify":"esbuild scripts/phase1-verify.ts --bundle --platform=node --format=esm --outfile=.tmp/verify.mjs --external:jpeg-js --log-level=warning && node .tmp/verify.mjs","measure":"esbuild scripts/phase0-measure.ts --bundle --platform=node --format=esm --outfile=.tmp/phase0.mjs --external:jpeg-js --log-level=warning && node .tmp/phase0.mjs","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","test:radial":"esbuild scripts/test-radial.ts --bundle --platform=node --format=esm --outfile=.tmp/radial.mjs --log-level=warning && node .tmp/radial.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jpeg-js":"^0.4.4","@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.5.1_1787191733688_0.3984182782542398","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@amplib/steganography","version":"1.5.2","author":{"name":"Another Machine"},"license":"Apache-2.0","_id":"@amplib/steganography@1.5.2","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"homepage":"https://amplib.app/steganography","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"dist":{"shasum":"b78993f4fcd99135c850d129635e8a2bac4982f2","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.5.2.tgz","fileCount":18,"integrity":"sha512-q8XYUQwwdH+4YHSTOgzUfEGEBkWP9DJxAbMbzHiFusGh5hvdlV1qpsyPh/EAIf5abqMBrQQRMEw70Iq1d0yvsQ==","signatures":[{"sig":"MEQCICb7bGBQpTPz7Jll7yTKtL5Glq8mKD+k/38pUycIrCS9AiBUlU1Q8Cs5qDrlLAcIvbQQbh7zKTOzpDIJgLeJo6fN0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1571610},"main":"dist/index.js","tsup":{"dts":true,"clean":true,"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"format":"esm","minify":false,"external":["pngjs"],"sourcemap":true,"splitting":false},"type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"gitHead":"4222b71180a0906e056db060f039815863fc6964","scripts":{"build":"tsup && npm run build:global","watch":"tsup --watch","verify":"esbuild scripts/phase1-verify.ts --bundle --platform=node --format=esm --outfile=.tmp/verify.mjs --external:jpeg-js --log-level=warning && node .tmp/verify.mjs","measure":"esbuild scripts/phase0-measure.ts --bundle --platform=node --format=esm --outfile=.tmp/phase0.mjs --external:jpeg-js --log-level=warning && node .tmp/phase0.mjs","prepack":"npm run build","build:types":"tsup --dts-only","test:parity":"npm run build && node scripts/test-parity.mjs","test:radial":"esbuild scripts/test-radial.ts --bundle --platform=node --format=esm --outfile=.tmp/radial.mjs --log-level=warning && node .tmp/radial.mjs","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false"},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"repository":{"url":"git+https://github.com/another-machine/public-library.git","type":"git","directory":"packages/amplib-steganography"},"_npmVersion":"10.2.4","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jpeg-js":"^0.4.4","@types/pngjs":"^6.0.5"},"optionalDependencies":{"pngjs":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/steganography_1.5.2_1787196627918_0.3860032678412444","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@amplib/steganography","description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","version":"1.5.3","main":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"homepage":"https://amplib.app/steganography","repository":{"type":"git","url":"git+https://github.com/another-machine/public-library.git","directory":"packages/amplib-steganography"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","default":"./dist/node.js"},"./job-schema":{"types":"./dist/jobSchema.d.ts","default":"./dist/jobSchema.js"}},"tsup":{"entry":["src/index.ts","src/node.ts","src/jobSchema.js"],"clean":true,"dts":true,"format":"esm","minify":false,"sourcemap":true,"splitting":false,"external":["pngjs"]},"scripts":{"build":"tsup && npm run build:global","build:global":"tsup src/stegassette.ts --format iife --global-name Stegassette --out-dir dist --sourcemap --no-dts --clean false && tsup src/jobSchema.js --format iife --global-name StegassetteJobs --out-dir dist --sourcemap --no-dts --clean false","watch":"tsup --watch","test:parity":"npm run build && node scripts/test-parity.mjs","test:radial":"esbuild scripts/test-radial.ts --bundle --platform=node --format=esm --outfile=.tmp/radial.mjs --log-level=warning && node .tmp/radial.mjs","measure":"esbuild scripts/phase0-measure.ts --bundle --platform=node --format=esm --outfile=.tmp/phase0.mjs --external:jpeg-js --log-level=warning && node .tmp/phase0.mjs","build:types":"tsup --dts-only","prepack":"npm run build","verify":"esbuild scripts/phase1-verify.ts --bundle --platform=node --format=esm --outfile=.tmp/verify.mjs --external:jpeg-js --log-level=warning && node .tmp/verify.mjs"},"optionalDependencies":{"pngjs":"^7.0.0"},"devDependencies":{"@types/pngjs":"^6.0.5","jpeg-js":"^0.4.4"},"author":{"name":"Another Machine"},"license":"Apache-2.0","type":"module","_id":"@amplib/steganography@1.5.3","gitHead":"4222b71180a0906e056db060f039815863fc6964","bugs":{"url":"https://github.com/another-machine/public-library/issues"},"_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-efWDq3Mu+fWHJjsK/Br20a2ni7diRvZd8tkoiBhX5eLUn1Jao1+P6/NfQrbJPzzwYft5sNTe2tW0/NEhYrgAXA==","shasum":"9ea93a10654373fa9b62f39e1ffa0e6d7533ffd1","tarball":"https://registry.npmjs.org/@amplib/steganography/-/steganography-1.5.3.tgz","fileCount":18,"unpackedSize":1602804,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDYft4AQOLlNEQ8TOed4qa7ZF77FKbhuQlBoI9OzT/XjwIgFEmeJkyoe+wXcH3bFcxwWheilsRM0J0q+E8r6voIVls="}]},"_npmUser":{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"},"directories":{},"maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/steganography_1.5.3_1787201444095_0.8526205097267572"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-31T19:40:16.857Z","modified":"2026-08-20T04:50:44.457Z","0.1.0":"2026-07-31T19:40:17.135Z","1.0.0":"2026-08-01T00:35:43.641Z","1.1.0":"2026-08-01T01:35:59.592Z","1.2.0":"2026-08-01T02:34:38.121Z","1.3.0":"2026-08-15T19:14:53.307Z","1.4.0":"2026-08-17T19:30:47.362Z","1.5.0":"2026-08-18T23:27:14.259Z","1.5.1":"2026-08-20T02:08:53.871Z","1.5.2":"2026-08-20T03:30:28.078Z","1.5.3":"2026-08-20T04:50:44.266Z"},"bugs":{"url":"https://github.com/another-machine/public-library/issues"},"author":{"name":"Another Machine"},"license":"Apache-2.0","homepage":"https://amplib.app/steganography","repository":{"type":"git","url":"git+https://github.com/another-machine/public-library.git","directory":"packages/amplib-steganography"},"description":"Encoding data into images and decoding it back. The Stegassette (STGC) format carries audio and arbitrary entries in one PNG.","maintainers":[{"name":"jakealbaugh","email":"jake.albaugh@gmail.com"}],"readme":"# Steganography\n\nEncoding data into images and decoding it back.\n\nOrigin: [ja-k-e/stega](https://github.com/ja-k-e/stega).\n\n## Modules\n\n`Stegassette` is the current format and the only one carried by the\n[published docs](https://amplib.app/steganography), alongside `StegaAnimator`\nand the helper functions. It subsumes what the pre-STGC modules each did\nseparately — text, audio, and arbitrary bytes are all just entries.\n\n| Module         | Description                                                                                                                                                                            |\n| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `Stegassette`  | Multi-payload STGC format: audio + arbitrary entries, self-describing alpha header, 11 combine ops, 10 traversals, 6 keymaps. See [Stegassette.md](./Stegassette.md) for format details. |\n| `Stegaprint`   | STGP format: survives JPEG re-encoding. Block-DCT carriers, a visible fiducial border, ~160× less capacity. Phases 0–1 built. See [Stegaprint.md](./Stegaprint.md).                     |\n| `StegaAnimator`| Animates an encoded image on a canvas                                                                                                                                                  |\n\n`Stegassette` needs pixels back exactly as written, so it does not survive a\nJPEG re-save: its header is in an alpha channel JPEG does not have, and the\ncombine ops encode payload at the spatial frequency an 8×8 quantizer discards\nfirst. Use `Stegaprint` when the image will be re-encoded, at roughly 160× less\ncapacity.\n\nThe pre-STGC modules — `Stega64`, `StegaCassette`, `StegaBinary`, `StegaKey`,\nand `StegaMetadata` — were removed in 1.0. Their consumers were already gone:\n`machines/sonic-pixels` is retired, and the iOS `StegaKit` that ported the API\nto Swift is archived at `_archive/stega-player`. They were kept only because\ndropping them was a breaking change. `Stegassette` supersedes all of them.\n\nTo keep using them, pin `@amplib/steganography@^0.1.0`; that line is not\nmaintained. The 1.0 surface is `Stegassette`, `StegaAnimator`, and the file and\naudio helpers.\n\n## Usage\n\n### Stegassette\n\n```typescript\nimport { Stegassette } from \"@amplib/steganography\";\n\n// Build an audio entry from decoded PCM channels\nconst audioEntry = Stegassette.buildAudioEntry({\n  channels: [leftChannel, rightChannel], // Float32Array[]\n  sampleRate: 44100,\n  bitsPerSample: 16,\n});\n\n// Encode into an image\nconst canvas = Stegassette.encode({\n  source: image, // HTMLImageElement | HTMLCanvasElement\n  entries: [audioEntry],\n  combine: \"xor\", // 11 combine ops available\n  traversal: \"raster\", // 10 traversal patterns\n  keymap: \"adjacent\", // 6 keymaps\n});\n\n// Decode — self-keying, no separate key image needed\nconst { entries, opts } = Stegassette.decode({ source: canvas });\nconst { channels, sampleRate } = Stegassette.parseAudioEntry(entries[0]);\n```\n\nAn entry is a mimetype, an optional name, and bytes — a string is encoded as\nUTF-8 — so text needs no separate module:\n\n```typescript\nconst canvas = Stegassette.encode({\n  source: image,\n  entries: [{ mimetype: \"text/plain\", name: \"message.txt\", data: \"Hello world\" }],\n});\n\nconst { entries } = Stegassette.decode({ source: canvas });\nconst message = new TextDecoder().decode(entries[0].data);\n```\n\n### Stegaprint\n\nEntries carry a type enum rather than a mimetype string, and lengths are counted\nin 16-byte chunks — fixed-width records are why the format needs no error\ncorrection on its own structure. The canvas is sized by the payload unless you\nforce it.\n\n```typescript\nimport { Stegaprint } from \"@amplib/steganography\";\n\nconst image = Stegaprint.encode({\n  source: img,\n  entries: [\n    { type: Stegaprint.EntryType.Text, name: \"message.txt\", data: \"Hello world\" },\n  ],\n});\n// image is StegaImageData — encode it to JPEG yourself (canvas.toBlob, sharp, …)\n\nconst { entries, header, registered } = Stegaprint.decode(jpegDecodedPixels);\nconst message = new TextDecoder().decode(entries[0].data);\n```\n\n`registered` reports whether the corner marks read; `entries[i].crcOk` reports\nwhether a payload still matches its recorded checksum. Neither causes a decode to\nfail — a damaged payload is a legitimate outcome, and the caller decides.\n\nTo target a fixed output size (video frames, or replacing an existing asset), ask\nwhat fits first:\n\n```typescript\nconst { bytes } = Stegaprint.capacity(1920, 1080);   // ~19 KB\nStegaprint.encode({ source: img, entries, width: 1920, height: 1080 });\n```\n\n### Node.js (read/write PNG files)\n\n```typescript\nimport { Stegassette, readPng, writePng } from \"@amplib/steganography/node\";\n\nconst img = await readPng(\"input.png\");\nconst out = Stegassette.encodeImageData({ source: img, entries: [audioEntry] });\nawait writePng(\"output.png\", out);\nconst { entries } = Stegassette.decodeImageData({ source: out });\n```\n\n","readmeFilename":"README.md"}