{"_id":"@ascii-fx/core","_rev":"8-1b3dc93662aa48762154ea1ee1b3f0d3","name":"@ascii-fx/core","dist-tags":{"latest":"0.8.0"},"versions":{"0.2.0":{"name":"@ascii-fx/core","version":"0.2.0","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.2.0","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"07f5f17387e0475b7cb4a3bb5a7104c6bc5edb7e","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.2.0.tgz","fileCount":31,"integrity":"sha512-+ZVlaw8Fvn3Dta7uyeJH6kqKhJgvOygK5wryLtSNrHbT1nEyM5Tdbf29WEGCdQKea7xGfkGuXHdEWztHUo2bCQ==","signatures":[{"sig":"MEUCICx8lGlQGcgd4pbR0ypMzJreX0up7dVngZV/zz8M56RDAiEAv8ZlUHVafhctPba4mc8qwRjXQrdtkTPHxBEPq7F8C7k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261620},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"amabush","email":"amabush@outlook.com"},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.71","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1787497301485_0.6561658187086874","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ascii-fx/core","version":"0.3.0","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.3.0","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"4ad78086c018d781ec647e72f70da5e7965d58f5","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.3.0.tgz","fileCount":31,"integrity":"sha512-bBQSAOGFS9FG9u1BjHdlhkZHgCnCfbTuPPr5tBfaV6GOXlWyGowLkwAfzoH8KIwtciM61fl5cLTymPR14Yv/Ng==","signatures":[{"sig":"MEYCIQCcCGICnc1bwS8S6Eyv9nbyca0EXw38AjJl7pLf2vWOuQIhAM17jvDUOpmrIPe+O7bMRlGxIclInBBMgCPjtdD/bXgK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":263563},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.71","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1787573218899_0.7506101545060129","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ascii-fx/core","version":"0.3.1","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.3.1","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"869f5538d10b8d11a1a4829276f439f38805ec2f","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.3.1.tgz","fileCount":31,"integrity":"sha512-fU9M7Fi7AMr0okW7dmCGhiwzYhnAWa7afKnexuOWREL0wpA1HT/Lr55PZ63qAn0VEBA9X4lDV41+OHaLsCijiw==","signatures":[{"sig":"MEUCIGSbGm5PDZ13A81RJll2BZO5X4FaD+GrKQpc/TORUWS2AiEAqe/jpjPbwmRPqEwCEhwi51cpnlVHEM+FHa7xXzRLscg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":263765},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.71","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.1_1787588444198_0.8126485389863805","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ascii-fx/core","version":"0.4.0","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.4.0","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"d0fb32fa5ebf9f4f6daf3a18440ea325c75ac9d7","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.4.0.tgz","fileCount":31,"integrity":"sha512-9/Z/d/WL3qAbO+Nm66fD0b/F3KElxmkgoTCRF6u+1zfRGCSi37oMpE2ZrVfuX683P7h83TO6L3Ed88gL+bNllQ==","signatures":[{"sig":"MEQCIDCX0Rt/sjs/T+e86CrzGloUt2xtNfuk5rPyLOVC4IVOAiBWF7sbRCbdhw1FoIcOO0OoiCHl80CkpJI7MnbnHeIwBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":272603},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.72","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.4.0_1787909389949_0.5095458748104982","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@ascii-fx/core","version":"0.5.0","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.5.0","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"9b0a6adac35293dc5b42b9f01ebd769f176d9ea0","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.5.0.tgz","fileCount":31,"integrity":"sha512-UekKSXSTG/yghrkzvK0hPfPl+91dNqJMw4kDOdHKjKyYb3mQ0QASwrU806Tk5R66qqfdgbHCWD7hD9nCzaSEGw==","signatures":[{"sig":"MEUCIQC0N4zn/r9Skm9i5QYt037A5Y7aEtgOj33qn+iK/lk0dgIgEF6vJNrmYZ98v41C3k5rIQhpkKYx6aV1KRZVxX89DUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":276593},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.72","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.0_1788524063930_0.6033215091437134","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ascii-fx/core","version":"0.6.0","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.6.0","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"ac586b0edc8f44f7b8f4ed9e1fbf666d9ff93269","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.6.0.tgz","fileCount":31,"integrity":"sha512-gONJTl8yIiPdxkK11RDpJ8cFHMoxvIcaSJM6/17B/UCmdbMYukSxuxHuuREbDjUkJitR+qbj5qdNN8MhzvNnvg==","signatures":[{"sig":"MEUCIGbqxSoOY+aGjFk5yLXHIjMkh7TCryEuPHt8qtE6oczLAiEA32zqZv+YnP7168bG1JmKNnERP3j0Wh/Y+cmdTcB7YkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":278876},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.72","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.6.0_1788635885479_0.5769787888648832","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@ascii-fx/core","version":"0.7.0","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","_id":"@ascii-fx/core@0.7.0","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"0f20c1807b816b917ad423f08d8837e407caef95","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.7.0.tgz","fileCount":32,"integrity":"sha512-8QThzDyMJnxkqI86rsi6qX9ThgZWNS5GPLe9UcxG9RjoGtubfYoEzV5ZoIvBpiJHu9NxjxGCvqFJb9rzokEYOw==","signatures":[{"sig":"MEUCIQCc2TW+ll3hZCxR7+TnTfZjHV5gbVc+y5EeNyi4YqLqiwIgCOG6Auac1B2WIiZe+9RWetMODDOvc8L6VdhwdYZS+3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDZAnuWkzhoZa4vGsTqcJaiCU4LtDKw6bQh1LaSHNMWBAIgVuotZ1F4Hl3z1oobgLvD+s17SsoakhKWA2NuiWOM+sA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":293518},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.72","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/core_0.7.0_1789086915814_0.06871294854918952","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"_id":"@ascii-fx/core@0.8.0","bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"dist":{"shasum":"a4936743a714beb90635011edac871737f775b86","tarball":"https://registry.npmjs.org/@ascii-fx/core/-/core-0.8.0.tgz","fileCount":33,"integrity":"sha512-WV7xLDKxGZC1nsvf7SOgVZ9fdNEYqu6X3vYoUwlhunsCKgOu2KD4Dw9NuS8bpFrMo81JzlTKZBlKjkffns7QbA==","signatures":[{"sig":"MEUCIHsHjWFopPx7FNRNf4kqMPiAgaBvGItRnNXmPNUnStMCAiEAyIWl9Tzzx6NUuifVCKU0dw3CtzTZThCNcVcKIPB8Yfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC17A80aNNlGBgfGxwpqIBpvXfvWBwRleyBH93Pl1wedQIhALLh9M3P1KqX5WsMEuFMbumaCOSsVFH2lFWIVflhMUFv"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ascii-fx%2fcore@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":306216},"name":"@ascii-fx/core","type":"module","author":"Amir Abushanab (https://github.com/Amir-Abushanab)","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./canvas2d":{"types":"./dist/canvas2d.d.ts","default":"./dist/canvas2d.js"}},"license":"MIT","scripts":{"build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","skill:stale":"intent stale skills","skill:validate":"intent validate skills"},"version":"0.8.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae4e7319-03e5-4ba2-aed7-e4e746fe94ff"}},"homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","directories":{},"maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@webgpu/types":"^0.1.72","@tanstack/intent":"^0.3.6"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.8.0_1789150060400_0.07020334106487258"}}},"time":{"created":"2026-08-23T15:01:41.244Z","modified":"2026-09-11T18:07:40.939Z","0.2.0":"2026-08-23T15:01:41.661Z","0.3.0":"2026-08-24T12:06:59.098Z","0.3.1":"2026-08-24T16:20:44.352Z","0.4.0":"2026-08-28T09:29:50.095Z","0.5.0":"2026-09-04T12:14:24.071Z","0.6.0":"2026-09-05T19:18:05.614Z","0.7.0":"2026-09-11T00:35:15.909Z","0.8.0":"2026-09-11T18:07:40.506Z"},"bugs":{"url":"https://github.com/Amir-Abushanab/ascii-fx/issues"},"author":"Amir Abushanab (https://github.com/Amir-Abushanab)","license":"MIT","homepage":"https://github.com/Amir-Abushanab/ascii-fx#readme","keywords":["ascii","ascii-art","ascii-fx","glyph-atlas","image-to-ascii","renderer","structural-matching","tanstack-intent"],"repository":{"url":"git+https://github.com/Amir-Abushanab/ascii-fx.git","type":"git","directory":"packages/core"},"description":"High-fidelity structural ASCII rendering — core types, exact CPU matcher, profile/frame codecs.","maintainers":[{"name":"amabush","email":"amabush@outlook.com"}],"readme":"# @ascii-fx/core\n\nThe matcher every other `@ascii-fx` package is measured against.\n\nThis is the exact CPU implementation of `structural-v1` and `chromatic-v1` — the algorithms that pick a glyph by **shape** rather than brightness — plus the binary codecs, charsets, and text/ANSI/HTML exports. It has no DOM and no renderer, touches browser APIs only at call time, and is safe to import on a server.\n\n```sh\npnpm add @ascii-fx/core\n```\n\n## Render something\n\n```ts\nimport { loadProfile, renderAscii } from '@ascii-fx/core'\n\nconst profile = await loadProfile('/fonts/default.asciip')\nconst frame = await renderAscii(image, { profile, columns: 120 })\n\nframe.toText() // plain text\nframe.toAnsi() // 24-bit colour for a terminal\nframe.toHTML() // spans, one per run of like-coloured cells\n```\n\nFor a canvas rather than a string, `@ascii-fx/gpu` is the renderer you want — it runs this same algorithm as WebGPU compute and falls back to this package when there's no adapter.\n\n## Why it's the oracle\n\nEvery backend has to agree with this code **bit-for-bit** — same glyph ids, same colours, same flags — and the browser conformance suite exists to prove it. That's only a meaningful contract because the algorithm is exact rather than heuristic: with foreground and background free, the best colours for a given mask are the means of its two sample sets, so the reconstruction error has a closed form and the winning glyph is the true minimum, not the best guess.\n\nThat's also why `matchFrame` never silently swaps in something cheaper. `shape6` and `ramp` exist and are much faster, but they're **explicit opt-ins** branded as effects, never fallbacks:\n\n```ts\nmatchFrame(source, { profile, columns: 120 }) // exact\nmatchFrame(source, { profile, columns: 120, matcher: 'shape6' }) // 3.3× faster, approximate\n```\n\n`shape6` also needs a profile compiled for it — `buildProfile({ font, shape6: { lut: true } })`, or `ascii-fx profile build --shape6-lut`. Asking for it against a plain profile throws rather than quietly falling back to the exact matcher, because a silent fallback would turn a performance opt-in into a no-op you never notice.\n\n## Colour glyphs\n\n`chromatic-v1` is a separate algorithm for glyph sets whose colour is baked in — colour emoji. There's nothing to fit, so it compares a cell's 64 samples against the glyph's own, composited over the backdrop it will be drawn on, and emits `colorMode: 'glyph'` with no colour planes.\n\n```ts\nconst frame = matchFrame(source, { profile, matcher: 'chromatic', background: [11, 11, 15] })\n```\n\n`'glyph'` is an output mode only — passing it to a mask-fitting matcher is an error rather than a silent fallback.\n\n## Also here\n\n- **Codecs** — `encodeProfile`/`decodeProfile` (`.asciip`) and `encodeFrame`/`decodeFrame` (`.asciif`). A frame records the fingerprint of the profile it was built against and refuses to decode against a different one, so a stale `.asciif` fails loudly instead of rendering garbage.\n- **Charsets** — `BUILTIN_CHARSETS`, `resolveCharset`, and `subsetProfile` for narrowing a compiled profile to the glyphs you actually want. The string form is segmented by greedy longest match against the profile's own glyphs, so multi-code-point emoji (VS16, ZWJ sequences) select correctly.\n- **Exports** — `AsciiFrame` renders to plain text, 24-bit ANSI, or HTML.\n- **`@ascii-fx/core/canvas2d`** — a tiny 2D-canvas painter, separate so nothing DOM-shaped is in the main entry.\n\nSide-effect free and ESM-only: importing one export pulls one export. `luma8` alone bundles to **289 bytes** against 37 KB for the whole module.\n\n[`ALGORITHM.md`](../../ALGORITHM.md) is the normative spec — every constant, bit layout, and tie-break.\n\n## License\n\n[MIT](../../LICENSE)\n","readmeFilename":""}