Skip to content

virtuecho/pixel-era-compressor

Repository files navigation

Pixel Era Compressor

Pixel Era Compressor logo

Pixel Era Compressor is a 2000-2013 digital photo compression simulator for early web images, camera phones, compact digital cameras, and pre-computational iPhone-era photography.

It is a small browser app for making modern images feel like they came from old digital cameras, early phone uploads, and blog-era JPEG workflows.

What It Simulates

Real early digital photos were not just “bad JPEGs.” They usually had low native resolution, soft optics, noisy sensors, limited dynamic range, uneven white balance, and device-specific sharpening.

Pixel Era Compressor keeps that order of operations intact:

decode
-> crop or fit
-> high-quality resize
-> optical softness
-> sensor noise
-> tone and color shift
-> device ISP signature
-> JPEG export

What You Can Do

  • Drop one image or many images into the app.
  • Pick an era, phone, compact camera, DSLR, or early-web preset.
  • Process everything locally in the browser.
  • Export JPEG results one by one or export every ready image.
  • Upload HEIC/HEIF files from modern phones; the app converts them at the codec boundary before the normal Pixel Era pipeline runs.
  • Install the site as a Progressive Web App on supported desktop and mobile browsers.

Settings

  • Preset chooses the historical output profile. It controls the device or web target, output pixel size, year, JPEG quality, optical softness, sensor noise, tone curve, color bias, and device ISP signature.
  • Format is currently JPEG. The app exports JPEG because early web and camera phone photos were usually shared as JPEG files.
  • Quality shows the preset's JPEG quality value. It is preset-driven rather than a separate manual slider, so a Nokia 7650-style output and an iPhone 5s-style output do not compress the image in the same way.
  • Intensity controls how strongly the selected preset is applied. Mild keeps the look subtle, with less softness, noise, tone compression, and ISP character. Normal is the intended default balance for the preset. Strong pushes the same preset harder for more obvious old-device degradation.
  • Crop mode controls how the source image is mapped into the preset's output shape. Center crop fills the output and trims from the center when needed. Fit inside keeps the whole source visible and may leave dark padding. Fill stretches the whole source image to the output shape without cropping or padding.

Included Presets

The first-run default is iPhone 3GS with Normal intensity and Center crop.

Phone presets include Nokia 7650, Nokia 3660, Nokia N95, Motorola ZN5, Sony Ericsson C905, Nokia N86 8MP, iPhone 3GS, iPhone 4, iPhone 4S, iPhone 5, and iPhone 5s.

Camera and web presets include Canon PowerShot G1, Casio QV-4000, Canon EOS 300D / Digital Rebel, Old Web Display, Clear Old Blog, and Early Mobile Upload.

Preset image settings
Preset Year Output JPEG Q Representative settings
Old Web Display 2001 640 × 480 48 Low web resolution, soft resize, visible noise, limited dynamic range, weak sharpening, no flash, tiny portrait mode
Clear Old Blog 2005 800 × 600 58 Blog-size output, moderate softness, lighter noise, mild contrast, light JPEG compression, no flash
Early Mobile Upload 2009 1024 × 768 64 Mobile-upload size, cleaner resize, mild sensor noise, slight warmth, moderate sharpening, no flash
Nokia 7650 2002 640 × 480 34 VGA phone output, very soft optics, heavy luma and chroma noise, strong dynamic-range loss, weak sharpening, no flash, tiny portrait mode
Nokia 3660 2003 640 × 480 36 VGA phone output, very soft optics, heavy noise, crushed shadows, weak sharpening, no flash, tiny portrait mode
Nokia N95 2007 2592 × 1944 56 5MP phone output, moderate optical softness, medium noise, stronger sharpening, LED flash
Motorola ZN5 2008 2560 × 1920 58 5MP phone output, lower softness, medium noise, warmer color, stronger sharpening, xenon flash
Sony Ericsson C905 2008 3264 × 2448 64 8MP phone output, cleaner optics, lower noise, higher saturation, moderate denoise, xenon flash
Nokia N86 8MP 2009 3264 × 2448 66 8MP phone output, wide-angle look, moderate noise, restrained color, LED flash
iPhone 3GS 2009 2048 × 1536 52 3MP iPhone output, soft fixed-focus feel, medium noise, limited dynamic range, light sharpening, no flash
iPhone 4 2010 2592 × 1936 62 5MP iPhone output, cleaner optics, lower noise, more contrast, LED flash
iPhone 4S 2011 3264 × 2448 70 8MP iPhone output, cleaner sensor, lighter noise, balanced color, LED flash
iPhone 5 2012 3264 × 2448 72 8MP iPhone output, mild softness, light noise, steady contrast, LED flash
iPhone 5s 2013 3264 × 2448 76 Late pre-computational iPhone output, lowest phone noise, mild dynamic-range loss, true-tone flash
Canon PowerShot G1 2000 2048 × 1536 78 3.34MP compact-camera output, CCD look, mild softness, controlled noise, xenon flash, 4:2:2 JPEG
Casio QV-4000 2001 2240 × 1680 76 4MP compact-camera output, CCD look, mild softness, moderate compact-camera contrast, xenon flash, 4:2:2 JPEG
Canon EOS 300D / Digital Rebel 2003 3072 × 2048 86 Early DSLR output, 3:2 frame, minimal softness, low noise, restrained color, xenon flash, 4:2:2 JPEG

Local Development

Use pnpm.

pnpm install
pnpm dev

pnpm dev starts the Vite development server. It is meant for local work and keeps running until you stop it.

For the full local gate, run:

pnpm check
pnpm build

Preview the production build locally with:

pnpm preview

Deployment

This is a Vite static app. Deployment should build the project, write static files into dist, then exit.

Use this shape for any static host or self-hosted server:

pnpm install --frozen-lockfile
pnpm build

Then serve the generated dist directory.

pnpm dev is only for local development. It starts a Vite development server and keeps running, so it should not be used as a deployment build command.

The GitHub Actions workflow also runs pnpm build after checks, so CI catches production build failures before deployment.

Install as an App

Pixel Era Compressor ships as an installable Progressive Web App. In supported desktop and mobile browsers, use the browser's install, add-to-home-screen, or share-menu install action after opening the production site.

The installed app still runs the same local browser pipeline: batch uploads, HEIC/HEIF decoding, previews, and JPEG exports happen on-device.

Browser Support

Pixel Era Compressor targets modern browsers that support Vite 7 production bundles, module workers, OffscreenCanvas, worker-side createImageBitmap(), and dynamic imports.

Supported browser targets:

  • Chrome 107+
  • Edge 107+
  • Firefox 104+
  • Safari 16+
  • Modern Chromium-based browsers at equivalent versions, such as Brave, Opera, and recent Android WebView releases
  • iOS and iPadOS browsers on iOS/iPadOS 16+, where Chrome and Firefox use the same WebKit browser engine family as Safari

Unsupported or not guaranteed:

  • Internet Explorer
  • Safari 15 and older
  • iOS and iPadOS 15 and older
  • Old Android WebView releases
  • Browsers that disable workers, module workers, canvas APIs, or dynamic imports

HEIC/HEIF does not require native browser HEIC support, because the app decodes HEIC/HEIF in the worker before the normal Pixel Era processing pipeline runs. It still requires the modern worker and canvas features listed above.

Input Formats

The browser app accepts common raster image formats such as JPEG, PNG, WebP, GIF, AVIF, BMP, and SVG. HEIC and HEIF uploads are decoded in the image worker before the Pixel Era processing pipeline runs.

HEIC/HEIF needs a separate decode step because browser support is uneven: Chromium-based browsers often cannot decode iPhone HEIC files directly through createImageBitmap(). The app converts HEIC/HEIF to an ImageBitmap at the codec boundary, then sends it through the same crop, resize, optical softness, sensor noise, tone, ISP, and JPEG export pipeline as every other input format. This is a compatibility path, not a separate visual effect.

Agent Notes

Agents must not push. Human maintainers push manually.

About

Pixel Era Compressor is a 2000-2013 digital photo compression simulator for early web images, camera phones, compact digital cameras, and pre-computational iPhone-era photography. It is a small browser app for making modern images feel like they came from old digital cameras, early phone uploads, and blog-era JPEG workflows.

Resources

License

Stars

Watchers

Forks

Contributors