{"_id":"@damagethundercat/ima2-gen","_rev":"6-66bedf15643ff31c8e3a091f9e146c61","name":"@damagethundercat/ima2-gen","dist-tags":{"latest":"1.3.0"},"versions":{"1.2.0":{"name":"@damagethundercat/ima2-gen","version":"1.2.0","keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"license":"MIT","_id":"@damagethundercat/ima2-gen@1.2.0","maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"homepage":"https://github.com/damagethundercat/ima2-gen#readme","bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"bin":{"ima2x":"bin/ima2.js"},"dist":{"shasum":"8244b7b0e61e6161a6221f8733a15190d3753aa8","tarball":"https://registry.npmjs.org/@damagethundercat/ima2-gen/-/ima2-gen-1.2.0.tgz","fileCount":283,"integrity":"sha512-Mll0w7mUb65DWz01LsiOrVc8rA+kNiJJcuG7cnOXw1MaRxBnUV4qcgp0R1qt89DGXIZZvMjAqW0Q66LhUx0GNw==","signatures":[{"sig":"MEUCIQDVajUelT4xF2geD2OIJ7UYHNKUrdAjSPoPYvdlFTOZHQIgN1nA4LeP+IeMNCdAfsfFiKBBhL6L/rQ9ef7+NCNR68s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2548071},"type":"module","engines":{"node":">=20"},"gitHead":"178a5b197d3da0b2346ab491344d668993ff318f","scripts":{"dev":"node scripts/dev.mjs","test":"node scripts/run-tests.mjs","build":"npm run ui:build","setup":"node bin/ima2.js setup","start":"node bin/ima2.js serve","ui:dev":"cd ui && npm run dev","prepack":"npm run ui:build && npm run build:server && npm run build:cli","lint:pkg":"node -e \"const p=require('./package.json'); const req=['name','version','bin']; for(const k of req){if(!p[k])throw new Error('missing '+k)} const mustInclude=['bin/','lib/','routes/','skills/','integrations/comfyui/ima2_gen_bridge/__init__.py','integrations/comfyui/ima2_gen_bridge/nodes.py','integrations/comfyui/ima2_gen_bridge/README.md','assets/card-news/templates/','server.js']; for(const f of mustInclude){if(!p.files.includes(f))throw new Error('files[] must include '+f)}\"","ui:build":"cd ui && npm run build","build:cli":"tsc -p tsconfig.bin.json && node scripts/fix-shebangs.mjs","typecheck":"tsc --noEmit -p tsconfig.json","dev:server":"tsx watch server.ts","ui:install":"cd ui && npm install","build:server":"tsc -p tsconfig.build.json","release:major":"npm version major && npm publish --access public && git push origin main --tags","release:minor":"npm version minor && npm publish --access public && git push origin main --tags","release:patch":"npm version patch && npm publish --access public && git push origin main --tags","prepublishOnly":"npm run typecheck && npm run typecheck:tests && npm run test:inventory && npm run ui:build && npm run build:server && npm run build:cli && npm run lint:pkg && npm run test:package-install","test:inventory":"node scripts/classify-tests.mjs --check --fail-js-runtime","typecheck:tests":"tsc --noEmit -p tsconfig.tests.json","test:package-install":"node --test tests/package-install-smoke.mjs"},"_npmUser":{"name":"ikidkekwi","email":"eric0730@naver.com"},"repository":{"url":"git+https://github.com/damagethundercat/ima2-gen.git","type":"git"},"_npmVersion":"11.11.0","description":"Local OAuth image generation studio with classic and node workflows","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ulid":"^3.0.2","sharp":"^0.34.5","trash":"^10.1.1","dotenv":"^17.4.2","openai":"^5.8.2","express":"^5.1.0","openai-oauth":"^1.0.2","better-sqlite3":"^12.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^22.19.17","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/ima2-gen_1.2.0_1778699600773_0.19999308286028694","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@damagethundercat/ima2-gen","version":"1.2.1","keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"license":"MIT","_id":"@damagethundercat/ima2-gen@1.2.1","maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"homepage":"https://github.com/damagethundercat/ima2-gen#readme","bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"bin":{"ima2x":"bin/ima2.js"},"dist":{"shasum":"b73e394fed26ea70e3a7bc9295ac380d2380884c","tarball":"https://registry.npmjs.org/@damagethundercat/ima2-gen/-/ima2-gen-1.2.1.tgz","fileCount":283,"integrity":"sha512-Y0EUZyB4mrxGqI87i2m/f3Q1uA8ko40CgMvIexv7R5T0uy2zipchbQ9BZchuLdPmdyI0UJxWo0AlPQn8AL75xA==","signatures":[{"sig":"MEQCICP3j+REWhSNikR5yPPzAb+sfvsC2Dx1obi0U80Q2fJSAiA/IFRpG+xEaAHPtJe05snhw3sgGksAuqc0Tmaht2o/lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2554511},"type":"module","engines":{"node":">=20"},"gitHead":"195395800083246c4bcae1ae8b4f3cd4b4e945e4","scripts":{"dev":"node scripts/dev.mjs","test":"node scripts/run-tests.mjs","build":"npm run ui:build","setup":"node bin/ima2.js setup","start":"node bin/ima2.js serve","ui:dev":"cd ui && npm run dev","prepack":"npm run ui:build && npm run build:server && npm run build:cli","lint:pkg":"node -e \"const p=require('./package.json'); const req=['name','version','bin']; for(const k of req){if(!p[k])throw new Error('missing '+k)} const mustInclude=['bin/','lib/','routes/','skills/','integrations/comfyui/ima2_gen_bridge/__init__.py','integrations/comfyui/ima2_gen_bridge/nodes.py','integrations/comfyui/ima2_gen_bridge/README.md','assets/card-news/templates/','server.js']; for(const f of mustInclude){if(!p.files.includes(f))throw new Error('files[] must include '+f)}\"","ui:build":"cd ui && npm run build","build:cli":"tsc -p tsconfig.bin.json && node scripts/fix-shebangs.mjs","typecheck":"tsc --noEmit -p tsconfig.json","dev:server":"tsx watch server.ts","ui:install":"cd ui && npm install","build:server":"tsc -p tsconfig.build.json","release:major":"npm version major && npm publish --access public && git push origin main --tags","release:minor":"npm version minor && npm publish --access public && git push origin main --tags","release:patch":"npm version patch && npm publish --access public && git push origin main --tags","prepublishOnly":"npm run typecheck && npm run typecheck:tests && npm run test:inventory && npm run ui:build && npm run build:server && npm run build:cli && npm run lint:pkg && npm run test:package-install","test:inventory":"node scripts/classify-tests.mjs --check --fail-js-runtime","typecheck:tests":"tsc --noEmit -p tsconfig.tests.json","test:package-install":"node --test tests/package-install-smoke.mjs"},"_npmUser":{"name":"ikidkekwi","email":"eric0730@naver.com"},"repository":{"url":"git+https://github.com/damagethundercat/ima2-gen.git","type":"git"},"_npmVersion":"11.11.0","description":"Local OAuth image generation studio with classic and node workflows","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ulid":"^3.0.2","sharp":"^0.34.5","trash":"^10.1.1","dotenv":"^17.4.2","openai":"^5.8.2","express":"^5.1.0","openai-oauth":"^1.0.2","better-sqlite3":"^12.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^22.19.17","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/ima2-gen_1.2.1_1778760726074_0.04831311662591253","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@damagethundercat/ima2-gen","version":"1.2.2","keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"license":"MIT","_id":"@damagethundercat/ima2-gen@1.2.2","maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"homepage":"https://github.com/damagethundercat/ima2-gen#readme","bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"bin":{"ima2x":"bin/ima2.js"},"dist":{"shasum":"642d6cb6ddc78d0d567614e8f1e30660021835b4","tarball":"https://registry.npmjs.org/@damagethundercat/ima2-gen/-/ima2-gen-1.2.2.tgz","fileCount":283,"integrity":"sha512-CJaLs+ifbXwvbc7eKtZi2PkcKXKzU+8unqdIZm0VMM1B2wtEjFpYQsA+KiRHUBWhBupfRPlFRrvMeQu4ZAw+6g==","signatures":[{"sig":"MEYCIQCboAJMknnyAz48b6Zp8Bw1r0vfzie/74m9dsi26uF8bgIhAO4cMFvyS56w2LpyCOBM0mpFsM7OGeRlzHAt7biYz0GE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2557866},"type":"module","engines":{"node":">=20"},"gitHead":"79f0eb1257142c430edc3f9b82efe9c85165a4e0","scripts":{"dev":"node scripts/dev.mjs","test":"node scripts/run-tests.mjs","build":"npm run ui:build","setup":"node bin/ima2.js setup","start":"node bin/ima2.js serve","ui:dev":"cd ui && npm run dev","prepack":"npm run ui:build && npm run build:server && npm run build:cli","lint:pkg":"node -e \"const p=require('./package.json'); const req=['name','version','bin']; for(const k of req){if(!p[k])throw new Error('missing '+k)} const mustInclude=['bin/','lib/','routes/','skills/','integrations/comfyui/ima2_gen_bridge/__init__.py','integrations/comfyui/ima2_gen_bridge/nodes.py','integrations/comfyui/ima2_gen_bridge/README.md','assets/card-news/templates/','server.js']; for(const f of mustInclude){if(!p.files.includes(f))throw new Error('files[] must include '+f)}\"","ui:build":"cd ui && npm run build","build:cli":"tsc -p tsconfig.bin.json && node scripts/fix-shebangs.mjs","typecheck":"tsc --noEmit -p tsconfig.json","dev:server":"tsx watch server.ts","ui:install":"cd ui && npm install","build:server":"tsc -p tsconfig.build.json","release:major":"npm version major && npm publish --access public && git push origin main --tags","release:minor":"npm version minor && npm publish --access public && git push origin main --tags","release:patch":"npm version patch && npm publish --access public && git push origin main --tags","prepublishOnly":"npm run typecheck && npm run typecheck:tests && npm run test:inventory && npm run ui:build && npm run build:server && npm run build:cli && npm run lint:pkg && npm run test:package-install","test:inventory":"node scripts/classify-tests.mjs --check --fail-js-runtime","typecheck:tests":"tsc --noEmit -p tsconfig.tests.json","test:package-install":"node --test tests/package-install-smoke.mjs"},"_npmUser":{"name":"ikidkekwi","email":"eric0730@naver.com"},"repository":{"url":"git+https://github.com/damagethundercat/ima2-gen.git","type":"git"},"_npmVersion":"11.11.0","description":"Local OAuth image generation studio with classic and node workflows","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ulid":"^3.0.2","sharp":"^0.34.5","trash":"^10.1.1","dotenv":"^17.4.2","openai":"^5.8.2","express":"^5.1.0","openai-oauth":"^1.0.2","better-sqlite3":"^12.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^22.19.17","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/ima2-gen_1.2.2_1778763261115_0.16131542332727378","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@damagethundercat/ima2-gen","version":"1.2.3","keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"license":"MIT","_id":"@damagethundercat/ima2-gen@1.2.3","maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"homepage":"https://github.com/damagethundercat/ima2-gen#readme","bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"bin":{"ima2x":"bin/ima2.js"},"dist":{"shasum":"c3e40ddb4a5150fb0a3b36a23604b77e4a12197b","tarball":"https://registry.npmjs.org/@damagethundercat/ima2-gen/-/ima2-gen-1.2.3.tgz","fileCount":284,"integrity":"sha512-QJcPcBR5eVJHak6tYhHaX9b/DAKSoTp+DRbCGLUhneqgq2Tk9TU0oKmLU8ubQHHe1lqPtyWYVGWHoB11twBomw==","signatures":[{"sig":"MEUCIDQ0KUcB5zShaRHiM2tWYBXo0s8U3gTBLTG1LWHYDvMgAiEAsjDEk7t8YXhIZkC9kr8EvuSR4JZKuyMMvKPQIcQFXOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2551859},"type":"module","engines":{"node":">=20"},"gitHead":"6d9ce59f755c3b54f756f0190d25db7ebed06e0b","scripts":{"dev":"node scripts/dev.mjs","test":"node scripts/run-tests.mjs","build":"npm run ui:build","setup":"node bin/ima2.js setup","start":"node bin/ima2.js serve","ui:dev":"cd ui && npm run dev","prepack":"npm run ui:build && npm run build:server && npm run build:cli","lint:pkg":"node -e \"const p=require('./package.json'); const req=['name','version','bin']; for(const k of req){if(!p[k])throw new Error('missing '+k)} const mustInclude=['bin/','lib/','routes/','skills/','integrations/comfyui/ima2_gen_bridge/__init__.py','integrations/comfyui/ima2_gen_bridge/nodes.py','integrations/comfyui/ima2_gen_bridge/README.md','assets/card-news/templates/','server.js']; for(const f of mustInclude){if(!p.files.includes(f))throw new Error('files[] must include '+f)}\"","ui:build":"cd ui && npm run build","build:cli":"tsc -p tsconfig.bin.json && node scripts/fix-shebangs.mjs","typecheck":"tsc --noEmit -p tsconfig.json","dev:server":"tsx watch server.ts","ui:install":"cd ui && npm install","build:server":"tsc -p tsconfig.build.json","release:major":"npm version major && npm publish --access public && git push origin main --tags","release:minor":"npm version minor && npm publish --access public && git push origin main --tags","release:patch":"npm version patch && npm publish --access public && git push origin main --tags","prepublishOnly":"npm run typecheck && npm run typecheck:tests && npm run test:inventory && npm run ui:build && npm run build:server && npm run build:cli && npm run lint:pkg && npm run test:package-install","test:inventory":"node scripts/classify-tests.mjs --check --fail-js-runtime","typecheck:tests":"tsc --noEmit -p tsconfig.tests.json","test:package-install":"node --test tests/package-install-smoke.mjs"},"_npmUser":{"name":"ikidkekwi","email":"eric0730@naver.com"},"repository":{"url":"git+https://github.com/damagethundercat/ima2-gen.git","type":"git"},"_npmVersion":"11.11.0","description":"ima2-genX: local OAuth image generation studio with prompt-builder workflows","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ulid":"^3.0.2","sharp":"^0.34.5","trash":"^10.1.1","dotenv":"^17.4.2","openai":"^5.8.2","express":"^5.1.0","openai-oauth":"^1.0.2","better-sqlite3":"^12.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^22.19.17","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/ima2-gen_1.2.3_1778769799943_0.1902995384399231","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@damagethundercat/ima2-gen","version":"1.2.4","keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"license":"MIT","_id":"@damagethundercat/ima2-gen@1.2.4","maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"homepage":"https://github.com/damagethundercat/ima2-gen#readme","bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"bin":{"ima2x":"bin/ima2.js"},"dist":{"shasum":"fe979818ee4469ef79405ccc84f8b753b7e2dfa8","tarball":"https://registry.npmjs.org/@damagethundercat/ima2-gen/-/ima2-gen-1.2.4.tgz","fileCount":284,"integrity":"sha512-StFNV0E7MvPjzOA6w2m3fRAy9Lt5XwceCEJMPvr9HMpaaZq8cINc6RwkpXiHgSIMUxV7ibAE9WUPrGqW1NcTEQ==","signatures":[{"sig":"MEUCIQCQfmTck5c3T2XdRWUJwHwLJ9cXKz6UdimcyrxalcK/QgIgMpFnoC54yxKxZFew7qYQWppHj3vG4x4yul0qfhl21b0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2551304},"type":"module","engines":{"node":">=20"},"gitHead":"c4a3966ee0b3cd2962ad8a6651c2882c5074e7c2","scripts":{"dev":"node scripts/dev.mjs","test":"node scripts/run-tests.mjs","build":"npm run ui:build","setup":"node bin/ima2.js setup","start":"node bin/ima2.js serve","ui:dev":"cd ui && npm run dev","prepack":"npm run ui:build && npm run build:server && npm run build:cli","lint:pkg":"node -e \"const p=require('./package.json'); const req=['name','version','bin']; for(const k of req){if(!p[k])throw new Error('missing '+k)} const mustInclude=['bin/','lib/','routes/','skills/','integrations/comfyui/ima2_gen_bridge/__init__.py','integrations/comfyui/ima2_gen_bridge/nodes.py','integrations/comfyui/ima2_gen_bridge/README.md','assets/card-news/templates/','server.js']; for(const f of mustInclude){if(!p.files.includes(f))throw new Error('files[] must include '+f)}\"","ui:build":"cd ui && npm run build","build:cli":"tsc -p tsconfig.bin.json && node scripts/fix-shebangs.mjs","typecheck":"tsc --noEmit -p tsconfig.json","dev:server":"tsx watch server.ts","ui:install":"cd ui && npm install","build:server":"tsc -p tsconfig.build.json","release:major":"npm version major && npm publish --access public && git push origin main --tags","release:minor":"npm version minor && npm publish --access public && git push origin main --tags","release:patch":"npm version patch && npm publish --access public && git push origin main --tags","prepublishOnly":"npm run typecheck && npm run typecheck:tests && npm run test:inventory && npm run ui:build && npm run build:server && npm run build:cli && npm run lint:pkg && npm run test:package-install","test:inventory":"node scripts/classify-tests.mjs --check --fail-js-runtime","typecheck:tests":"tsc --noEmit -p tsconfig.tests.json","test:package-install":"node --test tests/package-install-smoke.mjs"},"_npmUser":{"name":"ikidkekwi","email":"eric0730@naver.com"},"repository":{"url":"git+https://github.com/damagethundercat/ima2-gen.git","type":"git"},"_npmVersion":"11.11.0","description":"ima2-genX: local OAuth image generation studio with prompt-builder workflows","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ulid":"^3.0.2","sharp":"^0.34.5","trash":"^10.1.1","dotenv":"^17.4.2","openai":"^5.8.2","express":"^5.1.0","openai-oauth":"^1.0.2","better-sqlite3":"^12.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^22.19.17","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/ima2-gen_1.2.4_1778774464107_0.36635559600809375","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@damagethundercat/ima2-gen","version":"1.3.0","description":"ima2-genX: local OAuth image generation studio with prompt-builder workflows","type":"module","bin":{"ima2x":"bin/ima2.js"},"scripts":{"start":"node bin/ima2.js serve","dev":"node scripts/dev.mjs","dev:server":"tsx watch server.ts","ui:install":"cd ui && npm install","ui:dev":"cd ui && npm run dev","ui:build":"cd ui && npm run build","build":"npm run ui:build","test":"node scripts/run-tests.mjs","test:package-install":"node --test tests/package-install-smoke.mjs","test:inventory":"node scripts/classify-tests.mjs --check --fail-js-runtime","setup":"node bin/ima2.js setup","prepack":"npm run ui:build && npm run build:server && npm run build:cli","prepublishOnly":"npm run typecheck && npm run typecheck:tests && npm run test:inventory && npm run ui:build && npm run build:server && npm run build:cli && npm run lint:pkg && npm run test:package-install","lint:pkg":"node -e \"const p=require('./package.json'); const req=['name','version','bin']; for(const k of req){if(!p[k])throw new Error('missing '+k)} const mustInclude=['bin/','lib/','routes/','skills/','integrations/comfyui/ima2_gen_bridge/__init__.py','integrations/comfyui/ima2_gen_bridge/nodes.py','integrations/comfyui/ima2_gen_bridge/README.md','assets/card-news/templates/','server.js']; for(const f of mustInclude){if(!p.files.includes(f))throw new Error('files[] must include '+f)}\"","release:patch":"npm version patch && npm publish --access public && git push origin main --tags","release:minor":"npm version minor && npm publish --access public && git push origin main --tags","release:major":"npm version major && npm publish --access public && git push origin main --tags","typecheck":"tsc --noEmit -p tsconfig.json","typecheck:tests":"tsc --noEmit -p tsconfig.tests.json","build:server":"tsc -p tsconfig.build.json","build:cli":"tsc -p tsconfig.bin.json && node scripts/fix-shebangs.mjs"},"keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/damagethundercat/ima2-gen.git"},"publishConfig":{"access":"public"},"engines":{"node":">=20"},"dependencies":{"better-sqlite3":"^12.9.0","dotenv":"^17.4.2","express":"^5.1.0","openai":"^5.8.2","openai-oauth":"^1.0.2","progrok":"file:vendor/progrok-0.2.0.tgz","sharp":"^0.34.5","trash":"^10.1.1","ulid":"^3.0.2"},"bundleDependencies":["progrok"],"devDependencies":{"@types/better-sqlite3":"^7.6.13","@types/express":"^5.0.6","@types/node":"^22.19.17","tsx":"^4.21.0","typescript":"^5.9.3"},"gitHead":"1d86f58b8d67b76e3848d240460e639e93b767db","_id":"@damagethundercat/ima2-gen@1.3.0","bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"homepage":"https://github.com/damagethundercat/ima2-gen#readme","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-EACRMRJ8Ak0gXopCanb3eKJdPe451pUZUBFZPFvLvJTTd6xeTw2Oet1n0JSIUwScW8MWEXg78TWstFRnTvgwzQ==","shasum":"95fbc2e121d8f51c3c3fd2b55cab9251b49fc86c","tarball":"https://registry.npmjs.org/@damagethundercat/ima2-gen/-/ima2-gen-1.3.0.tgz","fileCount":996,"unpackedSize":5415568,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID9oRwwifWcRS4+lhNJpnrjwT4GExai5O0aRy0RUJep5AiAOn57wtTXE96OlOvv0Xwyc8R3agR20+/oMLu+/TmkPGg=="}]},"_npmUser":{"name":"ikidkekwi","email":"eric0730@naver.com"},"directories":{},"maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ima2-gen_1.3.0_1784922996326_0.19594478432182205"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-13T19:13:20.718Z","modified":"2026-07-24T19:56:36.719Z","1.2.0":"2026-05-13T19:13:20.981Z","1.2.1":"2026-05-14T12:12:06.286Z","1.2.2":"2026-05-14T12:54:21.325Z","1.2.3":"2026-05-14T14:43:20.187Z","1.2.4":"2026-05-14T16:01:04.306Z","1.3.0":"2026-07-24T19:56:36.553Z"},"bugs":{"url":"https://github.com/damagethundercat/ima2-gen/issues"},"license":"MIT","homepage":"https://github.com/damagethundercat/ima2-gen#readme","keywords":["openai","gpt-image-2","image-generation","oauth","cli"],"repository":{"type":"git","url":"git+https://github.com/damagethundercat/ima2-gen.git"},"description":"ima2-genX: local OAuth image generation studio with prompt-builder workflows","maintainers":[{"name":"ikidkekwi","email":"eric0730@naver.com"}],"readme":"# ima2-genX\n\n<p align=\"center\">\n  <img src=\"assets/logo.png\" alt=\"ima2-genX logo\" width=\"240\">\n</p>\n\n[![npm version](https://img.shields.io/npm/v/%40damagethundercat%2Fima2-gen)](https://www.npmjs.com/package/%40damagethundercat%2Fima2-gen)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n<p align=\"center\">\n  <a href=\"assets/screenshots/tutorial1-readme.mp4\">\n    <img src=\"assets/screenshots/tutorial1-readme.gif\" alt=\"ima2-genX 43-second tutorial walkthrough\">\n  </a>\n  <br>\n  <a href=\"assets/screenshots/tutorial1-readme.mp4\"><strong>Watch the 43-second tutorial walkthrough</strong></a>\n</p>\n\n`ima2-genX` is a local image generation studio for people who want a faster, more controllable ChatGPT/Codex image workflow in a desktop-like web app.\n\n> **Fork note**\n> `ima2-genX` is a respectful continuation and heavily modified fork of [`lidge-jun/ima2-gen`](https://github.com/lidge-jun/ima2-gen). It inherits the local OAuth image-generation foundation, but the product surface, prompt workflow, gallery behavior, multimode flow, Node mode, provider handling, CLI coverage, packaging path, and ongoing Canvas Mode work have changed substantially.\n>\n> The product name is `ima2-genX`. The npm package remains `@damagethundercat/ima2-gen` and the CLI command remains `ima2x` for install continuity and to avoid overwriting the upstream `ima2` command. The app also keeps the default `~/.ima2` data/config folder and default local ports for compatibility. Running the upstream server and this fork at the same time is not recommended because their server/OAuth ports and local runtime advertisement file can collide.\n\nRun it with `npx`, sign in with Codex OAuth, start from a rough prompt, refine it with the built-in Prompt Builder, and keep iterating through history, references, node branches, multimode batches, and the evolving Canvas Mode cleanup tools. No OpenAI API key is required for the default path, but API-key generation is also supported when configured.\n\n![ima2-genX classic dark-mode generation screen with prompt composer, generated image, history, and result controls.](assets/screenshots/classic-darkmode.png)\n\n## Quick Start\n\n```bash\nnpx @damagethundercat/ima2-gen serve\n```\n\nThe web UI opens automatically when the server is ready. If you are running in\na headless terminal or want to open it manually, use `--no-open` and visit the\nprinted URL.\n\nIf Codex is not logged in yet:\n\n```bash\nnpx @openai/codex login\nnpx @damagethundercat/ima2-gen serve\n```\n\nIf `3333` is already occupied, `ima2-genX` binds the next available port and writes the actual URL to `~/.ima2/server.json`. Use `ima2x open` or the URL printed in the terminal instead of assuming the port.\n\nYou can also install it globally:\n\n```bash\nnpm install -g @damagethundercat/ima2-gen\nima2x serve\n```\n\nBefore updating a global install on Windows, stop any running `ima2x serve`\nprocess. If npm reports `EBUSY` or `resource busy or locked`, close ima2x\nterminals, end stale `node.exe` processes if needed, and retry. If the lock\npersists, reboot and run the update before starting ima2x again.\n\n## What It Does\n\n- **Prompt Builder first**: turn rough ideas into stronger prompts in the right-side builder, keep image-scoped builder sessions, and carry context across follow-up generations.\n- **ima2-genX UI**: large bottom prompt composer, grouped multimode history, improved image viewer controls, refreshed Node-mode side panels, and compact mobile flows.\n- **Classic mode**: generate, edit, reuse the current image, paste references, and continue from history.\n- **Node mode**: branch a good image into multiple directions without losing the original.\n- **Multimode batches**: launch several Classic outputs from one prompt, watch slot-by-slot progress, and continue from the best result.\n- **Canvas Mode, in progress**: current builds include zoom, pan, annotation, eraser, background cleanup, and export tools, but this area is still being actively improved and may change across upcoming releases.\n- **Local gallery**: keep generated assets on your machine with session-aware history. By default the gallery shows the current session and an All Images toggle reveals the full history; the default scope is sticky across sessions.\n- **Reference images**: drag, drop, paste, and attach up to 5 references; large images are compressed before upload.\n- **Prompt library and imports**: search reusable prompt material, import local prompt packs, GitHub folders, and curated GPT-image prompt hints into the built-in prompt library.\n- **Observable jobs**: active and recent jobs are tracked with safe logs and request IDs.\n\n## What Changed From Upstream\n\n`ima2-genX` keeps the spirit of the original local OAuth image-generation tool while moving the fork in a more workflow-oriented direction:\n\n- The main generation loop now centers on a bottom composer plus a right-side Prompt Builder, not only a single prompt box.\n- History, multimode, prompt-library import, and active-job tracking were expanded so repeated iteration is easier to inspect.\n- Node mode has been expanded for branching and comparison. Canvas Mode is included, but its cleanup, annotation, export, and follow-up-reference workflow is still being refined.\n- API-key generation is available as a configured provider path alongside the default Codex OAuth path.\n- The public command is `ima2x`, and the npm package stays under `@damagethundercat/ima2-gen` so existing installs can update cleanly.\n\n## Provider Paths\n\nImage generation can run through the local Codex/ChatGPT OAuth path, a configured OpenAI API key, or xAI Grok Imagine OAuth.\n\n- `provider: \"oauth\"` uses the local Codex OAuth proxy.\n- `provider: \"api\"` calls the OpenAI Responses API with the hosted `image_generation` tool.\n- `provider: \"grok\"` uses the bundled `progrok` OAuth proxy and xAI Images API (direct text-to-image and image edit only; no web-search/planner pipeline in this release).\n- API-key generation supports classic generate, edit, mask-guided edit, multimode, and node generation for OpenAI providers only.\n\nIf no provider is specified, the app keeps the current OAuth/default behavior. API-key generation defaults to `gpt-5.4-mini`, `low` reasoning, and `1024x1024` unless the request passes validated model, reasoning, size, or web-search options.\n\n### Grok Imagine (xAI OAuth)\n\nGrok credentials are managed by the bundled `progrok` CLI (`ima2x grok login`), not by Grok Build or `~/.grok/auth.json`. `ima2x serve` auto-starts the bundled Grok proxy on `127.0.0.1:18645` by default; set `IMA2_NO_GROK_PROXY=1` to disable auto-start (tests/CI). Grok login is optional — if you are not logged in, OpenAI OAuth/API paths and the server keep working.\n\nOAuth login does **not** bypass xAI account entitlement, subscription, or quota limits. Upstream auth, rate-limit, and refusal errors still apply.\n\n```bash\nima2x grok login          # xAI OAuth via bundled progrok (--manual-paste default)\nima2x grok status\nima2x serve               # auto-starts bundled Grok proxy unless IMA2_NO_GROK_PROXY=1\n```\n\nClassic generate/edit with `--provider grok` supports up to 3 reference images and does not support mask editing. Multimode, node mode, and Card News do not use the Grok provider.\n\n![Settings workspace showing OAuth active and API key provider available.](assets/screenshots/settings-oauth-generation.png)\n\n## Model Guidance\n\nThe app defaults to **`gpt-5.4-mini`** for fast local iteration. Switch to **`gpt-5.4`** when you want the safest balanced image workflow.\n\n- `gpt-5.4` — recommended balanced choice.\n- `gpt-5.4-mini` — current default and faster draft model.\n- `gpt-5.5` — strongest quality option when your Codex CLI/OAuth backend supports it. It may use more quota, expose different tool capabilities, or require updating Codex CLI before it works reliably.\n\nThe app also exposes quality (`low`, `medium`, `high`) and moderation (`auto`, `low`) controls.\n\n## Workflows\n\n### Prompt Builder To Image\n\nUse the Prompt Builder when you have an idea but want a cleaner generation prompt before spending a request.\n\n1. Write a rough idea in the composer.\n2. Use the Prompt Builder to clarify subject, composition, style, constraints, and follow-up intent.\n3. Attach references or reuse the current image when the next step should preserve visual continuity.\n4. Generate one image, or enable multimode to fan out several candidate slots from the same refined prompt.\n5. Continue from the strongest result, branch it in Node mode, or try the current Canvas Mode cleanup tools.\n\n![Multimode workflow showing the Prompt Builder, candidate slots, active job history, and follow-up controls.](assets/screenshots/multimode.png)\n\n### Classic Mode\n\nUse Classic when you want one strong result quickly, with or without the builder. You can generate, edit, paste references, reuse the current image, and continue from any item in local history.\n\n### Node Mode\n\nUse Node mode when you want to explore branches.\n\n![Node mode graph with branching generated cards, node metadata, and side-panel controls.](assets/screenshots/node-graph.png)\n\nEach node keeps its own prompt and result. Root nodes can attach local references; child nodes use the parent image as their source. Completed jobs are matched back to nodes by request ID, so reloads and graph version conflicts can recover finished results.\n\n### Canvas Mode\n\nCanvas Mode is included, but in `ima2-genX` it is still under active improvement. Use the current version for light cleanup, annotation, and export checks, and expect this workflow to receive more UI and behavior updates in upcoming releases.\n\n- Current builds focus on viewport zoom/pan, annotation, eraser, sticky notes, background-cleanup previews, and alpha or matte-backed export.\n- The pan/zoom feel, cleanup flow, saved canvas-version behavior, and follow-up reference workflow are being revised.\n- Screenshots in this section will be refreshed once the updated Canvas Mode workflow settles.\n\n<!-- Screenshot refresh: replace after the ima2-genX Canvas Mode capture is ready. -->\n![Canvas Mode with zoom controls, annotation marks, a sticky note, and the canvas toolbar.](assets/screenshots/canvas-mode-cleanup.png)\n\n### Prompt Builder, Library, And Imports\n\nThe Prompt Builder helps turn an intent into a generation-ready prompt, while the prompt library stores reusable prompt material. The library now gives imported prompts a stronger browsing and search surface, and it can be filled from local files, GitHub folders, curated sources, and GPT-image hint packs. Imported prompts are indexed locally so search and ranking work without re-importing the same source every session.\n\n![Prompt library workspace showing reusable prompts, search, tags, and import controls.](assets/screenshots/prompt-library.png)\n\n### Experimental Card News Mode\n\nCard News is still dev-only and experimental. It is hidden in the default\npublished runtime unless explicitly enabled for development, and it should not\nbe treated as a stable public feature yet.\n\n### Settings\n\nThe settings workspace keeps account, model, appearance, and language controls away from the generation sidebar.\n\n<!-- Screenshot refresh: replace after the ima2-genX settings capture is ready. -->\n![Settings workspace with account navigation and generation model controls.](assets/screenshots/settings-workspace.png)\n\n## CLI Commands\n\n### Server\n\n| Command | Description |\n|---|---|\n| `ima2x serve [--dev] [--no-open]` | Start the local web server and open the web UI; `--dev` enables verbose server diagnostics; `--no-open` keeps the browser closed |\n| `ima2x setup` | Reconfigure saved auth |\n| `ima2x grok login` | Log in to xAI OAuth for the Grok image provider (bundled `progrok`) |\n| `ima2x status` | Show config and OAuth status |\n| `ima2x doctor` | Diagnose Node, package, config, and auth |\n| `ima2x open` | Open the web UI |\n| `ima2x reset` | Remove saved config |\n\n### Client\n\nThese require a running `ima2x serve`. The CLI covers every server route. The most common ones are below — the [full CLI reference](docs/CLI.md) lists everything (generation, history, sessions, prompt library, annotations, Card News, observability, config).\n\n| Command | Description |\n|---|---|\n| `ima2x gen <prompt>` | Generate from the CLI |\n| `ima2x edit <file> --prompt <text>` | Edit an existing image |\n| `ima2x multimode <prompt>` | Multi-image SSE generation |\n| `ima2x ls [--session <id>] [--favorites]` | List recent history |\n| `ima2x show <name> [--metadata]` | Reveal a generated asset |\n| `ima2x prompt ls -q <search>` | Search the prompt library |\n| `ima2x inflight ls [--terminal]` | List active and recent jobs (alias of `ps`) |\n| `ima2x config set <key> <value>` | Write to `~/.ima2/config.json` |\n| `ima2x ping` | Health-check the running server |\n\nThe server advertises its actual port at `~/.ima2/server.json`. If `3333` is busy, the backend falls back to `3334+` and CLI commands follow the advertised URL. Override discovery with `--server <url>` or `IMA2_SERVER=http://localhost:3333`.\n\n```bash\nima2x gen \"poster\" --model gpt-5.4 --reasoning-effort high\nima2x edit input.png --prompt \"make it rainy\" --web-search\nima2x multimode \"two cats playing\" -n 2\nima2x inflight ls --terminal\nima2x config set imageModels.reasoningEffort high\n```\n\nFull reference: [docs/CLI.md](docs/CLI.md).\n\n## Configuration\n\nConfig priority:\n\n```text\nenvironment variables > ~/.ima2/config.json > built-in defaults\n```\n\n| Variable | Default | Description |\n|---|---:|---|\n| `IMA2_PORT` / `PORT` | `3333` | Web server port |\n| `IMA2_HOST` | `127.0.0.1` | Web server bind host |\n| `IMA2_OAUTH_PROXY_PORT` / `OAUTH_PORT` | `10531` | OAuth proxy port |\n| `IMA2_SERVER` | — | CLI target override |\n| `IMA2_CONFIG_DIR` | `~/.ima2` | Config and SQLite location |\n| `IMA2_ADVERTISE_FILE` | `~/.ima2/server.json` | Runtime discovery file |\n| `IMA2_GENERATED_DIR` | `~/.ima2/generated` | Generated image directory |\n| `IMA2_IMAGE_MODEL_DEFAULT` | `gpt-5.4-mini` | Server fallback image model |\n| `IMA2_NO_OAUTH_PROXY` | — | Set `1` to disable the auto-started OAuth proxy |\n| `IMA2_GROK_PROXY_HOST` | `127.0.0.1` | Bundled Grok (`progrok`) proxy bind host |\n| `IMA2_GROK_PROXY_PORT` | `18645` | Bundled Grok proxy port |\n| `IMA2_NO_GROK_PROXY` | — | Set `1` to disable auto-start of the bundled Grok proxy |\n| `IMA2_GROK_IMAGE_MODEL_DEFAULT` | `grok-imagine-image` | Server fallback Grok image model |\n| `IMA2_LOG_LEVEL` | `warn` | Normal serve defaults to `warn`; dev mode defaults to `debug`; supports `debug`, `info`, `warn`, `error`, or `silent` |\n| `IMA2_LOG_FILE` | `~/.ima2/ima2gen.log` | Persistent structured server/OAuth log file; set `off` to disable |\n| `IMA2_LOG_MAX_BYTES` | `10485760` | Rotate the log to `ima2gen.log.1` after this many bytes |\n| `IMA2_INFLIGHT_TERMINAL_TTL_MS` | `30000` | Recent terminal job retention for debug views |\n| `OPENAI_API_KEY` | — | API key for the `provider: \"api\"` Responses API image path and auxiliary API-key features |\n| `IMA2_API_IMAGE_MODEL_DEFAULT` | `gpt-5.4-mini` | Default image model for `provider: \"api\"` |\n| `IMA2_API_REASONING_EFFORT` | `low` | Default reasoning effort for `provider: \"api\"` |\n| `IMA2_API_IMAGE_SIZE` | `1024x1024` | Default size for `provider: \"api\"` |\n| `IMA2_API_ALLOW_WEB_SEARCH` | `true` | Toggle web search for `provider: \"api\"` |\n| `IMA2_OAUTH_MASKED_EDIT_ENABLED` | `false` | Opt-in feature flag for masked-edit requests on the OAuth path (#31, groundwork only) |\n\n### Logging modes\n\n`ima2x serve` keeps terminal output intentionally quiet: startup URLs, warnings, and errors stay visible, while structured server/OAuth logs are also persisted to `~/.ima2/ima2gen.log` by default. The file is sanitized (raw prompts, image data, tokens, cookies, and auth headers are omitted) and rotates to `ima2gen.log.1` at the configured size limit.\n\nUse `ima2x serve --dev`, `npm run dev`, or `IMA2_LOG_LEVEL=debug ima2x serve` when you need request IDs, node generation phases, OAuth stream diagnostics, or inflight state transitions. Set `IMA2_LOG_FILE` to choose another path, or use `ima2x config set log.file <path>`. Explicit environment and `~/.ima2/config.json` values still override the built-in defaults; restart the server after changing them.\n\n## API Reference\n\nThe endpoint list moved to [docs/API.md](docs/API.md) so this README can stay focused on first-run use.\n\nUseful references:\n\n- [CLI Reference](docs/CLI.md)\n- [API Reference](docs/API.md)\n- [FAQ](docs/FAQ.md)\n- [Recover old images](docs/RECOVER_OLD_IMAGES.md)\n\nTranslated README files may lag behind the current `ima2-genX` release:\n\n- [Korean README](docs/README.ko.md)\n- [Japanese README](docs/README.ja.md)\n- [Chinese README](docs/README.zh-CN.md)\n\n## Troubleshooting\n\n**`ima2x ping` says the server is unreachable**\nStart `ima2x serve`, then check `~/.ima2/server.json`. You can also run `ima2x ping --server http://localhost:3333`.\n\n**OAuth login does not work**\nRun `npx @openai/codex login`, confirm `ima2x status`, then restart `ima2x serve`.\n\n**`fetch failed` repeats on a proxy/VPN network**\nCheck that the local OAuth proxy is reachable. On networks that require a proxy, enable your proxy client's TUN/TURN-style mode, then retry `npx openai-oauth --port 10531`. If it still fails, set `HTTP_PROXY` and `HTTPS_PROXY` in the same terminal that runs `ima2x serve` or `openai-oauth`.\n\n**Images fail with `API_KEY_REQUIRED`**\nSet `OPENAI_API_KEY` or configure an API key before using `provider: \"api\"`. The default OAuth path still works without an API key.\n\n**A large reference image fails**\nThe app compresses large JPEG/PNG references before upload. If a file still fails, convert it to JPEG or PNG at a lower resolution and try again. HEIC/HEIF files are not supported by the browser path.\n\n**Old gallery images are missing after updating**\nRecent versions moved generated images from the installed package folder to `~/.ima2/generated`. Run `ima2x doctor` and see [Recover old images](docs/RECOVER_OLD_IMAGES.md).\n\n**`gpt-5.5` fails but other models work**\nUpdate Codex CLI first, then retry. If it still fails, your account or backend route may not expose the same image capability or quota for `gpt-5.5` yet; use `gpt-5.4` as the stable fallback.\n\n**The app opened on a different port**\nIf the requested server port is busy, `ima2-genX` falls back to the next available port and records it in `~/.ima2/server.json`. If the port is unexpectedly `3457`, your shell may also have inherited `PORT=3457` from another local tool. Run `unset PORT` or start with `IMA2_PORT=3333 ima2x serve`.\n\n**Port `10531` is already used on Windows**\nSome Windows security tools, including `AnySign4PC.exe`, may occupy the default OAuth proxy port. Current builds track the actual fallback OAuth port. If you still need a manual override, start with `IMA2_OAUTH_PROXY_PORT=11531 ima2x serve` and check `ima2x doctor`.\n\nFor more beginner-friendly answers, see the [FAQ](docs/FAQ.md).\n\n## Development\n\n```bash\ngit clone https://github.com/damagethundercat/ima2-gen.git\ncd ima2-gen\nnpm install\nnpm run dev\nnpm run typecheck\nnpm test\nnpm run build\n```\n\n`npm run dev` builds the UI and starts the TypeScript server entry with `--watch` and verbose server diagnostics. `npm run typecheck`, `npm run build:server`, and `npm run build:cli` verify the TypeScript migration and package emit path. Node mode is part of the packaged UI by default; Canvas Mode is included but still actively being improved.\n\n### Release\n\nManual npm publish:\n\n```bash\nnpm login\nnpm run prepublishOnly\nnpm publish --access public\n```\n\nFor later releases, bump the version, push a `v*` tag, and let `.github/workflows/publish.yml` publish with the repo secret `NPM_TOKEN`:\n\n```bash\nnpm version patch\ngit push origin main --tags\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}