We introduce a multi-factor stochastic volatility model for commodities that incorporates seasonality and the Samuelson effect. Conditions on the seasonal term under which the corresponding volatility factor is well-defined are given, and five different specifications of the seasonality pattern are proposed. We calculate the joint characteristic function of two futures prices for different maturities in the risk-neutral measure. The model is then presented under the physical measure, and its state-space representation is derived, in order to estimate the parameters with the Kalman filter for time series of corn, cotton, soybean, sugar and wheat futures from 2007 to 2017. The seasonal model significantly outperforms the nested non-seasonal model in all five markets, and we show which seasonality patterns are particularly well-suited in each case. We also confirm the importance of correctly modelling the Samuelson effect in order to account for futures with different maturities. Our results are clearly confirmed in a robustness check carried out with an alternative dataset of constant maturity futures for the same agricultural markets.