Project Info
Hot Trimmer
Turn material photos into authored trim sheets and exportable PBR maps.
Hot Trimmer is a focused desktop application for 3D artists who want to turn reference photos and material captures into structured trim-sheet assets. It combines source registration, patch authoring, layout tools, GPU-backed material processing, preview, and export in one local workflow.
Instead of trying to replace Blender or become a general-purpose material library, Hot Trimmer concentrates on one path:
Sources -> Workbench -> Hotspot Sheet -> Processing -> Export
Why Hot Trimmer?
Building a trim sheet from photographs normally means moving between image editors, layout tools, material utilities, and a DCC application. That makes iteration slow and makes it difficult to preserve the relationship between original captures, corrected patches, layout decisions, and generated maps.
Hot Trimmer keeps that work in a single project. Source images remain traceable, edits are non-destructive, layout decisions are explicit, and generated outputs come from a repeatable pipeline.
Current Features
- Create, open, save, recover, and version local
.hottrimmerprojects. - Import PNG, JPEG, and TIFF material captures.
- Register related PBR inputs such as base color, normal, roughness, height, metallic, and ambient occlusion.
- Inspect large sources through a mipmapped pan-and-zoom viewport.
- Capture rectangular, four-point, and assisted-polygon patches.
- Apply perspective correction and edit patch geometry non-destructively.
- Author trim-sheet regions with direct, repeating, and radial sampling behavior.
- Preview the material through a GPU-backed
wgpurendering pipeline. - Inspect base color, normal, height, roughness, metallic, ambient-occlusion, and edge-mask outputs.
- Add and tune material-processing effects through the Processing workspace.
- Export enabled material maps and package metadata.
- Preserve deterministic project state, provenance, autosave, recovery, and revision-aware output behavior.
Demo Workflow
- Start Hot Trimmer and create a project.
- Import a material photograph as the base-color source.
- Add related PBR maps when available.
- Capture and correct useful source patches in the Workbench.
- Build the authored layout in Hotspot Sheet.
- Inspect and refine the generated maps in Processing.
- Use Export All Maps to write the enabled outputs.
No special sample data is required. A well-lit, front-facing photograph of brick, wood, stone, architectural trim, or another structured surface is enough to exercise the main workflow.
Running the Project
Supported platform
The current qualified target is Windows 10/11 x64. The Rust and Tauri architecture is largely portable, but macOS and Linux builds have not yet completed product qualification.
Prerequisites
- Node.js 24
- Rust (the repository's
rust-toolchain.tomlselects the expected toolchain) - Microsoft C++ Build Tools with the Desktop C++ workload
- WebView2 Runtime, included with current Windows installations
Development
npm.cmd install
npm.cmd run check
npm.cmd run dev
npm run dev starts the native Tauri application with the Vite development server.
Native build
npm.cmd run build:native
The executable is written to:
target/release/hot-trimmer-desktop.exe
The current command creates a native executable without an installer bundle or code signature.
Technology
- Tauri 2 for the native desktop shell and platform services
- React 19 + TypeScript for the interface and editing workspaces
- Rust for project state, geometry, image processing, rendering, and export
- wgpu + WGSL for GPU-backed material-map generation and preview
- SQLite via rusqlite for durable, versioned project storage
- Vite for the frontend development and build pipeline
- Blender Python API for the companion integration under development
Project Structure
apps/desktop/ Tauri desktop application and React interface
crates/ Rust domain, storage, geometry, rendering, and export crates
packages/ Shared TypeScript UI, editor, and IPC contracts
integrations/blender Blender companion add-on
assets/ Built-in trim-sheet templates
fixtures/ Cross-language, project, and rendering test fixtures
docs/ Product decisions, technical specifications, and phase reports
The frontend communicates with the Rust application through versioned, typed Tauri commands. Project persistence and source ownership live in Rust; the React layer presents projections of that authoritative state. Rendering is tile-aware and revision-aware so that large outputs can be generated within explicit memory limits without publishing stale work.
Built with Codex and GPT-5.6
Hot Trimmer was developed during OpenAI Build Week with Codex and GPT-5.6 as active engineering collaborators.
Codex helped turn product goals into bounded implementation plans, inspect the existing code before changes, implement features across the React/Rust boundary, run focused verification, and diagnose failures. It was especially useful during the migration from CPU-bound rendering to a GPU-backed wgpu pipeline, where changes had to remain consistent across domain contracts, WGSL shaders, application commands, fixtures, and tests.
GPT-5.6 was used through Codex for architectural reasoning, implementation, debugging, code review, and verification. Key collaboration areas included:
- Designing versioned domain and IPC contracts shared by Rust and TypeScript.
- Building durable project persistence, recovery, and revision semantics.
- Decomposing the rendering migration into testable stages.
- Implementing GPU atlas generation and material-map processing.
- Tracing behavior through fixtures and focused regression tests.
- Reviewing platform assumptions and release readiness.
The human-directed decisions remained the product scope, creative workflow, interaction model, visual priorities, acceptance criteria, and final tradeoffs. GPT-5.6 is a development-time collaborator; Hot Trimmer does not require an OpenAI API key and does not send project images or files to an AI service at runtime.
The repository's dated commit history and implementation reports document the work completed during the hackathon period.
Verification
Run the full project gate with:
npm.cmd run check
This covers repository contracts, TypeScript checks and tests, Rust formatting and linting, and the Rust workspace test suite. GPU and Blender behavioral fixtures may require compatible local hardware or a Blender installation for their dedicated checks.
Known Limitations
- Windows is currently the only qualified desktop target.
- Send to Blender is not yet enabled in the desktop workflow.
- The native build is currently unsigned and is not packaged as an installer.
- GPU behavior and performance vary by adapter and driver.
- Some processing and layout workflows are still being refined as the project moves from hackathon prototype toward a distributable release.
Roadmap
- Complete and qualify the Blender handoff workflow.
- Package signed Windows releases and add a streamlined first-run experience.
- Add macOS build and runtime qualification.
- Expand templates, sample projects, and visual documentation.
- Continue improving GPU scalability and material-processing controls.
License
Hot Trimmer is open source under the MIT License.
Analysis
View
Metric
- 57
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- RustIn code
- SQLIn code
- TypeScriptIn code
8 of 8 appear in the indexed code.
AI coding agents
- CodexConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
5.6 MB
Source files
216
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
daveranan/HotSpotter
367 files · 12.3 MB · @ 424d47e
Structure
Interface
6 files · 2%Screens, components and styles rendered to the user.
Application logic
106 files · 29%Domain rules, services and shared utilities.
+11 more
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Rust62%
- Markdown18%
- TypeScript15%
- Python2%
- CSS2%
- SQL0%
- Other (4)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
apps/desktop/src-tauri/Cargo.toml
cargo · 27- base64
- hot-trimmer-domain
- hot-trimmer-effect-compiler
- hot-trimmer-export
- hot-trimmer-geometry
- hot-trimmer-image-io
- hot-trimmer-material-analysis
- hot-trimmer-material-synthesis
- hot-trimmer-placement-solver
- hot-trimmer-preview
- hot-trimmer-project-store
- hot-trimmer-render-core
- hot-trimmer-sheet-compiler
- image
- png
- serde
- serde_json
- sha2
- +9 more
crates/sheet-compiler/Cargo.toml
cargo · 21- hot-trimmer-domain
- hot-trimmer-effect-compiler
- hot-trimmer-export
- hot-trimmer-geometry
- hot-trimmer-image-io
- hot-trimmer-material-analysis
- hot-trimmer-material-synthesis
- hot-trimmer-placement-solver
- hot-trimmer-preview
- hot-trimmer-project-store
- hot-trimmer-render-core
- pollster
- serde
- serde_json
- sha2
- thiserror
- wgpu
- +4 more
apps/desktop/package.json
npm · 12- @hot-trimmer/ipc-contracts
- @tauri-apps/api
- @tauri-apps/plugin-dialog
- @tauri-apps/plugin-opener
- react
- react-dom
- +6 more
crates/project-store/Cargo.toml
cargo · 10- hot-trimmer-domain
- hot-trimmer-geometry
- hot-trimmer-image-io
- rusqlite
- serde
- serde_json
- sysinfo
- thiserror
- uuid
- +1 more
crates/image-io/Cargo.toml
cargo · 7- hot-trimmer-domain
- image
- kamadak-exif
- moxcms
- serde
- sha2
- thiserror
crates/render-core/Cargo.toml
cargo · 7- hot-trimmer-domain
- hot-trimmer-geometry
- hot-trimmer-image-io
- thiserror
- +3 more
crates/effect-compiler/Cargo.toml
cargo · 6- hot-trimmer-domain
- hot-trimmer-placement-solver
- hot-trimmer-render-core
- serde
- serde_json
- thiserror
crates/material-analysis/Cargo.toml
cargo · 6- hot-trimmer-domain
- hot-trimmer-geometry
- hot-trimmer-image-io
- hot-trimmer-render-core
- thiserror
- +1 more
crates/material-synthesis/Cargo.toml
cargo · 6- hot-trimmer-domain
- hot-trimmer-image-io
- hot-trimmer-material-analysis
- hot-trimmer-render-core
- sha2
- thiserror
crates/preview/Cargo.toml
cargo · 6- hot-trimmer-domain
- pollster
- serde
- thiserror
- wgpu
- wgpu-hal
crates/domain/Cargo.toml
cargo · 5- serde
- serde_json
- sha2
- thiserror
- uuid
crates/placement-solver/Cargo.toml
cargo · 5- hot-trimmer-domain
- hot-trimmer-material-analysis
- hot-trimmer-material-synthesis
- serde
- serde_json
crates/export/Cargo.toml
cargo · 4- hot-trimmer-domain
- serde
- serde_json
- thiserror
crates/geometry/Cargo.toml
cargo · 4- hot-trimmer-domain
- thiserror
- +2 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.