| name | container-load |
| description | Work out how many units fit in a shipping container or road trailer - 20 ft GP, 40 ft GP, 40 ft HC, 45 ft HC, reefers, 13.6 m curtainsider - either palletised on a chosen pallet standard or floor-loaded loose, with buffers and payload limits applied. Use for questions about container quantity, units per 20 ft, FCL versus LCL, how many containers an order needs, or whether a load is volume- or weight-limited. |
Container load
Two figures, always both, because they differ by a lot and the difference is a
decision:
- Palletised — the container floor plan times the pallet build. Exact
geometry from the pallet standard's footprint.
- Floor loaded (loose) — cartons stuffed straight in, no deck and no
headroom lost under the ceiling. Typically 30-60% more units, which is why
suppliers of light bulky goods quote loose loading.
Command
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/freight.py container \
--dims 600x400x230 --weight 1.9 --container 20gp,40hc --quantity 2000
--container takes keys, a comma list, sea for every ocean box, or all.
Run freight.py units for the list. Everything from pallet-quantity
(--dim-units, --nesting, --any-orientation, --max-height, --overhang)
works here too and means the same thing.
| Flag | Effect |
|---|
--pallet KEY | Pallet standard for the palletised figure. Default eur1. |
--method palletised|loose|both | Default both. Keep both unless the packing method is already contractually fixed. |
--quantity N | Adds an order-sizing block: how many containers this order needs, and how full the last one is. |
--tiers auto | Double-stack built pallets wherever the internal height allows. Only pass this if the built pallets are genuinely stackable — a crushed top tier costs more than the freight saved. |
--clearance MM | Loading slack along the length. Default 50 mm, which is what turns the geometric 12 EUR-1 in a 20 ft into the 11 the trade plans on. |
--derate 0.05 | Buffer on the loose figure. Default 5%. Raise to 0.10 for an unfamiliar loader, an awkward shape or a load with lots of bracing. |
--pallet-derate | Buffer on the palletised figure. Default 0 — the floor plan is already exact, so a buffer here is double-counting unless you have a reason. |
Reading the output
cube is volumetric utilisation of the container's cubic capacity;
payload is how much of the weight limit is used.
- When
payload reaches 100% the load is weight-limited: the box ships part
empty and buying more volume is pointless. Say so — this is the single most
common surprise in a freight estimate, and it flips the answer on dense goods
(tiles, liquids, hardware). The threshold is each unit's payload over its cube
and varies more than 3x across the fleet: 347 kg/m3 for a 40 ft HC against
849 kg/m3 for a 20 ft GP. So the same cargo can be weight-limited in a 40 and
volume-limited in a 20 — which is the reason dense goods ship in 20 ft boxes.
verify prints the full table.
! notes matter. They carry the payload cap, the derate arithmetic, a
build that will not clear the container door, and the case where a mixed or
offset floor plan fits one more pallet than lanes do.
- A door note is a hard stop. A 2200 mm pallet build is fine; a 2350 mm one
cannot be carried through a 2280 mm door however well the geometry works out.
The load has to be rebuilt lower or floor loaded.
Honesty rules
State the method and the buffer alongside every number. "Roughly 490 per 20 ft
floor-loaded, with a 5% buffer; 308 if it goes on EUR-1 pallets" is a usable
answer. "About 500 per container" is not.
If a supplier's figure differs from this one by more than the derate, one of the
two sets of external dimensions is wrong — usually because someone quoted the
product's internal cavity, or forgot the carton wall. Ask for their external
carton dimensions and their assumed loading method before arguing.