No description
  • Go 96.8%
  • Makefile 2.4%
  • Dockerfile 0.8%
Find a file
zemdregon 4a4410d02b
Some checks are pending
CI / lint (push) Waiting to run
CI / test (push) Waiting to run
CI / build (push) Waiting to run
CI / docker (push) Blocked by required conditions
chore: fold remaining local workspace changes
2026-08-17 09:35:22 -05:00
.github/workflows chore(deps): bump docker/setup-buildx-action to v4 2026-08-10 18:15:25 -05:00
cmd/module feat: release-group seed data and module bootstrap/CI 2026-07-22 19:09:48 -05:00
internal chore: fold remaining local workspace changes 2026-08-17 09:35:22 -05:00
proto/formatsv1 Initial commit: media-custom-formats module 2026-06-15 20:08:06 -05:00
.dockerignore Initial commit: media-custom-formats module 2026-06-15 20:08:06 -05:00
.env.example feat: release-group seed data and module bootstrap/CI 2026-07-22 19:09:48 -05:00
.gitignore feat: release-group seed data and module bootstrap/CI 2026-07-22 19:09:48 -05:00
.golangci.yml docs: document default seeds; add TestSeedDefaults (#5) 2026-08-09 20:19:17 -05:00
CHANGELOG.md Advertise settings capability (v0.1.6). 2026-08-10 04:47:54 -05:00
COMPATIBILITY.md docs: document default seeds; add TestSeedDefaults (#5) 2026-08-09 20:19:17 -05:00
CONTRIBUTING.md feat: release-group seed data and module bootstrap/CI 2026-07-22 19:09:48 -05:00
Dockerfile Initial commit: media-custom-formats module 2026-06-15 20:08:06 -05:00
go.mod Expose SettingsProvider and align module version to 0.1.4. (#7) 2026-08-10 00:20:16 -05:00
go.sum Expose SettingsProvider and align module version to 0.1.4. (#7) 2026-08-10 00:20:16 -05:00
LICENSE Initial commit: media-custom-formats module 2026-06-15 20:08:06 -05:00
Makefile Initial commit: media-custom-formats module 2026-06-15 20:08:06 -05:00
muxcore.json Advertise settings capability (v0.1.6). 2026-08-10 04:47:54 -05:00
README.md docs: document default seeds; add TestSeedDefaults (#5) 2026-08-09 20:19:17 -05:00
SECURITY.md feat: release-group seed data and module bootstrap/CI 2026-07-22 19:09:48 -05:00

Media Custom Formats

Go Version License: GPL-3.0

Custom format definitions, quality profiles, and release scoring for media automation.

MuxCore sidecar module (media.scoring, media.formats) that stores custom formats and quality profiles in SQLite and scores releases over gRPC (muxcore.formats.v1.FormatService on :9490 by default).


How It Works

Release title/size/seeders ──→ media-custom-formats ──→ Score + quality parse
                                    │
                                    ├── Custom format rules (title/size/seeders)
                                    ├── Quality parse (resolution, source, codec, HDR)
                                    ├── Quality profile format scores
                                    └── Release profile groups (prefer / must / must-not)

Key Features

  • Custom formats — CRUD for named rule sets (matches / contains / numeric ops) with default scores
  • Quality profiles — min/cutoff scores, upgrade settings, per-format score overrides
  • ScoreRelease / ParseQuality — combine quality heuristics with format matches
  • Default seeds — on empty DB, seeds Remux/HDR/x265/Proper/CAM formats and a Default Blocklist release group (enabled by default in the binary)

Default seeded custom formats

Inserted only when custom_formats is empty (SeedDefaults / FORMATS_SEED_DEFAULTS=true / binary default):

ID Name Score Rule
cf_seed_remux Remux +100 title contains Remux
cf_seed_hdr HDR +50 title matches `(?i)\bHDR(10|10+
cf_seed_x265 x265/HEVC +25 title matches (?i)x265|h\.?265|hevc
cf_seed_proper Proper/Repack +20 title matches (?i)\b(proper|repack)\b
cf_seed_cam CAM/TS 10000 title matches (?i)\b(cam|hdcam|telesync|hdts|tc)\b

Default seeded release profile group

ID Name Behavior
rpg_seed_default Default Blocklist must_not_contain: cam, telesync, hdcam; preferred: bluray, remux, web-dl (+15 preferred score)

Admin UI: Custom Formats at /formats, quality profiles at /formats/profiles (admin-ui → media-custom-formats gRPC).


Configuration

Variable Default Description
FORMATS_DB_PATH /var/lib/media-custom-formats/formats.db SQLite database path
FORMATS_GRPC_ADDR :9490 Module gRPC listen address
FORMATS_SEED_DEFAULTS (see note) Set to true to enable seeding when not already enabled via config
MUXCORE_MODULE_ID media-custom-formats Module ID for mesh registration
MUXCORE_INSECURE_DISABLE_TLS `` Set to true for insecure mesh (dev only)
MUXCORE_GRPC_ADDR / --muxcore-mesh-addr (SDK) Core mesh address

Note: cmd/module always starts with SeedDefaults: true, so the binary seeds an empty DB by default.


Quick Start

make build

export MUXCORE_INSECURE_DISABLE_TLS=true
./media-custom-formats --muxcore-mesh-addr localhost:9090

# Example: parse quality from a title
grpcurl -plaintext -d '{"title": "Movie.2024.2160p.BluRay.REMUX.HDR.mkv"}' \
  localhost:9490 muxcore.formats.v1.FormatService/ParseQuality

Development

make build
make test
make lint
make ci      # lint + test + build
make proto   # regenerate formatsv1 from proto/formatsv1/formats.proto

Requires a local ../core checkout (go.mod replace directives).


Compatibility

See COMPATIBILITY.md. Module version 0.1.0, min core 0.4.0.


License

GPL-3.0