I tried creating a route which returned a view, which included the script file. A very simple approach, but probably not a good way of doing it?
No. Think in terms of classes and objects, rather than a script included on a view.
However, I'm pretty sure I'm not supposed to put a thousand lines of tool logic within the controller?
It would seem that there would be opportunities to refactor this logic into discrete methods; but without sight of the actual code, impossible to say. Generally, any logic that has side-effects should not be GET requests - GET requests typically are considered safe, i.e. they are read-only, leaving the Resource unchanged after being executed.
Feels like a lot of work, but if it's a proper way of doing it
What feels now like a lot of work now can become a maintenance nightmare in future! Invest the time to do it right now if you can. Check out the series here such as Whip Monsterous Code into Shape and Write Code that's easy to maintain here on Laracasts for some strategies to extract logic into discrete classes and methods.
Lastly, there are a wealth of packages (e.g. Spatie's Media-Library, Intervention Image) already written for image processing, perhaps utilising these battle-tested alternatives could work for you?