{"_id":"@browser-mc/exif-transplant","_rev":"4-4d287723a50853c92a27509992295b16","name":"@browser-mc/exif-transplant","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"@browser-mc/exif-transplant","version":"0.0.1","_id":"@browser-mc/exif-transplant@0.0.1","maintainers":[{"name":"aqz","email":"tamaina@hotmail.co.jp"}],"dist":{"shasum":"75f221572478671eb2180b5516666cf0484e2ce7","tarball":"https://registry.npmjs.org/@browser-mc/exif-transplant/-/exif-transplant-0.0.1.tgz","fileCount":30,"integrity":"sha512-yhhNXZsqJQjDiGbMT1eNXco3cz8KYQS9PLcY0/+/Qafc4q3xV2UqSlQUrdszkT2usb/bW2daWL+0GA28QGHouQ==","signatures":[{"sig":"MEYCIQD1jKbsoasjzenib03vC5Ui1UBxS7vT10I4d7MUyPY8XwIhAK8oF5ZFM/18TL86aCAHKUlRFqNpwWgd41Bscy0DZpvS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47451},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"pnpm build && node --test test/*.test.mjs && node test/smoke.mjs","build":"tsc -p tsconfig.json","prebuild":"pnpm --filter @browser-mc/media-container build","typecheck":"tsc -p tsconfig.json --noEmit","pretypecheck":"pnpm --filter @browser-mc/media-container build"},"_npmUser":{"name":"aqz","email":"tamaina@hotmail.co.jp"},"directories":{},"_nodeVersion":"24.16.0","dependencies":{"@browser-mc/binary":"^0.0.1","@browser-mc/media-container":"^0.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/exif-transplant_0.0.1_1780810951125_0.7725619153249332","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@browser-mc/exif-transplant","version":"0.0.2","_id":"@browser-mc/exif-transplant@0.0.2","maintainers":[{"name":"aqz","email":"tamaina@hotmail.co.jp"}],"homepage":"https://github.com/tamaina/browser-media-converter#readme","bugs":{"url":"https://github.com/tamaina/browser-media-converter/issues"},"dist":{"shasum":"6547bc144480453f44c219c56d826abf957406de","tarball":"https://registry.npmjs.org/@browser-mc/exif-transplant/-/exif-transplant-0.0.2.tgz","fileCount":30,"integrity":"sha512-JwM/Qfu9qnRhWyVCVcJdKtaB5L3IQXpPtqJHAEuN95CGS1eXquEdZE4HTKs8b2GAGgv7MT9+o5kv2L6IXw1MpQ==","signatures":[{"sig":"MEQCIDW0nvRb5EFNNi2kupy5BC4TeecChijgYJHWWZuvWejwAiBv6sOW+h5gLgt5Pr94U2JSmuMRRqYvbLjW2Zwy/Opb6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@browser-mc%2fexif-transplant@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47679},"main":"./dist/index.js","type":"module","_from":"file:.npm-pack/browser-mc-exif-transplant-0.0.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"pnpm build && pnpm test:package","build":"pnpm --filter @browser-mc/exif-transplant... build:package","typecheck":"pnpm --filter @browser-mc/exif-transplant... typecheck:package","test:package":"node --test test/*.test.mjs && node test/smoke.mjs","build:package":"tsc -p tsconfig.json","typecheck:package":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"aqz","email":"tamaina@hotmail.co.jp"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6407fa9-738b-4bbf-b7cd-7bfa515f03c0"}},"_resolved":"/home/runner/work/browser-media-converter/browser-media-converter/.npm-pack/browser-mc-exif-transplant-0.0.2.tgz","_integrity":"sha512-JwM/Qfu9qnRhWyVCVcJdKtaB5L3IQXpPtqJHAEuN95CGS1eXquEdZE4HTKs8b2GAGgv7MT9+o5kv2L6IXw1MpQ==","repository":{"url":"git+https://github.com/tamaina/browser-media-converter.git","type":"git","directory":"packages/exif-transplant"},"_npmVersion":"11.16.0","description":"Read, remove, restore, and transplant EXIF payloads for browser image conversion workflows.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@browser-mc/binary":"^0.0.1","@browser-mc/media-container":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/exif-transplant_0.0.2_1780824946811_0.21716311272156408","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@browser-mc/exif-transplant","version":"0.0.3","_id":"@browser-mc/exif-transplant@0.0.3","maintainers":[{"name":"aqz","email":"tamaina@hotmail.co.jp"}],"homepage":"https://github.com/tamaina/browser-media-converter#readme","bugs":{"url":"https://github.com/tamaina/browser-media-converter/issues"},"dist":{"shasum":"82e74ce19222a5e193142eb2174dbefccf1aa22d","tarball":"https://registry.npmjs.org/@browser-mc/exif-transplant/-/exif-transplant-0.0.3.tgz","fileCount":30,"integrity":"sha512-V7AGQFcdWBnoOqLE6Y09BYNpfjAArmTU1gPORu1Erw0VLhkYqIKvGpyLjwYkG705OKVBD5zgcBmLwvIX3q0UBQ==","signatures":[{"sig":"MEYCIQCJNPPrwvqpXZ2PS525t7B5V4AGVY+0UJ0IynY6TE5clgIhAJ3/QV/F0HtNwpx8JsUWplVN77HWT/3CsrwxAk/qFtG/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@browser-mc%2fexif-transplant@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":54011},"main":"./dist/index.js","type":"module","_from":"file:.npm-pack/browser-mc-exif-transplant-0.0.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"pnpm build && pnpm test:package","build":"pnpm --filter @browser-mc/exif-transplant... build:package","typecheck":"pnpm --filter @browser-mc/exif-transplant... typecheck:package","test:package":"node --test test/*.test.mjs && node test/smoke.mjs","build:package":"tsc -p tsconfig.json","typecheck:package":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"aqz","email":"tamaina@hotmail.co.jp"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6407fa9-738b-4bbf-b7cd-7bfa515f03c0"}},"_resolved":"/home/runner/work/browser-media-converter/browser-media-converter/.npm-pack/browser-mc-exif-transplant-0.0.3.tgz","_integrity":"sha512-V7AGQFcdWBnoOqLE6Y09BYNpfjAArmTU1gPORu1Erw0VLhkYqIKvGpyLjwYkG705OKVBD5zgcBmLwvIX3q0UBQ==","repository":{"url":"git+https://github.com/tamaina/browser-media-converter.git","type":"git","directory":"packages/exif-transplant"},"_npmVersion":"11.16.0","description":"Read, remove, restore, and transplant EXIF payloads for browser image conversion workflows.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@browser-mc/binary":"^0.0.1","@browser-mc/media-container":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/exif-transplant_0.0.3_1780848082065_0.6487169746810699","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"_id":"@browser-mc/exif-transplant@0.0.4","bugs":{"url":"https://github.com/tamaina/browser-media-converter/issues"},"dist":{"shasum":"3a385bcab578896e40188ff10fda7a2c02524e04","tarball":"https://registry.npmjs.org/@browser-mc/exif-transplant/-/exif-transplant-0.0.4.tgz","integrity":"sha512-mHrzFKvFFXow4d1w3iMIhIRHH/iFLEwl+rln0wbxl6VD6d7V7nj8K6qGnmkmkWv8tEnngGsMXN1uzfULMxmbAA==","fileCount":30,"unpackedSize":55410,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@browser-mc%2fexif-transplant@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDj6V2bDyjwU+xmlaQoV9YzEQsYSVAKw6/5D+e23wnO2AiEAnkEkrkVBuP2G86VgSIVVdjnaK2vNUr1vUHpCUCeMNjQ="}]},"main":"./dist/index.js","name":"@browser-mc/exif-transplant","type":"module","_from":"file:.npm-pack/browser-mc-exif-transplant-0.0.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"pnpm build && pnpm test:package","build":"pnpm --filter @browser-mc/exif-transplant... build:package","typecheck":"pnpm --filter @browser-mc/exif-transplant... typecheck:package","test:package":"node --test test/*.test.mjs && node test/smoke.mjs","build:package":"tsc -p tsconfig.json","typecheck:package":"tsc -p tsconfig.json --noEmit"},"version":"0.0.4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e6407fa9-738b-4bbf-b7cd-7bfa515f03c0"},"approver":{"name":"aqz","email":"tamaina@hotmail.co.jp"}},"homepage":"https://github.com/tamaina/browser-media-converter#readme","_resolved":"/home/runner/work/browser-media-converter/browser-media-converter/.npm-pack/browser-mc-exif-transplant-0.0.4.tgz","_integrity":"sha512-mHrzFKvFFXow4d1w3iMIhIRHH/iFLEwl+rln0wbxl6VD6d7V7nj8K6qGnmkmkWv8tEnngGsMXN1uzfULMxmbAA==","repository":{"url":"git+https://github.com/tamaina/browser-media-converter.git","type":"git","directory":"packages/exif-transplant"},"_npmVersion":"11.16.0","description":"Read, remove, restore, and transplant EXIF payloads for browser image conversion workflows.","directories":{},"maintainers":[{"name":"aqz","email":"tamaina@hotmail.co.jp"}],"_nodeVersion":"22.22.3","dependencies":{"@browser-mc/binary":"^0.0.1","@browser-mc/media-container":"^0.3.1"},"publishConfig":{"access":"public"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/exif-transplant_0.0.4_1780862993853_0.8975126550357759"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-07T05:42:31.012Z","modified":"2026-06-07T20:09:54.264Z","0.0.1":"2026-06-07T05:42:31.264Z","0.0.2":"2026-06-07T09:35:46.898Z","0.0.3":"2026-06-07T16:01:22.138Z","0.0.4":"2026-06-07T20:09:53.968Z"},"bugs":{"url":"https://github.com/tamaina/browser-media-converter/issues"},"homepage":"https://github.com/tamaina/browser-media-converter#readme","repository":{"url":"git+https://github.com/tamaina/browser-media-converter.git","type":"git","directory":"packages/exif-transplant"},"description":"Read, remove, restore, and transplant EXIF payloads for browser image conversion workflows.","maintainers":[{"name":"aqz","email":"tamaina@hotmail.co.jp"}],"readme":"# @browser-mc/exif-transplant\n\nRead, remove, restore, and transplant EXIF payloads for browser image conversion workflows.\n\n## Basic Transplant\n\n```ts\nimport { transplantExif } from '@browser-mc/exif-transplant';\n\nconst source = new Uint8Array(await originalFile.arrayBuffer());\nconst converted = new Uint8Array(await resizedBlob.arrayBuffer());\n\nconst withExif = transplantExif(source, converted);\n```\n\n## Read, Remove, Write\n\n```ts\nimport {\n  readExif,\n  removeExif,\n  writeExif,\n} from '@browser-mc/exif-transplant';\n\nconst exif = readExif(source);\nconst stripped = removeExif(source);\nconst restored = exif ? writeExif(stripped, exif) : stripped;\n```\n\n## Remove GPS Only\n\n```ts\nimport { hasGpsInExif, readExif, removeGpsExif } from '@browser-mc/exif-transplant';\n\nconst withoutGps = removeGpsExif(imageBytes);\nconst exif = readExif(withoutGps);\n\nconsole.log(exif ? hasGpsInExif(exif.bytes) : false);\n```\n\nGPS removal is byte-level and ExifReader-free. It clears the TIFF `GPSInfoIFDPointer`, zeroes the GPS IFD, and zeroes GPS value data referenced from that IFD.\n\n## Format Behavior\n\n- JPEG: read, remove, write, GPS-only remove.\n- WebP: read, remove, write `EXIF` RIFF chunks, GPS-only remove.\n- AVIF: reads item-addressed `Exif` metadata and rewrites AVIF through `@browser-mc/media-container`'s minimal AVIF muxer. Nonessential original AVIF boxes/properties are not preserved.\n\nThe smoke test covers JPEG EXIF read/remove/restore against `fujioka.jpg` and AVIF/WebP rewrite paths when local generated inputs are available.\n\n## Commands\n\n```sh\npnpm --filter @browser-mc/exif-transplant build\npnpm --filter @browser-mc/exif-transplant typecheck\npnpm --filter @browser-mc/exif-transplant test\n```\n","readmeFilename":"README.md"}