A camera that describes what it sees — with no internet at all.

A camera that describes what it sees — with no internet at all.

I built a camera in the shape of a Mamiya RZ67 that runs vision-language models completely offline on a Pi 5. Press the shutter, and it answers your custom prompt with a single sentence about what it sees. No internet, no cloud, no API keys.

GitHub: https://github.com/feeeeely/ai-camera
A small video: https://www.youtube.com/watch?v=M74qTNsY_L0

You can swap between models on the device itself and compare how differently they describe the same scene: Qwen3-VL (2B), MiniCPM-V 4.6 (1B), InternVL3.5 (2B), SmolVLM2 (2.2B), Moondream 2 (2B) and Ministral 3 (3B) turning the description into the final sentence. The prompt is editable on the touchscreen, so the same camera can do dry one-liners, museum labels or plain inventory notes.

After each shot it shows total time, input→output tokens, tok/s and a vision / generate / load breakdown. The token counts turned out to be the most interesting part: the same photo becomes \~145 image tokens on one encoder and over 1300 on another, which is a bigger factor in latency than the text generation itself.

A few things I learned the hard way:

\- Moondream returns sometimes empty responses on current Ollama versions.
\- qwen3-vl:2b is a thinking-only variant — it burns the entire token budget on invisible reasoning and returns nothing visible. You need the -instruct tag.
\- Ollama can't load separate mmproj files, so a lot of GGUF vision models from HuggingFace simply won't run, no matter how you name them.

Hardware: Raspberry Pi 5 (16 GB), Raspberry Pi HQ camera with a 6 mm CS-mount lens, 4.3" DSI touch display, stainless steel shutter button, Waveshare UPS HAT with four 21700 cells. Runtime per photo is 30–60 seconds with the models kept warm in RAM. Happy to answer questions about the setup.

I'm coming from photography, I'm not a developer — the code was written with heavy AI assistance, and I did the hardware integration, debugging and model testing myself.

Feedback on the implementation is very welcome: I'm just curious if this makes any sense or if something could be adapted/ optimized.

https://preview.redd.it/gsmim13txvjh1.jpg?width=1875&format=pjpg&auto=webp&s=eab4ec6d22ce6f2ba1933f6b67516c58cac78546

https://preview.redd.it/9qzp0axnxvjh1.jpg?width=1200&format=pjpg&auto=webp&s=88d5fb8fe47bcaabe0dd28b45e6bebf4610f5606

reddit.com
u/fox_in_crocs — 2 days ago

Mechanically engineered slit-scan camera [used with Mamiya RZ67 and Nikomat EL, Kodak Portra 400 & 800 and others]

At the center is a fully mechanically constructed slitscan camera — developed and built exclusively using materials, tools, and techniques that were available around 100 years ago, at the time when László Moholy-Nagy, with his concept of the "New Vision", laid the foundations for a media-technical perception. The construction deliberately avoids any form of digital technology. Instead, all components are based on historical principles and craftsmanship: multiplex wooden plates, a wind-up Märklin spring motor from 1929, gear racks and wheels made with traditional metalworking, a handcrafted glass spirit level, classic slotted screws — produced according to contemporary standards — as well as an interior coated with shellac and soot. No CNC milling, no computer-assisted fabrication: everything was created using the means available in the 1920s and 1930s.

From a technological perspective, such a device would have been conceivable at the time. The physical principles of slitscan photography — in which an image is captured strip by strip over time rather than all at once — were known. Early applications appeared, for example, in photo-finish technology for motorsports (e.g., the Rotoflo Circular Film Camera). However, in this specific, technically conceived form, this camera technology is not historically documented and only emerged in the 1960s and 1970s.

This is where the project begins: as a constructed artifact of an alternative technological history. It exemplifies the untapped potential of past eras and highlights the role of perception, zeitgeist, and cultural focus in technological developments. As László Moholy-Nagy formulated in his theory of the New Vision: "Every generation has its own optical focus." This refers not only to a stylistic shift but to a fundamentally altered approach to the world: for Moholy-Nagy, the camera was not merely a reproduction tool, but a "seeing machine", an instrument that produces new ways of perception through technology — a tool that shapes both the gaze and the image.

In this sense, the camera designed here is understood as a practical extension of Moholy-Nagy's New Vision: it does not ask how seeing was at that time, but how it could have been, if technology, thought, and perception had been conceived differently.

https://felixbas.la/slit-scan-camera.html

u/fox_in_crocs — 3 days ago

A camera that describes what it sees — with no internet at all.

I built a camera in the shape of a Mamiya RZ67 that runs vision-language models completely offline on a Pi 5. Press the shutter, and it answers your custom prompt with a single sentence about what it sees. No internet, no cloud, no API keys.

Video: https://www.youtube.com/watch?v=M74qTNsY\_L0
GitHub: https://github.com/feeeeely/ai-camera

You can swap between models on the device itself and compare how differently they describe the same scene: Qwen3-VL (2B), MiniCPM-V 4.6 (1B), InternVL3.5 (2B), SmolVLM2 (2.2B), Moondream 2 (2B) and Ministral 3 (3B) turning the description into the final sentence. The prompt is editable on the touchscreen, so the same camera can do dry one-liners, museum labels or plain inventory notes.

After each shot it shows total time, input→output tokens, tok/s and a vision / generate / load breakdown. The token counts turned out to be the most interesting part: the same photo becomes \~145 image tokens on one encoder and over 1300 on another, which is a bigger factor in latency than the text generation itself.

A few things I learned the hard way:

\- Moondream returns sometimes empty responses on current Ollama versions.
\- qwen3-vl:2b is a thinking-only variant — it burns the entire token budget on invisible reasoning and returns nothing visible. You need the -instruct tag.
\- Ollama can't load separate mmproj files, so a lot of GGUF vision models from HuggingFace simply won't run, no matter how you name them.

Hardware: Raspberry Pi 5 (16 GB), Raspberry Pi HQ camera with a 6 mm CS-mount lens, 4.3" DSI touch display, stainless steel shutter button, Waveshare UPS HAT with four 21700 cells. Runtime per photo is 30–60 seconds with the models kept warm in RAM. Happy to answer questions about the setup.

I'm coming from photography, I'm not a developer — the code was written with heavy AI assistance, and I did the hardware integration, debugging and model testing myself. Feedback on the implementation is very welcome.

https://preview.redd.it/6do859h30wjh1.jpg?width=1875&format=pjpg&auto=webp&s=29b965b7959119c02730a2740090c6def4ae90b3

https://preview.redd.it/hqcl28h30wjh1.jpg?width=1200&format=pjpg&auto=webp&s=7ef19a892ce21cd716cbce3314cf40e069303c45

reddit.com
u/fox_in_crocs — 4 days ago

A camera that describes what it sees — with no internet at all.

I built a camera in the shape of a Mamiya RZ67 that runs vision-language models completely offline on a Pi 5. Press the shutter, and it answers your custom prompt with a single sentence about what it sees. No internet, no cloud, no API keys.

Video: https://www.youtube.com/watch?v=M74qTNsY\_L0
GitHub: https://github.com/feeeeely/ai-camera

You can swap between models on the device itself and compare how differently they describe the same scene: Qwen3-VL (2B), MiniCPM-V 4.6 (1B), InternVL3.5 (2B), SmolVLM2 (2.2B), Moondream 2 (2B) and Ministral 3 (3B) turning the description into the final sentence. The prompt is editable on the touchscreen, so the same camera can do dry one-liners, museum labels or plain inventory notes.

After each shot it shows total time, input→output tokens, tok/s and a vision / generate / load breakdown. The token counts turned out to be the most interesting part: the same photo becomes \~145 image tokens on one encoder and over 1300 on another, which is a bigger factor in latency than the text generation itself.

A few things I learned the hard way:

\- Moondream returns sometimes empty responses on current Ollama versions.
\- qwen3-vl:2b is a thinking-only variant — it burns the entire token budget on invisible reasoning and returns nothing visible. You need the -instruct tag.
\- Ollama can't load separate mmproj files, so a lot of GGUF vision models from HuggingFace simply won't run, no matter how you name them.

Hardware: Raspberry Pi 5 (16 GB), Raspberry Pi HQ camera with a 6 mm CS-mount lens, 4.3" DSI touch display, stainless steel shutter button, Waveshare UPS HAT with four 21700 cells. Runtime per photo is 30–60 seconds with the models kept warm in RAM. Happy to answer questions about the setup.

I'm coming from photography, I'm not a developer — the code was written with heavy AI assistance, and I did the hardware integration, debugging and model testing myself. Feedback on the implementation is very welcome.

https://preview.redd.it/38e2cq200wjh1.jpg?width=1875&format=pjpg&auto=webp&s=e7705c88e370a17bb559b7bb278a864ea4ade0ec

https://preview.redd.it/cx12qq200wjh1.jpg?width=1200&format=pjpg&auto=webp&s=4d7a4f600763cfee46d6ec988d6189bf51cd3fc0

reddit.com
u/fox_in_crocs — 4 days ago
▲ 6 r/raspberryDIY+1 crossposts

A camera that describes what it sees — with no internet at all.

I built a camera in the shape of a Mamiya RZ67 that runs vision-language models completely offline on a Pi 5. Press the shutter, and it answers your custom prompt with a single sentence about what it sees. No internet, no cloud, no API keys.

GitHub: https://github.com/feeeeely/ai-camera

You can swap between models on the device itself and compare how differently they describe the same scene: Qwen3-VL (2B), MiniCPM-V 4.6 (1B), InternVL3.5 (2B), SmolVLM2 (2.2B), Moondream 2 (2B) and Ministral 3 (3B) turning the description into the final sentence. The prompt is editable on the touchscreen, so the same camera can do dry one-liners, museum labels or plain inventory notes.

After each shot it shows total time, input→output tokens, tok/s and a vision / generate / load breakdown. The token counts turned out to be the most interesting part: the same photo becomes ~145 image tokens on one encoder and over 1300 on another, which is a bigger factor in latency than the text generation itself.

A few things I learned the hard way:

- Moondream returns sometimes empty responses on current Ollama versions.
- qwen3-vl:2b is a thinking-only variant — it burns the entire token budget on invisible reasoning and returns nothing visible. You need the -instruct tag.
- Ollama can't load separate mmproj files, so a lot of GGUF vision models from HuggingFace simply won't run, no matter how you name them.

Hardware: Raspberry Pi 5 (16 GB), Raspberry Pi HQ camera with a 6 mm CS-mount lens, 4.3" DSI touch display, stainless steel shutter button, Waveshare UPS HAT with four 21700 cells. Runtime per photo is 30–60 seconds with the models kept warm in RAM. Happy to answer questions about the setup.

I'm coming from photography, I'm not a developer — the code was written with heavy AI assistance, and I did the hardware integration, debugging and model testing myself. Feedback on the implementation is very welcome.

u/fox_in_crocs — 4 days ago