Transformers JS
Hugging FaceOfficialCreated by huggingfaceDistributed by Hugging Face
- Skill
- Tool integration
- Data and AI
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Transformers.js is a library that enables the execution of machine learning models within JavaScript and TypeScript environments, including web browsers and server-side runtimes like Node.js, Bun, and Deno. It leverages WebGPU and WASM to run models locally, eliminating the need for a dedicated Python backend. The library provides a pipeline API for common tasks such as NLP, computer vision, audio processing, and multimodal applications, with support for models hosted on the Hugging Face Hub.
What it does
- Provides a pipeline API for common machine learning tasks
- Supports NLP, computer vision, audio, and multimodal model execution
- Enables local model inference in browsers and server-side runtimes
- Integrates with the Hugging Face Hub for model discovery and loading
- Offers configuration for caching, quantization, and device selection
- Includes tools for standalone tokenization and tensor manipulation
When to use it
- When you need to run ML models client-side in a browser
- When you want to avoid maintaining a separate Python backend for ML
- When building applications in Node.js, Bun, or Deno that require AI capabilities
- When you need to perform text, image, or audio analysis locally
Advantages
- Runs directly in JavaScript/TypeScript environments
- Supports both browser and server-side execution
- Reduces infrastructure requirements by removing the need for a Python server
- Provides flexible caching options for different environments
- Allows for model quantization to manage memory and storage
Usage examples
- “How do I run a sentiment analysis model in my browser?”
- Use the pipeline API: const pipe = await pipeline('sentiment-analysis'); const result = await pipe('I love transformers!');
- “How can I load a specific model from Hugging Face?”
- Pass the model ID as the second argument to the pipeline: const pipe = await pipeline('sentiment-analysis', 'Xenova/bert-base-multilingual-uncased-sentiment');
- “How do I enable GPU acceleration for my model?”
- Set the device option in the pipeline: const pipe = await pipeline('task', 'model-id', { device: 'webgpu' });
- “How do I free up memory after using a model?”
- Call the dispose method on the pipeline instance: await pipe.dispose();
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/huggingface/transformers-js/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip transformers-js.zip -d .agents/skills
Documentation by huggingface
Transformers.js - Machine Learning for JavaScript
Transformers.js enables running state-of-the-art machine learning models directly in JavaScript across browsers and server-side runtimes (Node.js, Bun, Deno), with no Python server required.
When to Use This Skill
Use this skill when you need to:
Run ML models for text analysis, generation, or translation in JavaScript
Perform image classification, object detection, or segmentation
Implement speech recognition or audio processing
Build multimodal AI applications (text-to-image, image-to-text, etc.)
Run models client-side in the browser without a backend
Installation
NPM Installation
npm install @huggingface/transformersBrowser Usage (CDN)
<script type="module">
import { pipeline } from 'https://cdn.jsdelivr.net/npm/@huggingface/transformers';
</script>Core Concepts
1. Pipeline API
The pipeline API is the easiest way to use models. It groups together preprocessing, model inference, and postprocessing:
import { pipeline } from '@huggingface/transformers';
// Create a pipeline for a specific task
const pipe = await pipeline('sentiment-analysis');
// Use the pipeline
const result = await pipe('I love transformers!');
// Output: [{ label: 'POSITIVE', score: 0.999817686 }]
// IMPORTANT: Always dispose when done to free memory
await pipe.dispose();⚠️ Memory Management: All pipelines must be disposed with pipe.dispose() when finished to prevent memory leaks. See examples in Code Examples for cleanup patterns across different environments.
2. Model Selection
You can specify a custom model as the second argument:
const pipe = await pipeline(
'sentiment-analysis',
'Xenova/bert-base-multilingual-uncased-sentiment'
);Finding Models:
Browse available Transformers.js models on Hugging Face Hub:
All models: https://huggingface.co/models?library=transformers.js&sort=trending
By task: Add
pipeline_tagparameterText generation: https://huggingface.co/models?pipeline_tag=text-generation&library=transformers.js&sort=trending
Image classification: https://huggingface.co/models?pipeline_tag=image-classification&library=transformers.js&sort=trending
Speech recognition: https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&library=transformers.js&sort=trending
Tip: Filter by task type, sort by trending/downloads, and check model cards for performance metrics and usage examples.
3. Device Selection
Choose where to run the model:
// Run on CPU (default for WASM)
const pipe = await pipeline('sentiment-analysis', 'model-id');
// Run on GPU (WebGPU)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
device: 'webgpu',
});4. Quantization Options
Control model precision vs. performance:
// Use quantized model (faster, smaller)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'q4', // Options: 'fp32', 'fp16', 'q8', 'q4'
});Supported Tasks
Note: All examples below show basic usage.
Natural Language Processing
Text Classification
const classifier = await pipeline('text-classification');
const result = await classifier('This movie was amazing!');Named Entity Recognition (NER)
const ner = await pipeline('token-classification');
const entities = await ner('My name is John and I live in New York.');Question Answering
const qa = await pipeline('question-answering');
const answer = await qa({
question: 'What is the capital of France?',
context: 'Paris is the capital and largest city of France.'
});Text Generation
const generator = await pipeline('text-generation', 'onnx-community/gemma-3-270m-it-ONNX');
const text = await generator('Once upon a time', {
max_new_tokens: 100,
temperature: 0.7
});For streaming and chat: See Text Generation Guide for:
Streaming token-by-token output with
TextStreamerChat/conversation format with system/user/assistant roles
Generation parameters (temperature, top_k, top_p)
Browser and Node.js examples
React components and API endpoints
Translation
const translator = await pipeline('translation', 'Xenova/nllb-200-distilled-600M');
const output = await translator('Hello, how are you?', {
src_lang: 'eng_Latn',
tgt_lang: 'fra_Latn'
});Summarization
const summarizer = await pipeline('summarization');
const summary = await summarizer(longText, {
max_length: 100,
min_length: 30
});Zero-Shot Classification
const classifier = await pipeline('zero-shot-classification');
const result = await classifier('This is a story about sports.', ['politics', 'sports', 'technology']);Computer Vision
Image Classification
const classifier = await pipeline('image-classification');
const result = await classifier('https://example.com/image.jpg');
// Or with local file
const result = await classifier(imageUrl);Object Detection
const detector = await pipeline('object-detection');
const objects = await detector('https://example.com/image.jpg');
// Returns: [{ label: 'person', score: 0.95, box: { xmin, ymin, xmax, ymax } }, ...]Image Segmentation
const segmenter = await pipeline('image-segmentation');
const segments = await segmenter('https://example.com/image.jpg');Depth Estimation
const depthEstimator = await pipeline('depth-estimation');
const depth = await depthEstimator('https://example.com/image.jpg');Zero-Shot Image Classification
const classifier = await pipeline('zero-shot-image-classification');
const result = await classifier('image.jpg', ['cat', 'dog', 'bird']);Audio Processing
Automatic Speech Recognition
const transcriber = await pipeline('automatic-speech-recognition');
const result = await transcriber('audio.wav');
// Returns: { text: 'transcribed text here' }Audio Classification
const classifier = await pipeline('audio-classification');
const result = await classifier('audio.wav');Text-to-Speech
const synthesizer = await pipeline('text-to-speech', 'Xenova/speecht5_tts');
const audio = await synthesizer('Hello, this is a test.', {
speaker_embeddings: speakerEmbeddings
});Multimodal
Image-to-Text (Image Captioning)
const captioner = await pipeline('image-to-text');
const caption = await captioner('image.jpg');Document Question Answering
const docQA = await pipeline('document-question-answering');
const answer = await docQA('document-image.jpg', 'What is the total amount?');Zero-Shot Object Detection
const detector = await pipeline('zero-shot-object-detection');
const objects = await detector('image.jpg', ['person', 'car', 'tree']);Feature Extraction (Embeddings)
const extractor = await pipeline('feature-extraction');
const embeddings = await extractor('This is a sentence to embed.');
// Returns: tensor of shape [1, sequence_length, hidden_size]
// For sentence embeddings (mean pooling)
const extractor = await pipeline('feature-extraction', 'onnx-community/all-MiniLM-L6-v2-ONNX');
const embeddings = await extractor('Text to embed', { pooling: 'mean', normalize: true });Finding and Choosing Models
Browsing the Hugging Face Hub
Discover compatible Transformers.js models on Hugging Face Hub:
Base URL (all models):
https://huggingface.co/models?library=transformers.js&sort=trendingFilter by task using the pipeline_tag parameter:
Sort options:
&sort=trending- Most popular recently&sort=downloads- Most downloaded overall&sort=likes- Most liked by community&sort=modified- Recently updated
Choosing the Right Model
Consider these factors when selecting a model:
1. Model Size
Small (< 100MB): Fast, suitable for browsers, limited accuracy
Medium (100MB - 500MB): Balanced performance, good for most use cases
Large (> 500MB): High accuracy, slower, better for Node.js or powerful devices
2. Quantization Models are often available in different quantization levels:
fp32- Full precision (largest, most accurate)fp16- Half precision (smaller, still accurate)q8- 8-bit quantized (much smaller, slight accuracy loss)q4- 4-bit quantized (smallest, noticeable accuracy loss)
3. Task Compatibility Check the model card for:
Supported tasks (some models support multiple tasks)
Input/output formats
Language support (multilingual vs. English-only)
License restrictions
4. Performance Metrics Model cards typically show:
Accuracy scores
Benchmark results
Inference speed
Memory requirements
Example: Finding a Text Generation Model
// 1. Visit: https://huggingface.co/models?pipeline_tag=text-generation&library=transformers.js&sort=trending
// 2. Browse and select a model (e.g., onnx-community/gemma-3-270m-it-ONNX)
// 3. Check model card for:
// - Model size: ~270M parameters
// - Quantization: q4 available
// - Language: English
// - Use case: Instruction-following chat
// 4. Use the model:
import { pipeline } from '@huggingface/transformers';
const generator = await pipeline(
'text-generation',
'onnx-community/gemma-3-270m-it-ONNX',
{ dtype: 'q4' } // Use quantized version for faster inference
);
const output = await generator('Explain quantum computing in simple terms.', {
max_new_tokens: 100
});
await generator.dispose();Tips for Model Selection
Start Small: Test with a smaller model first, then upgrade if needed
Check ONNX Support: Ensure the model has ONNX files (look for
onnxfolder in model repo)Read Model Cards: Model cards contain usage examples, limitations, and benchmarks
Test Locally: Benchmark inference speed and memory usage in your environment
Filter by Library: Use
library=transformers.jsto find compatible models: https://huggingface.co/models?library=transformers.jsVersion Pin: Use specific git commits in production for stability:
const pipe = await pipeline('task', 'model-id', { revision: 'abc123' });
Advanced Configuration
Environment Configuration (env)
The env object provides comprehensive control over Transformers.js execution, caching, and model loading.
Quick Overview:
import { env, LogLevel } from '@huggingface/transformers';
// View version
console.log(env.version); // e.g., '4.x'
// Common settings
env.allowRemoteModels = true; // Load from Hugging Face Hub
env.allowLocalModels = false; // Load from file system
env.localModelPath = '/models/'; // Local model directory
env.useFSCache = true; // Cache models on disk (Node.js)
env.useBrowserCache = true; // Cache models in browser
env.cacheDir = './.cache'; // Cache directory location
// Optional: override logging level (default is LogLevel.WARNING)
env.logLevel = LogLevel.INFO;
// Optional: custom fetch for auth headers, retries, abort signals, etc.
env.fetch = (url, options) =>
fetch(url, {
...options,
headers: {
...options?.headers,
Authorization: `Bearer ${HF_TOKEN}`,
},
});Configuration Patterns:
// Development: Fast iteration with remote models
env.allowRemoteModels = true;
env.useFSCache = true;
// Production: Local models only
env.allowRemoteModels = false;
env.allowLocalModels = true;
env.localModelPath = '/app/models/';
// Custom CDN
env.remoteHost = 'https://cdn.example.com/models';
// Disable caching (testing)
env.useFSCache = false;
env.useBrowserCache = false;For complete documentation on all configuration options, caching strategies, cache management, pre-downloading models, and more, see:
ModelRegistry (v4)
ModelRegistry gives you visibility and control over model assets before loading a pipeline. Use it to estimate download size, check cache status, inspect available dtypes, and clear cached artifacts for a specific task/model/options tuple.
import { ModelRegistry } from '@huggingface/transformers';
const task = 'feature-extraction';
const modelId = 'onnx-community/all-MiniLM-L6-v2-ONNX';
const modelOptions = { dtype: 'fp32' };
// List required files for this pipeline
const files = await ModelRegistry.get_pipeline_files(task, modelId, modelOptions);
// Check if assets are already cached
const cached = await ModelRegistry.is_pipeline_cached(task, modelId, modelOptions);
// Inspect precision formats available for this model
const dtypes = await ModelRegistry.get_available_dtypes(modelId);
console.log({ files: files.length, cached, dtypes });For production patterns and full API coverage, see ModelRegistry Reference.
Standalone Tokenization (@huggingface/tokenizers)
For tokenization-only workflows, use @huggingface/tokenizers. It is a separate lightweight package useful when you need fast tokenization/encoding without loading full model inference pipelines.
npm install @huggingface/tokenizersimport { Tokenizer } from '@huggingface/tokenizers';Working with Tensors
import { AutoTokenizer, AutoModel } from '@huggingface/transformers';
// Load tokenizer and model separately for more control
const tokenizer = await AutoTokenizer.from_pretrained('bert-base-uncased');
const model = await AutoModel.from_pretrained('bert-base-uncased');
// Tokenize input
const inputs = await tokenizer('Hello world!');
// Run model
const outputs = await model(inputs);Batch Processing
const classifier = await pipeline('sentiment-analysis');
// Process multiple texts
const results = await classifier([
'I love this!',
'This is terrible.',
'It was okay.'
]);Runtime-Specific Considerations
WebGPU Usage
WebGPU provides GPU acceleration in browsers and server-side runtimes (when supported):
const pipe = await pipeline('text-generation', 'onnx-community/gemma-3-270m-it-ONNX', {
device: 'webgpu',
dtype: 'fp32'
});Note: Use webgpu when available and fall back to WASM/CPU when not supported in the current runtime.
WASM Performance
WASM is the most compatible execution backend across runtimes:
// Optimized for browsers with quantization
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'q8' // or 'q4' for even smaller size
});Progress Tracking & Loading Indicators
Models can be large (ranging from a few MB to several GB) and consist of multiple files. Track download progress by passing a callback to the pipeline() function:
import { pipeline } from '@huggingface/transformers';
// Track progress for each file
const fileProgress = {};
function onProgress(info) {
if (info.status === 'progress_total') {
console.log(`Total: ${info.progress.toFixed(1)}%`);
return;
}
console.log(`${info.status}: ${info.file ?? ''}`);
if (info.status === 'progress') {
fileProgress[info.file] = info.progress;
console.log(`${info.file}: ${info.progress.toFixed(1)}%`);
}
if (info.status === 'done') {
console.log(`✓ ${info.file} complete`);
}
}
// Pass callback to pipeline
const classifier = await pipeline('sentiment-analysis', null, {
progress_callback: onProgress
});Progress Info Properties:
interface ProgressInfo {
status: 'initiate' | 'download' | 'progress' | 'progress_total' | 'done' | 'ready';
name: string; // Model id or path
file?: string; // File being processed (per-file events)
progress?: number; // Percentage (0-100, for 'progress' and 'progress_total')
loaded?: number; // Bytes downloaded (only for 'progress' status)
total?: number; // Total bytes (only for 'progress' status)
}For complete examples including browser UIs, React components, CLI progress bars, and retry logic, see:
→ Pipeline Options - Progress Callback
Error Handling
try {
const pipe = await pipeline('sentiment-analysis', 'model-id');
const result = await pipe('text to analyze');
} catch (error) {
if (error.message.includes('fetch')) {
console.error('Model download failed. Check internet connection.');
} else if (error.message.includes('ONNX')) {
console.error('Model execution failed. Check model compatibility.');
} else {
console.error('Unknown error:', error);
}
}Performance Tips
Reuse Pipelines: Create pipeline once, reuse for multiple inferences
Use Quantization: Start with
q8orq4for faster inferenceBatch Processing: Process multiple inputs together when possible
Cache Models: Models are cached automatically (see Caching Reference for details on browser Cache API, Node.js filesystem cache, and custom implementations)
WebGPU for Large Models: Use WebGPU for models that benefit from GPU acceleration
Prune Context: For text generation, limit
max_new_tokensto avoid memory issuesClean Up Resources: Call
pipe.dispose()when done to free memory
Memory Management
IMPORTANT: Always call pipe.dispose() when finished to prevent memory leaks.
const pipe = await pipeline('sentiment-analysis');
const result = await pipe('Great product!');
await pipe.dispose(); // ✓ Free memory (100MB - several GB per model)When to dispose:
Application shutdown or component unmount
Before loading a different model
After batch processing in long-running apps
Models consume significant memory and hold GPU/CPU resources. Disposal is critical for browser memory limits and server stability.
For detailed patterns (React cleanup, servers, browser), see Code Examples
Troubleshooting
Model Not Found
Verify model exists on Hugging Face Hub
Check model name spelling
Ensure model has ONNX files (look for
onnxfolder in model repo)
Memory Issues
Use smaller models or quantized versions (
dtype: 'q4')Reduce batch size
Limit sequence length with
max_length
WebGPU Errors
Check browser compatibility (Chrome 113+, Edge 113+)
Try
dtype: 'fp16'iffp32failsFall back to WASM if WebGPU unavailable
Reference Documentation
This Skill
Pipeline Options - Configure
pipeline()withprogress_callback,device,dtype, etc.Configuration Reference - Global
envconfiguration for caching and model loadingModelRegistry Reference - Inspect files, cache status, dtypes, and clear cache before loading pipelines
Caching Reference - Browser Cache API, Node.js filesystem cache, and custom cache implementations
Text Generation Guide - Streaming, chat format, and generation parameters
Model Architectures - Supported models and selection tips
Code Examples - Real-world implementations for different runtimes
Official Transformers.js
Official docs: https://huggingface.co/docs/transformers.js
API reference: https://huggingface.co/docs/transformers.js/api/pipelines
Model hub: https://huggingface.co/models?library=transformers.js
Examples: https://github.com/huggingface/transformers.js-examples
Best Practices
Always Dispose Pipelines: Call
pipe.dispose()when done - critical for preventing memory leaksStart with Pipelines: Use the pipeline API unless you need fine-grained control
Test Locally First: Test models with small inputs before deploying
Monitor Model Sizes: Be aware of model download sizes for web applications
Handle Loading States: Show progress indicators for better UX
Version Pin: Pin specific model versions for production stability
Error Boundaries: Always wrap pipeline calls in try-catch blocks
Progressive Enhancement: Provide fallbacks for unsupported browsers
Reuse Models: Load once, use many times - don't recreate pipelines unnecessarily
Graceful Shutdown: Dispose models on SIGTERM/SIGINT in servers
Quick Reference: Task IDs
| Task | Task ID |
|---|---|
| Text classification | text-classification or sentiment-analysis |
| Token classification | token-classification or ner |
| Question answering | question-answering |
| Fill mask | fill-mask |
| Summarization | summarization |
| Translation | translation |
| Text generation | text-generation |
| Text-to-text generation | text2text-generation |
| Zero-shot classification | zero-shot-classification |
| Image classification | image-classification |
| Image segmentation | image-segmentation |
| Object detection | object-detection |
| Depth estimation | depth-estimation |
| Image-to-image | image-to-image |
| Zero-shot image classification | zero-shot-image-classification |
| Zero-shot object detection | zero-shot-object-detection |
| Automatic speech recognition | automatic-speech-recognition |
| Audio classification | audio-classification |
| Text-to-speech | text-to-speech or text-to-audio |
| Image-to-text | image-to-text |
| Document question answering | document-question-answering |
| Feature extraction | feature-extraction |
| Sentence similarity | sentence-similarity |
This skill enables you to integrate state-of-the-art machine learning capabilities directly into JavaScript applications without requiring separate ML servers or Python environments.
Files
- ATTRIBUTION.mdAdded by AutoGineer922 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md24.3 KiB
- references/CACHE.md9.0 KiB
- references/CONFIGURATION.md10.8 KiB
- references/EXAMPLES.md15.3 KiB
- references/MODEL_ARCHITECTURES.md5.5 KiB
- references/MODEL_REGISTRY.md5.9 KiB
- references/PIPELINE_OPTIONS.md14.6 KiB
- references/TEXT_GENERATION.md7.7 KiB
references/PIPELINE_OPTIONS.md
Pipeline Options Reference
Guide to configuring model loading and inference using the PretrainedModelOptions parameter in the pipeline() function.
Table of Contents
Overview
Basic Options
Model Loading Options
Device and Performance Options
Common Configuration Patterns
Overview
The pipeline() function accepts three parameters:
import { pipeline } from '@huggingface/transformers';
const pipe = await pipeline(
'task-name', // 1. Task type (e.g., 'sentiment-analysis')
'model-id', // 2. Model identifier (optional, uses default if null)
options // 3. PretrainedModelOptions (optional)
);The third parameter, options, allows you to configure how the model is loaded and executed.
Available Options
interface PretrainedModelOptions {
// Progress tracking
progress_callback?: (info: ProgressInfo) => void;
// Model configuration
config?: PretrainedConfig;
// Cache and loading
cache_dir?: string;
local_files_only?: boolean;
revision?: string;
// Model-specific settings
subfolder?: string;
model_file_name?: string;
// Device and performance
device?: DeviceType | Record<string, DeviceType>;
dtype?: DataType | Record<string, DataType>;
// External data format (large models)
use_external_data_format?: boolean | number | Record<string, boolean | number>;
// ONNX Runtime settings
session_options?: InferenceSession.SessionOptions;
}Basic Options
Progress Callback
Track model download and loading progress. Recommended: use progress_total for end-to-end progress, and optionally use progress for per-file details.
const fileProgress = {};
const pipe = await pipeline('sentiment-analysis', null, {
progress_callback: (info) => {
// Recommended: end-to-end loading progress
if (info.status === 'progress_total') {
console.log(`Total: ${info.progress.toFixed(1)}%`);
return;
}
// Optional: per-file progress
if (info.status === 'progress') {
fileProgress[info.file] = info.progress;
console.log(`${info.file}: ${info.progress.toFixed(1)}%`);
}
if (info.status === 'done') {
console.log(`✓ ${info.file} complete`);
}
}
});Progress Info Types:
type ProgressInfo = {
status: 'initiate' | 'download' | 'progress' | 'progress_total' | 'done' | 'ready';
name: string; // Model id or path
file?: string; // File being processed (per-file events)
progress?: number; // Percentage (0-100, for 'progress' and 'progress_total')
loaded?: number; // Bytes downloaded (only for 'progress' status)
total?: number; // Total bytes (only for 'progress' status)
};Example: Browser Loading UI with Multiple Files
const statusDiv = document.getElementById('status');
const progressContainer = document.getElementById('progress-container');
const fileProgressBars = {};
const pipe = await pipeline('image-classification', null, {
progress_callback: (info) => {
if (info.status === 'progress_total') {
statusDiv.textContent = `Total: ${info.progress.toFixed(1)}%`;
return;
}
if (info.status === 'progress') {
// Create progress bar for each file if not exists
if (!fileProgressBars[info.file]) {
const fileDiv = document.createElement('div');
fileDiv.innerHTML = `
<div class="file-name">${info.file}</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 0%"></div>
</div>
`;
progressContainer.appendChild(fileDiv);
fileProgressBars[info.file] = fileDiv.querySelector('.progress-fill');
}
// Update progress bar
fileProgressBars[info.file].style.width = `${info.progress}%`;
const mb = (info.loaded / 1024 / 1024).toFixed(2);
const totalMb = (info.total / 1024 / 1024).toFixed(2);
statusDiv.textContent = `${info.file}: ${mb}/${totalMb} MB`;
}
if (info.status === 'ready') {
statusDiv.textContent = 'Model ready!';
}
}
});For more progress tracking examples, see the examples in this section above.
Custom Configuration
Override the model's default configuration:
import { pipeline } from '@huggingface/transformers';
const pipe = await pipeline('text-generation', 'model-id', {
config: {
max_length: 512,
temperature: 0.8,
// ... other config options
}
});Use cases:
Override default generation parameters
Adjust model-specific settings
Test different configurations without modifying model files
Model Loading Options
Cache Directory
Specify where to cache downloaded models:
// Node.js: Custom cache location
const pipe = await pipeline('sentiment-analysis', 'model-id', {
cache_dir: './my-custom-cache'
});Default behavior:
If not specified, uses
env.cacheDir(default:./.cache)Only applies when
env.useFSCache = true(Node.js)Browser cache uses Cache API (configured via
env.cacheKey)
Local Files Only
Prevent any network requests:
const pipe = await pipeline('sentiment-analysis', 'model-id', {
local_files_only: true
});Use cases:
Offline applications
Air-gapped environments
Testing with pre-downloaded models
Production deployments with bundled models
Important:
Model must already be cached or available locally
Throws error if model not found locally
Requires
env.allowLocalModels = true
Model Revision
Specify a specific model version (git branch, tag, or commit):
const pipe = await pipeline('sentiment-analysis', 'model-id', {
revision: 'v1.0.0' // Use specific version
});
// Or use a branch
const pipe = await pipeline('sentiment-analysis', 'model-id', {
revision: 'experimental'
});
// Or use a commit hash
const pipe = await pipeline('sentiment-analysis', 'model-id', {
revision: 'abc123def456'
});Default: 'main' (latest version)
Use cases:
Pin to stable release for production
Test experimental features
Reproduce results with specific model version
Work with models under development
Important:
Only applies to remote models (Hugging Face Hub)
Ignored for local file paths
Each revision is cached separately
Model Subfolder
Specify the subfolder within the model repository:
const pipe = await pipeline('sentiment-analysis', 'model-id', {
subfolder: 'onnx' // Default: 'onnx'
});Default: 'onnx'
Use cases:
Custom model repository structure
Multiple model variants in same repo
Organizational preferences
Model File Name
Specify a custom model file name (without .onnx extension):
const pipe = await pipeline('text-generation', 'model-id', {
model_file_name: 'decoder_model_merged'
});
// Loads: decoder_model_merged.onnxUse cases:
Models with non-standard file names
Select specific model variant
Encoder-decoder models with separate files
Note: Currently only valid for encoder-only or decoder-only models.
Device and Performance Options
Device Selection
Choose where to run the model:
// Run on CPU (WASM - default)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
device: 'wasm'
});
// Run on GPU (WebGPU)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
device: 'webgpu'
});Common devices:
'wasm'- WebAssembly (CPU, most compatible)'webgpu'- WebGPU (GPU acceleration in supported runtimes)'cpu'- CPU'gpu'- Auto-detect GPU'cuda'- NVIDIA CUDA (Node.js with GPU)
See the full list in the devices.js source.
Per-component device selection:
For models with multiple components (encoder-decoder, vision-encoder-decoder, etc.):
const pipe = await pipeline('automatic-speech-recognition', 'model-id', {
device: {
encoder: 'webgpu', // Run encoder on GPU
decoder: 'wasm' // Run decoder on CPU
}
});WebGPU Requirements:
Runtime with WebGPU support (browser, Node.js, Bun, or Deno)
Compatible hardware/driver stack
Adequate GPU memory
Data Type (Quantization)
Control model precision and size:
// Full precision (largest, most accurate)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'fp32'
});
// Half precision (balanced)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'fp16'
});
// 8-bit quantization (smaller, faster)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'q8'
});
// 4-bit quantization (smallest, fastest)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'q4'
});Common data types:
'fp32'- 32-bit floating point (full precision)'fp16'- 16-bit floating point (half precision)'q8'- 8-bit quantized (good balance)'q4'- 4-bit quantized (maximum compression)'int8'- 8-bit integer'uint8'- 8-bit unsigned integer
See the full list in the dtypes.js source.
Per-component data type:
const pipe = await pipeline('automatic-speech-recognition', 'model-id', {
dtype: {
encoder: 'fp32', // Encoder at full precision
decoder: 'q8' // Decoder quantized
}
});Trade-offs:
| Data Type | Model Size | Speed | Accuracy | Use Case |
|---|---|---|---|---|
fp32 | Largest | Slowest | Highest | Research, maximum quality |
fp16 | Medium | Medium | High | Production, GPU inference |
q8 | Small | Fast | Good | Production, CPU inference |
q4 | Smallest | Fastest | Acceptable | Edge devices, real-time apps |
External Data Format
For models >= 2GB, ONNX uses external data format:
// Automatically detect and load external data
const pipe = await pipeline('text-generation', 'large-model-id', {
use_external_data_format: true
});
// Specify number of external data chunks
const pipe = await pipeline('text-generation', 'large-model-id', {
use_external_data_format: 5 // Load 5 chunks (model.onnx_data_0 to _4)
});How it works:
Models >= 2GB split weights into separate files
Main file:
model.onnx(structure only)Data files:
model.onnx_dataormodel.onnx_data_0,model.onnx_data_1, etc.
Default behavior:
false- No external data (models < 2GB)true- Load external data automaticallynumber- Load this many external data chunks
Maximum chunks: 100 (defined by MAX_EXTERNAL_DATA_CHUNKS)
Per-component external data:
const pipe = await pipeline('text-generation', 'large-model-id', {
use_external_data_format: {
encoder: true,
decoder: 3 // Decoder has 3 external data chunks
}
});Session Options
Advanced ONNX Runtime configuration:
const pipe = await pipeline('sentiment-analysis', 'model-id', {
session_options: {
executionProviders: ['webgpu', 'wasm'],
graphOptimizationLevel: 'all',
enableCpuMemArena: true,
enableMemPattern: true,
executionMode: 'sequential',
logSeverityLevel: 2,
logVerbosityLevel: 0
}
});Common session options:
| Option | Description | Default |
|---|---|---|
executionProviders | Ordered list of execution providers | ['wasm'] |
graphOptimizationLevel | Graph optimization: 'disabled', 'basic', 'extended', 'all' | 'all' |
enableCpuMemArena | Enable CPU memory arena for faster memory allocation | true |
enableMemPattern | Enable memory pattern optimization | true |
executionMode | 'sequential' or 'parallel' | 'sequential' |
logSeverityLevel | 0=Verbose, 1=Info, 2=Warning, 3=Error, 4=Fatal | 2 |
freeDimensionOverrides | Override dynamic dimensions (e.g., { batch_size: 1 }) | - |
Use cases:
Fine-tune performance for specific hardware
Debug model execution issues
Override dynamic shapes
Control memory usage
Common Configuration Patterns
Development
Fast iteration with progress tracking:
import { pipeline } from '@huggingface/transformers';
const pipe = await pipeline('sentiment-analysis', null, {
progress_callback: (info) => {
if (info.status === 'progress_total') {
console.log(`Total: ${info.progress.toFixed(1)}%`);
}
}
});Production (GPU)
Use WebGPU with fp16 for better performance:
const pipe = await pipeline('sentiment-analysis', 'model-id', {
device: 'webgpu',
dtype: 'fp16'
});Production (CPU)
Use quantization for smaller size and faster CPU inference:
const pipe = await pipeline('sentiment-analysis', 'model-id', {
dtype: 'q8' // or 'q4' for even smaller
});Offline/Local
Prevent network requests, use only local models:
import { pipeline, env } from '@huggingface/transformers';
env.allowLocalModels = true;
env.localModelPath = './models/';
const pipe = await pipeline('sentiment-analysis', 'model-id', {
local_files_only: true
});Per-Component Settings
For encoder-decoder models, configure each component separately:
const pipe = await pipeline('automatic-speech-recognition', 'model-id', {
device: {
encoder: 'webgpu',
decoder: 'wasm'
},
dtype: {
encoder: 'fp16',
decoder: 'q8'
}
});Related Documentation
Configuration Reference - Environment configuration with
envobjectText Generation Guide - Text generation options and streaming
Model Architectures - Supported models and selection tips
Main Skill Guide - Getting started with Transformers.js
Best Practices
Progress Callbacks: Use
progress_callbackfor large models to show download progressQuantization: Use
q8orq4for CPU inference to reduce size and improve speedDevice Selection: Use
webgpufor better performance when availableOffline-First: Use
local_files_only: truein production to avoid runtime downloadsVersion Pinning: Use
revisionto pin model versions for reproducible deploymentsMemory Management: Always dispose pipelines with
pipe.dispose()when done
This document covers all available options for the pipeline() function. For environment-level configuration (remote hosts, global cache settings, WASM paths), see the Configuration Reference.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Node.js
The author says: Requires Node.js 18+ (or compatible Bun/Deno runtime) or modern browser with ES modules support. WebGPU requires runtime and hardware support; WASM is the broad fallback. Internet access is needed for downloading models from Hugging Face Hub (optional if using local models).
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- huggingface
- Publisher
- Hugging Face (Official)
- Distributed by
- Hugging Face
- Source
- huggingface/skills · skills/transformers-js · commit 25910b3
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by huggingface or Hugging Face.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download transformers-js.zip