Support Afilmory RSS EXIF Spec in Folo
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 39k
- Forks
- 2.1k
- Avg merge
- 1d 4h
- Merged PRs (30d)
- 10
Description
Problem Description
Implement support for the Afilmory RSS EXIF Spec (v1.1) in Folo to parse photography EXIF data in RSS 2.0 feeds. The extension defines a standard for including detailed photographic metadata, enabling RSS readers to access camera settings, lens information, image attributes, location data, and technical parameters.
Specification Overview
Protocol: Afilmory RSS EXIF Extension
Version: 1.1
Identifier: afilmory-rss-exif
Purpose: Standardizes EXIF data in RSS 2.0 feeds for photo gallery websites.
Namespace: exif
Protocol Metadata
-
<exif:version>- Description: Protocol version number
- Location:
<channel>element - Format: Semantic version (e.g.,
<exif:version>1.1</exif:version>) - Required: Yes
-
<exif:protocol>- Description: Protocol identifier
- Location:
<channel>element - Format: String (e.g.,
<exif:protocol>afilmory-rss-exif</exif:protocol>) - Required: Yes
EXIF Tags
Camera Settings (basic)
<exif:aperture>: Aperture value (e.g.,f/1.4)- Maps to EXIF FNumber
<exif:shutterSpeed>: Shutter speed (e.g.,1/250s,2s)- Maps to EXIF ExposureTime
<exif:iso>: ISO sensitivity (e.g.,1000)- Maps to EXIF ISOSpeedRatings
<exif:exposureCompensation>: Exposure compensation (e.g.,+0.7 EV,-1.3 EV)- Maps to EXIF ExposureBiasValue
Lens Parameters (lens)
<exif:focalLength>: Actual focal length (e.g.,50mm)- Maps to EXIF FocalLength
<exif:focalLength35mm>: 35mm equivalent focal length (e.g.,75mm)- Maps to EXIF FocalLengthIn35mmFilm
<exif:lens>: Lens model (e.g.,<![CDATA[BS-Optics FX 50mm F1.4]]>)- Maps to EXIF LensModel
<exif:maxAperture>: Maximum lens aperture (e.g.,f/1.4)- Maps to EXIF MaxApertureValue
Device Information (basic)
<exif:camera>: Camera make and model (e.g.,<![CDATA[FUJIFILM X-T5]]>)- Maps to EXIF Make + Model
Image Attributes (basic)
<exif:imageWidth>: Image width in pixels (e.g.,7728)- Maps to actual image width
<exif:imageHeight>: Image height in pixels (e.g.,5152)- Maps to actual image height
<exif:dateTaken>: Capture timestamp in ISO 8601 (e.g.,2025-06-05T16:12:43.000Z)- Maps to EXIF DateTimeOriginal
<exif:orientation>: Image orientation (1-8) (e.g.,1)- Maps to EXIF Orientation
Location Information (location)
<exif:gpsLatitude>: GPS latitude in decimal degrees (e.g.,39.9042)- Maps to EXIF GPSLatitude
<exif:gpsLongitude>: GPS longitude in decimal degrees (e.g.,116.4074)- Maps to EXIF GPSLongitude
<exif:altitude>: Altitude in meters (e.g.,1200m)- Maps to EXIF GPSAltitude
<exif:location>: Location name (e.g.,<![CDATA[Beijing Tiananmen Square]]>)- Maps to geocoding or user annotation
Technical Parameters (technical)
<exif:whiteBalance>: White balance (e.g.,Auto)- Values:
Auto,Daylight,Cloudy,Tungsten,Fluorescent,Flash,Manual - Maps to EXIF WhiteBalance
- Values:
<exif:meteringMode>: Metering mode (e.g.,Matrix)- Values:
Matrix,Center-weighted,Spot,Multi-spot,Pattern - Maps to EXIF MeteringMode
- Values:
<exif:flashMode>: Flash mode (e.g.,Off)- Values:
Off,On,Auto,Red-eye,Fill,Slow-sync - Maps to EXIF Flash
- Values:
<exif:colorSpace>: Color space (e.g.,sRGB)- Values:
sRGB,Adobe RGB,ProPhoto RGB,DCI-P3 - Maps to EXIF ColorSpace
- Values:
Advanced Parameters (advanced)
<exif:exposureProgram>: Exposure program (e.g.,Aperture Priority)- Values:
Manual,Program,Aperture Priority,Shutter Priority,Creative,Action,Portrait,Landscape - Maps to EXIF ExposureProgram
- Values:
<exif:sceneMode>: Scene mode (e.g.,<![CDATA[Portrait]]>)- Maps to EXIF SceneCaptureType
<exif:contrast>: Contrast setting (e.g.,Normal)- Values:
Low,Normal,High - Maps to EXIF Contrast
- Values:
<exif:saturation>: Saturation setting (e.g.,Normal)- Values:
Low,Normal,High - Maps to EXIF Saturation
- Values:
<exif:sharpness>: Sharpness setting (e.g.,Normal)- Values:
Soft,Normal,Hard - Maps to EXIF Sharpness
- Values:
Implementation Requirements
- Core Support: Parse
<exif:version>and<exif:protocol>in<channel>. - Basic Fieldset: Prioritize support for
basicfields (aperture, shutter speed, ISO, etc.). - Optional Fieldsets: Support
locationandadvancedfields where applicable. - Validation: Strictly validate enum values and skip invalid/missing data silently.
- Compatibility: Ensure standard RSS 2.0 readers ignore unrecognized
<exif>tags. - Performance: Preprocess EXIF data to avoid runtime extraction overhead.
Example RSS Feed
https://afilmory.innei.in/feed.xml
Compatibility and Implementation Notes
- Backward Compatibility: Standard RSS 2.0 readers ignore unrecognized
<exif>tags. - Optional Fields: All EXIF tags except
<exif:version>and<exif:protocol>are optional. Omit unavailable data instead of using empty tags. - Data Validation: Validate enum values and skip invalid data silently.
- Performance: Preprocess EXIF data to optimize feed generation.
- Fieldset Support: Implement
basicfields first; addlocationandadvancedas needed.
Proposed Implementation
- Add parsing for
<exif>namespace in Folo's RSS parser. - Handle required metadata (
<exif:version>,<exif:protocol>). - Support
basicfieldset for core EXIF data. - Optionally implement
locationandadvancedfieldsets based on use case. - Validate enum fields against specified values.
- Ensure graceful handling of missing or invalid EXIF data.
Suggested solution
N/A
Alternative
No response
Additional context
No response
Validations
- Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
- This issue is valid
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No implementation files or tests are named. Start by locating Folo's RSS parser and inspecting the example feed at https://afilmory.innei.in/feed.xml, then compare its handling with the requested exif namespace. Done means required metadata and prioritized basic fields are parsed, invalid optional values are skipped silently, and RSS 2.0 compatibility is preserved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 28/100