An unbloated media host specialized in great looking embeds for services like Discord
Find a file
waveringana ad0aa6365e
Some checks failed
Docker / build (push) Has been cancelled
1.14.1
2025-05-14 17:54:55 -04:00
.github/workflows Update docker-publish.yml 2025-05-11 19:20:22 -04:00
app fix gifv to have a failover and to use videoExtensions to compare 2025-05-14 17:50:12 -04:00
docker htmx is so cool 2023-11-29 00:30:15 -05:00
documentation Update database.md 2023-08-25 20:07:52 -04:00
tests linting 2023-11-18 12:53:15 -05:00
.eslintrc.js my nvim and vscode are finally using the same settings 2024-01-25 13:03:29 -05:00
.gitattributes add gitattributes 2022-11-21 04:01:50 -05:00
.gitignore typescripting 2022-12-03 21:03:34 +00:00
bun.lockb add processVideo env 2025-05-11 19:16:02 -04:00
LICENSE BSD zero clause 2024-01-16 11:58:53 -05:00
package-lock.json parameterize media fetch query 2024-12-28 20:47:14 -05:00
package.json 1.14.1 2025-05-14 17:54:55 -04:00
README.md 1.14.1 2025-05-14 17:54:55 -04:00
tsconfig.json Revert "start work migrating to bun" 2023-09-29 12:33:04 -04:00

Embedder 🖼️

A media host specialized in producing visually appealing embeds for services like Discord. Enjoy limitless file sizes and no compression.

Embedder Demo

🚀 Upcoming Features

  • 📊 MariaDB/SQL support (currently uses SQLite)
  • 🔗 Redundancy & Sync: Enhance reliability and enable synchronization across nodes.

🌐 Potential Features

  • 🛰️ IPFS Integration

🔧 How to Run

Using Source

$ export EBPASS=changeme
$ export EBPORT=3000
$ export EBAPI_KEY=changeme # For ShareX support
$ export EB_PROCESS_VIDEO=true # Enable video processing

$ npm install
$ npm start

Note: Default username is admin with the password being whatever EBPASS is set to.

ShareX Support

Enabled at /upload. Requires authentication with key. expire key specifies duration in days.

{
  "Version": "14.1.0",
  "Name": "embedder",
  "DestinationType": "ImageUploader, FileUploader",
  "RequestMethod": "POST",
  "RequestURL": "http://localhost:3000/sharex",
  "Headers": {
    "key": "changeme"
  },
  "Body": "MultipartFormData",
  "Arguments": {
    "fileupload": null,
    "expire": null
  },
  "FileFormName": "fileupload",
  "URL": null,
  "ThumbnailURL": null,
  "DeletionURL": null,
  "ErrorMessage": null
}

Configuration

This project uses environmental variables for configuration:

Variable Description Default
EBPASS Password for the admin account required
EBAPI_KEY Key for API uploading (ShareX) required
EBPORT Port the server runs on required
EB_PROCESS_VIDEO Enable video processing/optimization true
EB_ENCODER Video encoder to use (CPU, NVENC, QSV, etc.) CPU
EB_FFMPEG_PATH Path to ffmpeg binary auto-detected or bundled
EB_FFPROBE_PATH Path to ffprobe binary auto-detected or bundled
EB_RANDOMIZE_NAMES Randomize uploaded file names false

Video Processing

When EB_PROCESS_VIDEO is enabled (which is the default), Embedder will:

  1. Process uploaded videos to create optimized 720p versions
  2. Show "Copy as GIFv" links for video files
  3. Display a processing spinner while videos are being optimized

If disabled by setting EB_PROCESS_VIDEO=false, videos will be served directly without processing, which can be useful on systems with limited resources.

Using Docker

docker run -d -p "3000:3000" \
  -e EBPORT=3000 \
  -e EBPASS=changeme \
  -e EBAPI_KEY=changeme \
  -e EB_PROCESS_VIDEO=true \
  ghcr.io/waveringana/embedder:1.14.1

Docker Compose

services:
  embedder:
    ports:
      - "3000:3000"
    environment:
      - EBPORT=3000
      - EBPASS=changeme
      - EBAPI_KEY=changeme
      - EB_PROCESS_VIDEO=true
    volumes:
      - ./db:/var/db
      - ./uploads:/uploads
    image: ghcr.io/waveringana/embedder:1.14.1

📜 License

Distributed under The Unlicense.