Mods / Kingdom of Science: Photographic Memories

Category: #Cosmetics #Furniture #Technology
Author: Moby_
Side: Both
Created: Mar 12th 2023 at 1:27 PM
Last modified: Jun 10th at 12:50 PM
Downloads: 8937
Follow Unfollow 181

Latest file for Various v1.19.x: 1-click install

This mod requires ChemistryLib (1.1.0 or higher).


The new camera model was made by Ruddi

If you find a bug, have a suggestion or want to talk, feel free to join my Discord server!


About the mod

Kingdom of Science: Photographic Memories is the second mod of the Kingdom of Science series, a series that aims to add modern-ish technologies in a vanilla-friendly, primitive way.

(also this mod is my magnum opus, don't expect me to make things as great as this too much xD)

It adds photography to the game, in a vanilla-friendly way.

In this mod, you'll find a few new items:

The Camera, the item you'll need to use if you want to take a picture. To take a picture, hold a camera (you can hide your GUIs with f4 to remove the crosshair as well), aim and right-click. The picture will work like a screenshot: you can take selfies using the third-person camera, for instance.
You'll need to hold photographic paper in your off-hand to take a picture.

Photographic paper, you'll need to hold it in your off-hand if you want to take a picture. It's made in the crafting grid with a container containing silver nitrate and a salted paper.

Photograph, an exposed photographic paper. This is the item that you'll get after taking a picture. You can put it (using right-click) in any of the photograph frames, and you can rename it using the /photoname [PhotographNameWithoutSpaces] command.

You can also duplicate a photograph by right-clicking with it in the air while having photographic paper in the off-hand. (note: names aren't duplicated)

Salted paper and Silver nitrate are the ingredients that you'll need to make photographic paper. Their recipes are in the handbook.

Photograph frames are the blocks used to display photographs. Three variants exist: framed (on the wall, like a painting), borderless (similar to frame, but fills the entire block without any border) and a smaller frame (nightstand frame-style), that can be placed on top of any solid block.



Currently there is one configuration option: photograph resolution. You can set it as any power of two.

The default resolution is 128x, which means that a 4k texture atlas should support over 500 pictures loaded at the same time on client side. 256x would support around 144 concurrent pictures on an otherwise unmodded game.

Note that starting in 1.19.0, the texture atlas is now infinite, so it's not really a problem.



Planned features:

- Color photography. Would be pretty expensive, probably based on the Lumière Autochrome?
- Better feedback when taking a picture (like flashing the screen), disable the GUI automatically... Make the thing more user-friendly
- A way to export pictures after they're taken (get them as a png or a bmp)
- A way to load custom pictures (ones that weren't taken in-game). Maybe this could work with the way to duplicate pictures? export + load?
- Maybe add actual developing, so pictures will be more labor-intensive? Probably some recipe balancing, photography might not be expensive enough

Known issues:

- Sometimes the game crashes when handling photographs in your inventory (mostly when shift+clicking). This is probably due to the fact that photographs hold 65 kilobytes of data each and the inventory system isn't that fond of moving such a large amount of data instantly.
- When not crashing, it's common to experience lag spikes when handling photographs. Again, this is probably due to the large amount of data that they hold.
- Unpredictable behavior that could involve crashes when changing the painting LOD in the settings while having already taken pictures in a world
- The pictures look dark. I already multiplied their brightness by three, I don't really know what to do without risking severe overexposure and artifacts but I'll look into that. Mostly fixed by adding automatic exposure



English and French by myself

Ukrainian by Omi

Version For Game version Downloads Release date Changelog Download 1-click mod install*
v1.4.3 354 Jun 10th at 12:50 PM Show Install now
v1.4.2 124 Jun 7th at 10:13 PM Show Install now
v1.4.1 1209 Mar 20th at 8:12 AM Show Install now
v1.4.0 136 Mar 18th at 12:07 PM Show Install now
v1.3.4 1907 Nov 30th 2023 at 3:02 PM Show Install now
v1.3.3 93 Nov 30th 2023 at 1:22 PM Show Install now
v1.3.2 1197 Jul 25th 2023 at 8:00 AM Show Install now
v1.3.1 561 Jul 2nd 2023 at 9:00 PM Show Install now
v1.3.0 254 Jun 28th 2023 at 2:49 PM Show Install now
v1.2.2 690 May 31st 2023 at 6:36 PM Show Install now
v1.2.1 351 May 21st 2023 at 11:09 AM Show Install now
v1.2.0 797 Apr 22nd 2023 at 2:09 PM Show Install now
v1.1.2 396 Apr 7th 2023 at 2:31 PM Show Install now
v1.1.1 412 Mar 13th 2023 at 9:10 AM Show Install now
v1.1.0 155 Mar 12th 2023 at 6:23 PM Show Install now
v1.0.1 143 Mar 12th 2023 at 4:41 PM Show Install now
v1.0.0 158 Mar 12th 2023 at 2:10 PM Show Install now

31 Comments (oldest first | newest first)

💬 Pursec, Jun 8th at 6:13 PM

Getting a client crash when trying to load onto a dedicated server with the most recent version (1.4.2). Switching back over to 1.4.1 works. I also noticed that 1.4.2 contains a zip for the 1.3.3 version of the mod inside it?

System.Exception: Don't know how to instantiate item of class 'ItemCamera' did you forget to register a mapping?
at Vintagestory.Common.ClassRegistry.CreateItem(String itemClass) in VintagestoryLib\Common\ClassRegistry.cs:line 274
at Vintagestory.Common.ItemTypeNet.ReadItemTypePacket(Packet_ItemType packet, IWorldAccessor world, ClassRegistry registry) in VintagestoryLib\Common\Network\ItemTypeNet.cs:line 195
at Vintagestory.Client.NoObf.ClientSystemStartup.PopulateItems(List`1 items, Int32 listSize) in VintagestoryLib\Client\Systems\Startup.cs:line 570
at Vintagestory.Client.NoObf.ClientSystemStartup.LoadItemTypes() in VintagestoryLib\Client\Systems\Startup.cs:line 388
at Vintagestory.Client.NoObf.ClientSystemStartup.HandleServerAssets_Step1() in VintagestoryLib\Client\Systems\Startup.cs:line 341
at Vintagestory.API.Common.TyronThreadPool.<>c__DisplayClass12_0.<QueueTask>b__0(Object a) in VintagestoryApi\Common\TyronThreadPool.cs:line 120
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()

💬 Ghastly, May 15th at 12:16 AM

I've really enjoyed taking photographs with this mod, Im just seconding what Romix said, I would love to see everything from the Planned features. color photography with a limited color-depth would look awesome, and I think adding developing would (like youve said) add a more appropriate level of labor involved, and personally I would just love to have a little development area. Im excited for all your future mods, Im using all but jonas cycle right now and very much enjoying them! 

💬 Pritis, Apr 22nd at 12:46 AM

Lumière Autochrome as a basis for the color photography would be good, but I would argue color wouldn't be right in a game like this. Sepia, however, would be perfect alongside the pre-existing silver.

💬 Parking, Apr 9th at 4:59 PM

I'm having an issue where this mod stops you from disabling the HUD, and after testing, it seems to cause this problem regardless of what other mods are installed.

💬 RomixERR, Mar 23rd at 11:28 AM

I would really like to see everything from the "Planned Features" list! Very atmospheric and good mod. Runs on version 1.19.4.😍

💬 Moby_Author, Mar 21st at 10:47 AM

Jobnor Joy of Painting has a resolution cap at 32x (due to having three channels for color, they store a lot more data than photographs), but you can split pictures so they span across multiple blocks to get more pixels

💬 Jobnor, Mar 21st at 12:41 AM

oh, shucks! does that mod have a resolution cap? i'm hoping to import images that are slightly less crunchy than base game res lol

💬 Moby_Author, Mar 20th at 8:15 AM

Jobnor I added custom image import to Joy of Painting so it's probably not going to come to KoS:Photographic Memories :)

Although I still want to make a way to duplicate photos between worlds, but that might use Itemizer's planned "attributes copy" feature

💬 Jobnor, Mar 19th at 5:24 PM

very excited to be able to import custom images, ehehe

💬 Moby_Author, Feb 5th at 11:37 AM

Pursec I'm not really sure why that happens but i'll check it. Also, if you change the LOD from 7 to 8 to take "some 256x photos", note that they'll go back to rendering at 128x if you ever put the LOD down again.

Now that 1.19 fixed texture atlases, I might turn photograph resolution into a feature at some point. Like, with a better camera come better pictures, or have it be a tool setting (like the propick things)

💬 Pursec, Feb 3rd at 6:28 AM

Get this crash if I modify the Photograph LOD in the config (trying to just change it from 7 to 8 for some 256x photos) and load into an already made world (which has a photo placed already in it, taken with the 128x/7LOD config). Tested on a brand new world with the modified config and works right as rain with the modified value.  

System.DivideByZeroException: Attempted to divide by zero.
at kosphotography.BlockEntityPhotograph.genPhoto() in D:\Documents\Developpement\_Vintage Story\vsmods_vscode\kosphotography\kosphotography\src\BlockEntity\BlockEntityPhotograph.cs:line 160
at kosphotography.BlockEntityPhotograph.FromTreeAttributes(ITreeAttribute tree, IWorldAccessor worldAccessForResolve) in D:\Documents\Developpement\_Vintage Story\vsmods_vscode\kosphotography\kosphotography\src\BlockEntity\BlockEntityPhotograph.cs:line 124
at Vintagestory.Client.NoObf.ClientChunk.AddOrUpdateBlockEntityFromPacket(Packet_BlockEntity p, ClientMain game) in VintagestoryLib\Client\Model\ClientChunk.cs:line 437
at Vintagestory.Client.NoObf.GeneralPacketHandler.HandleBlockEntities(Packet_Server packet) in VintagestoryLib\Client\Systems\GeneralPacketHandler.cs:line 423
at Vintagestory.Client.NoObf.ClientMain.ExecuteMainThreadTasks(Single deltaTime) in VintagestoryLib\Client\ClientMain.cs:line 769
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 200
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 675
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 650
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 88
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 318
at Vintagestory.Client.ClientProgram.<>c__DisplayClass9_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 128
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 93

💬 Moby_Author, Feb 1st at 10:47 AM

Mendall Good idea! There are a few pictures on the mod banner but I guess they're kinda hard to see, I'll check to see if I can use some of the screenshots sent on discord by people using the mod (they got better pictures than what I can do, and some in multiplayer :D)

💬 Mendall, Feb 1st at 1:26 AM

A mod of this type seems to me to be screaming out for a few screenshots of sample photos so we can see what to expect.


💬 Moby_Author, Jan 24th at 8:19 AM

Novalee ChemistryLib is a purely json mod, it's not going to break probably ever. Vintage Story is amazing for mod backwards compatibility.

There are no known issues with Lavoisier in 1.19 either.

💬 Novalee, Jan 23rd at 5:39 PM

I'm a bit confused; This says it's for 1.19, but the chemistrylib mod it depends on is for 1.18

Does chemistrylib still work? Does Lavoisier?

💬 Yelb, Jan 7th at 9:08 AM

Hello, that’s 1.19 friendly ? Really great mod.

💬 Crabb, Nov 30th 2023 at 6:38 PM

It's working again and it is glorious!

💬 Moby_Author, Nov 28th 2023 at 11:40 AM

Boukyaku Just finished college today so I'm finally free (or at least more free) to get back to modding, I haven't made it work but I have a potential lead, I'll try that.

Thank you for liking the KoS mods :D
Once I figure out how .NET7 modding works, I'll definitely get back to it

Photographic Memories is also one of my favorite mods so I definitely want to make it work again x)
(in fact, I haven't even tried to fix the other KoS mods yet, I think that they're mostly fine but I just really want KoS:PM to work again)

💬 Boukyaku, Nov 20th 2023 at 7:42 AM

Hi, any luck making it work? This is my favorite mod, so I'm looking forward to using it on 1.19 and beyond.
Btw love all of your Kingdom of Science mods, so thank you!

💬 Moby_Author, Aug 26th 2023 at 12:54 PM

artemax44 The significant changes brought by .NET 7 made the mod incompatible, I'm currently trying to make it work

💬 artemax44, Aug 25th 2023 at 7:06 PM


The mod for version 1.18.8 with the new .NET7, doesn't work. No error comes out. The mod just doesn't show up in the game. It is as if he did not have it on, that he does not recognize it.
I will wait for it to be resolved.
💬 DapperDandy, Jul 25th 2023 at 10:39 AM

I believe this isn't compatible with the .NET7 build of the game, doesn't show up in singleplayer and causes a crash on mutliplayer.
Switched to main branch and now it works fine.

💬 Chumber, May 15th 2023 at 11:51 AM

I'm so close to declaring this as my favorite mod, but I have two major issues with it:

120 days to barrel mix spirit of nitre is insane. Lavoisier makes it faster but I have other issues with that mod (mostly sub-0.1l amounts not being present/readble, making portioning extremely difficult).

The other issue is that the photos don't seem to sync to other players in multiplayer, until they go pick the photo out of the frame, and then put it back.


Those two fixed, as a photographer, would make this my top 1 "I will always run this as long as it's working" mod. On the note of pictures being dark, they seem a bit more easily viewed when there's sunlight directly on them; artificial light from torches, lanterns, etc. don't seem to illuminate them at all.

💬 Leksii, May 14th 2023 at 11:28 AM

Wow interesting, I'd like to add a suggestion about adding some obscures cameras, collodion process by Scott Archer, maybe some daguerrotype method (some copper plate/glass plate with thin layer of silver or brass plate) or more cheaper variant of first negative ligth sensetive material is calotype (paper that washed with silver nitrate water or silver iodide) of course it can be reworked and adapted to the game process with big amount of simplifications 😊

💬 DanaCraluminum, Mar 14th 2023 at 10:40 AM

You could try to add flash overlay by using sleeping overlay as example 

💬 Moby_Author, Mar 13th 2023 at 10:01 AM

Ruyeex Sadly you can't, I don't think the book renderer can handle images... And I know that it can't handle storing items.

I might see if it would be possible to create a book variant with illustrations though, although I'll have to optimise photograph items first, holding potentially megabytes of data in a single item slot will surely crash the game a lot.

💬 Ruyeex, Mar 12th 2023 at 11:16 PM

But can you add photos on books?

💬 Ruyeex, Mar 12th 2023 at 3:53 PM

Finally I can rest with a old case of my suggestion

💬 Frepo, Mar 12th 2023 at 3:18 PM

simply awesome!!

💬 slartibartfast, Mar 12th 2023 at 2:35 PM

What a fabulious idea! Likely will help with someones, "Drifters in the mist." documentary.

💬 DanaCraluminum, Mar 12th 2023 at 2:16 PM

The best mod in VS history

(edit comment delete)