From fa825cfd0143df02809b20409f8fbcc9435da5a1 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Wed, 16 Sep 2026 14:52:49 +0530 Subject: [PATCH] feat: add density transformation parameter Sync the Transformation type and URL builder with @imagekit/nodejs 7.12.0: - add `density` (number | string), serialized as `dn` - correct the documented colorize default intensity to 100, matching the OpenAPI spec and https://imagekit.io/docs/effects-and-enhancements Co-Authored-By: Claude Fable 5.1 --- src/constants/supportedTransforms.ts | 1 + src/interfaces/shared.ts | 12 +++++++++++- test-app/tests/basic.spec.ts | 3 ++- test-app/tests/buildTransformationString.spec.ts | 10 ++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/constants/supportedTransforms.ts b/src/constants/supportedTransforms.ts index f5818bf..c26672b 100644 --- a/src/constants/supportedTransforms.ts +++ b/src/constants/supportedTransforms.ts @@ -56,6 +56,7 @@ export const supportedTransforms: { [key: string]: string } = { lossless: "lo", colorProfile: "cp", metadata: "md", + density: "dn", opacity: "o", trim: "t", zoom: "z", diff --git a/src/interfaces/shared.ts b/src/interfaces/shared.ts index d7561cc..0b6bab0 100644 --- a/src/interfaces/shared.ts +++ b/src/interfaces/shared.ts @@ -1420,7 +1420,7 @@ export interface Transformation { * * - `co-color` - Color to apply (e.g., `red`, `blue`, `FF0022`). Default is gray * color. - * - `in-intensity` - Intensity of the color (0-100). Default is 35. See + * - `in-intensity` - Intensity of the color (0-100). Default is 100. See * [Colorize](https://imagekit.io/docs/effects-and-enhancements#colorize---e-colorize). */ colorize?: string; @@ -1468,6 +1468,16 @@ export interface Transformation { */ defaultImage?: string; + /** + * Sets the output image density in dots per inch (DPI). Accepts an integer from 1 + * to 1200 or an arithmetic expression using the `idn` variable, such as + * `idn_mul_2`. For raster images, this updates density metadata without changing + * dimensions. For vector images, it controls the DPI used during rasterization. + * Cannot be used inside layers. See + * [Density](https://imagekit.io/docs/image-optimization#density---dn). + */ + density?: number | string; + /** * Distorts the shape of an image. Supports two modes: * diff --git a/test-app/tests/basic.spec.ts b/test-app/tests/basic.spec.ts index 661acea..e9c47da 100644 --- a/test-app/tests/basic.spec.ts +++ b/test-app/tests/basic.spec.ts @@ -1255,6 +1255,7 @@ test.describe("URL generation", () => { trim: 5, metadata: true, colorProfile: true, + density: 72, defaultImage: "/folder/file.jpg/", dpr: 3, x: 10, @@ -1297,7 +1298,7 @@ test.describe("URL generation", () => { }); expect(url).toBe( - `https://ik.imagekit.io/test_url_endpoint/test_path.jpg?tr=h-300,w-400,ar-4-3,q-40,c-force,cm-extract,fo-left,f-jpeg,r-50,bg-A94D34,b-5-A94D34,rt-90,bl-10,n-some_name,pr-true,lo-true,t-5,md-true,cp-true,di-folder@@file.jpg,dpr-3,x-10,y-20,xc-30,yc-40,fl-h,o-0.8,z-2,vc-h264,ac-aac,so-5,eo-15,du-10,sr-1440_1080,e-grayscale,e-upscale,e-retouch,e-genvar,e-dropshadow,e-changebg-prompt-car,e-edit-prompt-make it vintage,e-bgremove,e-contrast,e-shadow-bl-15_st-40_x-10_y-N5,e-sharpen-10,e-usm-2-2-0.8-0.024,e-gradient-from-red_to-white,orig-true,pg-2_4,h-200,w-300,l-image,i-logo.png,l-end,cr-FF0000_50_00FF00,e-colorize-co-red_in-35,e-distort-p-50_50_150_50_150_150_50_150` + `https://ik.imagekit.io/test_url_endpoint/test_path.jpg?tr=h-300,w-400,ar-4-3,q-40,c-force,cm-extract,fo-left,f-jpeg,r-50,bg-A94D34,b-5-A94D34,rt-90,bl-10,n-some_name,pr-true,lo-true,t-5,md-true,cp-true,dn-72,di-folder@@file.jpg,dpr-3,x-10,y-20,xc-30,yc-40,fl-h,o-0.8,z-2,vc-h264,ac-aac,so-5,eo-15,du-10,sr-1440_1080,e-grayscale,e-upscale,e-retouch,e-genvar,e-dropshadow,e-changebg-prompt-car,e-edit-prompt-make it vintage,e-bgremove,e-contrast,e-shadow-bl-15_st-40_x-10_y-N5,e-sharpen-10,e-usm-2-2-0.8-0.024,e-gradient-from-red_to-white,orig-true,pg-2_4,h-200,w-300,l-image,i-logo.png,l-end,cr-FF0000_50_00FF00,e-colorize-co-red_in-35,e-distort-p-50_50_150_50_150_150_50_150` ); }); }); diff --git a/test-app/tests/buildTransformationString.spec.ts b/test-app/tests/buildTransformationString.spec.ts index fdcc177..79f90da 100644 --- a/test-app/tests/buildTransformationString.spec.ts +++ b/test-app/tests/buildTransformationString.spec.ts @@ -24,4 +24,14 @@ test.describe("buildTransformationString", () => { ); expect(result).toBe("l-text,i-Hello,l-end"); }); + + test("should generate a transformation string for density as a number", async ({ page }) => { + const result = await page.evaluate(() => (window as any).buildTransformationString([{ density: 72 }])); + expect(result).toBe("dn-72"); + }); + + test("should generate a transformation string for density as an arithmetic expression", async ({ page }) => { + const result = await page.evaluate(() => (window as any).buildTransformationString([{ density: "idn_mul_2" }])); + expect(result).toBe("dn-idn_mul_2"); + }); });