Dilution to target OD calculator
This dilution to target OD calculator determines how much dense microbial culture and how much fresh medium are needed to prepare a chosen final volume at a lower optical density.
Run — free
Enter the measured starting OD, the OD you want, and the final volume in millilitres. The result gives pipetting volumes for both components plus the dilution factor. It is designed for routine bacterial, yeast, and other suspension-culture planning when both OD measurements use the same wavelength and measurement method.
Enter measurements that can be compared directly
Start with the optical density of the dense culture, the lower optical density required for the next step, and the total volume you want to prepare. The initial and target readings must come from the same wavelength, instrument method, and compatible vessel or cuvette setup. Optical density is a relative turbidity measurement, so mixing readings collected under different conditions can make an arithmetically correct dilution biologically misleading. Use a starting OD that represents the culture at the time you will remove the aliquot. If the instrument has a limited linear range, measure an appropriately diluted sample and correct that reading before entering it. Enter the desired preparation volume in millilitres, not the volume of medium already available. The target must be no greater than the initial OD because this calculator only adds fresh medium; it cannot concentrate a culture. All three values must be finite and greater than zero. Before pipetting, confirm that the calculated culture volume is practical for the accuracy range of the available pipette or dispensing system.
Understand the calculation and the reported volumes
The calculator applies conservation of the OD-volume product, commonly written as initial OD multiplied by culture volume equals target OD multiplied by final volume. It rearranges that relationship to find the culture volume, then subtracts the culture volume from the requested final volume to obtain the fresh-medium volume. The dilution factor is initial OD divided by target OD. For example, a six-fold dilution uses one part culture in six total parts, with the remaining five parts supplied by fresh medium. Reported values are rounded only to provide stable, readable output; the underlying calculation uses the submitted numbers directly. The final volume is repeated in the result so the preparation can be checked without referring back to the input. Optical density is treated as proportional to cell concentration over the relevant range. This assumption is useful for routine dilution planning, but it does not compensate for nonlinear instrument response, settling, clumping, bubbles, an incorrect blank, or differences between viable cell count and turbidity.
Prepare, mix, and verify the diluted culture
Transfer the calculated culture volume into a clean vessel and add the calculated volume of fresh medium to reach the requested total. Mix thoroughly using a method appropriate for the organism and vessel, because an unmixed sample can produce an OD reading that does not represent the preparation. Use medium with the same formulation and blanking characteristics expected by the downstream protocol. For small culture aliquots, choose a pipette whose working range comfortably includes the result; if the required aliquot is too small for reliable transfer, prepare an intermediate dilution or increase the final volume while preserving the same ratio. After mixing, measure the OD again when accuracy matters. Normal experimental variation, instrument precision, residual liquid in tips, and culture heterogeneity can move the observed result away from the mathematical target. This tool plans a direct, single-step dilution and does not model subsequent growth, lag time, cell death, or changes during incubation. Record the starting reading, calculated volumes, medium lot, and verification reading for reproducibility.
What you can do with it
Standardize an inoculum
Prepare replicate cultures at the same starting OD before comparing growth, expression, or treatment conditions.
Set up a plate assay
Calculate culture and medium volumes before distributing a standardized suspension across wells.
Prepare a downstream culture step
Dilute an overnight or dense culture to the OD required by an induction, transformation, or sampling protocol.
FAQ
What does the calculation cost?
It runs free in the browser on this page. API automation costs $0.002 per request.
Which equation does the calculator use?
It uses initial OD multiplied by culture volume equals target OD multiplied by final volume.
Can the target OD be higher than the initial OD?
No. Adding fresh medium can only lower the OD. A higher target requires culture growth, concentration, or another protocol.
Do the initial and target OD values need units?
OD is entered as a dimensionless reading, but both values must use the same wavelength and measurement method.
Why might the measured final OD differ from the target?
Pipetting error, incomplete mixing, clumped or settled cells, bubbles, blanking differences, and nonlinear instrument response can all affect the measured result.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/bio/dilution-to-target-od \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"initial_od":1.8,"target_od":0.3,"final_volume_ml":50}'const res = await fetch("https://api.kit.forhosting.com/bio/dilution-to-target-od", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"initial_od": 1.8,
"target_od": 0.3,
"final_volume_ml": 50
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/bio/dilution-to-target-od",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"initial_od": 1.8,
"target_od": 0.3,
"final_volume_ml": 50
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/bio/dilution-to-target-od", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"initial_od":1.8,"target_od":0.3,"final_volume_ml":50}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"initial_od":1.8,"target_od":0.3,"final_volume_ml":50}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/bio/dilution-to-target-od", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"initial_od": 1.8,
"target_od": 0.3,
"final_volume_ml": 50
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "bio.dilution_to_target_od",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |