{"_id":"node-exiftool","_rev":"288246","name":"node-exiftool","description":"A Node.js interface to exiftool command-line application.","dist-tags":{"latest":"2.3.0"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"time":{"modified":"2021-06-03T18:43:39.000Z","created":"2016-05-15T23:27:05.658Z","2.3.0":"2017-09-06T16:25:15.065Z","2.2.0":"2017-05-31T22:56:52.809Z","2.1.6":"2017-05-28T00:01:27.849Z","2.1.5":"2017-05-20T15:11:00.358Z","2.1.3":"2017-05-17T20:32:08.074Z","2.1.2":"2017-05-14T00:01:45.857Z","2.1.1":"2016-12-25T15:07:34.001Z","2.1.0":"2016-11-27T19:05:50.768Z","2.0.3":"2016-11-26T02:02:02.603Z","2.0.1":"2016-11-20T07:52:57.548Z","2.0.0":"2016-08-23T19:35:41.199Z","1.0.4":"2016-08-20T19:09:26.100Z","1.0.3":"2016-08-07T15:32:37.049Z","1.0.2":"2016-06-04T22:21:16.350Z","1.0.1":"2016-05-16T19:36:50.044Z","1.0.0":"2016-05-15T23:27:05.658Z"},"users":{"zvr":true,"constantinc":true,"temasm":true,"alexpearly":true},"author":{"name":"Anton","email":"anton@sobesednik.media"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"versions":{"2.3.0":{"name":"node-exiftool","version":"2.3.0","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run","callback-example":"LOCAL=1 node examples/callback examples/28.jpg","write-example":"node examples/write_metadata/index"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton","email":"anton@sobesednik.media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"5.0.0","exiftool-context":"1.4.0","makepromise":"1.0.0","ps-node":"0.1.6","zoroaster":"0.4.6"},"dependencies":{"is-stream":"1.1.0","restream":"1.2.0","wrote":"0.6.1"},"gitHead":"e4a8fb7c129de38d7a87f02a471ec17577af4f15","_id":"node-exiftool@2.3.0","_shasum":"d5142d34de6f1683b4655198b648e7e3ee6e80ac","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"d5142d34de6f1683b4655198b648e7e3ee6e80ac","size":13579,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.3.0.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node-exiftool-2.3.0.tgz_1504715113876_0.4453703931067139"},"directories":{},"publish_time":1504715115065,"_cnpm_publish_time":1504715115065,"_hasShrinkwrap":false},"2.2.0":{"name":"node-exiftool","version":"2.2.0","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run","callback-example":"LOCAL=1 node examples/callback examples/28.jpg","write-example":"node examples/write_metadata/index"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton","email":"anton@sobesednik.media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"5.0.0","exiftool-context":"1.1.1","makepromise":"1.0.0","zoroaster":"0.4.6"},"dependencies":{"restream":"1.2.0","wrote":"0.4.0"},"gitHead":"d0da2924c3831bccf535fbfade4ce9eb0cc3ede5","_id":"node-exiftool@2.2.0","_shasum":"dc7e0e2b4c6a1fa4a5099b463f54ea2ca65ac19c","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"dc7e0e2b4c6a1fa4a5099b463f54ea2ca65ac19c","size":11639,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.2.0.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node-exiftool-2.2.0.tgz_1496271411714_0.904858430614695"},"directories":{},"publish_time":1496271412809,"_hasShrinkwrap":false,"_cnpm_publish_time":1496271412809},"2.1.6":{"name":"node-exiftool","version":"2.1.6","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run","callback-example":"LOCAL=1 node examples/callback examples/28.jpg","write-example":"node examples/write_metadata/index"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"3.1.3","exiftool-context":"1.1.1","zoroaster":"0.4.4"},"dependencies":{"restream":"1.0.1"},"gitHead":"9214f21ea48c803ad744e480f26ed9e67567d07e","_id":"node-exiftool@2.1.6","_shasum":"6e60f4510ad63e0d4eb17425e4f73b089a750072","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"6e60f4510ad63e0d4eb17425e4f73b089a750072","size":10885,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.1.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.1.6.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node-exiftool-2.1.6.tgz_1495929686810_0.7585156220011413"},"directories":{},"publish_time":1495929687849,"_hasShrinkwrap":false,"_cnpm_publish_time":1495929687849},"2.1.5":{"name":"node-exiftool","version":"2.1.5","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run","callback-example":"LOCAL=1 node examples/callback examples/28.jpg","write-example":"node examples/write_metadata/index"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"3.1.3","dist-exiftool":"10.53.0","zoroaster":"0.4.3"},"dependencies":{"restream":"1.0.1"},"gitHead":"b71a10b29b6c316f61458373f9de871535a501fc","_id":"node-exiftool@2.1.5","_shasum":"7359508455a0e39f03bc2116c7753757ee70bed6","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"7359508455a0e39f03bc2116c7753757ee70bed6","size":10784,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.1.5.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node-exiftool-2.1.5.tgz_1495293059313_0.7167829351965338"},"directories":{},"publish_time":1495293060358,"_hasShrinkwrap":false,"_cnpm_publish_time":1495293060358},"2.1.3":{"name":"node-exiftool","version":"2.1.3","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run","callback-example":"LOCAL=1 node examples/callback examples/28.jpg","write-example":"node examples/write_metadata/index"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"3.1.3","dist-exiftool":"10.53.0","zoroaster":"0.4.3"},"dependencies":{},"gitHead":"83f5ae8a94aa7f141d75de67cd3f877c0deee6de","_id":"node-exiftool@2.1.3","_shasum":"cbca4eb2ff586ca9a28b1f1b9f235bd5742c366b","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"cbca4eb2ff586ca9a28b1f1b9f235bd5742c366b","size":10859,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.1.3.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/node-exiftool-2.1.3.tgz_1495053126588_0.8093126467429101"},"directories":{},"publish_time":1495053128074,"_cnpm_publish_time":1495053128074,"_hasShrinkwrap":false},"2.1.2":{"name":"node-exiftool","version":"2.1.2","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run","callback-example":"LOCAL=1 node examples/callback examples/28.jpg","write-example":"node examples/write_metadata/index"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"3.1.3","dist-exiftool":"10.33.0","zoroaster":"0.4.3"},"dependencies":{},"gitHead":"b0d46392d6e638ddfbe9295963b21a314f18acec","_id":"node-exiftool@2.1.2","_shasum":"6c9459a4edc9351cd1db0410f9b75edaccc17f1d","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"6c9459a4edc9351cd1db0410f9b75edaccc17f1d","size":10844,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.1.2.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/node-exiftool-2.1.2.tgz_1494720104001_0.5691866842098534"},"directories":{},"publish_time":1494720105857,"_cnpm_publish_time":1494720105857,"_hasShrinkwrap":false},"2.1.1":{"name":"node-exiftool","version":"2.1.1","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"cross-env ZOROASTER_TIMEOUT=10000 zoroaster test/spec","test-watch":"zoroaster test/spec --watch","bench":"node benchmark/run"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"cross-env":"3.1.3","dist-exiftool":"10.33.0","zoroaster":"0.2.0"},"gitHead":"6d19759e50b63c92735dd78f26043c1f34c11fc0","_id":"node-exiftool@2.1.1","_shasum":"51ff9cd35e98bf7f2e9a05151f2091de6610fb6f","_from":".","_npmVersion":"3.10.10","_nodeVersion":"7.3.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"51ff9cd35e98bf7f2e9a05151f2091de6610fb6f","size":8610,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.1.1.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/node-exiftool-2.1.1.tgz_1482678453267_0.6730803439859301"},"directories":{},"publish_time":1482678454001,"_cnpm_publish_time":1482678454001,"_hasShrinkwrap":false},"2.1.0":{"name":"node-exiftool","version":"2.1.0","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","files":["src/"],"scripts":{"test":"zoroaster test/spec","test-watch":"zoroaster test/spec --watch"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"dist-exiftool":"10.33.0","zoroaster":"^0.1.3"},"dependencies":{"stream-snitch":"0.0.3"},"gitHead":"d670f6a972f47bb2436ac6da209c0ca1663be769","_id":"node-exiftool@2.1.0","_shasum":"4671bb8d455efde1fad654bb8277d081658f89e7","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"4671bb8d455efde1fad654bb8277d081658f89e7","size":7093,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.1.0.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/node-exiftool-2.1.0.tgz_1480273548684_0.7741342359222472"},"directories":{},"publish_time":1480273550768,"_cnpm_publish_time":1480273550768,"_hasShrinkwrap":false},"2.0.3":{"name":"node-exiftool","version":"2.0.3","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","scripts":{"test":"zoroaster test/spec","test-watch":"zoroaster test/spec --watch"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"dist-exiftool":"10.25.0","zoroaster":"^0.1.3"},"dependencies":{"stream-snitch":"0.0.3"},"gitHead":"94d5895845ad7f21650b3ca77a8f97978edf502d","_id":"node-exiftool@2.0.3","_shasum":"4a6ade1ce71ad28768f03e752778ec4766c242b7","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"4a6ade1ce71ad28768f03e752778ec4766c242b7","size":227651,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.0.3.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/node-exiftool-2.0.3.tgz_1480125720156_0.7719710101373494"},"directories":{},"publish_time":1480125722603,"_cnpm_publish_time":1480125722603,"_hasShrinkwrap":false},"2.0.1":{"name":"node-exiftool","version":"2.0.1","description":"A Node.js interface to exiftool command-line application.","main":"src/index.js","scripts":{"coverage":"istanbul cover _mocha test/spec -r test/require","test":"mocha test/spec -r test/require"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","dist-exiftool":"10.25.0","istanbul":"0.4.3","mocha":"2.4.5"},"dependencies":{"stream-snitch":"0.0.3"},"gitHead":"8bb3694ce7df9afbe5e65cf534723a4297e0cb53","_id":"node-exiftool@2.0.1","_shasum":"7847485fe7cb4252998fb8920cdbeb753f776920","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"7847485fe7cb4252998fb8920cdbeb753f776920","size":226895,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.0.1.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/node-exiftool-2.0.1.tgz_1479628376915_0.7295929978135973"},"directories":{},"publish_time":1479628377548,"_cnpm_publish_time":1479628377548,"_hasShrinkwrap":false},"2.0.0":{"name":"node-exiftool","version":"2.0.0","description":"A Node.js interface to exiftool command-line application.","main":"index.js","scripts":{"coverage":"istanbul cover _mocha test","test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","dist-exiftool":"10.25.0","istanbul":"0.4.3","mocha":"2.4.5"},"gitHead":"1bbd25b42487cbee554e96596c2eb950e4a3eff4","_id":"node-exiftool@2.0.0","_shasum":"ba0c0c522d15f706390df2146ded9b66840a86ea","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"ba0c0c522d15f706390df2146ded9b66840a86ea","size":226793,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-2.0.0.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/node-exiftool-2.0.0.tgz_1471980938732_0.3672029229346663"},"directories":{},"publish_time":1471980941199,"_cnpm_publish_time":1471980941199,"_hasShrinkwrap":false},"1.0.4":{"name":"node-exiftool","version":"1.0.4","description":"A Node.js interface to exiftool command-line application.","main":"index.js","scripts":{"coverage":"istanbul cover _mocha test","test":"mocha test","download_exiftool":"curl -L https://downloads.sourceforge.net/project/exiftool/Image-ExifTool-10.25.tar.gz | tar xz -C vendor"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","istanbul":"0.4.3","mocha":"2.4.5"},"gitHead":"ab07fccc6ec39fff8e262c7dc04e058cb9c15a49","_id":"node-exiftool@1.0.4","_shasum":"a0e609dcc58e15dac43460af01c65c4e12b52893","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"a0e609dcc58e15dac43460af01c65c4e12b52893","size":4463204,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-1.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-1.0.4.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/node-exiftool-1.0.4.tgz_1471720162249_0.8400725987739861"},"directories":{},"publish_time":1471720166100,"_cnpm_publish_time":1471720166100,"deprecated":"node-exiftool@2 does no longer come with exiftool executable. Please update and use dist-exiftool if required.","_hasShrinkwrap":false},"1.0.3":{"name":"node-exiftool","version":"1.0.3","description":"A Node.js interface to exiftool command-line application.","main":"index.js","scripts":{"coverage":"istanbul cover _mocha test","test":"mocha test","download_exiftool":"curl -L https://downloads.sourceforge.net/project/exiftool/Image-ExifTool-10.25.tar.gz | tar xz -C vendor"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","istanbul":"0.4.3","mocha":"2.4.5"},"gitHead":"96e6380ae77da6ee6501bb413ab0127b2cb4af9b","_id":"node-exiftool@1.0.3","_shasum":"1f5275f89faf61552cb582c8827f3295b7940b72","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"1f5275f89faf61552cb582c8827f3295b7940b72","size":4463175,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-1.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-1.0.3.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/node-exiftool-1.0.3.tgz_1470583954901_0.23543739272281528"},"directories":{},"publish_time":1470583957049,"_cnpm_publish_time":1470583957049,"deprecated":"node-exiftool@2 does no longer come with exiftool executable. Please update and use dist-exiftool if required.","_hasShrinkwrap":false},"1.0.2":{"name":"node-exiftool","version":"1.0.2","description":"A Node.js interface to exiftool command-line application.","main":"index.js","scripts":{"coverage":"istanbul cover _mocha test","test":"mocha test","download_exiftool":"curl -L https://downloads.sourceforge.net/project/exiftool/Image-ExifTool-10.19.tar.gz | tar xz -C vendor"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","istanbul":"0.4.3","mocha":"2.4.5"},"gitHead":"8cb23f13397936f82df33360c974b289f95c4b19","_id":"node-exiftool@1.0.2","_shasum":"6ce52bbb76a518f2c65f6c6d67dc6de6af74e316","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"6ce52bbb76a518f2c65f6c6d67dc6de6af74e316","size":4437713,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-1.0.2.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/node-exiftool-1.0.2.tgz_1465078873910_0.8640874866396189"},"directories":{},"publish_time":1465078876350,"_cnpm_publish_time":1465078876350,"deprecated":"node-exiftool@2 does no longer come with exiftool executable. Please update and use dist-exiftool if required.","_hasShrinkwrap":false},"1.0.1":{"name":"node-exiftool","version":"1.0.1","description":"A Node.js interface to exiftool command-line application.","main":"index.js","scripts":{"coverage":"istanbul cover _mocha test","test":"mocha test","preinstall":"curl -L https://downloads.sourceforge.net/project/exiftool/Image-ExifTool-10.16.tar.gz | tar xz -C vendor"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","istanbul":"0.4.3","mocha":"2.4.5"},"gitHead":"92bfe90568b84104227e1d32365738e085af08fd","_id":"node-exiftool@1.0.1","_shasum":"62befa3753807634975437e1c5514a1ac7a7b0a1","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"62befa3753807634975437e1c5514a1ac7a7b0a1","size":226167,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-1.0.1.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/node-exiftool-1.0.1.tgz_1463427407867_0.7673232010565698"},"directories":{},"publish_time":1463427410044,"_cnpm_publish_time":1463427410044,"deprecated":"node-exiftool@2 does no longer come with exiftool executable. Please update and use dist-exiftool if required.","_hasShrinkwrap":false},"1.0.0":{"name":"node-exiftool","version":"1.0.0","description":"A Node.js interface to exiftool command-line application.","main":"index.js","scripts":{"coverage":"istanbul cover _mocha test","test":"mocha test","preinstall":"curl -L https://downloads.sourceforge.net/project/exiftool/Image-ExifTool-10.16.tar.gz | tar xz -C vendor"},"repository":{"type":"git","url":"git+https://github.com/Sobesednik/node-exiftool.git"},"keywords":["metadata","exiftool","IPTC","XMP"],"author":{"name":"Anton @ Sobesednik.Media"},"license":"MIT","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","devDependencies":{"chai":"3.5.0","chai-as-promised":"5.3.0","istanbul":"0.4.3","mocha":"2.4.5"},"gitHead":"d6e604e93bdcc5250b32cc205389d258e289623b","_id":"node-exiftool@1.0.0","_shasum":"34cebf9d227c7c2a459a45507b29b6f1f3520ce5","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"zvr","email":"anton@sobesednik.media"},"dist":{"shasum":"34cebf9d227c7c2a459a45507b29b6f1f3520ce5","size":225988,"noattachment":false,"key":"/node-exiftool/-/node-exiftool-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/node-exiftool/download/node-exiftool-1.0.0.tgz"},"maintainers":[{"name":"zvr","email":"anton@sobesednik.media"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/node-exiftool-1.0.0.tgz_1463354823695_0.17146849655546248"},"directories":{},"publish_time":1463354825658,"_cnpm_publish_time":1463354825658,"deprecated":"node-exiftool@2 does no longer come with exiftool executable. Please update and use dist-exiftool if required.","_hasShrinkwrap":false}},"readme":"# node-exiftool\n\nA Node.js interface to the *exiftool* command-line application.\n\n[![npm version](https://badge.fury.io/js/node-exiftool.svg)](https://badge.fury.io/js/node-exiftool)\n[![Build Status](https://travis-ci.org/Sobesednik/node-exiftool.svg?branch=master)](https://travis-ci.org/Sobesednik/node-exiftool)\n[![Build status](https://ci.appveyor.com/api/projects/status/97p9ur4loqrmfog6/branch/master?svg=true)](https://ci.appveyor.com/project/zavr-1/node-exiftool/branch/master)\n\n[Exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/) is an amazing tool\nwritten by Phil Harvey in Perl which can read and write metadata to a number of\nfile formats. It is very powerful and allows to do such things as extracting\norientation from JPEG files uploaded to your server by users to rotate generated\npreviews accordingly, as well as appending copyright information to photos using\n[IPTC standard](https://iptc.org/standards/photo-metadata/iptc-standard/).\n\n> _exiftool_ is not distributed with _node-exiftool_. The module will try to\n> spawn `exiftool`, therefore you must install it manually. You can also use\n> [dist-exiftool](https://www.npmjs.com/package/dist-exiftool) package which\n> will install _exiftool_ distribution appropriate for your platform. See below\n> for details about how to use `node-exiftool` with `dist-exiftool`.\n\n## Usage\n\nThe module spawns an exiftool process with `-stay_open True -@ -` arguments, so\nthat there is no overhead related to starting a new process to read every file\nor directory. The package creates a process asynchronously and listens for\nstdout and stderr `data` events and uses promises thus avoiding blocking the\nNode's event loop.\n\n### Require\n\nBy default, the executable is hard-coded to be just `exiftool`. You must have it\nyou path for this method to work.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n```\n\n### Custom Executable\n\nIt is possible to specify a custom executable.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess('/usr/local/exiftool')\n```\n\n### dist-exiftool\n\nOr you can install `dist-exiftool`, which allows to install `exiftool` from\n_npm_.\n\n```bash\nnpm i --save dist-exiftool\n```\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst exiftoolBin = require('dist-exiftool')\nconst ep = new exiftool.ExiftoolProcess(exiftoolBin)\n```\n\n### Opening and Closing\n\nAfter creating an instance of `ExiftoolProcess`, it must be opened. When\nfinished working with it, it should be closed, when `-stay_open False` will be\nwritten to its _stdin_ to exit the process.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  // read and write metadata operations\n  .then(() => ep.close())\n  .then(() => console.log('Closed exiftool'))\n  .catch(console.error)\n```\n\n#### Passing Options\n\n`exiftool` will be open with `child_process.spawn`, and you can specify options\nobject which will passed to the `spawn` method.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst options = {\n  detached: true,\n  env: Object.assign({}, process.env, {\n    ENVIRONMENT_VARIABLE: 1,\n  }),\n}\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open(options)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\nSince passing options is available, a check will be made to make sure that\n`stderr` and `stdout` streams are readable, and `stdin` is writable. Therefore,\nyou cannot pass `{ stdio: 'ignore' }` as an option.\n\n### Reading Metadata\n\nYou are required to open the *exiftool* process first, after which you will be able to\nread and write metadata.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  // display pid\n  .then((pid) => console.log('Started exiftool process %s', pid))\n  .then(() => ep.readMetadata('photo.jpg', ['-File:all']))\n  .then(console.log, console.error)\n  .then(() => ep.readMetadata('photo2.jpg', ['-File:all']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .then(() => console.log('Closed exiftool'))\n  .catch(console.error)\n```\n\n```javascript\nStarted exiftool process 29671\n{ data:\n   [ { SourceFile: 'image.jpg',\n       ExifToolVersion: 10.4,\n       XMPToolkit: 'Image::ExifTool 10.40',\n       CreatorWorkURL: 'https://sobesednik.media',\n       Scene: '011200',\n       Creator: 'Photographer Name',\n       Author: 'Author',\n       ImageSize: '500x333',\n       Megapixels: 0.167 } ],\n  error: null }\n{ data:\n   [ { SourceFile: 'image2.jpg',\n       ExifToolVersion: 10.4,\n       Orientation: 'Rotate 90 CW',\n       XResolution: 72,\n       YResolution: 72,\n       ResolutionUnit: 'inches',\n       YCbCrPositioning: 'Centered',\n       XMPToolkit: 'Image::ExifTool 10.40',\n       CreatorWorkURL: 'https://sobesednik.media',\n       Scene: '011200',\n       Creator: 'Photographer Name',\n       Author: 'Author',\n       ImageSize: '500x334',\n       Megapixels: 0.167 } ],\n  error: null }\nClosed exiftool\n```\n\n### Reading Metadata from a Readable Stream\n\nYou can read metadata from a stream the same way you read a file metadata.\n`node-exiftool` will create a temporary file and pipe your `Readable` into it,\nthen pass the path to `exiftool`. After the result is received from `exiftool`,\nthe  temp file will be removed.\n\n```javascript\nconst exiftoolBin = require('dist-exiftool')\nconst exiftool =  require('exiftool')\nconst fs = require('fs')\nconst path = require('path')\n\nconst ep = new exiftool.ExiftoolProcess(exiftoolBin)\n\nconst PHOTO_PATH = path.join(__dirname, 'photo.jpg')\nconst rs = fs.createReadStream(PHOTO_PATH)\n\nep.open()\n    .then(() => ep.readMetadata(rs, ['-File:all']))\n    .then((res) => {\n        console.log(res)\n    })\n    .then(() => ep.close(), () => ep.close())\n    .catch(console.error)\n```\n\n```fs\n{ data:\n   [ { SourceFile: '/var/folders/s0/truth-covered-in-security/T/wrote-44788.data',\n       ExifToolVersion: 10.53,\n       XResolution: 72,\n       YResolution: 72,\n       ResolutionUnit: 'inches',\n       YCbCrPositioning: 'Centered',\n       Copyright: 'sobesednik.media 2017',\n       XMPToolkit: 'Image::ExifTool 10.40',\n       Author: 'Author <author@sobes.io>',\n       ImageSize: '362x250',\n       Megapixels: 0.09 } ],\n  error: null }\n```\n\n### Writing Metadata\n\nYou can write metadata with `node-exiftool`. The API is:\n`ep.writeMetadata(file:string, data:object, args:array)`,\nwhere `file` is a path to the file, `data` is metadata to add, e.g.,\n\n```javascript\nconst data = {\n  all: '',\n  comment: 'Exiftool rules!', // has to come after `all` in order not to be removed\n  'Keywords+': [ 'keywordA', 'keywordB' ],\n}\n```\n\nand `args` is an array of any other arguments you wish to pass, e.g,. `['overwrite_original']`.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  .then(() => ep.writeMetadata('destination.jpg', {\n    all: '', // remove existing tags\n    comment: 'Exiftool rules!',\n    'Keywords+': [ 'keywordA', 'keywordB' ],\n  }, ['overwrite_original']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\n```javascript\n{ data: null, error: '1 image files updated' }\n```\n\n### Reading Directory\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  // read directory\n  .then(() => ep.readMetadata('DIR', ['-File:all']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\n```javascript\n{\n  data: [\n    { SourceFile: 'DIR/IMG_9859.JPG',\n       ExifToolVersion: 10.4,\n       Orientation: 'Rotate 90 CW',\n       XResolution: 72,\n       YResolution: 72,\n       ResolutionUnit: 'inches',\n       YCbCrPositioning: 'Centered',\n       XMPToolkit: 'Image::ExifTool 10.40',\n       CreatorWorkURL: 'https://sobesednik.media',\n       Scene: '011200',\n       Creator: 'Photographer Name',\n       Author: 'Author',\n       ImageSize: '500x334',\n       Megapixels: 0.167 },\n     { SourceFile: 'DIR/IMG_9860.JPG',\n       ExifToolVersion: 10.4,\n       XMPToolkit: 'Image::ExifTool 10.40',\n       CreatorWorkURL: 'https://sobesednik.media',\n       Scene: '011200',\n       Creator: 'Photographer Name',\n       Author: 'Author',\n       ImageSize: '500x334',\n       Megapixels: 0.167 }\n  ],\n  error: '1 directories scanned\\n    2 image files read'\n}\n```\n\n### Reading Non-existent File\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  // try to read file which does not exist\n  .then(() => ep.readMetadata('filenotfound.jpg'))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\n```javascript\n{\n  data: null,\n  error: 'File not found: filenotfound.jpg'\n}\n```\n\n### Custom Arguments\n\nYou can pass arguments which you wish to use in the *exiftool* command call. They will\nbe automatically prepended with the `-` sign so you don't have to do it manually.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  // include only some tags\n  .then(() => ep.readMetadata('photo.jpg', ['Creator', 'CreatorWorkURL', 'Orientation']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\n```javascript\n{\n  data: [\n    {\n      SourceFile: 'photo.jpg',\n      Creator: 'Photographer Name',\n      CreatorWorkURL: 'https://sobesednik.media',\n      Orientation: 'Rotate 90 CW'\n    }\n  ],\n  error: null\n}\n```\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  // exclude some tags and groups of tags\n  .then(() => ep.readMetadata('image.jpg', ['-ExifToolVersion', '-File:all']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n\n```\n\n```javascript\n{\n  data: [\n    {\n      SourceFile: 'photo.jpg',\n      Orientation: 'Rotate 90 CW',\n      XResolution: 72,\n      YResolution: 72,\n      ResolutionUnit: 'inches',\n      YCbCrPositioning: 'Centered',\n      XMPToolkit: 'Image::ExifTool 10.11',\n      CreatorWorkURL: 'https://sobesednik.media',\n      Scene: '011200',\n      Creator: 'Photographer Name',\n      ImageSize: '500x334',\n      Megapixels: 0.167\n    }\n  ],\n  error: null\n}\n```\n\n\n### Reading HTML\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  .then(() => ep.readMetadata('url.html', ['-File:all']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\n```javascript\n{ data:\n   [ { SourceFile: 'url.html',\n       ExifToolVersion: 10.4,\n       Title: 'Some web page',\n       Keywords: 'fire, in, your, eyes, etc.',\n       Description: 'Programming: Official sponsor of Open Source since ever.' } ],\n  error: null }\n```\n\n`html`:\n\n```html\n<!DOCTYPE html>\n\n<html>\n    <head>\n        <title>Some web page</title>\n        <meta name=\"keywords\" content=\"fire, in, your, eyes, etc.\">\n        <meta name=\"description\" content=\"Programming: Official sponsor of Open Source since ever.\">\n    </head>\n    <body>\n        <p>Hello world</p>\n    </body>\n</html>\n```\n\n### Events\n\nYou can also listen for `OPEN` and `EXIT` events. For example, if the exiftool process\ncrashed, you might want to restart it.\n\n```javascript\nconst exiftool = require('node-exiftool')\nconst cp = require('child_process')\n\nfunction killProcess(name) {\n  return new Promise((resolve, reject) => {\n    cp.exec(`pkill -f ${name}`, (err, stdout, stderr) => {\n      if(err) return reject(err)\n      return resolve({ stdout, stderr })\n    })\n  })\n}\n\nfunction openAndKill(_ep) {\n  return _ep\n    .open()\n    .then(() => killProcess('exiftool'))\n    .catch(console.error)\n}\n\nconst ep = new exiftool.ExiftoolProcess()\n\nep.on(exiftool.events.OPEN, (pid) => {\n  console.log('Started exiftool process %s', pid)\n})\n\nep.on(exiftool.events.EXIT, () => {\n  console.log('exiftool process exited')\n  return new Promise(r => setTimeout(r, 200))\n    .then(() => openAndKill(ep))\n})\n\nopenAndKill(ep)\n```\n\n```\nStarted exiftool process 28566\nexiftool process exited\nStarted exiftool process 28569\nexiftool process exited\n...\n```\n\n### Stream Encoding\n\nBy default, `setEncoding('utf8')` will be called on `stdout` and `stderr`\nstreams, and `stdin` will be written with `utf8` encoding (this is Node's\ndefault on a Mac at least). If you wish to use system's default encoding, pass\n`null` when opening the process. If you want to set some other encoding, specify\nit as a string.\n[Node's supported encodings](https://github.com/nodejs/node/blob/master/lib/net.js#L789).\n\n```js\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nPromise.resolve()\n  .then(() =>\n    // streams' encoding is utf8, next stdin write with utf8\n    ep.open('utf8').then(() => ep.close())\n  )\n  .then(() =>\n    // encoding will explicitly be not set\n    ep.open(null).then(() => ep.close())\n  )\n  .then(() =>\n    // encoding will be set to default utf8\n    ep.open().then(() => ep.close())\n  )\n  .catch(console.error)\n```\n\n### Writing Tags for Adobe in UTF8\n\nSome metadata must be written in `utf8` encoding, for example to be recognized\nby Adobe products. However, IPTC fields are encoded in _Latin1_, so you need to\nexplicitly pass `codedcharacterset=utf8` argument. For example,\n`Caption-Abstract` is an\n[IPTC tag](http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html), so\nto write it in _utf8_, do the following:\n\n```js\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nconst metadata = {\n    all: '', // remove all metadata at first\n    Title: 'åäö',\n    LocalCaption: 'local caption',\n    'Caption-Abstract': 'Câptïön \\u00C3bstráct: åäö',\n    Copyright: '2017 ©',\n    'Keywords+': [ 'këywôrd \\u00C3…', 'keywórdB ©˙µå≥' ],\n    Creator: 'Mr Author',\n    Rating: 5,\n}\n\nconst file = 'file.jpg'\n\nep\n  .open()\n  // use codedcharacterset\n  .then(() => ep.writeMetadata(file, metadata, ['codedcharacterset=utf8']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\n### Using Detached Mode on Windows\n\nYou can spawn exiftool with `{ detached: true }` option if you need to manually\nhandle its exit independent of your application. On Linux, the new process\nwill be made a leader of its process group, and will not quit with the Node\napp. On Windows, the process will not quit either, however, there will be two\n`exiftool` processes: one returned by the `child_process.spawn` method, and\na second one, started by `exiftool.exe` itself. There is also going to appear\n`conhost.exe`, if the parent node application is not attached to a terminal.\n\n```powershell\nwmic process where \"caption='node.exe' or caption='exiftool.exe' or caption='conhost.exe'\" get caption,processid,parentprocessid\n```\n\n```powershell\nCaption       ParentProcessId  ProcessId\nnode.exe      3464             5752\nexiftool.exe  5752             6096\nexiftool.exe  6096             4588\nconhost.exe   4588             4016\n```\n\nBecause Windows will throw an error when trying to kill a process group by\npassing `-pid` to `process.kill`, you should find the second exiftool process by\nits parent pid (returned with `ep.open()`), and kill it manually, e.g., with\n`cp.exec('taskkill /F /T /PID ${pid}')`. Check the\n[`detached-true` test](test/spec/detached-true.js) for more insight.\n\n### Reading utf8 Encoded Filename on Windows\n\nIf you're on Windows and your active page is different from `utf8`, you should\npass `charset filename=utf8` when trying to read a file. It shouldn't be a\nproblem on a Mac.\n\nAn error you can see is: `File not found: Fọto.jpg` or whatever filename you\nhave. To fix it, set filename charset to `utf8`.\n\n```js\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  .then(() => ep.readMetadata('phôtò.jpg', ['charset filename=utf8']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\nTo print code page number on Windows, do\n\n```js\nconst child_process = require('child_process')\nfunction printCHCP() {\n  return new Promise((resolve, reject) => {\n    child_process.exec('chcp', (err, stdout, stderr) => {\n      if (err) return reject(err)\n      resolve({ stdout, stderr })\n    })\n  })\n}\nprintCHCP().then(console.log, console.error)\n```\n\nExample output: `Active code page: 437`. `utf8`'s number is `65001` (on win)\n\n- [Special characters don't display properly in my Windows console](http://www.sno.phy.queensu.ca/~phil/exiftool/faq.html#Q18)\n- [Passing filenames with Unicode characters to ExifTool](http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=6721.0)\n\n### How Does It Work\n\nFor example, when trying to write metadata:\n\n```js\nconst exiftool = require('node-exiftool')\nconst ep = new exiftool.ExiftoolProcess()\n\nep\n  .open()\n  .then(() => ep.writeMetadata('destination.jpg', {\n    all: '', // remove existing tags\n    comment: 'Exiftool example',\n    'Keywords+': [ 'keywordA', 'keywordB' ],\n  }, ['overwrite_original']))\n  .then(console.log, console.error)\n  .then(() => ep.close())\n  .catch(console.error)\n```\n\nInternally, the following command will be sent to exiftool's `stdin` when it's open:\n\n```\n-all=\n-comment=Exiftool example\n-Keywords+=keywordA\n-Keywords+=keywordB\n-overwrite_original\n-json\n-s\ndestination.jpg\n-echo1\n{begin529963}\n-echo2\n{begin529963}\n-echo4\n{ready529963}\n-execute529963\n```\n\nAnd the write promise will be resolved when the process writes\n\n```\n{begin669103}\n{ready669103}\n```\n\nto `stdout`, and\n\n```\n{begin513858}\n    1 image files updated\n{ready513858}\n```\n\nto `stderr`. There's a regex transform stream which is available for reading\nwhen it sees a block like `{begin<N>}...some data...{ready<N>}`. Once both\n`stderr` and `stdout` data have been received, the promise returned by\n`writeMetadata` function will be resolved.\n\n## Benchmark\n\nTo start the benchmark, execute `npm run bench`. It will scan all files\nin the `benchmark/photos` directory, and if none was found, will work on test\nfixtures. Here are some of our results:\n\n```\n> node benchmark/run\n\n/node-exiftool/benchmark/photos/IMG_3051.JPG: 168ms\n/node-exiftool/benchmark/photos/IMG_3052.JPG: 166ms\n/node-exiftool/benchmark/photos/IMG_3053.JPG: 168ms\n/node-exiftool/benchmark/photos/IMG_3054.JPG: 166ms\n/node-exiftool/benchmark/photos/IMG_3055.JPG: 165ms\n/node-exiftool/benchmark/photos/IMG_3056.JPG: 158ms\n/node-exiftool/benchmark/photos/IMG_3057.JPG: 158ms\n/node-exiftool/benchmark/photos/IMG_3058.JPG: 162ms\n/node-exiftool/benchmark/photos/IMG_3059.JPG: 158ms\n/node-exiftool/benchmark/photos/IMG_3060.JPG: 158ms\n/node-exiftool/benchmark/photos/IMG_3061.JPG: 157ms\n/node-exiftool/benchmark/photos/IMG_3051.JPG: 65ms\n/node-exiftool/benchmark/photos/IMG_3052.JPG: 20ms\n/node-exiftool/benchmark/photos/IMG_3053.JPG: 22ms\n/node-exiftool/benchmark/photos/IMG_3054.JPG: 23ms\n/node-exiftool/benchmark/photos/IMG_3055.JPG: 22ms\n/node-exiftool/benchmark/photos/IMG_3056.JPG: 22ms\n/node-exiftool/benchmark/photos/IMG_3057.JPG: 22ms\n/node-exiftool/benchmark/photos/IMG_3058.JPG: 22ms\n/node-exiftool/benchmark/photos/IMG_3059.JPG: 20ms\n/node-exiftool/benchmark/photos/IMG_3060.JPG: 21ms\n/node-exiftool/benchmark/photos/IMG_3061.JPG: 20ms\n\nExiftool\nRead 11 files\nTotal time: 1784ms\nAverage time: 162.18ms\n\nExiftool Open\nRead 11 files\nTotal time: 378ms\nAverage time: 34.36ms\n\nExiftool Open was faster by 471%\n```\n\n## Testing\n\nWe're using [`exiftool-context`](https://www.npmjs.com/package/exiftool-context)\nto test with [`zoroaster`](https://www.npmjs.com/package/zoroaster).\n\nMake sure to do the following in tests, when testing current version:\n\n```js\nconst context = require('exiftool-context')\nconst exiftool = require('../../src/')\n\ncontext.globalExiftoolConstructor = exiftool.ExiftoolProcess\n```\n\nOtherwise, the context will use a stable version which it installs\nindependently.\n\n## Metadata\n\nMetadata is awesome and although it can increase the file size, it preserves\ncopyright and allows to find out additional information and the author of an\nimage/movie. Let's all use metadata.\n\n## Resources\n[Exiftool Documentation](http://www.sno.phy.queensu.ca/~phil/exiftool/exiftool_pod.html)\n","_attachments":{},"homepage":"https://github.com/Sobesednik/node-exiftool#readme","bugs":{"url":"https://github.com/Sobesednik/node-exiftool/issues"},"license":"MIT"}