Begin by cubing your bread into roughly 1-inch pieces. If your bread isn’t stale, you can dry it out in the oven at 300°F (150°C) for 10-15 minutes. Place the bread cubes in your baking dish evenly.
In a large mixing bowl, combine the milk, granulated sugar, brown sugar, eggs, vanilla extract, ground cinnamon, salt, and melted butter. Whisk vigorously until the mixture is smooth and well combined.
If you’re using nuts or raisins/chocolate chips, fold them gently into the custard mixture.
Pour the custard mixture evenly over the bread cubes in your baking dish. Press down lightly with a spatula to help the bread soak up the custard. Let it sit for about 15 minutes at room temperature.
Preheat your oven to 350°F (175°C). Place the baking dish in the oven and bake for 45-50 minutes, or until the custard is set and the top is golden brown. A knife inserted in the center should come out clean.
While the pudding is baking, prepare the caramel sauce. In a saucepan over medium heat, melt the 1 cup of granulated sugar, stirring constantly. Once it turns a deep amber color, carefully whisk in the heavy cream and 1/4 cup of butter. Continue whisking until smooth and glossy. Remove from heat.
Once baked, let the bread pudding cool slightly. Serve warm, drizzled generously with the homemade caramel sauce.