{"_id":"@azphalt/importer-abr","_rev":"7-c5e62c4f9a156094d33a2edf267be31a","name":"@azphalt/importer-abr","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@azphalt/importer-abr","version":"0.1.0","author":{"url":"https://hereliesaz.com","name":"Az"},"license":"MIT","_id":"@azphalt/importer-abr@0.1.0","maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"}],"bin":{"azphalt-import-abr":"dist/cli.js"},"dist":{"shasum":"87d9f866a6623a05615fe50925fd47bb03870c42","tarball":"https://registry.npmjs.org/@azphalt/importer-abr/-/importer-abr-0.1.0.tgz","fileCount":17,"integrity":"sha512-uZoNUvo8x3hWtq/mmtVv2io09pWbtZ951k1DvUJkH+bVr0Ct5oMzfYnk0O7R/2SAumYXXtKD6QJYn04v3AnmcQ==","signatures":[{"sig":"MEQCIA0UcRJcHhjfkEMoRK9y2XzfGP6cwEPWdOlqzeyEYu6fAiAjF3PosWlDEh0wCoEfOQerDAF4Izcah1Fs2CAQ2r/SgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28031},"main":"./dist/index.js","type":"module","_from":"file:azphalt-importer-abr-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"azcamehere","email":"hereliesaz@gmail.com"},"_resolved":"/tmp/1cff94b527d56ecdbac2d25ad6458669/azphalt-importer-abr-0.1.0.tgz","_integrity":"sha512-uZoNUvo8x3hWtq/mmtVv2io09pWbtZ951k1DvUJkH+bVr0Ct5oMzfYnk0O7R/2SAumYXXtKD6QJYn04v3AnmcQ==","_npmVersion":"10.9.8","description":"Import Photoshop .abr sampled brushes into .azp asset packages.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fflate":"^0.8.2","@azphalt/azp":"0.1.0","@azphalt/sdk":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.6","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/importer-abr_0.1.0_1784028732772_0.9734089681700047","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@azphalt/importer-abr","version":"0.1.1","author":{"url":"https://hereliesaz.com","name":"Az"},"license":"MIT","_id":"@azphalt/importer-abr@0.1.1","maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"},{"name":"hahapewpew","email":"az@hahapewpew.com"}],"bin":{"azphalt-import-abr":"dist/cli.js"},"dist":{"shasum":"b73468c7469a3bb4abefd45bfa7900189c8063e9","tarball":"https://registry.npmjs.org/@azphalt/importer-abr/-/importer-abr-0.1.1.tgz","fileCount":17,"integrity":"sha512-GifYSn49YV9xW4NOFQXBybEzf9zrGn9wLnXAOD3SKTEJ1mMlnphsA5A3OYWDDdPZIquvmuTyHMr3D97xrDXbdw==","signatures":[{"sig":"MEUCIG4d4uQEdEOqg3UsjqrNGaAPgm9KByTd999S5OFPcajjAiEA5WckuH5hhEk5yC4K0wjwR2VS9oaZZ3OvxHgpm4q2SPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28032},"main":"./dist/index.js","type":"module","_from":"file:azphalt-importer-abr-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"azcamehere","email":"hereliesaz@gmail.com"},"_resolved":"/tmp/7f1f9d6e69dd9cd5e4114fb94e035587/azphalt-importer-abr-0.1.1.tgz","_integrity":"sha512-GifYSn49YV9xW4NOFQXBybEzf9zrGn9wLnXAOD3SKTEJ1mMlnphsA5A3OYWDDdPZIquvmuTyHMr3D97xrDXbdw==","_npmVersion":"10.9.8","description":"Import Photoshop .abr sampled brushes into .azp asset packages.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fflate":"^0.8.2","@azphalt/azp":"0.1.1","@azphalt/azdk":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.6","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/importer-abr_0.1.1_1784125865390_0.16864105479723857","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@azphalt/importer-abr","version":"0.1.2","author":{"url":"https://hereliesaz.com","name":"Az"},"license":"MIT","_id":"@azphalt/importer-abr@0.1.2","maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"},{"name":"hahapewpew","email":"az@hahapewpew.com"}],"bin":{"azphalt-import-abr":"dist/cli.js"},"dist":{"shasum":"ad7427aaf83617ec5e0acfad20706ae9396c7734","tarball":"https://registry.npmjs.org/@azphalt/importer-abr/-/importer-abr-0.1.2.tgz","fileCount":17,"integrity":"sha512-akwfyX6cRyTJBFO3eR9u66peQxwt89qtWjQC1jn25PzulGwEJVid085XC/b/8nAzwmKzgI64hgPp2i9FMRkk4A==","signatures":[{"sig":"MEUCIQC8i50tJQB3RZa49i+XeV9/YBWK6dFpUSlosc5N+yw9RwIgY10OYw/Fd9y4AhWHI0msvEZsKFN1k4EWljQhYXTef0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28240},"main":"./dist/index.js","type":"module","_from":"file:azphalt-importer-abr-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"azcamehere","email":"hereliesaz@gmail.com"},"_resolved":"/tmp/ad2ac707802b96d8895829d0339ae2c0/azphalt-importer-abr-0.1.2.tgz","_integrity":"sha512-akwfyX6cRyTJBFO3eR9u66peQxwt89qtWjQC1jn25PzulGwEJVid085XC/b/8nAzwmKzgI64hgPp2i9FMRkk4A==","_npmVersion":"10.9.8","description":"Import Photoshop .abr sampled brushes into .azp asset packages.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fflate":"^0.8.3","@azphalt/azp":"0.2.0","@azphalt/azdk":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1"},"_npmOperationalInternal":{"tmp":"tmp/importer-abr_0.1.2_1784628649665_0.9907902954000574","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@azphalt/importer-abr","version":"0.1.3","author":{"url":"https://hereliesaz.com","name":"Az"},"license":"MIT","_id":"@azphalt/importer-abr@0.1.3","maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"},{"name":"hahapewpew","email":"az@hahapewpew.com"}],"bin":{"azphalt-import-abr":"dist/cli.js"},"dist":{"shasum":"ac66bc5949e816592f2be08148957992b9c3b163","tarball":"https://registry.npmjs.org/@azphalt/importer-abr/-/importer-abr-0.1.3.tgz","fileCount":17,"integrity":"sha512-IyX7OjeJ/wZuC9mUONL5SChSRx6BaBYDDakPQ+Xxrwwh55Yr/rqeKupvnbJl1YQMcBSmxIHV3ugtB0HU1nIa7A==","signatures":[{"sig":"MEYCIQDWrLppYCnRuHHMu0y9RR4OQgZJJz+ef3XRp2HeAF2yOwIhANlrxqvDclJzMMVKRWkhhlmxmC3cLcsjKLVHI/ThAJWO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28240},"main":"./dist/index.js","type":"module","_from":"file:azphalt-importer-abr-0.1.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"azcamehere","email":"hereliesaz@gmail.com"},"_resolved":"/tmp/8b56812491f248065a10694df436e503/azphalt-importer-abr-0.1.3.tgz","_integrity":"sha512-IyX7OjeJ/wZuC9mUONL5SChSRx6BaBYDDakPQ+Xxrwwh55Yr/rqeKupvnbJl1YQMcBSmxIHV3ugtB0HU1nIa7A==","_npmVersion":"10.9.9","description":"Import Photoshop .abr sampled brushes into .azp asset packages.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fflate":"^0.8.3","@azphalt/azp":"0.3.0","@azphalt/azdk":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1"},"_npmOperationalInternal":{"tmp":"tmp/importer-abr_0.1.3_1785554796342_0.44630842162267337","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@azphalt/importer-abr","version":"0.1.4","author":{"url":"https://hereliesaz.com","name":"Az"},"license":"MIT","_id":"@azphalt/importer-abr@0.1.4","maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"},{"name":"hahapewpew","email":"az@hahapewpew.com"}],"bin":{"azphalt-import-abr":"dist/cli.js"},"dist":{"shasum":"5d95a02e004773da05a90fb9da8480fe5e1d2c43","tarball":"https://registry.npmjs.org/@azphalt/importer-abr/-/importer-abr-0.1.4.tgz","fileCount":17,"integrity":"sha512-0Ljo+ksejw8FB3v0QIKJFIyxaWO8pdnK9ZhUKbJzA7jR5vlVs1LanXpkcz7s2jNsgAVTKsPQzEjA1s93P2cjdg==","signatures":[{"sig":"MEUCIGewUMy4lbkFtkHsM0yLo3l6SgSUuvSm1It2WlCNAevHAiEA/5RuIaGynsqJeSNgt44hIakL2y91OYuq/4JLCL/XEiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28240},"main":"./dist/index.js","type":"module","_from":"file:azphalt-importer-abr-0.1.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"azcamehere","email":"hereliesaz@gmail.com"},"_resolved":"/tmp/bddecd928374b8fdace29b0f6899b458/azphalt-importer-abr-0.1.4.tgz","_integrity":"sha512-0Ljo+ksejw8FB3v0QIKJFIyxaWO8pdnK9ZhUKbJzA7jR5vlVs1LanXpkcz7s2jNsgAVTKsPQzEjA1s93P2cjdg==","_npmVersion":"10.9.9","description":"Import Photoshop .abr sampled brushes into .azp asset packages.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fflate":"^0.8.3","@azphalt/azp":"0.4.0","@azphalt/azdk":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1"},"_npmOperationalInternal":{"tmp":"tmp/importer-abr_0.1.4_1786266680416_0.3115883234915162","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@azphalt/importer-abr","version":"0.1.5","publishConfig":{"access":"public"},"description":"Import Photoshop .abr sampled brushes into .azp asset packages.","license":"MIT","author":{"name":"Az","url":"https://hereliesaz.com"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"azphalt-import-abr":"dist/cli.js"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"dependencies":{"fflate":"^0.8.3","@azphalt/azdk":"0.5.0","@azphalt/azp":"0.5.0"},"devDependencies":{"@types/node":"^22.20.1","typescript":"^5.9.3","vitest":"^3.2.7"},"sideEffects":false,"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit","clean":"rm -rf dist"},"_id":"@azphalt/importer-abr@0.1.5","_integrity":"sha512-aWCChPPkKNrCBVdij4m+pOZ+kh4o3E7iGnryzbHxypsxkqI2jAc4L2HXVfxIMghj/K/bT+QxC5rErLMedMgx0Q==","_resolved":"/tmp/19609f7a2e9988f34c624290d5d19512/azphalt-importer-abr-0.1.5.tgz","_from":"file:azphalt-importer-abr-0.1.5.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.9","dist":{"integrity":"sha512-aWCChPPkKNrCBVdij4m+pOZ+kh4o3E7iGnryzbHxypsxkqI2jAc4L2HXVfxIMghj/K/bT+QxC5rErLMedMgx0Q==","shasum":"2c22d0ccc7639e974e7472143a6ea5c427d58bc2","tarball":"https://registry.npmjs.org/@azphalt/importer-abr/-/importer-abr-0.1.5.tgz","fileCount":17,"unpackedSize":28240,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDrJvP24rD4RKXFVVsMkO9D+RyAV15FXi8i4K2+O9jmHAiASVx1RQt/6eIC66Fs0BT6tdg9qDcyJFrKBpjLBQm4KXg=="}]},"_npmUser":{"name":"azcamehere","email":"hereliesaz@gmail.com"},"directories":{},"maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"},{"name":"hahapewpew","email":"az@hahapewpew.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/importer-abr_0.1.5_1786700447845_0.4555697028316046"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-14T11:32:12.520Z","modified":"2026-08-14T09:40:48.162Z","0.1.0":"2026-07-14T11:32:12.896Z","0.1.1":"2026-07-15T14:31:05.548Z","0.1.2":"2026-07-21T10:10:49.819Z","0.1.3":"2026-08-01T03:26:36.486Z","0.1.4":"2026-08-09T09:11:20.559Z","0.1.5":"2026-08-14T09:40:47.990Z"},"author":{"name":"Az","url":"https://hereliesaz.com"},"license":"MIT","description":"Import Photoshop .abr sampled brushes into .azp asset packages.","maintainers":[{"name":"azcamehere","email":"hereliesaz@gmail.com"},{"name":"hahapewpew","email":"az@hahapewpew.com"}],"readme":"# @azphalt/importer-abr\n\nNormalize a Photoshop `.abr` brush into a `.azp` asset package. Unlike `.cube` (stored verbatim),\n`.abr` is **transcoded**: the sampled brush tip is decoded to a grayscale PNG and its mappable\ndynamics are lifted into the manifest — `spec/package-format.md` requires \"an imported `.abr`\n[to become] `assets/*.png` plus manifest params, not a repackaged `.abr`\". You import the portable\nhalf — shape, grain, mappable parameters — not the stroke engine, so it is a faithful-shape\nimport, not a pixel-match (RATIONALE § 1.3).\n\n## Coverage\n\n- **v1 / v2** sampled brushes — bounds, spacing, raw or PackBits (RLE) bitmap.\n- **v6+** `8BIM` sections — `samp` sampled bitmaps + `desc` dynamics (diameter, spacing, angle,\n  roundness, hardness) from the action descriptor.\n- Computed (procedural) brushes carry no bitmap and are skipped. Any unrecognized version or\n  structure throws `UnsupportedAbrError` — the importer never emits a guess.\n\n**Validation status:** the decoders are covered by tests built from the documented layout with an\nindependent byte writer (so a passing test cross-checks reader against writer, not the parser\nagainst itself), plus the canonical PackBits vector and a PNG decode round-trip. Validating\nagainst a corpus of real Photoshop `.abr` files is the next step before claiming full Photoshop\ncompatibility.\n\n## CLI\n\n~~~sh\npnpm --filter @azphalt/importer-abr build\nazphalt-import-abr dry-ink.abr --id com.hereliesaz.dry-ink -o dry-ink.azp\n# real packaging supplies the brush's own license text:\nazphalt-import-abr dry-ink.abr --id com.hereliesaz.dry-ink --license-file LICENSE.txt\n~~~\n\n## Library\n\n~~~ts\nimport { importAbr, parseAbr } from \"@azphalt/importer-abr\";\n\nconst { azp, manifest, brush } = importAbr(abrBytes, licenseText, { id: \"com.hereliesaz.dry-ink\" });\n~~~\n","readmeFilename":"readme.md"}