Scrapes all scenes and metadata from a studio URL. Designed to be easily extended to new sites. Can push scraped metadata into a local Stash instance.
618 sites across 15+ platforms — full list with URL patterns →
| Platform | Count | Examples |
|---|---|---|
| Score Group | 93 | Scoreland, XL Girls, 18Eighteen, Leg Sex, Naughty Mag, 50 Plus MILFs, … |
| Gamma/Algolia | 79 | Adult Time, BiPhoria, Burning Angel, Devil's Film, Diabolic, Dogfart Network, Evil Angel, Fame Digital, Girlcore, Modern-Day Sins, OpenLife, Pretty Dirty, Pure Taboo, Transfixed, White Ghetto, Wicked, Zero Tolerance Films, … |
| WP video-elements | 12 | DaughterSwap, MommysBoy, PervMom, SisLovesMe, … |
| SpiceVids collections | 1001 | AdamAndEveVOD, Crunchboy, 1111Customs, AdultTime, NewSensations, … (Aylo marketplace) |
| Aylo/Juan | 33 | Babes, BangBros, BigStr, Brazzers, Dancing Bear, Erito, HentaiPros, Icon Male, Killergram, LetsDoeIt, Metro, MileHigh, Noir Male, Reality Kings, Sean Cody, Sex Selector, SpiceVids, Sweet Sinner, Sweetheart Video, Transsensual, Virtual Porn, WhyNotBi, … |
| FYC/PornPros | 20 | Passion HD, Tiny4K, POVD, Casting Couch X, Lubed, SpyFam, Cum4K, Exotic4K, WetVR, BBC Pie, … |
| WordPress | 5 | Anal Therapy, Family Therapy, Tara Tainton, … |
| POVR/WankzVR | 4 | BrasilVR, MilfVR, TranzVR, WankzVR |
| Up-Timely CMS | 5 | DAS!, Idea Pocket, Madonna, MOODYZ, S1 NO.1 STYLE |
| SexMex Pro CMS | 3 | Exposed Latinas, SexMex, Trans Queens |
| ModelCentro | 26 | Penny Barber, The Jerky Girls, Mugur Porn, Thicc Vision, Cum Trainer, Monster Males, … |
| MetArt Network | 13 | MetArt, SexArt, ALS Scan, Viv Thomas, MetArt X, Errotica Archives, Stunning 18, … |
| Railway/Express | 3 | Smoking Erotica, Smoking Models, Spanking Glamour |
| Grooby | 42 | Grooby Girls, TGirls.xxx, Brazilian Transsexuals, TGirl Japan, Grooby VR, Black TGirls, Femout.xxx, Ladyboy.xxx, … |
| New Sensations | 8 | New Sensations, FamilyXXX, Hot Wife XXX, Girl Girl XXX, Fresh Outta High School, Shane Diesel XXX, … |
| Wow Network | 4 | WowGirls, Ultra Films, angels.love, sensual.love |
| Stashbox | 1+ | StashDB, any stashbox instance (config-driven) |
| Standalone | 54 | Anal Vids, APClips, Bare Back Studios, Beautiful Agony, Clips4Sale, Crunchboy, DEEP'S, Fakings, Glory Quest, GrandparentsX, I Feel Myself, I Shot Myself, Jules Jordan, Kink, KM Produce, Lucas Entertainment, ManyVids, Mousouzoku, Naked News, Pornhub, Pure CFNM, r18.dev, Raw Fuck Club, SexLikeReal, Takara TV, VENUS, … |
Pick one — pre-built binary is easiest, system packages for auto-updates, Docker if you prefer containers, source if you want to hack on it.
Download the archive for your platform from the latest release, extract, and put the binary on your PATH. All binaries are static (no runtime dependencies).
Asset naming: fss-<version>-<os>-<arch>.tar.gz (or .zip for Windows). Available platforms: linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64.
# Resolves to the latest tag (e.g. v1.11.0) by following the GitHub redirect.
VERSION=$(curl -sIL -o /dev/null -w '%{url_effective}' https://github.com/Wasylq/FSS/releases/latest | sed 's|.*/||')
ARCH=amd64 # or arm64 for Raspberry Pi 4/5, ARM cloud instances, etc.
curl -LO https://github.com/Wasylq/FSS/releases/download/${VERSION}/fss-${VERSION}-linux-${ARCH}.tar.gz
tar xzf fss-${VERSION}-linux-${ARCH}.tar.gz
sudo install -m 0755 fss /usr/local/bin/fss
fss versionIf you don't have sudo, drop fss into ~/.local/bin/ (already on your PATH on most distros) instead.
VERSION=$(curl -sIL -o /dev/null -w '%{url_effective}' https://github.com/Wasylq/FSS/releases/latest | sed 's|.*/||')
ARCH=arm64 # Apple Silicon (M1+); use amd64 for Intel Macs
curl -LO https://github.com/Wasylq/FSS/releases/download/${VERSION}/fss-${VERSION}-darwin-${ARCH}.tar.gz
tar xzf fss-${VERSION}-darwin-${ARCH}.tar.gz
sudo install -m 0755 fss /usr/local/bin/fss
# Gatekeeper will block unsigned binaries the first time. Either:
xattr -d com.apple.quarantine /usr/local/bin/fss
# or: System Settings → Privacy & Security → "Open anyway" after the first failed run.
fss version$Version = (Invoke-RestMethod -Uri "https://api.github.com/repos/Wasylq/FSS/releases/latest").tag_name
Invoke-WebRequest -Uri "https://github.com/Wasylq/FSS/releases/download/$Version/fss-$Version-windows-amd64.zip" -OutFile fss.zip
Expand-Archive -Path fss.zip -DestinationPath .
# Move into a folder that's on your PATH, e.g.:
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\bin" | Out-Null
Move-Item -Force fss.exe "$env:USERPROFILE\bin\fss.exe"
# Add %USERPROFILE%\bin to your PATH (one-time):
[Environment]::SetEnvironmentVariable("Path", "$env:Path;$env:USERPROFILE\bin", "User")
# Restart your shell, then:
fss versionEach release also publishes .deb and .rpm packages. Download them from the latest release.
TAG=$(curl -sIL -o /dev/null -w '%{url_effective}' https://github.com/Wasylq/FSS/releases/latest | sed 's|.*/||')
VERSION=${TAG#v} # asset filenames drop the leading "v"
ARCH=amd64 # or arm64
# Debian / Ubuntu
curl -LO "https://github.com/Wasylq/FSS/releases/download/${TAG}/fss_${VERSION}_${ARCH}.deb"
sudo dpkg -i "fss_${VERSION}_${ARCH}.deb"
# Fedora / RHEL
curl -LO "https://github.com/Wasylq/FSS/releases/download/${TAG}/fss-${VERSION}-1.x86_64.rpm"
sudo rpm -i "fss-${VERSION}-1.x86_64.rpm"yay -S fssdocker pull ghcr.io/wasylq/fss:latest
docker run --rm ghcr.io/wasylq/fss:latest list-scrapersSee docs/docker.md for volume conventions, the bind-mount UID gotcha, and a docker compose example with Stash.
Requires Go 1.25+ (matches the go directive in go.mod).
git clone https://github.com/Wasylq/FSS
cd FSS
go build -o fss .
./fss versionOr via go install (binary lands in $GOBIN, typically ~/go/bin/):
go install github.com/Wasylq/FSS@latest# Scrape a studio — outputs JSON by default
fss scrape https://www.manyvids.com/Profile/590705/bettie-bondage/Store/Videos
# Incremental mode (default): only fetches new scenes
fss scrape <url>
# Full re-scrape from scratch
fss scrape --full <url>
# Re-fetch all metadata, soft-delete removed scenes
fss scrape --refresh <url>
# Output both JSON and CSV
fss scrape --output json,csv --out ./data <url>
# Use SQLite as the store
fss scrape --db ./fss.db --name "Bettie Bondage" <url>
# See supported sites
fss list-scrapers# Dry-run: match video files against FSS metadata
fss identify /path/to/videos --dir ./data
# Write .nfo files next to matched videos
fss identify /path/to/videos --dir ./data --apply
# Optional: install ffprobe (FFmpeg) for duration-based disambiguation
sudo apt install ffmpeg # or: brew install ffmpeg# List unmatched scenes in Stash
fss stash unmatched
# Dry-run: show what would be imported
fss stash import --dir ./data
# Apply changes
fss stash import --dir ./data --applyOptional YAML config at the platform-specific path:
| Platform | Path |
|---|---|
| Linux | ~/.config/fss/config.yaml |
| macOS | ~/Library/Application Support/fss/config.yaml |
| Windows | %APPDATA%\fss\config.yaml |
See config.example.yaml for all available options with descriptions. To get started, grab it directly and drop it into place:
# Linux
mkdir -p ~/.config/fss
curl -fsSL https://raw.githubusercontent.com/Wasylq/FSS/master/config.example.yaml \
-o ~/.config/fss/config.yaml
# macOS
mkdir -p ~/Library/Application\ Support/fss
curl -fsSL https://raw.githubusercontent.com/Wasylq/FSS/master/config.example.yaml \
-o ~/Library/Application\ Support/fss/config.yamlOr if you already have the repo cloned: cp config.example.yaml ~/.config/fss/config.yaml
CLI flags always override config values. See docs/usage.md for the full reference.
| Document | Contents |
|---|---|
| docs/scrapers.md | Supported sites, URL patterns, shared packages |
| docs/usage.md | CLI reference, data model, output formats, SQLite |
| docs/identify.md | NFO sidecar file generation: matching videos, writing .nfo files |
| docs/stash.md | Stash integration: matching, merging, import workflow |
| docs/docker.md | Running FSS in Docker — image tags, volumes, compose examples |
| docs/library.md | Using FSS as a Go library — registry API, streaming results, Scene model |
| docs/architecture.md | System design, plugin registry, streaming model, store abstraction |
| CONTRIBUTING.md | How to add a new scraper, reference implementations |
| SECURITY.md | Credential handling, network policy, vulnerability reporting |