A Fabric mod for Minecraft 26.1.2 that adds a craftable camera, photo signs, and text signs. Take screenshots in-game, post them to Bluesky directly from Minecraft, and hang the resulting photos (with captions) on walls in your world.
- Minecraft 26.1.x
- Fabric Loader 0.18.0 or newer
- Fabric API
0.146.0+26.1.2or newer (Modrinth) - Java 25 (runtime — the Modrinth launcher ships this)
- A Bluesky account and an App Password (Settings → Privacy and Security → App Passwords → Add App Password)
- Install Fabric Loader for MC 26.1 via your launcher of choice (Modrinth, Prism, etc.).
- Drop Fabric API into your profile's
mods/folder. - Drop
bskycam-1.0.0.jarinto the samemods/folder. - Launch the game. On first start the mod creates a config file at
<profile>/config/bskycam.json.
Open the config screen in-game either by:
- running the client command
/bskycam, or - sneak + right-clicking while holding a camera.
Fill in:
| Field | What to enter |
|---|---|
| Handle, DID or email | Your Bluesky login (e.g. you.bsky.social) |
| App Password | The xxxx-xxxx-xxxx-xxxx token from the Bluesky app-passwords page (not your account password) |
| Default post text | Caption pre-fill for new posts |
| Default alt text | Accessibility description pre-fill |
| PDS override | Leave blank — the mod auto-resolves your PDS via the atproto DID document |
Hit Save. Config is stored as plaintext JSON at
<profile>/config/bskycam.json. App passwords are revocable at any time from
the Bluesky settings page, so a leak is recoverable.
III I = iron ingot
IGI G = glass pane
IRI R = redstone dust
Shows up in the Tools & Utilities creative tab or via /give @s bskycam:camera.
PPP P = paper
PIP I = ink sac
S S = stick
Gives 4 text signs per craft.
Not craftable — produced by taking a picture with the camera. Stacks to 1.
- Hold the camera.
- Right-click and hold → the camera raises to your eye and zooms in (less than a spyglass — about 2×). Your held item is hidden while aiming.
- While zoomed, the HUD shows "Left-click to take picture".
- Left-click → a shutter sound plays, the HUD flashes briefly, and a
clean (HUD-free) screenshot is saved to
<profile>/screenshots/as a PNG. A Photo Sign item lands in your inventory carrying the JPEG + metadata. - Right-click a wall or the air with the photo sign → the edit screen opens with a live preview, a caption field, and an alt-text field.
- Click Post to Bluesky. The post uploads in the background; the sign is marked posted immediately so you can place it right away without waiting.
- Right-click a vertical wall with the posted photo sign → it hangs on the wall as a world entity, rendering the photo and caption. The item is consumed on placement.
Break the sign (attack) to drop the item back — it keeps its posted state, so you can place it again elsewhere.
- Hold a text sign.
- Right-click a wall or the air → edit screen opens.
- Type up to 300 characters, hit Post to Bluesky.
- Right-click a vertical wall with the posted text sign → it hangs as a wooden-plank sign with the text rendered on it.
Text signs attach the current player and world context (player name, position, biome, dimension, weather, health, etc.) to the post's record metadata.
Every post record includes a minecraftData object with:
playerName,gameMode,health,maxHealth,food,saturation,xpLevel,xpProgressposition: {x, y, z},facing: [yaw, pitch]dimension,biome,gameTime,dayTime,difficulty,hardcore,raining,thunderingseed(single-player only)serverName/serverAddress(multiplayer)minecraftVersion,capturedAt,postedAt
All numeric values are serialized as strings to satisfy atproto's no-floats constraint without losing precision.
- Photo signs are saved to world NBT, so your hung photos persist across reloads.
- Photos are auto-compressed to stay under Bluesky's 1 MB upload cap; very large screenshots get downscaled.
- Entity placement and auto-post use single-player's integrated server; multiplayer support is partial (posting works, but some sign-state sync may be flaky).
- The mod keeps the full-resolution PNG in
screenshots/even though it uploads JPEG — so you always have a lossless local copy.
/bskycam— open the config screen.
JAVA_HOME=/path/to/jdk-25 ./gradlew buildOutput at build/libs/bskycam-1.0.0.jar.
CC0-1.0.