MCPSERV.CLUB
Picsur

Picsur

Self-Hosted

Self-hosted image hosting with editing, expiring links, and ShareX integration

Active(86)
1.2kstars
0views
Updated 12 days ago

Overview

Discover what makes Picsur powerful

Picsur is a lightweight, self‑hosted image hosting service that blends the simplicity of Imgur with the utility of Pastebin. From a developer’s standpoint it is a REST‑ful microservice that accepts multipart uploads, processes images on the fly, and exposes a small set of endpoints for CRUD operations. The application is written in **Go** (the core runtime) and leverages a modern web framework for routing, middleware, and request validation. Images are stored on the local filesystem (or any bind‑mounted volume) while metadata lives in a relational database managed by **PostgreSQL** or **SQLite**, depending on the deployment scenario. The service is fully container‑ready, with an official Docker image that supports both AMD64 and ARM64 architectures.

Language & Runtime

Web Framework

Database

Image Processing

Overview

Picsur is a lightweight, self‑hosted image hosting service that blends the simplicity of Imgur with the utility of Pastebin. From a developer’s standpoint it is a REST‑ful microservice that accepts multipart uploads, processes images on the fly, and exposes a small set of endpoints for CRUD operations. The application is written in Go (the core runtime) and leverages a modern web framework for routing, middleware, and request validation. Images are stored on the local filesystem (or any bind‑mounted volume) while metadata lives in a relational database managed by PostgreSQL or SQLite, depending on the deployment scenario. The service is fully container‑ready, with an official Docker image that supports both AMD64 and ARM64 architectures.

Technical Stack

  • Language & Runtime: Go 1.22+ (compiled to a single binary)
  • Web Framework: net/http with custom router; middleware for CORS, authentication, and rate‑limiting
  • Database: PostgreSQL (recommended) or SQLite for lightweight setups; migrations handled via golang-migrate
  • Image Processing: github.com/disintegration/imaging and golang.org/x/image for format conversions, resizing, rotating, etc.
  • Auth & RBAC: JWT‑based sessions with role‑based permissions (guest, user, admin)
  • Docker: Multi‑stage build producing a minimal Alpine image; supports docker run and Kubernetes deployments

Core Capabilities

  • Upload API: /api/upload accepts multipart files, validates size (≤16 MB by default), strips EXIF data unless overridden, and optionally keeps the original file.
  • Image Manipulation: Endpoints for resizing, rotating, flipping, greyscale, negative, and transparency stripping; all operations are chainable via query parameters.
  • Expiration & Cleanup: Images can be tagged with a TTL; background worker deletes expired files and removes orphaned DB records.
  • CORS & Security: Fine‑grained CORS policies, CSRF protection for form uploads, and rate limiting per IP/role.
  • Webhooks & Extensibility: Although minimal, the API exposes hooks for post‑upload events; developers can implement custom webhooks by polling /api/events.

Deployment & Infrastructure

Picsur is intentionally lightweight: a single binary, a small container image (~30 MB), and a relational database. It runs on any Linux distribution with Go runtime or Docker installed. For production, mount a dedicated volume for /data/uploads and configure PostgreSQL with proper WAL settings. The application can be scaled horizontally behind a load balancer; the stateless design ensures that any instance can serve any request. The built‑in cleanup worker can be adjusted via environment variables or a cron job for larger deployments.

Integration & Extensibility

Developers can integrate Picsur into existing workflows by consuming its JSON API. The ShareX endpoint (/api/sharex) allows automated uploads from desktop clients. Custom plugins are not yet supported, but the modular architecture (separate packages for auth, storage, and image processing) makes it straightforward to replace components—e.g., swap the local filesystem with an S3‑compatible object store. The RBAC system can be extended by adding new roles or permissions in the database, and custom middleware can enforce additional security policies.

Developer Experience

The codebase follows idiomatic Go conventions, with clear package boundaries and comprehensive unit tests. Documentation is kept in the README and a dedicated docs/ directory, including API reference and deployment guides. Community support is modest; the project’s GitHub issues page is the primary channel for feedback, and a Discord server provides quick help. Licensing under MIT allows unrestricted use in commercial or private projects.

Use Cases

  • Internal Asset Management: Teams needing a quick, on‑premise image host for documentation or design mockups.
  • Developer Tooling: Integrate with CI/CD pipelines to publish screenshots or build artifacts directly to a self‑hosted gallery.
  • Educational Platforms: Schools can host student submissions without exposing them to public hosting services.
  • Privacy‑First Applications: Services that must keep image data off third‑party clouds can embed Picsur as a backend.

Advantages

Picsur’s minimal footprint, combined with robust image processing and a straightforward API, makes it ideal for developers who need a self‑hosted solution without the overhead of larger frameworks. Its permissive MIT license, ARM64 support, and Docker readiness lower the barrier to entry, while the built‑in role system ensures that only authorized users can upload or manipulate images. Compared to alternatives like self-hosted Imgur clones or generic file servers, Picsur offers domain‑specific features (EXIF stripping, format conversion, TTL) that save developers time and reduce security risks.

Open SourceReady to get started?

Join the community and start self-hosting Picsur today