PhotoAgent: Exploratory Visual Aesthetic Planning with Large Vision Models
SAI replication review · Referee report
Summary
PhotoAgent reframes autonomous photo editing as a long-horizon decision problem and instantiates a closed-loop perceive–plan–execute–evaluate agent: a VLM-based perceiver proposes semantically atomic actions, an MCTS-based planner explores them over reduced-resolution rollouts, a heterogeneous executor spans OpenCV/PIL and diffusion editors (FLUX.1 Kontext, Step1X-Edit), and an evaluator ensemble (CLIP alignment, LAION-Aesthetic, ImageReward, and a new UGC-trained reward model) gates each edit. To ground the reward and end-to-end evaluation, the authors introduce UGC-Edit (7,000 filtered user photos on a 1–5 scale) and a 1,017-image benchmark. PhotoAgent is reported to top CLIP Similarity, BRISQUE, and Laion-Reward and to rank second on ImageReward and UGC Score, and to win a 20-participant user study 42% vs. 30% over GPT-4o.
The conceptual move — treating photo editing as sequential decision-making under a learned aesthetic reward with explicit look-ahead and closed-loop re-evaluation — is a plausible and useful integration of ideas that in isolation are well-established (agent stacks, MCTS, aesthetic reward models). The main methodological concern is a self-evaluation loop: the agent's evaluator, the MCTS reward, and one of the headline metrics all derive from the same UGC reward model, and the reward's training pool overlaps with a second reported metric (Laion-Reward), plausibly explaining a non-trivial fraction of the gains. Second-tier concerns are that MCTS itself is under-specified (no tree-policy formula, no reward definition, no tool-routing rule, inconsistent top-K vs. single-action semantics), that most ablations are qualitative, and that no compute- or search-strategy-matched baseline isolates the contribution of MCTS. Beyond content, executed replication established that the released artefact is a project webpage with no runnable code: 22 of 23 tracked claims could not even be attempted, only the FLUX quantization memory claim was independently measurable, and two of the five reported metrics (BRISQUE, Laion-Reward) are on scales inconsistent with their standard implementations without any documented normalisation, so the numbers in Table 1 cannot be reconstructed as written.
Strengths
- Framing. The paper motivates the shift from per-instruction editors to a fully autonomous agent clearly and situates PhotoAgent well against JarvisArt, GenArtist, MonetGPT, and 4KAgent, showing that prior planning-based editors are largely low-level retouchers.
- Coherent architecture. The perceive–plan–execute–evaluate loop is a clean recipe: a VLM proposes semantically atomic actions, MCTS looks ahead in a reduced-resolution rollout environment, an executor picks between OpenCV/PIL and diffusion editors, and an ensemble evaluator gates progress. Each component is a sensible design choice in isolation.
- Sim-to-real hygiene for the search. Running MCTS at reduced resolution and re-scoring the top- candidates at full resolution before commit (Appendix A) is a pragmatic mitigation of the cost/fidelity tension; Table 3 shows reasonable rank correlation between the two regimes.
- Reward-model target. Training a UGC-specialised aesthetic reward on a filtered LAION+RealQA pool addresses a real gap: existing aesthetic predictors are trained on AI-generated content, posters, and screenshots, not the casual photos users actually edit.
- User study. A forced-choice 26-scenario study showing vs. over the strongest baseline (GPT-4o) is a meaningful preference signal even at small .
- Honesty about cost and failure. Appendix F documents the compute profile transparently, Appendix G shows failure cases, and the paper does not hide that MCTS is expensive or that dark and already-high-quality inputs are hard.
- One quantitative claim that survives external measurement. The Appendix F FLUX quantization statement was the only claim that could be independently exercised on the public FLUX weights; FP4 comfortably clears the ">2x" memory-reduction bar (see Reproducibility & code).
Weaknesses
- Self-evaluation loop between the agent's reward and a reported metric. The UGC reward model is both the primary MCTS reward and Table 1's UGC Score column. An agent that greedily maximises the reward is guaranteed to inflate any metric derived from the same reward. A held-out or disjoint-annotator reward model is needed to make UGC Score meaningful as a comparison.
- Training/evaluation overlap on LAION-Aesthetic. UGC-Edit is partly sourced from LAION-Aesthetic and Laion-Reward is a reported metric; this biases in PhotoAgent's favour and against baselines that do not optimise LAION-style signal, and it is not acknowledged.
- MCTS is under-specified in ways that matter. The tree-policy formula is not written down; the exploration constant is not stated; the reward used in simulation and backprop is not explicitly defined; the random-rollout action space at non-root states is undefined; and the four evaluator components are combined by a raw weighted sum across incompatible scales ( CLIP, ImageReward, 1–5 UGC) which without per-metric normalisation would let the UGC term dominate, effectively reducing "ensemble reward" to UGC score.
- Top-K vs. single-action inconsistency. Section 3 commits a single most-visited action, Algorithm 1 agrees, the Executor executes top-K and keeps the best, and Appendix A says "only one action at a time" but re-scores candidates at full resolution. A reader cannot pin down what happens per step, and the sim-to-real argument depends on which reading is correct.
- Tool-routing module announced but never described. The introduction lists tool selection as a distinct module, but the routing criterion between PIL and FLUX.1 Kontext / Step1X-Edit is never given.
- Two of the five reported metric scales are inconsistent with their standard implementations. Table 1 reports BRISQUE in against a Mittal predictor whose native range is 0–100 (a re-run on real photos produced values in the ~9–73 range), and Laion-Reward at against a public predictor whose raw outputs sit near 1–10. No normalisation is documented, so the four-decimal comparisons in Table 1 and Table 6 cannot be reconstructed from the paper.
- Perceiver policy contradicts the paper's own preservation framing. The perceiver prompt explicitly makes photorealism, identity, and scene plausibility "constraints, not the objective," and encourages Dutch angles, motion blur on subjects, and non-essential-object alteration; PhotoAgent's top rank on CLIP Similarity is then used as evidence of superior preservation. CLIP Similarity is a weak preservation signal (it rises when little changes, and is insensitive to identity swaps), so this is at best circumstantial.
- GRPO for a scoring model is unusual and unexplained. GRPO is a policy-optimisation recipe; the paper uses it to train a reward/scoring head without describing the adaptation (policy output, group formation, reference model, why not pairwise Bradley-Terry or ordinal regression).
- Ablations mostly qualitative. UGC-evaluator removal, sim=10 vs sim=20, and depth=1 vs depth=3 are all described in words; only the simulation-budget sweep gets a numeric table. There are no confidence intervals or paired tests. "Comparable" for the 20→5 simulation sweep hides a UGC-Score drop of ~0.19, which is not small on a 1–5 scale.
- No search-strategy or compute-matched controls. The MCTS contribution is not disentangled from any tree search (no beam / best-first / re-sampled-then-rescored baseline), and PhotoAgent at s is compared to baselines at a single pass or s, so quality gains are confounded with compute.
- Reward-model generalisation overclaimed. SRCC on PARA is called proof of generalisation; the PIAA baselines are cited only in prose, the margin is – SRCC, and PARA targets a related but distinct task.
- UGC-Edit annotation opacity. No inter-annotator agreement, no per-image annotator count, no annotation instructions, no explicit renormalisation from source scales to 1–5.
- Notation and arithmetic snags. vs. for the candidate set (figures vs. text); vs. for the state; vs. across Executor/Evaluator; Algorithm 1 backpropagates the wrong direction as written; "static strategy memory that improves continuously"; the conclusion re-labels the perceiver "LLM-based"; the lightweight-runtime accounting is off by 20% and uses a different convention from Table 5; the user-study count is reported as ; and two prompt sections give incompatible content-modification quotas ("at least 2–3 steps" vs. "at least 50%").
- Termination and rollback rule specified two incompatible ways. Section 3 reverts to on non-improvement; Section 5.4 defines an -consecutive-iterations window without tying it to a rollback; , the improvement threshold, and the max-step count are never quantified.
Reproducibility & code
Executed replication established that the released artefact is a project webpage: no source code, no reward-model checkpoint, no UGC-Edit training data, and no benchmark manifest. Twenty-two of twenty-three tracked claims could not be attempted; only the FLUX quantization memory claim was measurable using public FLUX weights.
- No runnable agent. The referenced project page's repository contains only
README.mdand website assets across all branches and commits; the README's code section reads "Coming soon!" and the HuggingFace and dataset badges resolve to#. Every headline number, the user study, and every ablation depend on unreleased code (this ties directly to the "Nothing in the released artefact can be executed" comment and to the various methodological weaknesses that presuppose an accessible pipeline). - UGC-Edit dataset unobtainable. The 7,000-image set has no manifest; five independent acquisition routes (repo, releases, project page, arXiv listing, HuggingFace with direct namespace guesses) returned zero hits, and the Qwen3-VL filtering prompt, filtering threshold, and score renormalisation are undocumented, so the pool cannot be reconstructed from LAION-Aesthetic and RealQA either.
- 1,017-image benchmark unobtainable. Only source pools are named; no image IDs, licences, or scene labels are released, so third-party evaluation on the same set is impossible. Every Table 1, Table 2, and Table 6 cell is tied to this benchmark.
- UGC reward-model checkpoint and GRPO recipe missing. No published weights on HuggingFace or the project page; four namespace probes returned empty. Table 4 (PARA correlations) and the UGC-Score columns of Tables 1 and 6 therefore cannot be regenerated. The GRPO training recipe — LR, batch/group size, epochs, reference-model configuration — is also undisclosed.
- Baseline harnesses undocumented. The shared prompt ("make this image better") is the only reproducibility fact given; the HuggingGPT/ReAct LLM backbone, tool sets, iteration caps, diffusion-baseline seeds/samplers, the GPT-4o modality, and the BRISQUE implementation are all missing.
- User-study protocol and raw votes not released. Scenario list, screening, UI, and per-scenario votes are absent, so Table 2 percentages cannot be cross-checked with a paired-preference test.
- Sim-to-real study missing sample size. Table 3's 100% Top-3 retention at half resolution is a strong claim, but the sample size, candidate-pool size , and downsampling method are not stated.
- Runtime tables are hardware-uncalibrated. Tables 5 and 6 do not state GPU model/count, precision, executor invocation mode, or warmup handling, so the s and the sim-budget sweep are not reproducible within and the "s" ReAct comparison is uncalibrated.
- Metric scales cannot be reconstructed. Independent execution confirmed that Table 1's BRISQUE range is not the standard Mittal output range, and Laion-Reward's range is not the raw predictor's range. Without the specific rescaling operator, the four-decimal comparisons are unverifiable in principle.
- Headline aggregates that reproduced. Only the Appendix F FLUX quantization memory claim was independently measurable. On the public FLUX.1 Kontext weights, FP4 achieved ~3.24x peak memory reduction (3.55x weights-only) — comfortably above ">2x" — but FP8 landed at ~1.91x peak and ~1.98x weights-only, i.e., just below the ">2x" target; this is structural (bf16→fp8 caps compression at 2.0x, less block-metadata overhead), not a bug in the measurement. The Blackwell speed half of the claim was not testable on non-Blackwell hardware and is not challenged here.
Recommended Changes
Essential
- Break the self-evaluation loop. Report Table 1 with the UGC reward model held out of the agent's evaluator ensemble when UGC Score is the reported metric, or evaluate on a UGC-style reward model trained on a fully disjoint annotator pool. Addresses the "Self-evaluation loop" and "Training/evaluation overlap on LAION-Aesthetic" weaknesses.
- State the BRISQUE and Laion-Reward normalisations. Describe the exact rescaling that maps native BRISQUE (0–100) into the Table 1 range and native Laion-Reward outputs (~1–10) into , and rerun Table 1 and Table 6 under a documented, standard implementation. Addresses "Two of the five reported metric scales do not match their standard implementations".
- Specify MCTS end-to-end. Write out the tree-policy formula and exploration constant; explicitly define the reward used in simulation and backprop, including whether ensemble components are per-metric-normalised; state where NIQE/BRISQUE fit given the four-weight table sums to 5.8; describe how random-rollout actions are enumerated at non-root states. Addresses "MCTS is under-specified", the ensemble-weights weakness, and the rollout action-space comment.
- Reconcile top-K vs. single-action semantics. State in one place whether the tree returns a single action or , whether the commit uses most-visits, mean-reward, or full-resolution re-scoring, and how "only one action at a time" (Appendix A) squares with top-K execution in the main text. Addresses the two "Top-K vs. single-action" weaknesses.
- Release code, checkpoints, and dataset/benchmark manifests. Publish the agent code with a runnable demo, the UGC reward-model checkpoint, the GRPO training recipe, the UGC-Edit manifest with filtering scripts, and the 1,017-image benchmark manifest with image IDs and category labels. Addresses every item in Reproducibility & code except the metric-scale point (which is a normalisation-documentation issue) and the FLUX quantization split.
- Replace qualitative ablations with a numeric table. Report per-metric deltas (with per-image variance or paired tests) for removing the UGC evaluator, capping simulations at 10, and reducing depth to 1. Addresses "Ablations mostly qualitative" and the ""Maintaining comparable" understates the 5-vs-20 tradeoff" comment.
- Isolate the contribution of MCTS. Add at least one compute-matched non-MCTS planning baseline (beam / best-first / repeated stochastic sampling with re-scoring) at PhotoAgent's default budget, and add a compute-matched row in Table 1 (e.g., 5-simulation PhotoAgent or iterated ReAct closed-loop at s) so planning-strategy gains are separable from raw compute. Addresses "No search-strategy or compute-matched controls" and the latency-matched comparison weakness.
Suggested
- Describe the tool-selection module. State the routing criterion between PIL and FLUX.1 Kontext / Step1X-Edit and include the routing prompt if VLM-based. Addresses "Tool-routing module announced but never described".
- Strengthen content-preservation evaluation. Add LPIPS, DreamSim, DINO cosine, or a face-identity metric alongside CLIP Similarity, and report the last on the portrait subset separately. Addresses "CLIP Similarity is a weak content-preservation signal" and the "Perceiver policy contradicts the paper's own preservation framing" tension.
- Explain the GRPO training of a scoring model. Describe the policy output, how groups are formed, what serves as the reference model and the group-relative advantage, and justify GRPO over pairwise ranking or ordinal regression. Addresses "GRPO for a scoring model is unusual and unexplained".
- Soften and support the generalisation claim. Replace "proves" with "suggests" and add a matched Table 4 row for the cited PIAA baselines with the same split and preprocessing. Addresses "Reward-model generalisation overclaimed".
- Add UGC-Edit annotation transparency. Report annotator count per image, IRR (Cohen's / ICC / across-rater Spearman), quality-control criteria, and annotation instructions. Addresses "UGC-Edit annotation opacity".
- Justify or ablate the evaluator weights. Report how was chosen and show a sensitivity sweep; place NIQE/BRISQUE in the weight table. Addresses the "Ensemble weights unjustified" weakness.
- Report sample sizes for the sim-to-real table. State , candidate-pool size , and downsampling method behind Table 3. Addresses "Sim-to-real study lacks sample size and downsampling method".
- Fix and unify the runtime accounting. Correct , use a single accounting convention across Tables 5–6 and the Appendix F prose, and add GPU, precision, and executor-invocation details. Addresses the runtime-arithmetic and hardware weaknesses.
- Split the FLUX quantization claim. Keep ">2x" for FP4 and soften the FP8 case to "approaches 2x", explicitly reporting the ~1.98x figure. Addresses the FLUX FP8 quantization discrepancy in Reproducibility & code.
- Tighten notation. Unify , , and time indices; drop "static memory that improves continuously"; use "VLM-based perceiver" in the conclusion; reconcile the "2–3 steps" vs. "50%" content-modification rules in Appendix H; invert the backprop arrow in Algorithm 1 line 29; and reconcile vs. . Addresses the notation-and-arithmetic weakness.