Не очень понял, почему у вас возникла проблема, примерно вот:
https://jsfiddle.net/wvj0tet4/
по поводу динамики, такие вещи делаются на стороне сервера, если работаете с файловой системой или бд, уже там при построении вашего представления, вы определяете шаблоны, в вашем случае их 2, одна фотка - значит прямоугольник, деве фотки - значит квадрат, а по поводу кол-ва столбцов, тоже можно загорячиться, ну мне почему то кажется, что определить к примеру, 4-5 колонок более чем достаточно, а вот их внутр. поведение, сколько фото и каких, уже делается просто.
Чтобы колонки тянулись от кол-ва, есть замечательные св-во:
:nth-last-child
Поддержка конечно не везде, ну уже зависит от потребностей, как мне кажется, сейчас уже, 90 % и более, решается стилями, потому, что поддержка того же Flexbox, который всем облегчил жизнь, кто умеет его готовить, показывает хорошие цифры:
caniuse.com/#search=flexbox
P.S. Поправьте, если ошибся где