Camera Spec Card Generator
Turn any photo or Siril FITS file into a shareable camera spec card.
Drop your image, get a beautifully formatted 1080×1080 overlay with your shooting data — no account, no upload, no server. Just one HTML file.
🔗 Try it live → justinoros.github.io/spec-card
Features
- Drag & drop or browse — JPEG, PNG, TIFF, CR2 RAW, and FITS files
- Auto-reads metadata — EXIF for camera photos, FITS headers for Siril exports
- Astrophotography fields — camera, telescope, lens, focal length, aperture, filter, shutter, frames stacked, total integration, ISO/gain, object, location, Bortle scale, and date
- Smart background handling — images without EXIF data are used as the card background without overwriting your spec fields
- Click any field on the card to edit it inline, or use the edit panel below
- Live updates — every keystroke instantly re-renders the card
- Two-column layout — automatically activates when 8+ fields are populated
- Text size and background blur sliders
- Custom icon and text colors via hex input
- Editable header and footer — swap "SPEC CARD" for your target name, and the footer for your IG handle, YouTube, or website
- Downloads as a timestamped 1080×1080 JPEG —
camera-spec-card-YYYYMMDD-HHMMSS.jpg - Zero dependencies at runtime — everything runs in the browser, nothing is sent to a server
Usage
Option 1 — Use the hosted version
Visit justinoros.github.io/spec-card — no installation needed.
Option 2 — Self-host or run locally
- Clone or download this repo
- Place your own background image as
bg.jpgin the same folder (optional) - Open
index.htmlin any modern browser — that's it
spec-card/
├── index.html ← the entire app
└── bg.jpg ← background wallpaper (optional, replace with your own)
Supported File Types
| Format | Metadata Source | Image Preview |
|---|---|---|
| JPEG / PNG | EXIF | ✅ Used as card background |
| TIFF (8-bit / 16-bit) | TIFF IFD tags | ✅ Used as card background |
| CR2 / CR3 RAW | Embedded EXIF | ✅ Embedded JPEG preview extracted |
| FITS / FIT | FITS header keywords | ❌ Gradient placeholder (drop a separate image to set background) |
TIFF note: 32-bit float TIFFs (Siril's default linear export) are not supported. Export as 16-bit or 8-bit TIFF from Siril before use.
FITS Keywords Read
When a .fit or .fits file is loaded, the following header keywords are extracted automatically:
| Card Field | FITS Keywords |
|---|---|
| Camera | INSTRUME |
| Lens | LENS, OPTICS |
| Focal Length | FOCALLEN, FOCAL |
| Aperture | FOCRATIO, APERTURE |
| Filter | FILTER, FILT |
| Shutter / Exposure | EXPTIME, EXPOSURE |
| Frames Stacked | STACKCNT, NCOMBINE, NFRAMES |
| Total Integration | TOTALEXP |
| ISO / Gain | ISO, GAIN |
| Object | OBJECT, TARGET |
| Location | SITELAT + SITELONG |
| Bortle Scale | BORTLE, SQMVALUE |
| Date | DATE-OBS, DATE |
Any fields not present in the file can be filled in manually using the edit panel.
Recommended Workflow for Astrophotography
- Drop your background image (exported PNG/TIFF from Siril, or any photo) — used as the blurred background
- Drop your FITS file — populates all available spec data without replacing the background
- Fill in any missing fields in the edit panel (Bortle, location, total integration, etc.)
- Adjust text size, blur, and colors to taste
- Download your 1080×1080 spec card and share alongside your image
Customization
All fields on the card are editable — tap directly on the card or use the panel below it:
- Header — defaults to
SPEC CARD, change to your target name or session title - Footer — defaults to
@FateOfAstrophilia, change to your IG, YouTube, website, or anything - Icon color — any 6-digit hex (default
#c8a96e) - Text color — any 6-digit hex (default
#e8eaf0) - Text size — slider from 60% to 140%
- Background blur — slider from 0px (sharp) to 60px
Built With
- Vanilla HTML, CSS, and JavaScript — no framework, no build step
- EXIF.js — JPEG/PNG EXIF parsing
- UTIF2 — TIFF decoding
- Custom binary EXIF parser for CR2 RAW files
- Custom FITS header parser
License
MIT — free to use, fork, and modify.
Made with ❤️ by Justin Oros · @FateOfAstrophilia
