Mods / Collodion -- Classic Photography

Tags:
Camera Immersive Immersion Gameplay Technology
Author:
Fowl
Side:
Both
Created:
Jan 25th at 6:32 AM
Last modified:
Jul 17th at 8:15 PM
Downloads:
5046
Latest release (for Vintage Story 1.22.0 - 1.22.3, potentially outdated):
collodion-2.0.4.zip  1-click install

This mod adds an immersive and realistic wet plate photography system to Vintage Story. Craft camera gear and prepare glass plates to bring on your journeys and visually document your findings using a tactile, historically inspired creative loop.
Now with optional Config Lib support

 

If you've just updated from v2.0.1 you will need to move any existing photo files from ...\VintagestoryData\ModData\collodion\photos to ...\VintagestoryData\ModData\photocore\photos

VERSION 2 NOTICE - PLEASE READ
Please note that Collodion has been extensively re-engineered and that v2.0.0 is the foundation for future development and may see frequent updates as issues are discovered and addressed. During this period, some updates may introduce changes that affect or break existing items/photos. Users starting long-term worlds should keep this in mind before updating between v2.x releases.
That being said, please try to break it! If you encounter bugs/unexpected behavior/edge cases, report them so they can be addressed in future updates. Thanks! 😁

Key Features

  • Authentic Camera Tools -- Build your own equipment including a field camera and tools for developing your exposed plates.
  • Complete Wet Plate Workflow -- Turn raw materials into chemicals used to create photosensitive glass plates, expose the plates through the camera, and develop/fix the images in chemical baths.
  • Functional Plates & Photos -- Glass plates visually/realistically expose and develop into negatives which can be displayed as ambrotypes
  • Immersive Workflow -- Requires real player action: use tools, dip plates, time exposures, and manage workshop space.

*Some testing needs to be done for larger servers. If you run a large server and would like to try out the mod, please reach out!*

Current known issues:

  • Exposures using mounted cameras can break with custom modded shaders.

Multiplayer Only:

  • Plates can appear invisible inside plate boxes for some players.
  • Pausing mounted camera exposures can sometimes take a few attempts.

If you have any suggestions or issues to report, or want to share any photos you've taken, please join my Discord.

 

 v2.0.0 Changelog

Photo Exposure

- Exposing a plate onto glass now happens in real time, rather than capturing a single instant.
- Players control the shutter manually -- the longer it's left open, the more light the plate accumulates.
- The wet plate collodion process has an optimal exposure window of around 8 seconds; exposing for less or more than this affects the tonal quality of the developed photograph.
- Accumulated light is run through models borrowed from real photographic chemistry (linearised light accumulation, a Hurter-Driffield density curve, and Schwarzschild reciprocity) in pursuit of an authentic exposure response rather than a simple brightness average.

Partial Exposures

- An exposure builds up in memory as a player shoots. When it leaves the camera, that accumulated light is written to disk as a partial exposure carried by the plate.
- Loading the same plate into any camera picks up exactly where the partial exposure left off.
- This works across camera types -- a plate started in a mounted camera can be resumed in a handheld field camera and vice versa.
- A partial exposure is locked to the photographer who started it, other players cannot keep exposing it or develop it.

Mounted Camera

- The field camera can now be deployed on a wooden tripod for fixed-perspective, hands-free capture.
- Once placed, the camera renders its own view of the scene, independent of where the player looks or moves.
- That view is locked to the exact position and facing of the player when it was set. Players can walk into view and appear in the resulting photograph.
- Partial exposures from a deployed camera behave exactly like handheld ones, including resuming across camera types.

Developing & Fixing

Exposed plates are turned into photographs in the development tray by pouring chemistry over them one step at a time.

- Pour developer to bring the image up. Full development takes five pours, and the image appears stronger with each one.
- Once fully developed, pour fixer once to make the photograph permanent.
- Only the original photographer can develop or fix their own exposed plate. After fixing, the finished photograph can be handled by anyone.
- Plates are wet throughout this process and will dry out if left too long. A dried plate can no longer be developed or fixed -- pour water over it to wash it back down to a blank glass plate and start over.

Photographs

Silver density simulation

- Developed photographs are no longer just a post-processed image -- the physical behavior of silver is simulated.
- Each pixel's brightness determines how much metallic silver was deposited at that point on the glass plate: bright areas of a scene produce dense, opaque silver, while dark areas leave the glass nearly clear.
- The resulting plate is a realistic silver-on-glass negative image rather than a normal positive.

Development progression

- A freshly exposed plate holds only a latent image; it emerges gradually as developer is poured over the plate.
- The most silver-dense areas (the brightest parts of the scene) appear first, while shadows and corners fill in last.
- This emergence plays out live, so nearby players can watch the image develop in multiplayer.

Ambrotypes (viewing in frames)

- A developed plate is still a negative, so to view it as a normal image it must first be placed into a frame, which mounts it over a black backing.
- The transparent glass in the shadow areas shows only black; the opaque silver in the bright areas reads as a light tone against that black.
- The result is a positive image -- this emulates the ambrotype technique used in historical wet plate collodion photography.

Commands:

- .photocore clearpex -- reports how many partial exposure files are on disk and how many are orphaned (not associated with any plate in the player's inventory). Run .photocore clearpex confirm to delete only the orphaned files; any partials still linked to plates the player is carrying are left untouched.
- .photocore export -- exports the developed or finished plate the player is currently holding as a viewable composite PNG file to ModData/photocore/photos/exports/.
- .photocore clearcache -- clears local photo render caches. Use this if a synced photo is not appearing correctly on plates or frames.

Configuration:

- Most timings, costs, and behavior -- pour durations, chemical amounts, how long plates stay wet, plate-box drying, the film look, and capture limits -- are tunable in photocore.json (generated in the game's ModConfig folder). In multiplayer the server's values are authoritative for gameplay limits.
 
 Quickstart Guide -- Use the 'Collodion Photography' page in the ingame Handbook
  • Before you can start creating photographs, you'll have to make some tools:
    • Field Camera
      • Crafted with boards, leather, clear quartz, and bronze nails.
    • Development Tray
      • Formed from any type of clay and fired in a kiln.
  • Now you'll need to make the chemicals to process the photo plates with:
    • Collodion Syrup - A viscous resin binding mixture used to coat polished glass plates.
      • Made from sealing dry collodion mix in water. Dry collodion mix can be crafted from resin and plants.
    • Silvering Solution - A clear chemical bath that sensitizes collodion coated plates, preparing them to capture light.
      • Made from sealing silver bits in water (1/10L).
    • Developer - A reactive liquid that reveals the hidden image on an exposed plate.
      • Made from sealing iron bits in water (1/10L).
    • Fixer - A stabilizing solution that halts development and preserves the image for long-term storage.
      • Made from sealing salt in water (3/10L).
  • Craft your first rough glass plates using glass slabs and a saw. The preparation goes as follows:
    1. Place the rough plate on the floor and use a plain cloth to polish it into a clean plate.
    2. Pour the collodion syrup over the clean plate to get a coated plate.
    3. Pour silvering solution over the coated plate to get a sentisized silver plate (will now dry out after 40 in-game minutes).
    4. Load the silvered plate into the camera (Shift-RMB with the plate in offhand).
    5. Find a good subject and expose the plate (LMB when looking into the viewfinder).
    6. After some time (default 8s), stop the exposure and unload the now exposed plate from the camera (Shift-RMB with an empty offhand).
    7. Place the exposed plate in your development tray and pour developer over it to develop the image.
    8. Pour fixer over the developed plate to finish the plate and keep it from drying out or further exposing.
  • Place your new photo negative plate into a framed photograph on the wall or floor!

Photo framing inspired by KoS-Photography
Mounted camera rendering adapted from Moby's CameraLib

Mod Version Mod IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
2.0.4 collodion
1.22.0 - 1.22.3
957 Jul 17th at 6:29 PM collodion-2.0.4.zip 1-click install

Collodion -- v2.0.4 Changelog

Camera

- Fixed pausing a mounted-camera exposure being unreliable in multiplayer.
 

Plate box

- Fixed plates not showing inside the plate box. A plate placed into an open box slotted in but stayed invisible, the slot renderer was drawing from the wrong texture atlas page. Plates now correctly appear in their slots again.
- Reworked loading and unloading the plate box. Placing plates had stopped working after the v2.0.3 hitbox change (clicks just closed the box instead of inserting). Now RMB anywhere on an open box stores the held plate or takes the nearest one, with no need to aim a specific slot. SHIFT+RMB opens or closes the lid, and SHIFT+CTRL+RMB picks the box up with its contents.
- Setting down a loaded plate box now sounds the part. Alongside the existing placement sound, each stored plate adds its own randomized glass thud at a random pitch, staggered slightly so a full box settles with an audible clatter instead of landing silent.
- Carrying a loaded plate box now rattles as you walk the same way chainmail or scale armor jingles with your steps. Each stored plate has a chance to clink on a given step, so a fuller box rattles more than a near-empty one. Nearby players hear it too.
 

Photo storage

- Photos are now stored per world instead of all sharing one folder. Previously every singleplayer world, every world you've hosted yourself, and every photo downloaded while visiting someone else's server all landed in the same ModData/photocore/photos/ folder on your machine -- so photos from unrelated worlds piled up together. Each world now gets its own folder under ModData/photocore/photos/<world-id>/, so unrelated sessions no longer mix.
- Old photos tidy themselves away as you play. The first time a world shows or serves a photo that's still sitting in the old shared folder, that file is moved into the world's own folder, so over time the shared folder empties on its own and /photoadmin can see those photos again (until it's moved, a photo still in the shared folder renders fine but is invisible to stats/audit/delete). Only the world a photo actually belongs to ever claims it, so nothing gets mixed up.
- /photoadmin now only sees the current world's photos. stats, audit, and delete operate on the world you're currently in, they can no longer see or accidentally delete another world's photos. If you kept more than one copy of the same world on this machine (e.g. a downloaded map you also host yourself), those copies still share one photo store, and /photoadmin delete oldest / delete olderthan will warn you about that before running.
 

Plates

- Rough glass plates can now be polished with any base-game cloth, not just plain cloth (mordanted cloth and every dyed variant work too).
- You can now wash exposed, developed, and finished plates back down to rough glass. Previously only a plate that had dried out mid-process could be reclaimed. Now pouring water over a plate at any of those stages recovers the glass on demand, wet or dry (useful for a shot you don't want to keep). It costs double the usual chemical amount and pour time. This permanently destroys the photo -- the image file is deleted, not just detached from the plate.
- Reclaiming someone else's exposure is allowed by default, and servers can disable it. The new AllowReclaimingOthersExposures setting only covers plates that have been exposed but not yet developed, since that's the only point where a plate still records who exposed it. Once a plate has been developed, anyone can reclaim it either way.
- Glass plates now remember how many times they've been reclaimed. Nothing uses this yet, it's groundwork for wear and breakage on heavily-reused glass in future releases.
 

Sound

- Opening the viewfinder now plays a cap-removal sound instead of the placeholder cloth-rustle sound.
- Polishing a rough plate with cloth now plays a dedicated glass-polishing sound instead of the vanilla chalk-drawing sound it borrowed before.
- Scrolling to zoom the viewfinder now plays a tactile tick with each step as the rear standard moves forward and back.
- Attaching a tripod to a field camera now plays a sound.
- Setting down a mounted camera on its tripod now plays a sound others nearby can hear too.
- Inserting or removing a plate from a development tray now plays a sound others nearby can hear too.
Starting or pausing an exposure now plays a sound of the darkslide moving that others nearby can hear too.

Rendering

- Fixed objects disappearing when viewed through a held glass plate. With a transparent plate held in first person, entities seen through it (other players, dropped items, etc.) would vanish. The plate was filling in the depth buffer as if it were solid, culling everything drawn behind it. It now blends over what's behind without hiding it.
- Fixed a developed or finished plate in a development tray showing no image to a client who joins after it was developed.
 

Modding

- IPhotoStore now resolves photos within the current world/session. Following the photo storage change above, a photoId taken in one world isn't visible from another -- TryGetPhotoAsync and EnumerateIds operate on the world currently loaded. Existing consumers need no changes, ids obtained from in-world blocks/items resolve as before.
2.0.3 collodion
1.22.0 - 1.22.3
451 Jul 10th at 9:49 PM collodion-2.0.3.zip 1-click install

Collodion -- v2.0.3 Changelog

Migration

- Worlds carried over from before the v2.0.2 domain rename now get their placed blocks and held items remapped automatically (development trays, plates, cameras, tripods, frames, and the chemistry portion items).
If you've just updated from v2.0.1 you will need to move any existing photo files from ...\VintagestoryData\ModData\collodion\photos to ...\VintagestoryData\ModData\photocore\photos
 

Mod Compatibility

- Other mods can now read Photocore/Collodion photos through a new IPhotoStore API. Get it from PhotocoreModSystem.PhotoStore (resolve via capi.ModLoader.GetModSystem<PhotocoreModSystem>(withInheritance: true) so it works whether Collodion or the future KoS superset is installed). It's read-only: fetch a photo's bytes by id (waiting on the sync download client-side if needed), check whether one's cached locally, and enumerate known ids by type.

Photo ids

- New photos get short ids like exposure_g8x4m2kd instead of the old timestamped names. Existing photos keep their old ids and filenames -- everything already taken keeps working with no migration.
- `/photoadmin delete id` now accepts any unique part of an id, so delete id g8x4m2kd (or the tail of an old-style id) works without typing the whole thing. If a fragment matches more than one photo, it's skipped and reported instead of guessing.
- The server no longer overwrites an existing photo file on upload. Uploads for an id that already exists are acknowledged and ignored, so no upload can accidentally replace another player's photo.

Camera

- Fixed mounted-camera exposures silently failing to capture anything during dusk, dawn, a moonless or low-phase night, or heavy fog. The virtual camera re-renders shadows every exposure tick to match its own heading, but didn't check whether shadows were worth drawing at all in that lighting -- so it crashed when they weren't, permanently ending the exposure with zero frames captured and no error shown. It now skips that work under the same conditions the game itself would, which also avoids some wasted rendering during those same moments.
- Handheld cameras no longer create a photo the moment an exposure finishes. Finishing a handheld exposure used to write the photo file and hand it to the server right there in the field -- with no tray involved at all, so the develop whitelist never actually gated it the way it gates the mounted camera. A finished handheld exposure now becomes an exposed plate, same as a mounted camera's; only pouring developer on it in a tray creates the photo. Trying to re-expose an already-finished plate now shows the same message on both handheld and mounted cameras, instead of mounted cameras silently doing nothing.
- Fixed exposures locking as fully-exposed far earlier than they should have. An exposure was being marked done as soon as its accumulated frames passed the chemistry's SampleCount (a value meant only to describe exposure character and resource cost, not when to stop). Whether an exposure is actually finished (and locked from further resuming) now depends solely on whether it hit the hard accumulation-frame cap (MaxAccumulatedFrames).
- Finished photographs and framed photos now show their date (ex. "Taken on July 10, Year 3"), stamped from the in-game calendar the moment the shutter first opens. Plates exposed before this update simply won't show this.
- Finished photographs and framed photos now also show their photographer (ex. "Captured by Fowl"), stamped from whoever opened the shutter, the same moment as the capture date above. Plates exposed before this update won't show this either.
- Fixed standing photo frames placing rotated 90 degrees off from the direction the player was actually facing.

Configuration

- Added optional support for the ConfigLib mod. If it's installed, photocore.json's settings show up in its in-game GUI with tooltips and proper range validation, and changes apply immediately -- no relog needed. Nothing changes if it's not installed, just edit photocore.json by hand.
- In multiplayer, the host now decides the settings that shape a photo, rather than whichever client happened to take it. Connecting to a server now applies its values for the session, and players' own files are left untouched for when they go back to singleplayer. The settings are:
  - Viewfinder.ApplyFinishingEffects -- whether the film-look effects get baked into a developed photo.
  - Viewfinder.PhotoCaptureMaxDimension -- the resolution photos are captured at, which is also what everyone else has to download.
  - PhotoSync.PhotoSeenPingIntervalSeconds -- how often clients report a photo as still being viewed.
  - Chemistry profiles (chemistry-profiles.json) -- the emulsion characteristics baked into a photo at capture time.
- ConsumePlainClothOnPolish and PlainClothConsumedPerPolish are now just one setting, ClothConsumedPerPolish. Set it to 0 to turn cloth consumption off (still the default), or to whatever desired amount consumed per polish.
- Some photocore.json settings are gone, and some moved. photocore.json gets rewritten the first time the new version loads it, so anything below is dropped from the old file.
   - Removed from Viewfinder (they were dev-only knobs with no in-game effect worth exposing): ZoomMultiplier, ExposureReadbackMaxDimension, and the seven DebugPreview* fields.
   - Moved from PhotoSync to PhotoSync.Advanced (network internals, separated from the two settings operators would actually tune): ChunkSizeBytes, MaxTransferBytes, ClientStateCleanupIntervalMs, ClientRequestRetainSeconds, ClientIncomingStaleMs, ServerPruneIntervalMs, ServerUploadStaleMs, ServerMaxOpenUploadsPerPlayer. Values left at the old flat paths are ignored and reset to defaults.
- PhotoDeleteGraceHours is now editable from the ConfigLib menu, next to PhotoSeenPingIntervalSeconds.
- PhotoCaptureMaxDimension now actually changes the photo's output resolution. It was silently capped at 640 internally, so any higher value produced an identical photo. It now takes effect up to its new maximum of 1024 (previously 2048, which was never reachable and would have made oversized photos that fail to sync). If it had been set above 1024, it'll be pulled down to 1024 on first load.

Misc

- Default drying duration for plates was bumped to a 0.75 (45 minutes in-game).
- The exposure profile was tweaked to allow for better low-light photography.
- Tightened hitboxes on the plate box (both open and closed), the mounted camera, and the standing photo frame.
- Tightened held/ground/GUI transforms for the development trays, the standing and wall photo frames, the plate box, and the glass/sensitized/photo plate items.
- The tripod and plate box now show a description when hovered over in the inventory.
- Exposures can run a little longer before locking. MaxAccumulatedFrames -- the accumulated-frame count at which an exposure locks as fully exposed (used to limit memory usage) -- now defaults to 600 instead of 400, and its highest configurable value is 1000 instead of 600.
- Polishing a plate with too little cloth now fails immediately with a message instead of silently looping. With ClothConsumedPerPolish set above 1, holding right-click while carrying less cloth than that now rejects the polish up front and says how much cloth is needed.
- Cleaned up and reorganized the en.lang file to make translating it easier, which also fixed some text that never displayed.

Under the hood

- Fixed a texture-atlas leak in photo sync. Every synced photo used to permanently claim a new atlas region, growing video-memory use over a play session and, in rare cases, making a placed photo render another photo's image. Each photo now reuses a single region.
2.0.2 collodion
1.22.0 - 1.22.3
425 Jun 29th at 8:27 PM collodion-2.0.2.zip 1-click install

Migration

The mod domain was renamed as part of a Core library split in anticipation of starting work on a separate, more in-depth photography mod. Two things have changed for existing players:

  • Commands are now .photocore ... instead of .collodion ...
  • The ModData folder has moved from collodion/ to photocore/If you have photos from a previous version that you want to keep visible in-game, rename the collodion folder inside your game's ModData directory to photocore before launching.

Players starting fresh do not need to do anything.

 

Photo Exposure

  • Finishing effects are now baked into developed photos. Grain, vignette, halation, lens softness, coating unevenness, dust and scratch textures, and edge toning are composited onto the final plate image by default. These can be disabled via Viewfinder.ApplyFinishingEffects in the config to revert to a clean, unprocessed output.
  • Handheld camera no longer overexposes when reusing a primed buffer. Starting a new exposure on a plate that had already been primed in the same camera session could produce a blown-out result. The primed state is now cleared correctly before each capture.
  • Shutter timing is now applied correctly from the mounted camera and the plate-removal button. Both paths were falling through to defaults instead of using the configured chemistry values.

 

Server Administration

New /photoadmin commands for server operators to inspect and manage the server's on-disk photo storage. All destructive commands are dry-run by default and require confirm to execute.

  • /photoadmin stats -- total photo count, disk usage, and a breakdown of seen / never-seen / stale-index rows.
  • /photoadmin audit [count] -- lists the N least-recently-seen photos with age, first-seen timestamp, and size. Default 20.
  • /photoadmin delete oldest <n> [confirm] -- removes the N least-recently-seen photos (grace period applies).
  • /photoadmin delete olderthan <days> [confirm] -- removes every photo not seen within the last N days, including never-seen files.
  • /photoadmin delete id <ids> [confirm] -- removes specific photos by id (comma-separated). Bypasses the grace period.
  • /photoadmin prune-index [confirm] -- drops index rows whose backing file no longer exists.

Deletion cascades to derived mask files. Photos still referenced by placed plates render blank after deletion.

Develop whitelist. When enabled, only players on the whitelist (and operators) may develop exposed plates. Players not on the list cannot enter the development step but they remain able to expose plates.

  • /photoadmin whitelist enable / disable -- toggle the whitelist on or off.
  • /photoadmin whitelist add <player> / remove <player> -- grant or revoke develop permission by name.
  • /photoadmin whitelist list -- show all current entries.
  • /photoadmin whitelist status -- show whether the whitelist is active and how many players it holds.

The whitelist is off by default. Turning it on does not affect server ops.

 

Misc.

  • Added a photography guide back to the Handbook.

 

Under the hood

  • The mod was split into a shared Core library with the Collodion head layered on top. This is transparent to players but is the foundation for the separation between the work on this mod and the upcoming work on KoS: Photographic Memories.
  • Sensitization is now data-driven through SensitizationRecipe attributes on BlockEntityGlassPlate rather than hardcoded per-block values.
  • Declined-interaction events on the server now emit a diagnostic log entry (rate-limited, gated on a debug flag) to help diagnose cases where plates or cameras silently refuse interaction.
  • Significant internal cleanup: flattened over-split namespaces, removed dead code, consolidated duplicated helpers, and stripped noisy comments across all feature systems.
2.0.1 collodion
1.22.0 - 1.22.3
546 Jun 17th at 1:04 AM collodion-2.0.1.zip 1-click install

v2.0.1 Changelog

Mounted Camera

- Other mounted cameras now appear in photographs. Taking a mounted exposure of another player who is using a deployed camera previously left that camera invisible in the final photo. Now every mounted camera in view is captured including the player's own idle ones.
- Exposures auto-pause when the photographer disconnects. A mounted camera left mid-exposure can no longer become permanently stuck in an exposing state. This is reconciled both at the moment of disconnect and when the camera is next loaded, so it also covers crashes and server restarts.
- Paused cameras are no longer locked for other players. Once an exposure is paused, any player can unload the plate (Shift+RMB) or recover the camera (Shift+Ctrl+RMB). Previously a camera carrying someone else's exposure could be left effectively dead for everyone. An actively running exposure is still protected.
- Recovering a camera (Shift+Ctrl+RMB) no longer leaves a stale state that could cause a new camera placed at the same position to be incorrectly hidden in subsequent handheld shots.

Plates

- Loading a plate that has dried out now shows a warning. Attempting to expose it is blocked outright.
- Dried plates in an exposing or paused-exposure state can now be reclaimed with water in a development tray. Previously they were stuck and could not be recovered.

Frames & Photographs

- Frames placed facing east, south, or west now drop and pick up as the standard frame and stack correctly with crafted ones.
- Framed photos now prefetch their image at load instead of on first render, so they no longer show blank while downloading on multiplayer clients.
- Retrieved plates should no longer render invisible after reloading a single-player world.

Configuration

- Development tray chemistry amounts and pour durations are now driven by config (DevelopmentTrayChemicalUnitsPerUse and DevelopmentTrayInteractions) instead of hardcoded values.
- Removed several config fields that were defined but had no effect. Users should delete their current collodion.json after updating.
- Image-effect commands and the captured baseline now route to `wetplate.json`.

Under the hood

- Finished plates no longer carry a leftover development step attribute.
2.0.0 collodion
1.22.0 - 1.22.3
319 Jun 13th at 3:07 AM collodion-2.0.0.zip 1-click install

v2.0.0:

Photo Exposure

- Exposing a plate onto glass now happens in real time, rather than capturing a single instant.
- Players control the shutter manually -- the longer it's left open, the more light the plate accumulates.
- The wet plate collodion process has an optimal exposure window of around 8 seconds; exposing for less or more than this affects the tonal quality of the developed photograph.
- Accumulated light is run through models borrowed from real photographic chemistry (linearised light accumulation, a Hurter-Driffield density curve, and Schwarzschild reciprocity) in pursuit of an authentic exposure response rather than a simple brightness average.

Partial Exposures

- An exposure builds up in memory as a player shoots. When it leaves the camera, that accumulated light is written to disk as a partial exposure carried by the plate.
- Loading the same plate into any camera picks up exactly where the partial exposure left off.
- This works across camera types -- a plate started in a mounted camera can be resumed in a handheld field camera and vice versa.
- A partial exposure is locked to the photographer who started it, other players cannot keep exposing it or develop it.
- **If a plate carrying a partial exposure is lost or destroyed, its saved data remains on disk as an orphaned file. Orphaned partials do not affect gameplay but accumulate over time and can be cleaned up via commands.**

 

Mounted Camera

- The field camera can now be deployed on a wooden tripod for fixed-perspective, hands-free capture.
    Deploying:
    1. With a tripod in the offhand, Shift+Right-click to attach it to the camera.
    2. Open the viewfinder (Right-click) and frame the shot.
    3. Left-click to set the camera down as a block at the current position, locking in the framing.
- Once placed, the camera renders its own view of the scene, independent of where the player looks or moves.
- That view is locked to the exact position and facing of the player when it was set. Players can walk into view and appear in the resulting photograph.
- Partial exposures from a deployed camera behave exactly like handheld ones, including resuming across camera types.
If the game window is resized while a deployed camera exposure is in progress, the accumulated frames are discarded and the exposure restarts from zero.

Developing & Fixing

Exposed plates are turned into photographs in the development tray by pouring chemistry over them one step at a time.

 

- Pour developer to bring the image up. Full development takes five pours, and the image appears stronger with each one.
- Once fully developed, pour fixer once to make the photograph permanent.
- Only the original photographer can develop or fix their own exposed plate. After fixing, the finished photograph can be handled by anyone.
- Plates are wet throughout this process and will dry out if left too long. A dried plate can no longer be developed or fixed -- pour water over it to wash it back down to a blank glass plate and start over.

Photographs

Silver density simulation

- Developed photographs are no longer just a post-processed image -- the physical behavior of silver is simulated.
- Each pixel's brightness determines how much metallic silver was deposited at that point on the glass plate: bright areas of a scene produce dense, opaque silver, while dark areas leave the glass nearly clear.
- The resulting plate is a realistic silver-on-glass negative image rather than a normal positive.

Development progression

- A freshly exposed plate holds only a latent image; it emerges gradually as developer is poured over the plate.
- The most silver-dense areas (the brightest parts of the scene) appear first, while shadows and corners fill in last.
- This emergence plays out live, so nearby players can watch the image develop in multiplayer.

Ambrotypes (viewing in frames)

- A developed plate is still a negative, so to view it as a normal image it must first be placed into a frame, which mounts it over a black backing.
- The transparent glass in the shadow areas shows only black; the opaque silver in the bright areas reads as a light tone against that black.
- The result is a positive image -- this emulates the ambrotype technique used in historical wet plate collodion photography.

Under the hood

- The plate lifecycle was rebuilt around a single stage value carried on the plate, rather than swapping the plate between separate items at each step. Behavior is the same, but plate state is now tracked more reliably across exposure, development, and storage.
- Plate drying now runs on the game engine's own drying system instead of a custom timer, so wet plates dry consistently with the rest of the game's wet/dry mechanics.
- The selection outline on hovered blocks is now suppressed during any active capture (mounted or handheld) so it does not appear in the photograph.

 

Commands:

.collodion clearpex -- reports how many partial exposure files are on disk and how many are orphaned (not associated with any plate in the player's inventory). Run .collodion clearpex confirm to delete only the orphaned files; any partials still linked to plates the player is carrying are left untouched.
.collodion export -- exports the developed or finished plate the player is currently holding as a viewable composite PNG file to `ModData/collodion/photos/exports/`.
.collodion clearcache -- clears local photo render caches. Use this if a synced photo is not appearing correctly on plates or frames.

Configuration:

- Most timings, costs, and behavior -- pour durations, chemical amounts, how long plates stay wet, plate-box drying, the film look, and capture limits -- are tunable in `collodion.json` (generated in the game's `ModConfig` folder). In multiplayer the server's values are authoritative for gameplay limits.
1.2.1 collodion 351 Mar 29th at 7:28 PM collodion-1.2.1.zip 1-click install

v1.2.1

Fixes

- Fixed(?) a server crash when interacting with plate box slots (attribute read method change)
- Fixed the viewfinder not restoring correctly across repeated open/close cycles
- Fixed several multiplayer null-reference crashes in server packet handlers, block interaction, and block entity deserialization
- Fixed plate box slots sometimes producing ghost items when clicking with empty hand
- Fixed photo uploads and downloads having a potential data race under concurrent access; abandoned mid-transfer uploads are now pruned automatically
- Fixed two players capturing a photo at the same second producing colliding filenames; filenames now include a random suffix
- Fixed wall-mounting a camera sling ignoring land claims; all three placement/removal paths now respect claim permissions
- Fixed a rare case where a plate could be silently lost if the development tray's block entity failed to reattach after a block swap; the plate now drops as an item instead

Features

- Wet plate drying time is now configurable in `collodion.json` (default now 40 minutes)

Other

- Organized the language file to make it easier to translate

1.2.0 collodion 61 Mar 29th at 1:30 AM collodion-1.2.0.zip 1-click install

This update adds a large round of new features, rendering improvements, performance work, and general polish across the wet plate workflow. Old world saves shouldn't be affected but it's always best to back them up.

New Features

- Added camera sling for carrying and hanging the camera.
- Added the Plate Box block for plate storage and display.
- Added support for placing adjacent framed photos by clicking existing frames.
- Added long-exposure groundwork and improved timed capture flow.
- Added configurable wetplate effects.
- Added configurable gameplay, sync, and capture pipeline settings.

The Camera Sling

- You can now craft a Camera Sling to store your camera and quickly take it out when you're ready to capture an image.
- Place the sling item in Combat Overhaul's left shoulder slot and press R while holding the camera to wear it over your shoulder and free up an inventory slot.
- Pressing R while looking at a wall surface will instead nail the camera and sling onto the wall for later use.

The Plate Box

- Plates will now start to dry up from the time they've been silvered until they've eventually been exposed, developed, and treated with fixer.
- Dried plates are unusable and can only be recycled back into rough plates.
- You can now craft a Plate Box to carry up to 8 plates around and keep them from drying up.

Photo Exposure

- Exposing images onto plates now takes time (5 seconds by default).
- Any movement (walking, turning) during this exposure time will affect the quality of the photo, leading to blurring or smearing of the image.

Framed Photos

- You can now place two framed photos on the same wall or ground face.
- Alternate frame textures from boards persist on double-photo blocks.

Gameplay And Mechanics

- Plates that cannot dry out can now stack up to 8.
- Reduced the time to pour collodion onto clean plates from 5 seconds to 2.5 seconds.
- Development tray interaction text and tips were adjusted to better match the intended processing flow.

Visual And Rendering Improvements

- In-hand framed photos now crop more like their placed versions.
- Movement artifacts and wetplate effects were refined and made configurable.
- Fixed mirrored-image issues on developed plates, finished plates, and framed photos.
- Improved third-person transforms for frames and plates, plus GUI transforms for framed photos.
- Adjusted the unfired tray transform so it sits properly in the pit kiln.

Audio

- Wired new camera, Plate Box, and viewfinder sounds.

Guide And UX

- Expanded the handbook guide to cover newer features.
- Removed image-dependent framed photo items and blocks from creative inventory.

Performance

- Improved photo rendering efficiency so placed and displayed images update with less overhead.
- Improved cleanup of old multiplayer photo-transfer data during long play sessions.
- Improved image capture performance to reduce unnecessary slowdowns while taking photos.
- Reduced memory buildup during long sessions.
- Improved frame rendering efficiency in areas with lots of placed photos.

Fixes And Stability

- Reduced stuttering after each development tray pour stage.
- Improved placement behavior so framed photos and related items behave more reliably when placed.
- Improved cleanup when the mod loads and unloads to help prevent lingering issues during play.
- Reduced several crash cases and startup related errors.

1.1.0 collodion 936 Feb 8th at 10:43 PM collodion-1.1.0.zip 1-click install
  • Added new 'Collodion Photography' guide to the game's handbook
  • Added sounds for better feedback on polishing & pouring interactions
  • Frames can now be reskinned with wooden boards, matching their crafting recipe
  • Made plate devlopment & finishing in trays more interactive
    • Developer now needs to be poured over the plate multiple times before finisher can be applied
      • The developer/finisher liquid will appear in the tray during pouring
      • The chemicals will now fizz after each pour interaction has completed
    • The image on the plate will now begin to develop, becoming more visible with each pour
    • Finisher does not affect the image at all, but will be used to stop the chemical drying process in future updates
  • Added more options to the mod config file
    • NOTE: Mechanics such as the development process have not been tested with non-default options
1.0.7 collodion 418 Jan 28th at 10:15 PM Collodion-v1.0.7.zip 1-click install

- Fixed (?) build error with last release

1.0.6 collodion 48 Jan 28th at 7:39 PM Release Retracted

Retraction Reason:

Build has compile issues which messed with the mod loading

Changelog:

  • Fixed invisible gui/model for framed photographs
  • Fixed gui transforms for all liquids
1.0.5 collodion 199 Jan 28th at 1:27 AM Collodion-v1.0.5.zip 1-click install

Fixed build issue with previous release

1.0.4 collodion 36 Jan 28th at 12:41 AM Release Retracted

Retraction Reason:

Build has compile issues which messes with the mod loading

Changelog:

  • Fixed photo squishing when applied to textures
  • Fixed texture/gui transform of Dry Collodion Mix
    • Now look and acts like a crushed material, can place on ground
  • Framed photo recipe now shows up in the handbook
1.0.3 collodion 65 Jan 27th at 8:09 PM Collodion-v1.0.3.zip 1-click install
  • Fixed Camera recipe
  • Changed Collodion recipe
    • Craft Dry Collodion Mix from cattails/flax/papyrus and resin
    • Seal Dry Collodion Mix in 10L of water to get collodion syrup
  • Polishing rough glass plates no longer consumes cloth from hand
    • Configurable in JSON config
1.0.2 collodion 100 Jan 27th at 2:20 AM Collodion-v1.0.2.zip 1-click install

- Fixed issue where clients wouldn't download pictures from the server properly

1.0.1 collodion 26 Jan 26th at 5:38 AM Collodion-v1.0.1.zip 1-click install
  • Separated server and client code in preparation of testing / finishing server implementation
  • Cleaned up debug / development code across codebase
  • Consolidated all config options to single 'collodion.json' config file
  • Changed camera texture to use base game's debarked oak texture
  • Fixed ground transforms for all models

 

Coming soon:
- Server-side testing and validation of sync and lastseen mechanics

1.0.0 collodion 26 Jan 25th at 8:20 AM Collodion-v1.0.0.zip 1-click install

Initial v1.0.0 release


56 Comments (oldest first | newest first) (threaded | flat)

Cowraiser20, Jul 12th at 11:18 PM (modified Jul 16th at 1:28 AM)

It took a little bit to figure out, but i love this mod, and thank you for not needing a rare scroll or somthing to build the camera, also im having trouble with the plate box, it wont store any plates

CioBonBon, Jul 11th at 5:22 PM

this is sooo good

Vykax, Jul 3rd at 12:10 AM (modified Jul 3rd at 4:16 AM)

Thanks for answering my questions earlier, I've been loving this mod. A little hard for me to get low light exposures right (understandably). Made me wonder if you've considered adding a light meter. Point it at a block you want to expose for and have it tell you how many seconds for that specific block to be exposed for so you can figure out where you want your highlights and shadows based off that.

Fowl , Jul 3rd at 10:52 PM
@Vykax: Thanks for answering my questions earlier, I've been loving this mod. A little hard for me to get low light exposures right (understandably). Made me wonder if you've considered adding a light meter. Point it at a block you want to expose for and have it

There are plans for timed and automatic camera tiers in an extended photography mod that will share the Photocore library. They'll probably make their way into this mod too eventually.
I did some testing and lowered the Inertia Point in the exposure profile. This controls the threshold that shadows and dark details clip straight to black; it was a little high so most of the detail in low lighting was being lost even in really long exposures. I also found and fixed a few bugs with long exposures so after the next update you should reliably be able to take exposures over 10x longer than what's necessary for bright settings. I'm getting some decent results in low light settings with 60-80s exposures now. 

If you don't want to wait for the next release you can edit ModData\photocore\chemistry-profiles.json and change the value for "Inertia" on line 14 from 0.1 to 0.04. If you're in singleplayer there's also a dev tool I use for tuning the settings you can bind in the controls. You can turn the preview on and place a mounted camera down and it will show you what a baseline (8s) exposure would look like with the current settings as well as a live preview of an exposure's progress (as seen in the screenshots).

Thanks for the continued feedback!

GonnaMunchAss, Jul 1st at 8:16 AM

contact printing and enlargers?

Fowl , Jul 3rd at 10:59 PM
@GonnaMunchAss: contact printing and enlargers?

Don't really have a timeline yet but Moby and I have been cooking up some cool ideas involving both of those things πŸ‘Œ

Pursec, Jul 1st at 1:12 AM

Following up on earlier, the remap you did causes dungeon gen to fail and crash when generating fresh. Removing your mod or downgrading to before the remaps results in normal errorless generation. 

Fowl , Jul 1st at 2:32 AM
@Pursec: Following up on earlier, the remap you did causes dungeon gen to fail and crash when generating fresh. Removing your mod or downgrading to before the remaps results in normal errorless generation.

v2.0.2 was just reuploaded with the remap method you suggested. Dungeon gen crash should be gone now too, the path key in the json was missing a colon and the engine didn't like that. Lesson learned not to test releases in superflat worlds πŸ€”

Pursec, Jun 30th at 10:54 PM (modified Jun 30th at 10:55 PM)

I dont believe you did the remap correctly, 0 of the existing items remapped post-update. Looking at your remapper file, its not a json patch to "game:config/remaps.json" but rather some random floating remap json file sitting under photocore/config (as far as I know from looking at the remaps for other mods all of them use a json patch). For remaps you should have a json placed under your own domain/patches such as "photocore/patches/remaps.json) and the patch adding your remaps in a format like: 

[
  {
    "file": "game:config/remaps.json",
    "op": "add",
    "path": "/expandedfoods:expandedfoods",
    "value": [
  "/iir remapq expandedfoods:bowl-peat-blue expandedfoods:bowl-peat force",
    ]
  }
]
Fowl , Jul 1st at 1:48 AM
@Pursec: I dont believe you did the remap correctly, 0 of the existing items remapped post-update. Looking at your remapper file, its not a json patch to "game:config/remaps.json" but rather some random floating remap json file sitting under photocore/config (as f

Ah shit 🀦 Not sure how I managed to get the things in my test world remapped then lol. Looking into this and the dungeons issue now.
This has been my first modding endeavor for VS so I'm still running into new things I need to learn with every update. Thanks for the patience.

Vykax, Jun 30th at 10:52 PM

It'd be nice to have a signifier of when you begin and end exposure, the first few times I tried exposing an image I was convinced I was doing it wrong.

 

Also, and I'm not sure if this is just on my end, I hold LMB while looking down the viewfinder with RMB but after I release LMB i'm locked looking down the viewfinder even after I release RMB unti I click LMB again.

Fowl , Jul 1st at 2:53 AM
@Vykax: It'd be nice to have a signifier of when you begin and end exposure, the first few times I tried exposing an image I was convinced I was doing it wrong. Also, and I'm not sure if this is just on my end, I hold LMB while looking down the viewfinder with RM

I'm planning to redo the field camera model so that both currently loaded and currently exposing are more visually indicated. I also want to redo the sounds and add the missing sounds for every item.

As for the exposure controls, clicking LMB starts the exposure and you can release everything, then you click LMB when you want to stop the exposure. The guide is a little unclear, I'll update that and the descriptions so it reads more like "click LMB to slide the shutter up/down" like the controls are intended to mimic. That being said I can see where having to release LMB and click it again could make the mouse flinch at a high sensitivity so I'll probably add a setting for hold vs toggle in the future.

Vykax, Jul 1st at 6:05 AM
@Fowl: I'm planning to redo the field camera model so that both currently loaded and currently exposing are more visually indicated. I also want to redo the sounds and add the missing sounds for every item.As for the exposure controls, clicking LMB starts the ex

Ok that makes total sense, thanks for explaining it for me. My instinct was that of a modern camera where, unless you set a timer, you usually hold a button to open the shutter and release to close it, but this makes sense.

Pursec, Jun 29th at 10:41 PM

Hey, for existing servers/worlds, can you provide an automatic remapper? Just updated and while I preserved the photos in the modData, the existing photoplate items and frames did not get auto mapped to the new photocore domain so they exist as missing blocks

Pluto3301, Jun 30th at 11:04 PM
@Fowl: Thanks for pointing that out. If you reinstall v2.0.2 it should auto remap now πŸ‘ Let me know if you come across any further issues

Hello, I have also had this issue and I just installed the update about 10-15 minutes ago. I don't see any update was pulled and reposted. I was able to roll back to 2.0.1 but going to 2.0.2 gives me a giant wall of red text with errors everywhere (mostly about terrain) which is what I assume is what @Pursec mentioned originally. 

Skie, Jun 27th at 4:04 AM (modified Jun 27th at 5:34 AM)

Some of this is really hard to figure out, are you considering adding the instructions in game?
I found myself re-opening this page many times through my photography tries

jogus, Jun 18th at 12:15 AM

are there any major mods that anyone knows of that makes this mod not work? it works fine on my single player world, but a lan world w my friend, (with admittedly a shit ton of mods) the items become uninteractable for lack of a better term. i can craft the glass panes, then i can usually place them, but after i polish them i can't ever use the collodion on the polished pane, and then i can't ever seem to put them down after i pick them up, polished or not.

Fowl , Jun 23rd at 3:41 AM
@jogus: are there any major mods that anyone knows of that makes this mod not work? it works fine on my single player world, but a lan world w my friend, (with admittedly a shit ton of mods) the items become uninteractable for lack of a better term. i can craft t

Sounds like it could be a block/item attribute data issue with another mod. The next release will include some extra debug logging to track down the problem. Would you mind reaching out on Discord (my ID is f0wler) after then if you still experience the issue so I can iron it out? Thanks!!

jogus, Jun 26th at 6:00 PM
@Fowl: Sounds like it could be a block/item attribute data issue with another mod. The next release will include some extra debug logging to track down the problem. Would you mind reaching out on Discord (my ID is f0wler) after then if you still experience the i

hey! i think it was our world being corrupted by some mod, (ecology flora), when we deactivated that mod, it seemed to fix this one, (and every other mod that was causing issues.) thank you anyway!

IWillSoonReturn, Jun 17th at 2:19 AM

is there progression to sepia or coloured photos planned?

Moby_, Jun 17th at 12:54 PM
@IWillSoonReturn: is there progression to sepia or coloured photos planned?

I can talk about that - we're planning to work together to make new processes. Photographic printing (taking a negative and printing it into a positive) is planned, Lumière autochromes are considered

thatKazzy, Jun 16th at 3:55 PM

So excited V2 is ready for public release! Have been wanting to take pictures of my world so bad!

Kartoffeln15, Jun 14th at 1:40 PM (modified Jun 14th at 1:57 PM)

@Fowl tiny bug i just found, sometimes relogging and then taking a photoplate out of a frame deletes the plate itself and changes the frame into a different block (same name but cant be stacked anymore)

edit 1: it actually doesnt delete them it just makes them invisible

DeadlyEssence01, Jun 13th at 3:18 PM

Thanks for updating to 1.22! Great work on this mod!

Oolon, May 27th at 3:01 PM

Patiently awaiting an update! 

Thanks much for the hard work, we love it on the server I host and miss having it!

Fowl , May 13th at 4:21 AM (modified May 13th at 5:49 AM)

SmogIron Ferik Ori_IsHere Robulf
Thanks all for trying out the mod! I appreciate the feedback. I've been super busy but I've got some free time coming up & I have some really exciting things cooking for Vintage Story photography behind the curtain!
I'll update the mod to 1.22 soon and then progress will stall while those things are underway, but it will worth the wait.

Robulf, May 1st at 10:34 AM

Please update to 1.22! I really want this mod to work as I am a photo nerd 

3xtremedude, Apr 22nd at 9:11 AM

Fowl Is there any way to revert a dried plate, or to obtain a complete photo item from the photograph data? I missed the part that says once a plate is dried it becomes unusable, even after the photo is taken :(

Fowl , May 13th at 4:15 AM
@3xtremedude: Fowl Is there any way to revert a dried plate, or to obtain a complete photo item from the photograph data? I missed the part that says once a plate is dried it becomes unusable, even after the photo is taken :(

Sorry for the late response. Every photo that gets taken with the camera gets saved to the ModData folder (...\AppData\Roaming\VintagestoryData\ModData\collodion), so theoretically if you haven't uninstalled the game since the photo was taken it should be in there. If you're still on that world (or want to use the photo in another world) I think you could probably:

  1. Make a new plate and take a random photo with it, then close the game
  2. Find that new photo in the ModData folder and take note of its name, then delete it from the folder
  3. Find your old photo and rename it to whatever the photo you just deleted was named

 

I think that should make the old photo appear on the newer plate

Ori_IsHere, Apr 19th at 3:01 AM

Hello! I can't quite figure out how to wear the sling? It says to put in the left shoulder slot, but as far as i know theres no left shoulder slot??? This mod seems really fun and im really excited to take pictures!

Ferik, Apr 14th at 2:04 PM

Ok so, I'm aware this was made for 1.21. So this is likely why taking a photo crashes the game, but in case it should be working on 1.22 rc8, here's the callstack

Spoiler!

Running on 64 bit Windows 10.0.26200.0 with 130983 MB RAM
Game Version: v1.22.0-rc.8 (Unstable)
14/04/2026 10:03:11: Critical error occurred in the following mod: collodion@1.2.1
Loaded Mods: tallheightwatershedslandforms@2.1.0, blocklayeroverhaul@1.0.2, fbgtamer@1.0.0, firewoodplus@1.0.0, glassdoor@1.0.0, glasstrapdoor@1.0.2, nailsmold@1.0.2, pipeleaf@2.5.1, prospecttogether@2.2.0, seawaterevaporation@1.0.0, shiverscanclimb@1.0.0, SmokingChimneys@1.3.0, spyglass@0.6.0, stickstepsounds@1.0.0, sungaze@0.1.0, game@1.22.0-rc.8, vsimgui@1.2.0, arthursjournal@2.0.0, weedgardens@1.0.1, ancienttools@1.6.1, attributerenderinglibrary@3.0.0-pre.11, egocaribautomapmarkers@5.0.1, beararmorrepair@1.0.3, betterfirepit@1.2.0, bloodtrail@1.2.0, butterflycases@1.0.2, calmrapids@1.0.0, carryon@1.14.0-pre.3, chunklod@1.1.0, collodion@1.2.1, commonlib@2.8.0, configlib@1.11.0, entitycolortint@2.1.3, farmlanddropswithnutrients@1.2.2, herbarium@1.4.1-rc.1, hudclockpatch@1.1.2, hydrateordiedrate@2.4.2, icebreaker@1.0.2, iwantsmoothtemperature@1.1.5, justsnow@1.0.2, JustTrapdoors@1.0.2, mif@1.0.1, morepiles@2.2.0, ndltreegrowth@2.0.1, noscreenshotmessagemod@0.1.1, petai@4.0.3, placeonslabs@1.0.4-pre.1, realsmoke@1.2.0-rc.8, realtimefirepit@1.0.0-dev.120, remotetradercheckmod@0.6.0-rc.2, rivers@5.0.0, saltandsands@1.2.0, seamlessrapids@1.0.1, statushudcont@4.3.0, stonerailings@1.4.0, creative@1.22.0-rc.8, vsinstrumentsbase@2.0.7, vsroofing@1.5.1, survival@1.22.0-rc.8, watersheds@5.0.2, autoconfiglib@2.0.10, cats@4.0.1, windowstoragelib@1.1.1, vanillapanestorage@1.7.2, windowstorage@1.7.1
System.MissingFieldException: Field not found: 'Vintagestory.API.Common.Entities.Entity.Pos'.
at MonoMod.Core.Interop.CoreCLR.V60.InvokeCompileMethod(IntPtr functionPtr, IntPtr thisPtr, IntPtr corJitInfo, CORINFO_METHOD_INFO* methodInfo, UInt32 flags, Byte** nativeEntry, UInt32* nativeSizeOfCode)
at MonoMod.Core.Platforms.Runtimes.Core60Runtime.JitHookDelegateHolder.CompileMethodHook(IntPtr jit, IntPtr corJitInfo, CORINFO_METHOD_INFO* methodInfo, UInt32 flags, Byte** nativeEntry, UInt32* nativeSizeOfCode)
at Collodion.CollodionModSystem.CaptureHoldStillSample(EntityAgent player, Boolean accumulate)
at Collodion.CollodionModSystem.CaptureHoldStillSample(EntityAgent player, Boolean accumulate)
at Collodion.CollodionModSystem.StartHoldStillTracking(EntityAgent player, String photoId)
at Collodion.CollodionModSystem.RequestPhotoCaptureFromViewfinder(EntityAgent byEntity, Boolean silentIfBusy)
at Collodion.ItemWetplateCamera.OnHeldInteractStep(Single secondsUsed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel)
at Vintagestory.API.Common.CollectibleObject.OnHeldUseStep(Single secondsPassed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel) in VintagestoryApi\Common\Collectible\Collectible.cs:line 1478
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.HandleHandInteraction(Single dt) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 311
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.OnGameTick(Single dt) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 164
at Vintagestory.Common.GameTickListener.OnTriggered(Int64 ellapsedMilliseconds) in VintagestoryLib\Common\Model\GameTickListener.cs:line 36
at Vintagestory.Common.EventManager.TriggerGameTick(Int64 ellapsedMilliseconds, IWorldAccessor world) in VintagestoryLib\Common\EventManager.cs:line 134
at Vintagestory.Client.NoObf.ClientMain.MainRenderLoop(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 888
at Vintagestory.Client.NoObf.ClientMain.MainGameLoop(Single deltaTime) in VintagestoryLib\Client\ClientMain.cs:line 780
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 173
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 741
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 685
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95

Event Log entries for Vintagestory.exe, the latest 3
==================================
{ TimeGenerated = 14/04/2026 10:03:15, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.22.0.0, time stamp: 0x693c0000
Faulting module name: openal32.dll, version: 1.23.0.0, time stamp: 0x63dd31ad
Exception code: 0x40000015
Fault offset: 0x00000000000df046
Faulting process id: 0x898c
Faulting application start time: 0x1dccc1734f641df
Faulting application path: C:\Users\frede\AppData\Roaming\Vintagestory\Vintagestory.exe
Faulting module path: C:\Users\frede\AppData\Roaming\Vintagestory\Lib\openal32.dll
Report Id: 1ab77cb2-0bbb-47a0-bf06-c0510b82ffd2
Faulting package full name:
Faulting package-relative application ID: }
--------------
{ TimeGenerated = 13/04/2026 20:51:05, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.22.0.0, time stamp: 0x693c0000
Faulting module name: openal32.dll, version: 1.23.0.0, time stamp: 0x63dd31ad
Exception code: 0x40000015
Fault offset: 0x00000000000df046
Faulting process id: 0x8d38
Faulting application start time: 0x1dccba8aafb7d81
Faulting application path: C:\Users\frede\AppData\Roaming\Vintagestory\Vintagestory.exe
Faulting module path: C:\Users\frede\AppData\Roaming\Vintagestory\Lib\openal32.dll
Report Id: 668abe5c-681c-44db-bb0f-829838d5ccaa
Faulting package full name:
Faulting package-relative application ID: }
--------------
{ TimeGenerated = 13/04/2026 20:46:21, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.22.0.0, time stamp: 0x693c0000
Faulting module name: openal32.dll, version: 1.23.0.0, time stamp: 0x63dd31ad
Exception code: 0x40000015
Fault offset: 0x00000000000df046
Faulting process id: 0x893c
Faulting application start time: 0x1dccba7edc42bce
Faulting application path: C:\Users\frede\AppData\Roaming\Vintagestory\Vintagestory.exe
Faulting module path: C:\Users\frede\AppData\Roaming\Vintagestory\Lib\openal32.dll
Report Id: 85145126-11de-42b9-a368-0efb499fd30c
Faulting package full name:
Faulting package-relative application ID: }

Ferik, Apr 13th at 1:56 PM

I kept thinking how I wished there was a mod for this, but never even SEARCHED if there were. Silly me. Thank you for making this! It's the one thing from the minecraft modding scene i was missing.
Gonna piggy back on porkjorker321's comment regarding coloured cameras using temporal gears, that'd be awesome πŸ™‡

SmogIron, Apr 9th at 4:24 AM

I want to thank you for this mod, I often find myself in awe of how scenic this game is and it's very charming to be able to capture those moments in an immersive way. One thing that would be nice is having exposure time be a variable so you can capture darker scenes. The night sky is pretty hard to capture without tweaking the settings and indoors is kinda dark too.

I'm quickly filling up my walls with photos, maybe adding some kind of photo book would be neat also. Thanks again for all the effort on this! <3

SmogIron, Apr 8th at 11:44 PM

I don't have the recipe for photo frames for some reason.

Schmoopy, Mar 29th at 7:59 PM (modified Mar 30th at 4:36 AM)

@fowl
try placing the plate box empty, opening it, and right clicking en empty slot in the box, thats how it crashed for me.

Secondly, upon further use ive successfully taken 4 photos and framed them, in which the mod is really awesome and great in its function.

However, i noticed sometimes the view finder doesnt always work on the camera. so when holding right click you hold the camera out like your lighting a fire pit.

When this happens and a photo is taken you can actually see the camera and your hands in the photo once developed.

 

Edit: 2 new bugs i found + 2 suggestions.

Bug 1: when right clicking empty plate box slot with an empty hand it duplicates a new rough plate into the slot.
Bug 2: Picture frame is compeltely black on 2 of my 4 photos upon restarting server and joining. 
Suggestion 1: can you make it so the picture frame sits on top of wall papers? i have abunch in my house walls and i cant hang my photo up on them.

Suggestion 2: can you also make it so when you crouch to place a framed photo on a surface upright, you can also make it angled ?

Fowl , Mar 29th at 7:43 PM (modified Mar 29th at 7:44 PM)

@Schmoopy Thanks for letting me know. I couldn't reproduce the server crash but v1.2.1 should hopefully fix any issues with the plate box slots. The plates dry according to the world time so a faster time speed setting will make them dry up faster. They did dry up a bit fast at default timespeed so I doubled it to 40 in game minutes, that number can also be changed in the mod config now. Dried plates can be washed with water in the tray to get rough plates back.

Right now the drying timer starts as soon as the silvered plate is created. Realistically plates wouldn't start drying up until after they've been taken out of the barrel so long as there's still solution in it; I'll try adding that in soon.

DUCATISLO, Mar 29th at 6:59 PM

oh looks cool

MiraLeaps, Mar 29th at 11:55 AM

This is my favorite mod on the citadel.

Schmoopy, Mar 29th at 8:44 AM

just tried  this in my vanilla 2 player server.

The right click DOES NOT work for aiming the view finder with the camera, and then also the plates literally dry in moments. by the time i load a plate, take a shot, take it out and set it down its already dry, in which i dont know what to do with dried frames so i tossed them.

Schmoopy, Mar 29th at 7:17 AM

crashed server after making plate box, placing it, opening the lid and right clicking the empty box.

Moby_, Mar 18th at 9:05 PM (modified Mar 18th at 9:06 PM)

That looks awesome! I've been meaning to add more realistic photographic development to KoS Photography for so long, I'm glad someone got to it!
I might even make a ChemistryLib + Expanded Foods (for gelatin) compatibility mod someday

By the way, I've been thinking about timed exposure (and the possibility of double exposure) and have a few ideas about it (+ clues about how to make the code, along with a WIP lib to support multiple client cameras that's still a little finnicky, but if you fixed the first person hand showing up on pictures issue without calling for the HideGUIs shortcut, there's a good chance you could help with that), if you're interested

Fowl , Feb 8th at 10:44 PM

@tuesdaey Thanks for the feedback. Glad you like it!

tuesdaey, Feb 2nd at 5:53 AM

all issues fixed since last update push. this mod is awesome btw

porkjorker321, Feb 1st at 6:32 AM

So exposure but vintage? Very sigma
But matey will ye consider adding temporal cameras that make colored pictures? Maybe they could be made with titanium or steel to make them balanced

Chuvaak, Jan 30th at 5:00 PM

Hi. I liked your mod and I made a Russian translation for it. https://drive.google.com/file/d/1f24LQ90lq2o65K-qb5IBGvd37QVWoIZ9/view?usp=sharing

Fowl , Jan 28th at 10:15 PM

@tuesday Not sure why that keeps happening πŸ€” Should be fixed now!

tuesdaey, Jan 28th at 8:04 PM

Same version build error I think. 1.0.6 doesnt function on my server, the items dont exist anymore.

Fowl , Jan 28th at 7:41 PM

@tuesdaey Thanks for the feedback. Framed photos should be fixed now πŸ‘

Retexturing frames still takes plank blocks until next update

tuesdaey, Jan 28th at 6:32 PM

thanks for the quick turnaround on fixes! the squash and stretch fix is awesome, and the camera + collodion crafting bug is squashed!

the new version however did break the ability to frame photos. I see the recipe for the framed photo, but the craft doesnt work.

Nyaaa_Natchi, Jan 28th at 6:31 PM

Just an incredible mod. Parroting a suggestion (From Saint Marcos) before development gets too far; Maybe its possible to add a guide to the handbook. The process for photos is quite specific and I had to go back and forth between my game and browser until I put up signs to detail the process (Many signs).

Thank you

tuesdaey, Jan 27th at 7:15 PM

tested on a modded 1.21.6 server

-polishing the rough plate with a cloth consumes the entire cloth, not sure if this is intended
-crafting recipe for camera does not function
-trouble crafting the collodion syrup, as the recipe indicates you need an impossible 7-slot cooking pot in order to make it !

otherwise, the mod works perfectly, development and display worked without a hitch and other players were able to see newly developed photos in sync with everyone else

Saint_Marcos, Jan 27th at 3:22 PM

ok so first of all, this is amazing !!! i saw the other mods and was so sad they were outdated, so this is such a wonderful surprise.
I just installed it on my server, played around with it a little and heres what i got so far:

  1. The obvious thing: the photos are squished because it's condensing the whole screen into it, im assuming theres no way to crop this on your end..? i know the spyglass mod has a square viewfinder so something akin to that would be perfect for the square photos, but just curious
  2. the tutorial here is great, but should def be in game !
  3. unfortunately the crafting recipe for the framed photo doesnt show in the handbook for me? i looked at the files to see i needed to put planks in with the photo haha
  4. really minor and subjective thing but i feel like it should be boards instead of planks used for the frame hehe using the block feels like too much and kinda minecrafty


still need to test if theres any sync issues/others can see the pics etc lol but thank you so much for making this