The textural variability of river bed gravels at bar scales is poorly understood, as are the relations between variability at this scale and at reach and river scales. Surface and subsurface grain-size distributions were therefore examined at reach, bar and bedform scales along lower Fraser River, British Columbia, Canada. Grain-size variations within compound bars are conditioned by longitudinal position, elevation and morphological setting. Surface and subsurface sediments tend to decrease in median size from bar head to bar tail by 33% and 17%, respectively. Sediment size is constrained at some upper limit that is inversely related to bar surface elevation and which is consistent with competence considerations. The surface sediments on unit bars are finer and better sorted than the bed materials in bar-top channels and along the main bar edges. Secondary unit bars tend to have a lower sand content than other features, a consequence of sediment resorting. Individual unit bars and gravel sheets exhibit streamwise grain-size fining and lee-side sand deposition. Over time, significant amounts of cut and fill do not ipso facto cause changes in surface grain sizes; yet, sediment characteristics can change without any significant morphological adjustment taking place. At the reach scale there is a clear downstream fining trend, but local variability is consistently high due to within-bar variations. The surface median grain-size range on individual bars is, on average, 25% of that along the entire 50 km reach but is 68% on one bar. While the overall fining trend yields a downstream change in surface median size of 0·76 mm km−1, the average value for ‘head-to-tail’ size reduction on individual bars is 6·3 mm km−1, an order of magnitude difference that highlights the effectiveness of bar-scale sorting processes in gravel-bed rivers. Possibilities for modelling bar-scale variability and the interaction of the different controls that are identified are discussed.