Skip to content

Repository files navigation

EnoughLinkEnough

EnoughLinkEnough

A livechat media viewer powered by yt-dlp and gallery-dl.

Version License Source

EnoughLinkEnough listens to a Kick (for now) chat, captures media links, resolves direct image/video URLs, and displays them in a focused viewer so you do not have to keep opening tabs.

Features

  • Kick chat connection with reconnect
  • Image and video preview panel
  • yt-dlp based video resolving
  • gallery-dl based gallery and social media resolving
  • Direct media, Open Graph, TikTok oEmbed, and Instagram oEmbed fallbacks
  • Local NSFW risk warning based on thumbnail/image analysis
  • Session and permanent sender block list
  • Turkish and English UI

Requirements

  • Node.js 20 or newer
  • npm
  • Python 3.10 or newer
  • gallery-dl available in PATH

yt-dlp is installed through the youtube-dl-exec npm package. gallery-dl is intentionally not vendored in this repository.

pipx install gallery-dl
python -m pip install --user gallery-dl

Setup

npm install
npm run dev

Open http://localhost:3000.

Scripts

Command Description
npm run dev Starts Next.js with Turbopack
npm run dev:webpack Starts the webpack fallback dev server
npm run lint Runs ESLint
npm run typecheck Runs TypeScript without emit
npm run build Creates a production build
npm run start Starts the production server

Turbopack On Windows

The dev server uses Turbopack by default. next.config.ts sets Turbopack's plugin runtime to workerThreads so Windows does not keep spawning separate node.exe child processes during plugin evaluation.

If a Next.js regression still appears on your machine, use:

npm run dev:webpack

Environment Variables

Name Description
GALLERY_DL_PATH Custom gallery-dl executable path if it is not available as gallery-dl in PATH
INSTAGRAM_OEMBED_TOKEN Enables Instagram oEmbed fallback
NSFW_FLAG_THRESHOLD Default server-side risk threshold from 1 to 100
MEDIA_COMMAND_CONCURRENCY Maximum concurrent extractor commands
YTDLP_COOKIES_PATH Optional yt-dlp cookies file path for hosts that require auth
YTDLP_COOKIES_BASE64 Optional base64-encoded Netscape cookies file content for serverless hosts

Browser cookie extraction is not supported on serverless hosts; use YTDLP_COOKIES_BASE64 instead.

Project Structure

src/
  app/
    api/media/route.ts       HTTP route only
    globals.css              app styling
    layout.tsx               root layout and fonts
    page.tsx                 client UI
  lib/media/
    commands.ts              external command runner
    config.ts                extractor and cache configuration
    proxy.ts                 media proxy token cache
    resolver.ts              resolver pipeline
    settings.ts              request option normalization
    types.ts                 shared media types
    url.ts                   URL, headers, and fetch helpers
    extractors/
      direct.ts
      gallery.ts
      oembed.ts
      open-graph.ts
      ytdlp.ts
  i18n.ts                    translations
public/
  logo.svg

Credits

Powered by yt-dlp and gallery-dl.

Star History

Star History Chart

License

MIT

About

A livechat media viewer powered by yt-dlp and gallery-dl.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages