WebToolsPlanet
image Tools

Instagram-Style Filters

Apply Clarendon, Gingham, Lark, Juno, and other Instagram-inspired photo filter presets using CSS.

Last updated: March 25, 2026

Client-Side Processing
Input Data Stays on Device
Instant Local Execution

Find this tool useful? Support the project to keep it free!

Buy me a coffee

What is Instagram-Style Filters?

Instagram's built-in filters are among the most recognizable photo processing presets in the world — one-tap color grading that give photos a distinct aesthetic character. Clarendon adds cool blue highlights and rich shadows to create a vivid, punchy look. Gingham desaturates and adds a warm vintage wash. Lark fades blacks and enhances cyan and green tones for an airy daylight feel. Juno enriches warm tones (red, orange, yellow) and desaturates greens and blues for a skin-flattering portrait preset. Aden adds a faded, muted cool quality.

These presets are implemented as a layered set of CSS filter values — brightness, contrast, saturation, hue-rotate, and sepia — which together approximate each Instagram filter's look. This technique is used by CSS projects like CSSgram to replicate Instagram filters. While not pixel-perfect clones of Instagram's proprietary processing pipeline, the CSS approximations are visually close and are suitable for blog images, social media content, and design mockups.

How to Use Instagram-Style Filters

1

Upload a photo (JPG, PNG, or WebP) using the file picker or drag-and-drop

2

Browse the filter preset grid — each preset shows a mini thumbnail to preview the effect on your image

3

Click a filter preset (Clarendon, Gingham, Lark, Juno, etc.) to apply it full-size to your photo

4

Use the Intensity slider (0–100%) to blend the filter with the original (0% = original, 100% = full filter)

5

Click "Download" to save the filtered photo as PNG, or "Copy CSS" to get the CSS filter string

Common Use Cases

  • Giving a photo a consistent Instagram-aesthetic without posting it to Instagram
  • Creating a cohesive visual set for a blog post using the same filter preset across all images
  • Previewing how a photo will look with different Instagram filters before editing in the app
  • Applying a specific visual mood (Clarendon vibrance, Juno warmth) to product photography
  • Batch-previewing portrait photos to select the most flattering filter for a headshot collection
  • Creating a consistent visual style for a cookbook or recipe blog by using the same preset on all food photos
  • Adding a vintage film aesthetic to modern photos using Gingham or Hudson-style presets
  • Preparing social media content drafts with filter applied before uploading to a scheduler

Example Input and Output

CSS filter values for the Clarendon preset (vivid, cool-blue highlights):

Instagram Clarendon filter
Preset: Clarendon
Effect: Adds cool blue highlights, deep warm shadows,
        vibrant saturation — signature "crisp" Instagram look
Use case: Lifestyle, food, travel photography
CSS filter implementation
/* Clarendon — CSS approximation */
.clarendon {
  filter:
    saturate(1.35)       /* +35% color vibrancy */
    contrast(1.25)       /* +25% shadow depth */
    brightness(1.1)      /* +10% exposure lift */
    hue-rotate(-5deg);   /* slight cool shift */
}

/* Gingham — vintage, warm, faded */
.gingham {
  filter:
    brightness(1.05)
    hue-rotate(-10deg)
    sepia(0.12)
    saturate(0.85)
    contrast(1.05);
}

/* Lark — airy, lifted, cyan-rich */
.lark {
  filter:
    brightness(1.15)
    contrast(0.9)
    saturate(1.1)
    hue-rotate(5deg);
}

Total Privacy

All photo processing runs in your browser using the Canvas API. Your original photos are never uploaded to any server. The tool works offline once the page is loaded.

Using Filters for Brand Consistency

For a consistent brand visual style, define your chosen filter as a CSS custom property: :root { --brand-filter: saturate(1.2) contrast(1.15) brightness(1.05); }. Apply to all hero images: .brand-photo { filter: var(--brand-filter); }. Centralizing the filter as a variable means you can adjust the entire site's image aesthetic by changing one value — no re-exporting images required.

Filter Performance in Browsers

CSS filter applied to images in the browser (for display, not Canvas export) is GPU-composited and has essentially zero performance cost on modern devices. However, applying filters to very large background images in CSS (filter on a full-viewport hero) may cause composite layer memory usage increases on mobile. Use will-change: filter on the element if you plan to animate the filter value (e.g., a hover intensity change).

Frequently Asked Questions

Are these exactly the same as Instagram's filters?
No. Instagram's actual filters are proprietary image processing algorithms (likely implemented using GLSL shaders or native image APIs) with potentially 16-bit per channel color depth operations, masking, luminosity curves, and vignette effects. CSS filters are a web-standard approximation using eight basic filterfunctions applied globally to the entire image. The visual result is similar in character but not pixel-identical. For design mockups and content creation, CSS approximations are close enough; for pixel-perfect Instagram filter replication, use the Instagram app itself.
What is CSSgram and how does it relate to this tool?
CSSgram is an open-source CSS library by Una Kravets (CSS Tricks/Google) that implements Instagram-like filter presets as CSS classes using a combination of CSS filter property and ::after pseudo-element color overlays. It demonstrated that CSS filters can closely replicate popular Instagram presets. This tool uses similar filter value combinations but applies them via Canvas for downloadable output — not just CSS display. CSSgram's source code is a reference for the filter values used here.
Can I use the CSS filter string on my website?
Yes. The "Copy CSS" button gives you the filter property string. Apply it directly to your <img> tags: .hero-photo { filter: saturate(1.35) contrast(1.25) brightness(1.1); }. The filter applies GPU-accelerated in the browser with zero image processing overhead. For multiple photos requiring the same filter, this is far more efficient than pre-processing each image — one CSS class applies the filter to all matching images at display time.
How does the "Intensity" slider work?
The intensity slider interpolates between the original image (intensity=0) and the full filter (intensity=100%). At 50% intensity, each filter value is halfway between "no filter" (neutral value) and the full preset value. For example, Clarendon saturate(1.35) at 50% becomes saturate(1.175). This is computed as: filteredValue = neutralValue + (presetValue - neutralValue) × (intensity/100). This allows subtle, natural-looking filter application without a harsh effect.
Why do some presets look very different with dark photos vs bright photos?
CSS filter functions interact with the photo's existing tone distribution. High-contrast filters (Clarendon, Juno) amplify existing contrast — dark photos become dramatically darker in shadows; bright photos become vivid. Faded filters (Gingham, Aden) reduce contrast — they look subtle on dark photos but very obvious on bright, colorful ones. For best results: high-contrast presets work best on well-exposed, medium-tone photos; faded vintage presets work best on overexposed or light photos.
Can I create my own custom filter preset?
Yes. Use this tool's "Custom" tab to manually set brightness, contrast, saturation, hue-rotate, sepia, and blur values. The resulting CSS filter string can be saved and shared. Many VSCO and Lightroom preset enthusiasts have reverse-engineered their favorite presets into CSS equivalents. Tools like Instagram Filters CSS on GitHub and filters.css npm package provide large preset libraries you can incorporate into a project.

How This Tool Works

Filter presets are defined as configuration objects mapping filter function names to preset values (e.g., Clarendon: { saturate: 1.35, contrast: 1.25, brightness: 1.1, hueRotate: -5 }). The intensity slider scales each value from neutral (1.0 for multiplicative, 0 for additive) toward the preset value. The composed CSS filter string is set as ctx.filter before drawing the image to Canvas with ctx.drawImage(). The result is exported via canvas.toBlob().

Technical Stack

CSS filter presetsHTML5 Canvas ctx.filterCSSgram-inspired filter valuescanvas.toBlob() exportClient-side only