Node.js client for the Tinify API that intelligently compresses, resizes, converts, and stores images in AVIF, WebP, JPEG, and PNG formats.
npx @tessl/cli install tessl/npm-tinify@1.8.0Tinify is a Node.js client library for the Tinify API (TinyPNG/TinyJPG) that provides intelligent image compression, resizing, format conversion, and cloud storage integration. It supports AVIF, WebP, JPEG, and PNG formats with advanced features like metadata preservation and direct cloud storage uploads.
npm install tinifyconst tinify = require("tinify");For TypeScript:
import tinify = require("tinify");const tinify = require("tinify");
// Set API key
tinify.key = "YOUR_API_KEY";
// Basic compression from file
await tinify.fromFile("input.png").toFile("output.png");
// From URL with resizing
await tinify.fromUrl("https://example.com/image.jpg")
.resize({ method: "fit", width: 150, height: 100 })
.toFile("thumbnail.jpg");
// Format conversion
const source = tinify.fromFile("image.jpg")
.convert({ type: ["image/webp", "image/png"] });
const result = source.result();
const extension = await result.extension();
await source.toFile(`converted.${extension}`);Tinify uses a fluent API design centered around these core components:
Core configuration settings including API key authentication, proxy settings, and application identification.
// Configuration properties
let key: string;
let appIdentifier: string;
let proxy: string;
let compressionCount?: number;
// Validation method
function validate(): Promise<void>;
function validate(callback: (err: Error | null) => void): void;Factory methods for creating image sources from files, buffers, or URLs for processing.
function fromFile(path: string): Source;
function fromBuffer(data: string | Uint8Array): Source;
function fromUrl(url: string): Source;Comprehensive image processing operations including resizing, format conversion, and metadata preservation.
class Source {
resize(options: ResizeOptions): Source;
convert(options: ConvertOptions): Source;
preserve(options: string[]): Source;
preserve(...options: string[]): Source;
transform(options: object): Source;
}
interface ResizeOptions {
method: "fit" | "cover";
width?: number;
height?: number;
}
interface ConvertOptions {
type: SupportedImageTypes | SupportedImageTypes[] | "*/*";
}
type SupportedImageTypes = "image/webp" | "image/png" | "image/jpg" | "image/jpeg" | "image/avif";Methods for retrieving processed images as files, buffers, or metadata, with both Promise and callback support.
class Source {
result(): Result;
toFile(path: string): Promise<void>;
toFile(path: string, callback: (err: Error | null) => void): void;
toBuffer(): Promise<Uint8Array>;
toBuffer(callback: (err: Error | null, data?: Uint8Array) => void): void;
}
class Result {
toFile(path: string): Promise<void>;
toBuffer(): Promise<Uint8Array>;
size(): Promise<number>;
mediaType(): Promise<string | void>;
extension(): Promise<string | void>;
}Direct upload integration with Amazon S3, Google Cloud Storage, and other S3-compatible services.
class Source {
store(options: StoreOptions): ResultMeta;
}
interface StoreOptions {
service: "s3" | "gcs";
aws_access_key_id?: string;
aws_secret_access_key?: string;
region?: string;
path: string;
// Additional S3/GCS options
}Comprehensive error types for different failure scenarios including authentication, client, server, and connection errors.
class Error extends globalThis.Error {
status?: number;
constructor(message: string, type?: string, status?: number);
static create(message: string, type: string, status?: number): Error;
}
class AccountError extends Error {} // 401, 429 errors
class ClientError extends Error {} // 400-499 errors
class ServerError extends Error {} // 500-599 errors
class ConnectionError extends Error {} // Network errorstype Callback<T = void> = (err: Error | null, data?: T) => void;
interface ResultMeta {
width(): Promise<number>;
height(): Promise<number>;
location(): Promise<string>;
}