@localtools/ai-meta-wasm
v0.1.0
Published
WebAssembly bindings for ai-meta-rs — AI-generation metadata in PNG/JPEG/WebP for browsers
Maintainers
Readme
ai-meta-wasm
WebAssembly bindings for ai-meta-rs — detect, extract, strip, and write AI-generation metadata in PNG / JPEG / WebP in the browser.
- Repository: https://github.com/localtools/ai-meta-wasm
- npm: @localtools/ai-meta-wasm (built
pkg/) - License: MIT
- Scope: declared metadata only — not pixel-based AI detection
Sibling projects: ai-meta (C), ai-meta-rs, ai-meta-node, ai-meta-php.
Quick start (frontend)
./scripts/build.sh # → pkg/ (wasm-pack bundler target)
# or:
WASM_PACK_TARGET=web ./scripts/build.shBundler (Vite / webpack / etc.)
import init, { scan, extract, strip, write, version, AiMetaFlags } from '@localtools/ai-meta-wasm';
await init();
const flags = AiMetaFlags();
const data = new Uint8Array(await file.arrayBuffer());
const info = scan(data);
// { format: 'png', schemes: ['png_text'], likelyAi: true }
const fields = extract(data);
const cleaned = strip(data, flags.STRIP_ALL_AI | flags.KEEP_COLOR_PROFILE);
const stamped = write(data, 'parameters', 'a cat\nSteps: 10, Seed: 1');<script type="module"> (web target)
WASM_PACK_TARGET=web WASM_PACK_OUT=pkg-web ./scripts/build.sh<script type="module">
import init, { scan, version } from './pkg-web/ai_meta_wasm.js';
await init();
console.log(version(), scan(bytes));
</script>A static demo page lives in www/index.html (expects ../pkg from a bundler build).
Requirements
- Rust 1.74+ with
wasm32-unknown-unknown - wasm-pack
- wasi-sdk clang (auto-installed by
scripts/install-wasi-sdk.shinto.tools/wasi-sdk) - Network on first build (zlib sources; ai-meta C sources if
AI_META_SRCis unset)
export WASI_SDK_PATH=/path/to/wasi-sdk # optional if .tools/ is used
export AI_META_SRC=/path/to/ai-meta # optional; otherwise downloads the pinned tag
./scripts/build.shDepends on ai-meta-rs from crates.io (0.1.1+), which compiles libai_meta + zlib for wasm32-unknown-unknown and links them into this crate.
API
| Export | Notes |
|--------|--------|
| version() | Linked libai_meta version |
| detectFormat(data) | "png" \| "jpeg" \| "webp" \| "unknown" |
| scan(data) | { format, schemes, likelyAi } |
| extract(data) | { [key: string]: string } |
| strip(data, flags?) | Uint8Array |
| write(data, key, value) | Uint8Array |
| AiMetaFlags() | Flag constants object |
Same semantics as ai-meta-rs / @localtools/ai-meta.
Release artifacts
Pushing a v* tag builds bundler, web, and nodejs packages and attaches:
ai-meta-wasm-<version>-bundler.tar.gzai-meta-wasm-<version>-web.tar.gzai-meta-wasm-<version>-nodejs.tar.gz
CI also uploads those directories as workflow artifacts on every push.
