{"_id":"@dzhng/openphoto","name":"@dzhng/openphoto","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.2":{"name":"@dzhng/openphoto","version":"0.1.2","type":"module","bin":{"openphoto":"dist/bin.js"},"dependencies":{"@photoctl/commands":"0.1.2","@photoctl/importer":"0.1.2","@photoctl/img":"0.1.2","@photoctl/render":"0.1.2","@photoctl/protocol":"0.1.2","zod":"^4.0.0","@photoctl/providers":"0.1.2","sharp":"0.35.4","exifr":"7.1.3","@photoctl/library":"0.1.2","@electric-sql/pglite":"0.5.8","@electric-sql/pglite-pgvector":"0.0.9","@electric-sql/pglite-tools":"0.4.8","fast-xml-parser":"5.2.5","fs-ext":"2.1.1","uuid":"14.0.2","@photoctl/mac-helper":"0.1.2","@photoctl/daemon":"0.1.2"},"optionalDependencies":{"@dzhng/openphoto-img-darwin-arm64":"0.1.2","@dzhng/openphoto-img-linux-arm64-gnu":"0.1.2","@dzhng/openphoto-img-linux-x64-gnu":"0.1.2","@dzhng/openphoto-mac-helper-darwin-arm64":"0.1.2"},"engines":{"node":">=24"},"repository":{"type":"git","url":"git+https://github.com/dzhng/photoctl.git","directory":"apps/cli"},"_id":"@dzhng/openphoto@0.1.2","bundleDependencies":["@photoctl/commands","@photoctl/importer","@photoctl/img","@photoctl/render","@photoctl/protocol","@photoctl/providers","@photoctl/library","@photoctl/mac-helper","@photoctl/daemon"],"description":"A CLI-first photo library and non-destructive editor for photographers and agents. The complete workflow must be usable without a screen. Human and machine interfaces share the same capabilities; a GUI must not become a separate product with exclusive fea","bugs":{"url":"https://github.com/dzhng/photoctl/issues"},"homepage":"https://github.com/dzhng/photoctl#readme","_integrity":"sha512-frkIilKqjb7shCaTv6kxivYESEBR4X9ta+kbax/ZblDxdWYZ/2AZEKF+42oLfwjmlPhYvLuwuiGtXIGirNOs7g==","_resolved":"/home/runner/work/photoctl/photoctl/out/packages/dzhng-openphoto-0.1.2.tgz","_from":"file:out/packages/dzhng-openphoto-0.1.2.tgz","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-frkIilKqjb7shCaTv6kxivYESEBR4X9ta+kbax/ZblDxdWYZ/2AZEKF+42oLfwjmlPhYvLuwuiGtXIGirNOs7g==","shasum":"0f5b91beb178ba27e9b77eb1e6d94600bd8b5aa4","tarball":"https://registry.npmjs.org/@dzhng/openphoto/-/openphoto-0.1.2.tgz","fileCount":1028,"unpackedSize":3020919,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dzhng%2fopenphoto@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEkseYA7F9anFhVvhU4eGZKrIFqEtKcMunXAj+H2wbAXAiAS+g48ErO1g2o6Lo8rZjGbhh6L7OWCAhbnNukmXLAafw=="}]},"_npmUser":{"name":"dzhng","email":"dzz0615@gmail.com"},"directories":{},"maintainers":[{"name":"dzhng","email":"dzz0615@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openphoto_0.1.2_1789013786337_0.9940220106241779"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-10T04:16:26.084Z","0.1.2":"2026-09-10T04:16:26.512Z","modified":"2026-09-10T04:16:27.028Z"},"maintainers":[{"name":"dzhng","email":"dzz0615@gmail.com"}],"description":"A CLI-first photo library and non-destructive editor for photographers and agents. The complete workflow must be usable without a screen. Human and machine interfaces share the same capabilities; a GUI must not become a separate product with exclusive fea","homepage":"https://github.com/dzhng/photoctl#readme","repository":{"type":"git","url":"git+https://github.com/dzhng/photoctl.git","directory":"apps/cli"},"bugs":{"url":"https://github.com/dzhng/photoctl/issues"},"readme":"# OpenPhoto\n\nA CLI-first photo library and non-destructive editor for photographers and agents.\nThe complete workflow must be usable without a screen. Human and machine interfaces\nshare the same capabilities; a GUI must not become a separate product with exclusive features.\n\nStart with the [CLI workflow guide](docs/cli.md) for library setup, editing,\nclick-based selection and model provisioning. `openphoto --help --human` lists\ncommands; `openphoto COMMAND --help --human` gives complete usage without a library.\n\n## Installation and credentials\n\nThe npm package is `@dzhng/openphoto`; it installs the `openphoto` command and\nits platform-specific native dependencies. Intel Mac binaries are not published.\nRun `openphoto configure` to enter an\nAI Gateway key without terminal echo. `openphoto configure --help` describes\nnon-interactive input. Configuration makes no network request.\n\nCredentials are plaintext in `~/.openphoto/.env`, readable and writable only by\nthe owner. They are separate from photo catalogs and backups. Each command loads\nthe saved key; an explicit `AI_GATEWAY_API_KEY` environment value takes precedence,\nincluding an empty value. Saving a key does not itself cancel work. A running\ndaemon adopts changed credentials on its next foreground request, using its normal\nembedding pause/resume behavior.\n\nExisting catalog locations and `PHOTOCTL_*` environment controls stay stable.\nThe repository and private package names remain photoctl.\n\n## Principles\n\n- **Preserve originals.** The library owns editing state;\n  writing metadata back beside source photos is always explicit.\n- **Make limitations visible.** Continue when usable work is possible, and report degraded\n  or unavailable inputs honestly rather than silently changing the result.\n- **Generate only what must be invented.** Deterministic restoration and geometry stay\n  local; they do not need a generative service.\n- **Guarantee fidelity.** Pixels outside a masked edit are preserved by the application,\n  not by trusting a model to leave them alone.\n\n## Verification policy\n\nThe acceptance target is David's Apple Silicon Mac and camera workflow. Intel Mac and\nLinux verification are not spec-completion or release-preparation requirements.\nKeep the portable implementation and existing tests, but do not add platform-validation\nwork without a concrete need. Unverified platforms are not claimed as verified.\n\nGitHub CI provides fast feedback through lint, typechecking and a small smoke-test subset.\nThe full suite belongs in local development and deliberate release verification, not on\nevery push. A green GitHub check is not release acceptance; keep full local coverage intact.\n\nUse focused tests while iterating and the full local gate at implementation closeout,\nnot as a feedback loop. Do not optimize product code or weaken product requirements\nmerely to fit a hosted runner. [Contributor guidance](AGENTS.md) explains how to choose\nand run the appropriate checks; [project commands](package.json) and the\n[CI workflow](.github/workflows/ci.yml) define the executable gates.\n\n## Development\n\nBun installs and orchestrates; Node 24 runs everything, including tests. A native\nbuild additionally needs a Rust toolchain plus CMake and Ninja for the pinned ONNX\nRuntime recipe, and the Swift toolchain on macOS for the Core Image helper.\n`bun install` then `bun run build` produces the CLI, the image addon and the helper;\n`bun run verify` is the complete closeout gate (format, lint, typecheck, build and\nevery test stage). Lint also checks that every relative link in the live docs\nresolves; closed specs under `specs/done/` are frozen records and are exempt. The\nscripts in [package.json](package.json) name each stage individually;\n[contributor guidance](AGENTS.md) explains which rung of the test ladder to run\nwhile iterating.\n\nModel-dependent gate stages require the pinned model files and a reachable download\nmirror for Docker. The [Docker build](test/Dockerfile) and\n[model-runtime suite](test/model-runtime/) define those inputs; the\n[model fetcher](scripts/fetch-models.mjs) still validates the release hashes.\n\nThe [CLI test driver](packages/test-harness/src/spawn.ts) disables ambient and\nsaved gateway credentials by default. Provider tests explicitly supply fixture\ncredentials; ordinary tests must not spend a developer's live-provider balance.\n\n## Where things live\n\n- [Generation alternatives placeholder](specs/generation-alternatives.md) — product shapes to explore for comparing and selecting saved results.\n- [Installation and live-provider record](specs/done/openphoto/README.md) — credential boundaries, provider decisions and retained verification evidence.\n- [CLI discovery record](specs/done/cli-discovery/README.md) — why help works before setup, segmentation memory boundaries and completed follow-up verification.\n- [Segmentation quality record](specs/done/segmentation-quality/README.md) — why ZIM was chosen, the PhotoLab target and remaining quality gaps.\n- [v1 record](specs/done/photoctl/README.md) — why the product has this shape, the invariants it keeps, and the decisions made along the way.\n- [Reference fixtures](fixtures/README.md) — retained inputs and the facts they establish.\n- [Native build guide](crates/photoctl-image/ort/README.md) — runtime acquisition and platform constraints.\n- [LibRaw boundary](crates/libraw-sys/README.md) — where the vendored decoder stops and why.\n- [Color profiles](packages/render/assets/README.md) — the bundled ICC profiles and how the linear one is regenerated.\n\n## Releases\n\nVersion tags drive package and model publication together. A CLI release downloads\nits verified ZIM ONNX files from an immutable upstream revision, never a moving\n“latest” model. The bundled [ZIM notice](packages/library/assets/ZIM-NOTICE) and\n[noncommercial license](packages/library/assets/ZIM-LICENSE) govern those artifacts.\nLibraries can explicitly\nselect a mirror through `openphoto settings set models_base_url`, validated by\n[the settings registry](packages/protocol/src/verbs/settings.ts). The\n[release workflow](.github/workflows/publish.yml) owns the publication boundary; the\nfull local suite remains a release-preparation responsibility, separate from the\nhosted release checks.\n","readmeFilename":"README.md","_rev":"1-7c194a5e01ae72162ce3e66b9faacf8a"}