NetFrames is a lightweight, connected display platform that allows digital picture frames or embedded screens to automatically fetch and display images from a central server. Designed for Raspberry Pi, Meadow, or mobile clients, NetFrames is ideal for personal photo galleries, public displays, or IoT art installations.
NetFrames.Server is a .NET Core Web API, exposing endpoints to:
- Upload an image
- Get list of images
- Get specific image by ID.
The purpose of this portal is to manage the image collection that client devices will display on its screens.
You can build this digital portrait using a Meadow F7 Feather board and a ILI9341 TFT SPI 320x240 display.
Wire the Meadow F7 Feather board with the ILI9341 like the diagram below:
Feel free to 3D print this enclosure so you can place it on a desk or mount it on a wall. STL files are here or download directly from TinkerCad.
Both the Server and WebPortal target .NET 10. Make sure you have the .NET 10 SDK installed.
The WebPortal connects to the Server's API via the ApiBaseUrl setting in Source/NetFrames.WebPortal/appsettings.json:
{
"ApiBaseUrl": "http://localhost:5233"
}Update this value depending on where the Server is running (see scenarios below).
When running both projects on the same machine, the default launch profiles handle the ports:
| Project | HTTP | HTTPS |
|---|---|---|
| NetFrames.Server | http://localhost:5233 |
https://localhost:7044 |
| NetFrames.WebPortal | http://localhost:5150 |
https://localhost:7118 |
These ports are configured in each project's Properties/launchSettings.json.
-
Start the Server:
cd Source/NetFrames.Server dotnet run -
In a separate terminal, start the WebPortal:
cd Source/NetFrames.WebPortal dotnet run -
Make sure
ApiBaseUrlis set tohttp://localhost:5233inappsettings.json(the default). -
Open
http://localhost:5150in your browser.
When running the Server on a separate machine (such as a Raspberry Pi), you need to configure the Server to listen on all network interfaces and point the WebPortal to the server's IP address.
On the remote machine (Server):
-
Update
Source/NetFrames.Server/Properties/launchSettings.jsonto bind to all interfaces:"applicationUrl": "http://0.0.0.0:5000"
Or pass the URL directly:
cd Source/NetFrames.Server dotnet run --urls "http://0.0.0.0:5000" -
Note the machine's IP address (e.g.
192.168.1.73).
On your local machine (WebPortal):
-
Update
ApiBaseUrlinSource/NetFrames.WebPortal/appsettings.jsonto point to the remote server:{ "ApiBaseUrl": "http://192.168.1.73:5000" } -
Run the WebPortal:
cd Source/NetFrames.WebPortal dotnet run -
Open
http://localhost:5150in your browser.
Finally, to set up your Meadow-powered Digital Frame, you'll only need to set your WIFI credentials in the wifi.config.yaml file, and set the base URL in the RestClientController class:
public class RestClientController
{
// Base URL for the REST API (IP Address:Port)
string baseUrl = "http://192.168.1.73:5150/";
...
The following table show's whats available and what features are next in upcoming updates.
Finding bugs or wierd behaviors? File an issue with repro steps.





