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 fordeveloper
(optional): Developer name to search forincludeNotes
(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 namedilution
(optional): Filter by dilution ratioiso
(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
- 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"
}
}
]
}
]
}
- 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
-
Searching for Films:
- Use partial names:
film=Adox
will match "Adox CHS 100", "Adox CMS 20", etc. - Searches are case-insensitive
- Use partial names:
-
Searching for Developers:
- Use common names:
developer=HC-110
ordeveloper=Rodinal
- Searches match partial developer names
- Use common names:
-
Development Notes:
- By default, notes are excluded to reduce response size
- Add
includeNotes=true
when you need detailed development information
-
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"
- Remember to URL encode special characters in film names:
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.