SANTA CLARA – Here’s who stood out to me during the 49ers’ seventh day of training camp.

THE GOOD

1. WR Quinton Patton. The best route-runner on the team. Consistently beats man-to-man coverage on the outside. Made four catches today during team drills and beat Jimmie Ward with a post route for a deep touchdown catch during 1 on 1s.

2. WR DiAndre Campbell. One of the top five receivers in camp so far. Caught every pass that came his way today. Made a team-high seven catches during team drills as the flanker for the second-string offense. Beat Keith Reaser twice during 1-on-1 drills – once with an out route and once with a deep hook.

3. WR Bryce Treggs. Made five catches as the third-string slot receiver, including three catches during a span of five plays.

4. TE Blake Bell. Made four catches, including a touchdown catch over inside linebacker Gerald Hodges, a complete a stiff in coverage.

5. TE Bruce Miller. Beat NaVorro Bowman with a corner route for a long catch, and beat Jimmie Ward with a crossing route for a short catch. Made four catches total. Seems like the front-runner to be the starting move tight end on first and second down.

6. DE Arik Armstead. Unmovable in the running game. Faced Trent Brown and Andrew Tiller during a 2-on-1 run-blocking drill and held his ground against both of them.

7. QB Blaine Gabbert. The best performance by a quarterback during this camp. Completed 23 of 28 attempts and threw two touchdown passes. Also converted three of four third downs.

THE NOT SO GOOD

1. WR DeAndre Smelter. Dropped a pass during 1 on 1s and caught zero during team drills. Watched the end of practice from the sideline with what seemed to be a minor injury.

2. WR Devon Cajuste. Dropped three passes and wasn’t fast enough to run under a well-placed deep throw from Jeff Driskel.

3. DE DeForest Buckner. Pushed around during the same 2-on-1 run-blocking drill Armstead dominated. Tried to slip around blockers, which made Buckner easy to move to the side, unlike Armstead who almost always tries to go directly through the blocker he’s facing.

4. DE Ronald Blair. Even worse than Buckner during the 2-on-1 run-blocking drill. Simply couldn’t hold his ground. Probably won’t play in running situations as a rookie.

5. ILB NaVorro Bowman. Beaten badly in coverage twice – once by Bruce Miller on a deep corner route, and once by Shaun Draughn on a shallow option route. Both times, Bowman was nowhere near the receiver when he caught the pass.

6. QB Colin Kaepernick. Completed 15 of 24 attempts (63 percent), but struggled in the red zone (no touchdown passes) and on third down, converting just one of seven opportunities.