Darkroom Development API Documentation

Darkroom Development API Documentation

This API provides access to film development data for various films and developers. It allows you to search for specific films, developers, and their associated development times and notes.

Base URL

https://api.studiomahoney.com

Endpoints

1. Root Endpoint

GET /

Returns information about available endpoints and API version.

Example Response:

{
  "api_name": "Darkroom Development API",
  "version": "1.0.0",
  "endpoints": {
    "/darkroom/data": "Get all film development data. Use ?includeNotes=true to include development notes",
    "/darkroom/search": "Search films by name or developer. Use ?includeNotes=true to include development notes",
    "/darkroom/film/:name/times": "Get development times for each developer option",
    "/darkroom/film/:name/developers": "Get a list of all developers available for a specific film",
    "/darkroom/film/:name/temperature/:temp": "Get temperature-adjusted development times for a film",
    "/darkroom/film/:name": "Get detailed film information. Use ?includeNotes=true to include development notes",
    "/health": "API health check"
  }
}

Example:

curl "https://api.studiomahoney.com/"

2. Health Check

GET /health

Returns the API's current health status and timestamp.

Example:

curl "https://api.studiomahoney.com/health"

3. Get All Film Data

GET /darkroom/data

Returns development data for all films.

Query Parameters:

  • includeNotes (optional): Set to 'true' to include development notes in the response

Examples:

# Get all film data without notes
curl "https://api.studiomahoney.com/darkroom/data"

# Get all film data with notes
curl "https://api.studiomahoney.com/darkroom/data?includeNotes=true"

4. Search Films

GET /darkroom/search

Search for films by name and/or developer.

Query Parameters:

  • film (optional): Film name to search for
  • developer (optional): Developer name to search for
  • includeNotes (optional): Set to 'true' to include development notes in the response

At least one of film or developer must be provided.

Examples:

# Search by film name
curl "https://api.studiomahoney.com/darkroom/search?film=Adox"

# Search by developer
curl "https://api.studiomahoney.com/darkroom/search?developer=HC-110"

# Search by both film and developer
curl "https://api.studiomahoney.com/darkroom/search?film=Adox&developer=HC-110"

# Include notes in the search results
curl "https://api.studiomahoney.com/darkroom/search?film=Adox&includeNotes=true"

5. Get Film Development Times

GET /darkroom/film/:name/times

Get a simplified view of all development times for a specific film, organized by developer.

Example:

curl "https://api.studiomahoney.com/darkroom/film/Adox%20CHS%20100/times"

Example Response:

{
  "film_name": "Adox CHS 100",
  "development_times": [
    {
      "developer": "HC-110",
      "dilution": "B",
      "temperature": "20°C",
      "times": {
        "35mm": "5.5 min",
        "120": "5.5 min",
        "sheet": "6 min"
      }
    },
    {
      "developer": "Rodinal",
      "dilution": "1:50",
      "temperature": "20°C",
      "times": {
        "35mm": "9 min",
        "120": "9 min",
        "sheet": "9 min"
      }
    }
  ]
}

6. Get Temperature-Adjusted Development Times

GET /darkroom/film/:name/temperature/:temp

Get development times adjusted for a specific temperature. The endpoint calculates adjusted times based on Ilford's temperature compensation chart.

Parameters:

  • :name: Film name
  • :temp: Target temperature (17-30°C)

Query Parameters:

  • developer (optional): Filter by developer name
  • dilution (optional): Filter by dilution ratio
  • iso (optional): Filter by ISO

Example:

# Get temperature-adjusted times with pretty formatting
curl 'https://api.studiomahoney.com/darkroom/film/Ilford%20HP5%2B/temperature/25?developer=Ilfotec%20DD-X&iso=400' | jq

Example Response:

{
  "film_name": "Ilford HP5+",
  "temperature_adjustment": {
    "base": "20°C",
    "target": "25°C"
  },
  "development_options": [
    {
      "developer": "Ilfotec DD-X",
      "dilution": "1+9",
      "iso": "ISO 400",
      "base_temperature": "20°C",
      "target_temperature": "25°C",
      "times": {
        "35mm": {
          "base": "9:00",
          "adjusted": "6:18"
        },
        "120": {
          "base": "9:00",
          "adjusted": "6:18"
        },
        "sheet": {
          "base": "9:00",
          "adjusted": "6:18"
        }
      }
    }
  ]
}

The response shows both the original development times at 20°C ("base") and the adjusted times for your target temperature ("adjusted") for each format.

7. Get Film Developers List

GET /darkroom/film/:name/developers

Get a simple list of all developers available for a specific film. This is useful when you just need to know which developers can be used with a particular film.

Example:

curl "https://api.studiomahoney.com/darkroom/film/Adox%20CHS%20100/developers"

Example Response:

{
  "film_name": "Adox CHS 100",
  "developers": [
    "ABC Pyro",
    "Acufine",
    "Acurol-N",
    "HC-110",
    "Rodinal"
  ]
}

8. Get Film ISO Options

GET /darkroom/film/:name/isos

Get a list of all available ISO ratings for a specific film.

Example:

curl "https://api.studiomahoney.com/darkroom/film/Ilford%20HP5%2B/isos"

Example Response:

{
  "film_name": "Ilford HP5+",
  "isos": [
    "200",
    "400",
    "800",
    "1600",
    "3200"
  ]
}

9. Get Developer Dilutions

GET /darkroom/developer/:name/dilutions

Get a list of all available dilutions for a specific developer.

Example:

curl "https://api.studiomahoney.com/darkroom/developer/Ilfotec%20DD-X/dilutions"

Example Response:

{
  "developer": "Ilfotec DD-X",
  "dilutions": [
    "1+4",
    "1+9"
  ]
}

10. Get Films by Format

GET /darkroom/films/format/:format

Get a list of all films available in a specific format (35mm, 120, or sheet).

Parameters:

  • :format: Must be one of: 35mm, 120, sheet

Example:

curl "https://api.studiomahoney.com/darkroom/films/format/sheet"

Example Response:

{
  "format": "sheet",
  "films_count": 157,
  "films": [
    {
      "film_name": "Acros 100",
      "source_url": "https://www.digitaltruth.com/devchart.php?Film=Acros%20100"
    },
    {
      "film_name": "Delta 100",
      "source_url": "https://www.digitaltruth.com/devchart.php?Film=Delta%20100"
    }
  ]
}

11. Get Compatible Films for Developer

GET /darkroom/developer/:name/compatible-films

Get a list of all films that can be developed with a specific developer, optionally filtered by dilution.

Parameters:

  • :name: Developer name

Query Parameters:

  • dilution (optional): Filter by specific dilution

Example:

curl "https://api.studiomahoney.com/darkroom/developer/D-76/compatible-films?dilution=stock"

Example Response:

{
  "developer": "D-76",
  "dilution": "stock",
  "films_count": 45,
  "films": [
    {
      "film_name": "Acros 100",
      "source_url": "https://www.digitaltruth.com/devchart.php?Film=Acros%20100",
      "development_options": [
        {
          "dilution": "stock",
          "iso": "ISO 100",
          "temperature": "20°C",
          "times": {
            "35mm": "7:30",
            "120": "7:30",
            "sheet": "7:30"
          }
        }
      ]
    }
  ]
}

12. Get Specific Film Details

GET /darkroom/film/:name

Get development data for a specific film by name.

Query Parameters:

  • includeNotes (optional): Set to 'true' to include development notes in the response

Examples:

# Get film data without notes
curl "https://api.studiomahoney.com/darkroom/film/Adox%20CHS%20100"

# Get film data with notes
curl "https://api.studiomahoney.com/darkroom/film/Adox%20CHS%20100?includeNotes=true"

Response Format

Film Data Structure

{
  "film_name": "Film Name",
  "source_url": "URL to source",
  "development_options": [
    {
      "developer": "Developer Name",
      "dilution": "Dilution ratio",
      "iso": "ISO rating",
      "temperature": "Temperature in Celsius",
      "development_times": {
        "35mm": "Time for 35mm format",
        "120": "Time for 120 format",
        "sheet": "Time for sheet film"
      },
      "notes": "Development notes (only included if includeNotes=true)"
    }
  ]
}

Example Responses

  1. Search Response:
{
  "search_parameters": {
    "film": "Adox",
    "developer": "HC-110"
  },
  "results_count": 1,
  "results": [
    {
      "film_name": "Adox CHS 100",
      "source_url": "https://www.digitaltruth.com/devchart.php?Film=Adox%20CHS%20100",
      "development_options": [
        {
          "developer": "HC-110",
          "dilution": "B",
          "iso": "ISO 100",
          "temperature": "20°C",
          "development_times": {
            "35mm": "5.5 min",
            "120": "5.5 min",
            "sheet": "6 min"
          }
        }
      ]
    }
  ]
}
  1. Single Film Response with Notes:
{
  "film_name": "Adox CHS 100",
  "source_url": "https://www.digitaltruth.com/devchart.php?Film=Adox%20CHS%20100",
  "development_options": [
    {
      "developer": "HC-110",
      "dilution": "B",
      "iso": "ISO 100",
      "temperature": "20°C",
      "development_times": {
        "35mm": "5.5 min",
        "120": "5.5 min",
        "sheet": "6 min"
      },
      "notes": "Development notes and additional information"
    }
  ]
}

Error Handling

The API returns appropriate HTTP status codes and error messages:

  • 200: Successful request
  • 400: Bad request (e.g., missing required parameters)
  • 404: Resource not found
  • 500: Internal server error

Error Response Format:

{
  "error": "Error type",
  "message": "Detailed error message"
}

Tips for Effective API Usage

  1. Searching for Films:

    • Use partial names: film=Adox will match "Adox CHS 100", "Adox CMS 20", etc.
    • Searches are case-insensitive
  2. Searching for Developers:

    • Use common names: developer=HC-110 or developer=Rodinal
    • Searches match partial developer names
  3. Development Notes:

    • By default, notes are excluded to reduce response size
    • Add includeNotes=true when you need detailed development information
  4. URL Encoding:

    • Remember to URL encode special characters in film names:
      • Spaces become "%20" (e.g., "Adox CHS 100" → "Adox%20CHS%20100")
      • Plus signs become "%2B" (e.g., "Ilford FP4+" → "Ilford%20FP4%2B")
    • Example searches:
      # Search for Ilford FP4+
      curl "https://api.studiomahoney.com/darkroom/search?film=Ilford%20FP4%2B"
      
      # Get development times for Ilford FP4+
      curl "https://api.studiomahoney.com/darkroom/film/Ilford%20FP4%2B/times"
      

Rate Limiting

Please be mindful of API usage and implement appropriate caching in your applications. While there are currently no strict rate limits, excessive requests may be throttled in the future.