I have a chest freezer, it's big enough to use as a tub...but it's not ideal, it cooling rate is about 2.5F/hr. Using the chest freezer to cool an external tub won't work. The heat loss off the external tub would be too great. I've looked into this and I think the best option is a 130 gal stock tank w/ an ice machine. The script below will calculate the ice requirements

#!/usr/bin/env python
# coding: utf-8

# # Cold Plunge Tank - Ice Requirements #

import sympy
import sympy.physics.units as u

sympy.init_printing()

print('''## Parameters ##
- 130 gallon tank
- 70F (21C) starting temp
- 55F (12.8C) ending temp
- Person sits in the tanks and it fills to the brim, so Vol of person + Vol of water = 130 gallon\n\n''')

vol_tank_total = 130 * 3.78541 * u.liter

T_hot = 21.11 * u.deg
T_cold = 12.78 * u.deg
T_ice = 0.0 * u.deg

den_water = 997.0 * u.kg / u.m*3
cp_water = 4.1955 * 1000.0 * u.joule / (u.kg * u.deg)
hf_water = 333.55 * 1000 * u.joule / u.kg

den_human = 0.985 * den_water

print('''## Calculate required mass of ice ##
- State 1: Solid Ice @ 32F + Initial Water @ 70F
- State 2: Liquid Water @ 55 F\n\n''')

sympy.var('m_waterinit m_ice m_watertot');
sympy.var('E_1 E_2 Q W cp T_i T_c T_h u_hot u_cold u_icelq hf');

print('Conservation of Mass')

cons_m = sympy.Eq(m_waterinit + m_ice, m_watertot)

display(cons_m)

print('\nConservation of Energy')

cons_e = sympy.Eq(E_2 - E_1, Q - W)
e1 = sympy.Eq(E_1, m_waterinit * u_hot + m_ice * (u_icelq - hf))
e2 = sympy.Eq(E_2, m_watertot * u_cold)
cons_e_0 = sympy.Eq(e2.rhs - e1.rhs, 0)

display(e1)
display(e2)
display(cons_e_0)

print('\nSubstitute the conservation of mass in the the conservation of energy equation')

cons_e_1 = cons_e_0.subs(m_waterinit, sympy.solve(cons_m, m_waterinit)[0]).lhs
cons_e_2 = cons_e_1.subs([(u_icelq, cp * T_i), (u_cold, cp * T_c), (u_hot, cp * T_h)]).expand().factor([cp, m_ice, m_watertot])

display(cons_e_1)
display(cons_e_2)

print('\nSolve for the required mass of ice')

m_ice_expr = sympy.Eq(m_ice,sympy.solve(cons_e_2, m_ice)[0])

display(m_ice_expr)

print('\nCalculate the final mass of water in the tank and substitute the parameters into the equation\n')

vol_human = 77 * u.kg / den_human
vol_tank_net = vol_tank_total - vol_human
m_tank_net = vol_tank_net * den_water

print('Vol of tank total =', u.convert_to(vol_tank_total, u.liter))
print('Vol of Person =', u.convert_to(vol_human, u.liter))
print('Vol water in tank final =', u.convert_to(vol_tank_net, u.liter))
print('Mass water in tank final =', u.convert_to(m_tank_net, [u.liter, u.kg]))
print('Mass water in tank final =', u.convert_to(m_tank_net, [u.liter, u.pound]))

m_ice_expr_1 = m_ice_expr.subs([(cp, cp_water), (T_i, T_ice), (T_c, T_cold), (T_h, T_hot), (hf, hf_water), (m_watertot, m_tank_net)])
dtemp_f = (T_hot - T_cold) * 9/5

print('Ice required =', u.convert_to(m_ice_expr_1.rhs, [u.liter, u.kg]))
print('Ice required =', u.convert_to(m_ice_expr_1.rhs, [u.liter, u.pound]))
print('Initial Water mass in tank =', u.convert_to((m_tank_net - m_ice_expr_1.rhs), [u.liter, u.kg]))
print('Initial Water mass in tank =', u.convert_to((m_tank_net - m_ice_expr_1.rhs), [u.liter, u.pound]))
print('lb ice / degree F =', u.convert_to(m_ice_expr_1.rhs, [u.liter, u.pound]) / dtemp_f)

print('Water/Ice Energy Balance Error =', (1.0 - (378.306 * (88.556 - 53.675)) / (34.149 * (53.675 - (-0.04) + 333.55))) * 100, '%')