R, 136130 bytes
function(n,k=n%/%7*8+1+n%%7,a=el(strsplit(strrep(' vibgyor',/k),'')))for(i in k:1)cat(d<-rep(' ',/(i-1),reva[c(s<-a[ik:k])i,a[i]i,si:k)],d,sep='','
')
"/"=strrep
- -6 bytes thanks to @JayCe
R, 136 bytes
function(n,k=n%/%7*8+1+n%%7,a=el(strsplit(strrep(' vibgyor',k),'')))for(i in k:1)cat(d<-rep(' ',i-1),rev(s<-a[i:k]),a[i],s,d,sep='','
')
R, 130 bytes
function(n,k=n%/%7*8+1+n%%7,a=el(strsplit(' vibgyor'/k,'')))for(i in k:1)cat(d<-' '/(i-1),a[c(k:i,i,i:k)],d,sep='','
')
"/"=strrep
- -6 bytes thanks to @JayCe