The thing is that Photoshop is HUGE and does a good job at almost any task involving pixels. There have been projects that do a subset better, like art or graphic design or pixel art, but to do everything Photoshop does probably requires dozens of years of development by a skilled team.
The only thing I miss in Photoshop is a command line (Autocad style). This would be a killer feature.
I hate looking for a command in the menus or remember a shortcut, I would prefer to remember an alias derived from the name (like Autocad). This (and probably a huge reduction in price) is the only way to make me change to something else.
AutoCad began with the architectural premise that user interaction would be primarily via a terminal. It was built with the ability to run headless. It was built with the ability to run in batch mode. Like Unix, it was built on a set of single purpose tools. These tools formed the API and the user interacted directly with it in the form of commands.
The graphic display was a side-effect. Events on the graphic display were mapped back to the API, i.e. mapped back to commands. The reason, most likely, is that in the days of MSDOS AutoDesk had to write hardware drivers themselves or convince third party hardware vendors write them. Having a developer friendly architecture helped in both cases.
Post-Macintosh programs such as PhotoShop went down a different architectural path. There was a pre-existing graphics subsystem and no obvious interest in developing up from the terminal. So these applications were developed down from the GUI. In the days of 256k RAM and 10meg disks, there was a lot of need for expediency and GUI code and application code often mixed. The result was a lack of an AutoCad style API.
If a procedure looks at screen layout directly, how do you turn it into a command from the keyboard with sensible parameters? Such a refactoring is hard, messy, and not at on the feature list marketing has developed. Lets face it, the PhotoShop user community would not just reject a command based interface, it might express outrage.
Going one step further, in the early 1990's AutoDesk massively refactored AutoCad's code. They took the hit in the form of R13. Then they started adding incredible features with each version again for the next twenty years.
You're actually giving an absolutely amazing path on how one could conceivably develop a real photoshop competitor by doing to pixels what autocad did for cad: to start off from a programmable base. Something along the lines of emacs meets pixels.
AutoCad sells for many thousands of dollars a seat as do its commercial competitors. There is no passable open source alternative for professional work in many industries particularly AEC. AutoDesk's business model is based on selling products that are used to manually translate requirements tossed over the transom into designs.
The developer of a $50,000,000 project is going to pay several million dollars in design fees. There's a lot of value proposition in an easy button. However a lot of domain knowledge is necessary to produce something reliable.
Either way - developing a product to compete with PhotoShop or AutoCad - is a big dollar proposition. There's more capital investment that winds up requiring AutoCad than PhotoShop. A lot of what PhotoShop does is a nice-to-have. Building departments require building plans. Paving contractors require road plans. A billion dollars in those industries isn't even news.
I am currently working on the prototype of such an application :)
I had a similar idea after getting frustrated with Photoshop scripting for my last game project[1]. I'm not ready to show anything yet though, very early days...
I like the idea of your PhotoShopNext, but the video at the bottom has been marked private. Also Antigen looks like a fun game. Any plans for an android port?
The youtube vid was an old demonstration of Ivan Sutherland's Sketchpad software. I will try and find another version.
I'm not sure if there will be an android port of Antigen. The mobile gaming scene is not very conducive to indie devs at the moment:) I also didn't write it in a very cross-platform manner. I won't make that mistake again.
Artistic drawings and photo manipulation have large elements of manual tweaking with visual feedback that are hard to put into programming.
In another field, Blender will make you go insane if you try to do any engineering work with it.
On the other hand doing art with OpenSCAD (you type code with primitives) would probably also suck, though it's good for engineering simple objects precisely.
If you could get the best of both worlds, then yes, but I think you run into limits with scripting in Photoshop alternatives quite quickly.
Architects are artists too and plenty of art incorporates computers. Don't underestimate artists. They'll learn any skill required to express themselves.
Let me clarify, then. What I meant by "artists" was people whose thing is "making two-dimensional art". A group which I am included in.
To most artists of that type I know, the idea of just recording a Photoshop macro to automate a repetitive task is getting into the dark arts. Command lines are scary places to them.
And that's discounting the 2D artists who work in physical media because "computer art has no soul".
There are exceptions - I mean, I used to futz around with assembly programming on my c64 and Amiga, there are people whose visual medium is Processing, there are people making games who are comfortable with one foot in the imagery and one foot in the code - but I am pretty sure that "emacs meet pixels" would not find much traction with the people who use Photoshop as a canvas.
I mean, if "Photoshop" to you is "a bunch of image filters", then sure, we already have "emacs meets pixels" in the person of ImageMagic. But to a 2D artist, Photoshop is not "a bunch of image filters"; it's "paintbrush and canvas".
Architecture is by and large a problem solving business. The sorts of problems it solves are by and large the problems of wealthy and powerful organizations. Architects have a reputation for expressing themselves as a proxy for building something for themselves since the ability to self-fund projects is rare.
To put it another way, a piece of software can be the important artefact. The design for a building is rarely the important artefact. By "making the design his own" an architect produces something for himself, but this is not the important [public] artefact. Moreover, making the design an expression of the architect is often in conflict with the objectives of the client. Guild like structures allow architects to express themselves in ways contrary to the interests of their clients.
Yes, there are projects where developers want architects. Much of the construction industry, however, sees architects as a necessary (or unnecessary) drag upon the project's objectives. Regulatory requirements for an architects involvement are the basis of many an architect's business.
Frank Gehrey is the outlier. AutoCAD LT is very common.
A command line (autocad style) doesn't require programming and the average user doesn't even need to use it, once the GUI expose most API.
The command line in Photoshop would be a way of improving productivity. As an example, I don't know any power-user/really productive Autocad user that works with the GUI. It's a waste of time.
> In the days of 256k RAM and 10meg disks, there was a lot of need for expediency and GUI code and application code often mixed. The result was a lack of an AutoCad style API.
You may be right that this is how it happened, but there's not really any reason for it to have happened that way.
E.g. on the Amiga, which had similar hardware constraints to that, a lot of apps did work similarly to the way you describe AutoCad: everything internally mapped to commands, and the commands operated on the data model and updated the view, and while they were not designed to run headless, they were often designed from the beginning for everything to be scriptable.
This was done because everyone expected the API - from about AmigaOS 2.0 onward, if you didn't have an AREXX API it'd be commented on negatively in reviews etc.
I think the difference is the lack of a culture for scripting. Even with AppleScript, there's not the same culture for scripting in the Mac world. Even less so in the Windows world (outside of developers). Unix users expect scripting and components designed for it. Amiga users expected scripting of gui apps too.
The first computer I owned was an A500. In a box somewhere, I think there are all four of the 1.1 Rom Kernel Manuals...the ones sold in bookstores even after Amiga OS2.0 was well established.
Amiga OS was strongly influenced by Unix. That's what allowed all those ports of Unix commands to fill the FredFish disks. In a sense the Amiga was what a company needed to do when buying a Super Bowl launch ad spot isn't on the table. The Amiga 1000 was beautifully engineered but aesthetics were low enough on the priority list that the sidecar made it to market.
One could make a case that all that Rexx integration was a waste of effort: The Amiga died for just about everyone but a few hardcores and software like Photoshop lives on. The ball of mud is the most successful software architecture by volume.
> If a procedure looks at screen layout directly, how do you turn it into a command from the keyboard with sensible parameters? Such a refactoring is hard, messy, and not at on the feature list marketing has developed.
It doesn't seem like one would need to refactor to do something like:
$ filter layer1 blur
With things like lossless editing, Photoshop has to maintain state somewhere to be able to apply all of the layers to get the image. I get that you might not be able to say do something like:
$ selection x1 y1 x2 y2
> Lets face it, the PhotoShop user community would not just reject a command based interface, it might express outrage.
It seems to me that some of the issues are in the nature of the data. It's a bitmap (or several). The amount of state is equal to the number of pixels. A 1024 x 1024 bitmap has 2^20 bits of state.
Though we can usually compress the representation of that state, what we don't have is a high level semantics for describing it. We don't have a language for chunking bitmaps that works independent of a specific context. We can make a DSL for describing GUI elements. It won't work for photographs. Outside of a few specific domains, we don't have a handle into content. We can't write programs for bitmaps that manipulate babies and cars and pop-up menus easily.
If we deal with the bitmap as a whole, then it's trivial to write a command that transforms the bitmap as a whole. But without facial recognition style recognition for everything we're stuck dealing with pixels a lot of the time.
I imagine that there are a lot of operations that could benefit from a shell-like interface, even if there are certain operations that don't lend themselves to the paradigm. Even just being able to say something like "Create a circular selection 'box' with a radius of 50px" that you can then manually manipulate with the mouse could be useful. More useful than trying to create the same thing via just mouse input.
I don't disagree. My view comes from having switched away from AutoCad about seven years ago to a Cad package originally developed for the Mac. I ranted about the ways in which it's API sucked compared to AutoCad to the point of being banned from the bulletin board...in those days I enjoyed trolling more than today.
Munging the application logic and the display does have some advantages, and there are some aspects of the work-flow provided by the not-Autocad software that are really useful for producing drawings...Solid filling rectangles is not a geometric idea but it allows for placing the rectangle in the foreground of an image.
But unlike AutoCad keyboard entry is always a second class citizen and there's no way not to use the mouse in the middle of trying to complete just about every interaction. Indeed one of my big rants was about some distinction between tools and commands where binding a command to an icon required an extra click in the drawing area in order to run.
There's no reason that a circular selection box couldn't be moved with "$> move 129 -204". Indeed if you're working pixel by pixel, that's exactly the way to get exactly what you mean. Exacting layouts are exacting because we hold that level of detail in our heads.
i understand your point about history but disagree with your conclusion...
at this point its not like Adobe would have to re-architect the system cuz im sure when you click & use a tool it is not going "uhhh photoshop system, man, could you like look into this screen & blur stuff" it is calling a well-defined method with an x/y param. They just need to alias those methods from a simple command shell
Photoshop does have a Javascript scripting system and IDE (ExtendScript Toolkit) that exposes many of its features.
Unfortunately its pretty slow and clunky, and it doesn't let you draw programmatically or anything like that.
I used it to create a texture/sprite atlas maker for game development[1], and to do batch image composition for animation frames in my last game project[2].
I tried to use it to create animated image processing effects, but I ended up having to use Processing, after reimplementing a bunch of Photoshop features in Java.
Alan Kay talks about a text justification bug in MicroSoft Word that's been around for 30 years. [1] PhotoShop is many many millions of lines of code, making an API that covers all of it is unlikely, and at best it is practical to make some subset of its procedures available from a command line.
In contrast, an AutoCad drawing is serializable to a text file of AutoCad commands.
At the core of the software architecture, it's analogous to REST versus SOAP soaked in kerosene with three decades of software evolution piled on top. Nobody loves AutoCad's DXF with deep abiding passion, but nobody would take "DXF is not my favorite file format" [2] rants in the source code seriously.
The point from AutoCad's <Point:> command is the same point that everything else is built on. It's bottom up. So in the end, a full blown command language for Photoshop would need a <Pixel:> command. And everything else, all the way up, would need to rely on calls to <:Pixel>. That's the level of granularity required to implement a command API like AutoCad's.
That's the joy of AutoCad's command line. It's programming with a REPL. Photoshop doesn't have one at its core.
Not what you're looking for, but as a point of interest Photoshop actually has accumulated several layers of internal scripting over the years. The newest and coolest is an embedded Node.js server - you can pull in arbitrary node modules and run them in a context where various PS-related APIs are exposed.
The drawbacks are:
1. Not all features have nice interfaces. For some things you need to go through this ancient, hairy API based on tons of (sparsely documented) magic strings.
2. Most of the APIs are made to support the UI, so it can be hard or easy to do things depending on how the UI works. For things involving settings dialogs, or anything that's a multistep process in the UI, it can be pretty nontrivial.
This is one thing I love about macs. Click help, type in the first word of the command, and it will highlight where that command is in the menu. No more hunting or trying to remember seldom-used shortcuts. Apple has had this feature for years and years. I still can't believe Microsoft hasn't copied it (or perhaps it has with 8? I'm still using 7 on my main editing machine.) I will often fire up PS on my Macbook just to use the search to find a command, rather than poking around the menus for it on my main machine.
To me, the most important quality of photoshop is the UI/UX. This is anecdotal, but I've toyed with a lot of interactive graphical programs and Photoshop often feels natural (the kind of shortcuts sequence you end up trying in other software without thinking about it). Compared to this GIMP feels infinitely bloated.
Photoshop was the first I learned true, but I try to be fair, I guess many people (especially here) learned different paradigms and can abstract over their own history.
For instance I've learned to appreciate and love Vim even though I've learned Emacs first (and is my daily editor). I won't dismiss it because it's superficially different (names, layout, bindings) or because it breaks my habits.
I have some kind UX abstract grid in mind where things could make better sense without being the Emacs/my-preferred way. GIMP had too many wtf in a row for me to keep trying, and ends up making me want to write imagemagick scripts in Emacs instead.