@bigfootds/nodejs-trickplay

Generate trickplay images for a given video file, for usage in NodeJS environments.

https://github.com/bigfootds/nodejs-trickplay

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.0%) to scientific vocabulary

Keywords

nodejs npm npm-package trickplay video-preview video-preview-thumbnails video-processing video-scrubbing
Last synced: 6 months ago · JSON representation ·

Repository

Generate trickplay images for a given video file, for usage in NodeJS environments.

Basic Info
Statistics
  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • Open Issues: 0
  • Releases: 3
Topics
nodejs npm npm-package trickplay video-preview video-preview-thumbnails video-processing video-scrubbing
Created 10 months ago · Last pushed 10 months ago
Metadata Files
Readme Contributing Funding License Code of conduct Citation Codemeta

README.md

@bigfootds/nodejs-trickplay

Generate trickplay images for a given video file, for usage in NodeJS environments.

Basically just recreating the Jellyfin approach to trickplay, via NodeJS.

Installation

This is a scoped package, to the @bigfootds namespace. Your installation command should look something like this:

npm install @bigfootds/nodejs-trickplay

The dependencies of this package should automatically sort out the ffmpeg and ffprobe installations for your operating systems.

Usage

When given an absolute path to a video file, this package will create trickplay data alongside that specified video file.

```js const { generateTrickplay } = require("@bigfootds/nodejs-trickplay"); const path = require("node:path");

let pathAbsolute = path.resolve("./.sandbox/SomeCoolVideo (2025) - WEBDL-1080p.mkv");

generateTrickplay(pathAbsolute); ```

If you already have raw trickplay frames in a neighbouring .trickplay folder for your video content, then you can also skip the frame generation and just use your existing raw trickplay frames.

```js const { generateTrickplay } = require("@bigfootds/nodejs-trickplay"); const path = require("node:path");

let pathAbsolute = path.resolve("./.sandbox/SomeCoolVideo (2025) - WEBDL-1080p.mkv");

generateTrickplay(pathAbsolute, {skipIndividualFrameGeneration: true}); ```

There are additional options available as well, but they are all optional. Anything not specified will fall back to a value in line with a value typical of Jellyfin trickplay behaviour.

```js { // Defaults to a ".trickplay" directory based on the target video file, neighbouring that file. trickplayOutputDir?: string; // Defaults to 10. Causes frame generation to grab a frame from every X seconds of the target video. secondsBetweenFrames?: number; // Defaults to 320. The width of the individual frames generated by the system. Works best when smaller than the target video width. trickplayImageWidth?: number; // Defaults to 10. Determines how many individual frames are squeezed into a single tilesheet. trickplaySheetRows?: number; // Defaults to 10. Determines how many individual frames are squeezed into a single tilesheet. trickplaySheetColumns?: number; // Defaults to false. Allows you to use pre-existing individual frames in the trickplayOutDir. Very handy for debugging! skipIndividualFrameGeneration?: boolean;

// Calculated at runtime, try not to use it.
numberOfFramesToGrab?: number;
// Calculated at runtime, try not to use it.
frameTimestamps?: string[];

} ```

More Info

So, given a folder like:

Videos/SomeCoolVideo (2025) - WEBDL-1080p.mp4

This will generate trickplay images and organise them into a nearby folder, adding content to the directory containing the specified video file:

- Videos/ - SomeCoolVideo (2025) - WEBDL-1080p.mp4 - SomeCoolVideo (2025) - WEBDL-1080p.trickplay/ - 320 - 10x10/ - 0.jpg - 1.jpg - 2.jpg - frames/ - 0.jpg - 1.jpg - 2.jpg

Each trickplay JPG file is a tilesheet of multiple frames from the target video. Longer videos will automatically create multiple tilesheets, constrained by the number of rows and columns you specified when calling the package's function.

Multiple tilesheets.

Individual frames are kept as well, so you can potentially not use tilesheets in your trickplay implementation for your video player.

Output file and folder structure example.

Owner

  • Name: BigfootDS
  • Login: BigfootDS
  • Kind: organization
  • Email: contact@bigfootds.com
  • Location: Sydney, AUS

Game development group.

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: NodeJS Trickplay
authors:
  - family-names: Stormwood
    given-names: Alex
    orcid: https://orcid.org/0009-0008-2183-7041
abstract: Generate trickplay images for a given video file, for usage in NodeJS environments.
repository-code: "https://github.com/BigfootDS/nodejs-trickplay"
version: 1.0.0
license-url: "https://spdx.org/licenses/MIT"
keywords:
  - nodejs
  - npm
  - npm-package
  - video-processing
  - video-preview
  - trickplay
  - video-scrubbing
  - vide-preview-thumbnails
date-released: 2025-04-21

CodeMeta (codemeta.json)

{
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
  "type": "software",
  "author": [
    {
      "@id": "https://orcid.org/0009-0008-2183-7041",
      "@type": "Person",
      "email": "alex@bigfootds.com",
      "givenName": "Alex",
      "familyName": "Stormwood",
      "affiliation": {
        "@type": "Organization",
        "name": "BigfootDS"
      }
    }
  ],
  "codeRepository": "https://github.com/BigfootDS/nodejs-trickplay",
  "url": "https://github.com/BigfootDS/nodejs-trickplay",
  "dateCreated": "2025-04-20",
  "dateModified": "2025-04-21",
  "datePublished": "2025-04-21",
  "description": "Generate trickplay images for a given video file, for usage in NodeJS environments.",
  "abstract": "Generate trickplay images for a given video file, for usage in NodeJS environments.",
  "downloadUrl": "https://github.com/BigfootDS/nodejs-trickplay",
  "keywords": [
    "nodejs",
    "npm",
    "npm-package",
    "video-processing",
    "video-preview",
    "trickplay",
    "video-scrubbing",
    "vide-preview-thumbnails"
  ],
  "license": "https://spdx.org/licenses/MIT",
  "name": "NodeJS Trickplay",
  "programmingLanguage": "JavaScript",
  "runtimePlatform": "NodeJS",
  "version": "1.0.0",
  "contIntegration": "https://github.com/BigfootDS/nodejs-trickplay/actions",
  "codemeta:continuousIntegration": {
    "id": "https://github.com/BigfootDS/nodejs-trickplay/actions"
  },
  "developmentStatus": "active",
  "issueTracker": "https://github.com/BigfootDS/nodejs-trickplay/issues"
}

GitHub Events

Total
  • Release event: 1
  • Push event: 2
  • Public event: 1
  • Create event: 1
Last Year
  • Release event: 1
  • Push event: 2
  • Public event: 1
  • Create event: 1

Packages

  • Total packages: 1
  • Total downloads:
    • npm 5 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 4
  • Total maintainers: 1
npmjs.org: @bigfootds/nodejs-trickplay

Generate trickplay images for a given video file, for usage in NodeJS environments.

  • Versions: 4
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 5 Last month
Rankings
Dependent repos count: 24.8%
Average: 30.3%
Dependent packages count: 35.8%
Maintainers (1)
Last synced: 7 months ago

Dependencies

.github/workflows/cd_npm.yml actions
  • JS-DevTools/npm-publish v3 composite
  • actions/checkout v4 composite
  • actions/create-release v1 composite
  • actions/setup-node v4 composite
  • eregon/publish-release v1.0.6 composite
  • mathieudutour/github-tag-action v6.2 composite
  • reedyuk/npm-version master composite
  • stefanzweifel/git-auto-commit-action v5 composite
.github/workflows/codemeta2cff.yml actions
  • EndBug/add-and-commit v9 composite
  • actions/checkout v4 composite
  • caltechlibrary/codemeta2cff main composite
.github/workflows/pr_rules_reminder.yml actions
  • actions/checkout v4 composite
  • thollander/actions-comment-pull-request v2 composite
.github/workflows/pr_title_checker.yml actions
  • CondeNast/conventional-pull-request-action v0.2.0 composite
  • actions/checkout v4 composite
package-lock.json npm
  • @types/fluent-ffmpeg 2.1.27 development
  • @types/node 22.14.1 development
  • typescript 5.8.3 development
  • undici-types 6.21.0 development
  • @ffmpeg-installer/darwin-arm64 4.1.5
  • @ffmpeg-installer/darwin-x64 4.1.0
  • @ffmpeg-installer/ffmpeg 1.1.0
  • @ffmpeg-installer/linux-arm 4.1.3
  • @ffmpeg-installer/linux-arm64 4.1.4
  • @ffmpeg-installer/linux-ia32 4.1.0
  • @ffmpeg-installer/linux-x64 4.1.0
  • @ffmpeg-installer/win32-ia32 4.1.0
  • @ffmpeg-installer/win32-x64 4.1.0
  • @ffprobe-installer/darwin-arm64 5.0.1
  • @ffprobe-installer/darwin-x64 5.1.0
  • @ffprobe-installer/ffprobe 2.1.2
  • @ffprobe-installer/linux-arm 5.2.0
  • @ffprobe-installer/linux-arm64 5.2.0
  • @ffprobe-installer/linux-ia32 5.2.0
  • @ffprobe-installer/linux-x64 5.2.0
  • @ffprobe-installer/win32-ia32 5.1.0
  • @ffprobe-installer/win32-x64 5.1.0
  • @jimp/core 1.6.0
  • @jimp/diff 1.6.0
  • @jimp/file-ops 1.6.0
  • @jimp/js-bmp 1.6.0
  • @jimp/js-gif 1.6.0
  • @jimp/js-jpeg 1.6.0
  • @jimp/js-png 1.6.0
  • @jimp/js-tiff 1.6.0
  • @jimp/plugin-blit 1.6.0
  • @jimp/plugin-blur 1.6.0
  • @jimp/plugin-circle 1.6.0
  • @jimp/plugin-color 1.6.0
  • @jimp/plugin-contain 1.6.0
  • @jimp/plugin-cover 1.6.0
  • @jimp/plugin-crop 1.6.0
  • @jimp/plugin-displace 1.6.0
  • @jimp/plugin-dither 1.6.0
  • @jimp/plugin-fisheye 1.6.0
  • @jimp/plugin-flip 1.6.0
  • @jimp/plugin-hash 1.6.0
  • @jimp/plugin-mask 1.6.0
  • @jimp/plugin-print 1.6.0
  • @jimp/plugin-quantize 1.6.0
  • @jimp/plugin-resize 1.6.0
  • @jimp/plugin-rotate 1.6.0
  • @jimp/plugin-threshold 1.6.0
  • @jimp/types 1.6.0
  • @jimp/utils 1.6.0
  • @tokenizer/token 0.3.0
  • @types/node 16.9.1
  • abort-controller 3.0.0
  • any-base 1.1.0
  • async 0.2.10
  • await-to-js 3.0.0
  • base64-js 1.5.1
  • bmp-ts 1.0.9
  • buffer 6.0.3
  • event-target-shim 5.0.1
  • events 3.3.0
  • exif-parser 0.1.12
  • file-type 16.5.4
  • fluent-ffmpeg 2.1.3
  • gifwrap 0.10.1
  • ieee754 1.2.1
  • image-q 4.0.0
  • isexe 2.0.0
  • jimp 1.6.0
  • jpeg-js 0.4.4
  • mime 3.0.0
  • omggif 1.0.10
  • pako 1.0.11
  • parse-bmfont-ascii 1.0.6
  • parse-bmfont-binary 1.0.6
  • parse-bmfont-xml 1.1.6
  • peek-readable 4.1.0
  • pixelmatch 5.3.0
  • pngjs 7.0.0
  • pngjs 6.0.0
  • process 0.11.10
  • readable-stream 4.7.0
  • readable-web-to-node-stream 3.0.4
  • safe-buffer 5.2.1
  • sax 1.4.1
  • simple-xml-to-json 1.2.3
  • string_decoder 1.3.0
  • strtok3 6.3.0
  • tinycolor2 1.6.0
  • token-types 4.2.1
  • utif2 4.1.0
  • which 1.3.1
  • xml-parse-from-string 1.0.1
  • xml2js 0.5.0
  • xmlbuilder 11.0.1
  • zod 3.24.3
package.json npm
  • @types/fluent-ffmpeg ^2.1.27 development
  • @types/node ^22.14.1 development
  • typescript ^5.8.3 development
  • @ffmpeg-installer/ffmpeg ^1.1.0
  • @ffprobe-installer/ffprobe ^2.1.2
  • fluent-ffmpeg ^2.1.3
  • jimp ^1.6.0