Drop-in server for Matrix URL previews, for servers like Dendrite that don't support them natively.
Find a file
nexy7574 be73449353
0.2.0a1
* migrated to using PeeWee ORM for increased reliability
* now allow rendering images as actual previews (videos next)
* Improved documentation
2024-02-25 22:09:51 +00:00
src 0.2.0a1 2024-02-25 22:09:51 +00:00
.gitignore Initial commit 2024-02-09 22:37:15 +00:00
Dockerfile 0.2.0a1 2024-02-25 22:09:51 +00:00
LICENSE Initial commit 2024-02-09 22:37:15 +00:00
README.md 0.2.0a1 2024-02-25 22:09:51 +00:00
requirements.txt 0.2.0a1 2024-02-25 22:09:51 +00:00

Drop In URL previews server

aka DIP / Drop in previews

A simple python server that handles /_matrix/media/*/preview_url requests, for servers like Dendrite.

You may also want to replace your homeserver's URL preview generator with this one (in case this offers more features).

Features

DIP is complete with the following features:

  • Full OG/OpenGraph tag support
  • Partial Twitter card support
  • Supports rendering previews for image files
  • Proxying requests through a HTTP/HTTPS/SOCKS4/SOCKS5 proxy
  • Custom user agent for requests
  • Caching previews to prevent repeated lookups
  • Built-in media duplication prevention

Installation

Just use docker.

Or you can run it yourself, but that's your choice.

pip install -r requirements.txt
PREVIEW_HOMESERVER=https://example.com python3 server.py

Example docker-compose.yml

version: "3"
services:
  url_previews:
    environment:
      - "PREVIEW_HOMESERVER=https://matrix.nexy7574.co.uk"
      - "FORWARDED_ALLOW_IPS=*"
    ports:
      - "2226:2226/tcp"
    restart: "unless-stopped"
    container_name: "dendrite-url-previews"
    volumes:
      - url_previews:/app/data/
    build: .  # there's no pre-built image

volumes:
  url_previews:

Configuration

Environment Variable Description Example Default
PREVIEW_HOMESERVER The homeserver to use for the previews. https://matrix.nexy7574.co.uk The host name of the request URL.
PREVIEW_HOST The host IP/Name to listen to. 192.168.0.2 0.0.0.0
PREVIEW_PORT The port to listen to. 8080 2226
PREVIEW_PROXY A HTTP/HTTPS/SOCKS4/SOCKS5 proxy to use for all network requests. http://localhost:1080 null
PREVIEW_USER_AGENT The user agent to use for all network requests. Must be one of google, bing, duckduckgo, firefox, chrome, twitter, facebook, honest (uses a unique user agent) firefox google
PREVIEW_MAX_MEDIA_MB The maximum size of media to proxy in megabytes. Media larger than this downloaded from sites will not be re-uploaded to the homeserver's media repo, and as such cannot be used in the preview response. 10 50
PREVIEW_DATABASE_URL The sqlite://, postgres://, or mysql:// URL to use for the database. postgres://user:pass@localhost:5432/dip sqlite:///app/data/db.sqltie3
FORWARDED_ALLOW_IPS The list of reverse proxy IPs to trust. See Uvicorn docs * 127.0.0.1
LOG_LEVEL The log level to use. One of DEBUG, INFO, WARNING, ERROR, CRITICAL. INFO INFO
LOG_DEBUG_TIDY When LOG_LEVEL is DEBUG, silences some really noisy loggers (like HTTP request loggers) to help you debug this program, not a dependency). true false