[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-105455":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":17,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":10,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":29,"discoverSource":30},105455,"fujimod","justjake\u002Ffujimod","justjake","Fujifilm camera modification tools. DO NOT FLASH CUSTOM FIRMWARE TO YOUR CAMERA WITHOUT DUAL BOOTING FIRST","https:\u002F\u002Ffujimod.com",null,"Rust",88,11,2,33,0,19,57,67.64,false,"main",[23,24,25,26],"ai-slop","emulator","fujifilm","usb","2026-11-01 00:17:08","# FujiMod\n\nThis repo contains open source tooling that can help developers access camera\ninternals and work on mods. We’re gathering on the\n[FujiHack.org Discord](https:\u002F\u002Fdiscord.gg\u002FUZXDktvAZP) to collaborate.\n\nThe FujiMod firmware modification itself is not yet open source, but we’re\nworking on it!\n\nIf you want to help by testing FujiMod firmware on your camera,\n[head to fujimod.com](https:\u002F\u002Ffujimod.com\u002F). Due to copyright, we can’t distribute\nready-made builds of FujiMod since it’s based on the official firmware. Use the\nsearch box on the site to find the download link from Fujifilm for your camera.\nThen upload it to fujimod.com so we can build the mod for your camera.\n\nCamera tools, emulation and firmware mods. The browser application lives in\n[apps\u002Fweb](apps\u002Fweb\u002FREADME.md), including its body definitions, patch\ninterpreter, runtime adapter and browser checks. The shared\n[emulator UI](packages\u002Femulator-ui\u002FREADME.md) lives in `packages\u002Femulator-ui\u002F`.\n\nUse `mise install`, then work in `apps\u002Fweb`:\n\n```sh\nnpm ci\nnpm --prefix packages\u002Femulator-ui ci\ncd apps\u002Fweb\nnpm ci\nnpm test\nnpm run dev\n```\n\nThe root `web-build`, `web-test` and `web-preview` mise tasks run from that\napplication directory. `web-test` runs both `@fujimod\u002Femulator-ui` tests and the\nweb app tests through `apps\u002Fweb`'s `npm test`. The Pages workflow builds\n`apps\u002Fweb` from approved main releases. Review branches do not deploy Pages.\n\n## Rust libraries\n\nThe root Cargo workspace contains reusable implementation crates under `crates\u002F`.\nThe `fujimod` facade exposes components through optional features; enable `usb`\nfor `fujimod::usb`. The [mod installation crate](crates\u002Fmod-install\u002FREADME.md)\nprovides checked uploads and borrowed callback batches. The [USB crate](crates\u002Fusb\u002FREADME.md) provides the initial\nasynchronous service\u002Fdebug protocol implementation.\nThe [catalog crates](crates\u002Fcatalog\u002FREADME.md) load caller-selected firmware\ndata: the reference catalog through `fujimod::catalog`, and the service\ndefinitions USB uses through `fujimod::catalog_service`.\nEnable the `emulator` feature for `fujimod::emulator`; execution, device models\nand processor backends live in separate crates under `crates\u002Femulator*`.\nThe Python package exposes the same execution core through `fujimod.emulator`.\n\nExternal EXR II board composers can consume `fujimod_emulator_exr2_boot_serial::BootSerialBlocks::devices()` into their device graph. Register each `Some(Mapping)` window and attach each `None` entry as an unmapped event device; the returned devices share one serial state and coordinator.\n\n`fujimod_emulator_devices::parts::nand::Nand` exports committed media through `committed_image()` and imports it into a fresh medium through `restore_committed()`. The caller supplies the board geometry and immutable base; import checks both geometry and base identity, then restores overlays, spare inputs, programmed pages and erased pages without CPU\u002Fcontroller\u002Fsession state. Equivalent committed state produces deterministic bytes. The schema belongs to FujiMod, not a board-specific retained emulator format.\n\n```sh\ncargo test --workspace --all-features\ncargo clippy --workspace --all-targets --all-features -- -D warnings\n```\n\nEvery member depends on `fujimod-workspace-hack`, which\n[cargo-hakari](https:\u002F\u002Fdocs.rs\u002Fcargo-hakari) generates so that any package\nselection builds third-party crates with the same features and reuses one\ncompiled copy. After adding or changing a dependency, run `mise run rust-hack`\n(install the tool with `cargo install cargo-hakari --version 0.9.39 --locked`);\nCI fails when the crate is out of date. `fujimod-unicorn-sys` compiles the\nUnicorn C archive with no features, so every feature set, test and binary of\nthe CPU backend shares one archive per profile.\n\nDevelopment uses two profiles: `cargo test` builds the default debug profile,\nand every optimized local build (`--release`, `scripts\u002Fpython_extension.py`,\nthe emulator worker) shares `release`, which rebuilds in seconds: FujiMod\ncrates at opt-level 2 without LTO, incremental, with dependencies fully\noptimized. `--profile dist` adds ThinLTO for published wheels and the web\nemulator; it runs about 5% faster and links for about 40 seconds longer.\n\nThe core also builds for WebUSB. See the USB crate's\n[Wasm checks](crates\u002Fusb\u002FREADME.md#wasm-core-checks) for the JS-runtime tests;\nthe [JavaScript package](bindings\u002Fjavascript\u002FREADME.md) provides typed browser\nAPIs over the same core. Python in Pyodide uses the\n[WebUSB adapter](bindings\u002Fpython\u002FPYODIDE.md) with that initialized module.\n\nThe [Python package](bindings\u002Fpython\u002FREADME.md) lives in `bindings\u002Fpython\u002F`.\n\nRust owns each browser USB device for the page's lifetime. Local sessions and\nremote controllers are both clients of that one nusb owner, with one session\nownership lock. The browser end runs the Rust\u002FWasm exporter; JavaScript only\nroutes its network messages. Sharing attaches or detaches peers independently\nof the physical connection. See [USB sharing](crates\u002Fusb-proxy\u002FSHARING.md).\n\nThe JavaScript\u002FWasm package lives in `bindings\u002Fjavascript\u002F`. Binding crates are\nmembers of this same workspace. Each directory owns its language package;\nimplementation crates remain independent of PyO3 and wasm-bindgen. The browser\napplication stays in `apps\u002Fweb\u002F` and consumes the JavaScript package as needed.\n\nThe [shared binding generator](bindings\u002Fgenerator\u002FREADME.md) derives service\nvalue wrappers, command\u002Faction factories, structured replies and language exports\nfrom Rust declarations. Routine service features need only Rust code; shared\nadapters handle execution and language boundaries.\n\n## Continuous integration\n\nSee [CI.md](CI.md) for the required checks, local commands, coverage reports and\nthe distinction between public tests and firmware-dependent rehearsals.\n","2026-10-31 04:26:50","CREATED_QUERY"]