No description
  • Rust 74.8%
  • Kotlin 22.8%
  • Shell 1.6%
  • Fluent 0.5%
  • GLSL 0.2%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
TecnicoYT 2e7f6306ff fix(app): show log-in as popup panel like the account panel
Log In / Sign Up was a full-screen page; it now opens as a scrimmed card at
the bottom over the current screen. Tap outside or Back closes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CJzDGhoW7JwKEyJYrr7aoq
2026-10-31 14:45:28 +01:00
.claude build(tooling): add setup, test suites, git hooks and agent config 2026-10-25 00:11:51 +02:00
app fix(app): show log-in as popup panel like the account panel 2026-10-31 14:45:28 +01:00
core feat(app): sync projects and media with the cloud 2026-10-31 01:30:31 +01:00
design feat(app): replace placeholder logo with SlopCut wordmark 2026-10-31 13:07:02 +01:00
docs fix(app): show log-in as popup panel like the account panel 2026-10-31 14:45:28 +01:00
gradle feat: add on-device AI noise reduction and auto captions (M8) 2026-10-27 02:13:05 +01:00
scripts fix(build): let release R8 pass with LiteRT's Java API excluded 2026-10-30 21:09:40 +01:00
server fix(server): build bundled SQLite against musl headers 2026-10-31 11:20:39 +01:00
.dockerignore build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
.editorconfig build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
.env.example feat(server): add update branches, rolling dev builds, notes layout 2026-10-26 21:17:14 +01:00
.gitignore feat(server): add release publishing and opt-in signed self-update 2026-10-26 18:19:55 +01:00
build.gradle.kts feat: add project list with create, rename, duplicate and delete (A1) 2026-10-25 01:39:41 +02:00
Cargo.lock feat(core): add project uuid and verified sync chunking 2026-10-31 01:07:09 +01:00
Cargo.toml feat(server): add accounts, invite sign-up and admin commands 2026-10-31 00:43:10 +01:00
CLAUDE.md feat(app): add Syncing settings, fix account panel collapse 2026-10-31 00:42:50 +01:00
clippy.toml build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
deny.toml build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
gradle.properties build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
gradlew build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
gradlew.bat build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
LICENSE build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
README.md feat(server): add Pelican egg with SNI passthrough guide (K4) 2026-10-26 23:06:33 +01:00
rust-toolchain.toml build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
settings-gradle.lockfile feat: add project list with create, rename, duplicate and delete (A1) 2026-10-25 01:39:41 +02:00
settings.gradle.kts build: scaffold Compose app, Rust core and TLS-only server 2026-10-25 00:11:41 +02:00
VERSION build(release): bump version to 0.3.0-beta.1 2026-10-30 20:58:54 +01:00

SlopCut

Free and open-source, mobile-first video editor for Android with on-device AI. Works fully offline; optionally syncs projects to your own self-hosted server.

Installation

App

Pre-built

Download slopcut-<version>.apk from the newest release on the releases page and open it on your phone (Android 14+, arm64). Check it against SHA256SUMS from the same release if you like. Updates install over the old version, because every release is signed with the same key.

Build from source

Needs Linux, git, curl, unzip, JDK 17+ and rustup. scripts/setup installs everything else (Rust targets, Android SDK + NDK, about 6 GB; details in docs/setup.md).

git clone https://git.slopmc.net/slop-GmBH/slopcut.git && cd slopcut
scripts/setup                      # idempotent, re-run whenever a tool is missing
./gradlew :app:assembleDebug       # app/build/outputs/apk/debug/app-debug.apk
adb install app/build/outputs/apk/debug/app-debug.apk

A debug build has its own signing key: uninstall the release app before installing it (that deletes the app's projects; export what you need first). Signed release builds: docs/release.md.

Server

The server is optional. Today it serves /v1/health and updates itself; accounts and cloud saves (A8) come later.

Docker

You need Docker with Compose and a domain pointing at the host. The server speaks TLS 1.3 only and has no plain-HTTP mode. The app accepts only certificates the phone trusts. Easiest: set SLOPCUT_TLS_DOMAIN in .env, map "443:8443" and skip step 2; the server then gets and renews a Let's Encrypt certificate itself.

  1. Get docker-compose.yml and server.env.example from the newest release. The image in that compose file is pinned by digest.

    mkdir slopcut-server && cd slopcut-server
    tag=vX.Y.Z   # the newest release tag
    for f in docker-compose.yml server.env.example; do
      curl -fLO "https://git.slopmc.net/slop-GmBH/slopcut/releases/download/$tag/$f"
    done
    cp server.env.example .env
    
  2. Put the certificate chain and key into ./tls/ as fullchain.pem and privkey.pem. The container runs as uid 65532 and reads them read-only. With certbot:

    sudo certbot certonly --standalone -d slopcut.example.com
    mkdir -p tls
    sudo cp -L /etc/letsencrypt/live/slopcut.example.com/{fullchain,privkey}.pem tls/
    sudo chown -R 65532:65532 tls && sudo chmod 600 tls/privkey.pem
    

    Repeat the copy after every renewal (for example in a certbot --deploy-hook) and run docker compose restart: the server loads the certificate only at start.

  3. Edit .env. Invalid values stop the server at start with a clear log line. The defaults work; these are the settings people usually change:

    Setting Values
    SLOPCUT_AUTO_UPDATE 0 (default) never contacts the forge, 1 checks for signed updates
    SLOPCUT_AUTO_UPDATE_BRANCH stable (default), beta, or dev (newest dev build; test servers only)
    SLOPCUT_AUTO_UPDATE_RULE notify (default, log only), restart, instant, or daily HH:MM
    SLOPCUT_AUTO_UPDATE_PING_INTERVAL seconds between checks, 1 or more, default 86400
    TZ time zone for HH:MM, e.g. Europe/Berlin

    Updates are signed. The server checks the signature and the SHA-256 hash before it runs a new binary. A version that fails to start is rolled back.

  4. Start the server and check it:

    docker compose up -d && docker compose logs -f
    curl https://slopcut.example.com:8443/v1/health
    

    To serve on 443, change the port mapping to "443:8443". A reverse proxy in front must pass TLS through or connect to the server over https://.

Without self-update, update with docker compose pull && docker compose up -d. The compose file mounts a named volume at /var/lib/slopcut for data and staged updates. That volume must not be mounted noexec. To build the image yourself: docker build -f server/Dockerfile -t slopcut-server . from the repo root.

Pelican Egg

An egg for Pelican, the Pterodactyl fork: egg-slopcut-server.yaml in every release, source and full guide in server/deploy/pelican/.

  1. In the Pelican admin panel, go to Eggs → Import and use the egg file or the URL from the release notes. The egg then updates itself from that URL.
  2. Point a DNS record (e.g. cut.example.com, Cloudflare: DNS only) at the node.
  3. Create a server with that egg. The installer downloads the server binary for the node's CPU from the newest release of the chosen update branch, checks it against SHA256SUMS, and aborts if it does not match.
  4. On the Startup tab, set Domain. The server gets its own Let's Encrypt certificate, which needs port 443 of the domain to reach it: an allocation on 443, or, if the node already uses 443, an SNI passthrough rule in the existing proxy (examples in the guide). Without a domain, upload certificate files instead. The panel checks every value.
  5. Start the server. The panel shows it as running when the server logs listening (TLS only). Stopping sends ^C, and the server finishes running requests first. In the app, the address is just the domain.

License

AGPL-3.0-only (LICENSE). Optional AI models from Desert Ant Labs are downloaded only on opt-in and are under their own source-available license (desert-ant-labs-source-available-1.0, free up to 100k monthly active devices per model). They are never bundled (docs/decisions/0002-desert-ant-models-optional-download.md). Developer and agent docs: CLAUDE.md, docs/.