Camera Angle Changer · Edit
Camera Angle Changer re-shoots your scene — as long as it can guess what's off-frame
- image_url
- images
- task id
Changing the camera angle on an existing frame is the kind of request that sounds like a filter and is actually a 3D problem in disguise. You have one view of a scene. You want another. Everything behind what you can see has to be invented, and everything you can see has to stay consistent with it.
Camera Angle Changer · Edit does that in one call for 4.5 credits an image. It's genuinely useful for storyboards, for turning a flat product photo into a three-quarter view, for getting a second angle out of a shot you only generated one of. It's also the tool in this pack most likely to hand you something subtly wrong, so let's be specific about when it works.
What it is and how it runs
This is one node from the PopNow pack - a ComfyUI wrapper around PopNow's cloud API, where every model runs on their hardware and comes back as a normal IMAGE. Nothing is downloaded, no GPU is touched, and the run is metered in credits (the node's own price line puts this one at $0.045 an image). The pack is a thin, honest client: it uploads your picture, quotes the job, submits it with an idempotency key, polls, downloads, decodes.
The model underneath is popnow/camera-angle-changer-v1/edit, an instruction editor. That word matters - it's not a NeRF or a Gaussian-splat reconstruction, and it has no depth map of your scene. It's a diffusion model that has seen a lot of paired views and learned what a scene usually looks like from 45° to the left. The off-frame content is plausible content, not recovered content. Which is fine until the off-frame content is the thing you cared about.
The inputs
image_url is your source - JPEG, PNG or WebP, up to 10 MB. Full detail here matters more than usual, because the model is reading geometry off it.
prompt is where the whole node lives. It's the camera move, in plain words, and the tooltip gives you the two working examples: "Rotate the camera 45 degrees to the left." and "Turn the camera to a top-down view." Write it like a shot note to a camera operator, not like an image prompt. Small, named moves - 30°, 45°, ninety - plus the direction. "Make it cinematic" gets you nothing.
aspect_ratio defaults to model default, i.e. keep the source's shape. Good default; changing it makes the model re-compose, and now you're changing two things at once and can't tell which one ruined it.
output_format defaults to JPEG, seed defaults to fixed so a repeat queue is free of surprises. Randomize the seed and pay 4.5 credits per roll, which is the normal way you'll find out whether an angle is reachable at all.
Outputs: images and task id.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Or Manager → search PopNow → Install. Restart, then add a key from popnow.ai/api/console/keys in Settings > PopNow, or set it in the environment:
POPNOW_API_KEY=sk-popnow-... python main.py
No dependency beyond what ComfyUI already ships, and no models to fetch. Restart again after the key is in - node types are built from your account catalog at startup. If you're still carrying the old single-file popnow_api.py, delete it.
Where people get burned
Big moves invent too much. A 45° rotation off a clear front view is the sweet spot, and it's where the model has the most training signal. A 180° turn is a different room with a different chair in it, and a top-down view of a portrait is mostly guesswork. Two moderate moves, checked between, beat one impossible one.
Identity drifts with the angle. Faces are the first casualty - that's true of every multi-view technique in the ecosystem, which is why the character-consistency essay treats each new view as a fresh consistency problem rather than a continuation. If the character has to survive, do the angle change first and hold identity afterwards with a reference-driven pass.
Text and logos will not survive. Signs, packaging copy and fine print get re-rendered from an angle the model has never seen. Expect them to come back as plausible nonsense.
It is not free to explore. Every randomize is a billed run, and a cancelled run keeps going on the server. Set a spend ceiling in Settings > PopNow while you're dialling in a camera move, and treat the task id as your receipt - it's what support wants if a result looks nothing like the quote.
Your frame leaves the machine. Same trade as every API node in the KB's writeup of this pattern: cheap, no VRAM, and the input is on someone else's server. Don't send what you can't send.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | The photo to process: JPEG, PNG or WebP, up to 10 MB. | |
| prompt | STRING | The camera move in plain words, e.g. "Rotate the camera 45 degrees to the left." or "Turn the camera to a top-down view." | |
| aspect_ratio | COMBO | model default | Optional output aspect ratio. Leave it empty to keep the shape of the photo. |
| output_format | COMBO | JPEG | File format of the returned image. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |