RSSNext / RSSNext/Folo

Support Afilmory RSS EXIF Spec in Folo

Open
#4,075 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
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
  • <exif:meteringMode>: Metering mode (e.g., Matrix)
    • Values: Matrix, Center-weighted, Spot, Multi-spot, Pattern
    • Maps to EXIF MeteringMode
  • <exif:flashMode>: Flash mode (e.g., Off)
    • Values: Off, On, Auto, Red-eye, Fill, Slow-sync
    • Maps to EXIF Flash
  • <exif:colorSpace>: Color space (e.g., sRGB)
    • Values: sRGB, Adobe RGB, ProPhoto RGB, DCI-P3
    • Maps to EXIF ColorSpace
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
  • <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
  • <exif:saturation>: Saturation setting (e.g., Normal)
    • Values: Low, Normal, High
    • Maps to EXIF Saturation
  • <exif:sharpness>: Sharpness setting (e.g., Normal)
    • Values: Soft, Normal, Hard
    • Maps to EXIF Sharpness
Implementation Requirements
  • Core Support: Parse <exif:version> and <exif:protocol> in <channel>.
  • Basic Fieldset: Prioritize support for basic fields (aperture, shutter speed, ISO, etc.).
  • Optional Fieldsets: Support location and advanced fields 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 basic fields first; add location and advanced as needed.
Proposed Implementation
  • Add parsing for <exif> namespace in Folo's RSS parser.
  • Handle required metadata (<exif:version>, <exif:protocol>).
  • Support basic fieldset for core EXIF data.
  • Optionally implement location and advanced fieldsets 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.