From a13d1c0105531b0263fe0ab5493201b3f5e79bc4 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 16 Feb 2026 00:37:04 +0000 Subject: [PATCH] =?UTF-8?q?Observa=C3=A7=C3=A3o:=20Clique=20em=20Salvar=20?= =?UTF-8?q?no=20editor=20Flatlogic=20p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 2159 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 4694 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 453 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 2118 bytes core/admin.py | 27 +- core/migrations/0001_initial.py | 54 +++ .../0002_alter_pipelinestep_name.py | 18 + .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3695 bytes ...02_alter_pipelinestep_name.cpython-311.pyc | Bin 0 -> 1195 bytes core/models.py | 76 ++++- core/templates/base.html | 85 ++++- core/templates/core/index.html | 314 ++++++++++-------- core/templates/core/project_detail.html | 103 ++++++ core/urls.py | 6 +- core/views.py | 38 ++- populate_demo.py | 54 +++ static/css/custom.css | 118 ++++++- 17 files changed, 715 insertions(+), 178 deletions(-) create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/0002_alter_pipelinestep_name.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 core/migrations/__pycache__/0002_alter_pipelinestep_name.cpython-311.pyc create mode 100644 core/templates/core/project_detail.html create mode 100644 populate_demo.py diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392d6714413db63120e4233d2e96cbadb5de..e2fd99430524a24df78365f734a0dcfad3a2d51a 100644 GIT binary patch literal 2159 zcmbVM&2Q936rb_OuCwdi07=S*HV6u8Ym#OgP%l-5MB4~eln9CT;)~^YhK+-F?T)=F zx$S{JAnFB6(;ixQ^HJ6H;cVw z2UvIE%ZFQ4S{2Z${*RWW5m=onc5!_NJlKUVABw{Qjw#Sm{-gY?r5%v$=IVfMy~Jp| zgRusT^$%vWON{0_7;Ru|d@y5!H6IdZ`Zap(P-*(C8}?pf)Q&Ez4@A7lgG|~F!h}a* zk3YCFzT9213S9BaGL4o9&!o;Hmo@n zX?b4H?{d$RHP7qDtRLar_PpQwew42Wtg$p-}EV zZ}TTS=x4EL{}GGFY2pXG9mImSRea0ImcT+QKU~v45?ABm)WH$z@_=t0b>PN)e zEOK==R)HNP>IgPM6`_I9M3_cUX3yhnrT_~j6TZ$)_=@^xeAPgJ3=%)%_<(oS-*mu)3nR?^JR`l+l1g8La~ zo}W3IxCpicCKl${6SB^D8i+8-!nh}mH0pO8s#eyVS}7sYj>0taSePb}za{JH?@<_K zT*yYseGzPUk3t@?RL&%VCvnn`l;vEQR~OSDtD$PLw4Bp9^bP^@pWXyGssF2)p9a5- zE-Vf1jb@hy_eY;zeevDirR6>2;%NHni`#q6n}fUfX~yeil?r=3UDHK!??Y}4;`;^iRjWg=V`I>=>3-5{wj;YZym>IBNhul_nT zk~li7>W)xdWC`8@KcV|-_wnvgk*W4k`BZ+D9DZwkpWk7(#R^!#rbr(Hj&(}uh+Nq_ z`;N%1z4yOkL!-?xnS|$a!}+BHTzGS`YE9~?z1zPH=f0XyCfd2d+|$e3)qUC;($-ir z>8&xDgzayKGuIAq;SIupPPF-B{bs>p@6&}LT^MT`T|}d0cy10`%7;aCcoA7HAM0BM hi?vUIdmdR&SrZc24q%h_%s&fIEmn7A7U?|Ie~iZ`vlcnjg1HQYXbaL11KCyRvMniDj>-WNiUkf)U3uT}o7k zWEu-O=ulw2Kz3m)x@du-K!7b$2k{}t+{}+kQ^4d?7l}zvZc5= z>_~hZ&b)b?c{A_(9>0%7f((@JrN77zp!P3(=oU|>@@xw#UojFRu?kaVODv0Zm*T3r zOKz5NF>{RM{(_M>!me}O!S~z@^8hZVlsvYU2eiDe(DK?^KG5>NLdz!wcqScuf~M1~ z<*lj`Q8cLeG{vaMs~hFcTkTtK74s~^`~lWMm=Y^7C6~mO+>)!rxftSE_jZR!?j7zP zXg+|;DJ7q+;qN|69?7%gz2^cQxH>w40V_V@mi#+`0WSn!(&D7xOIjgYE8MjWZwn2~ zC}L|w_cf&OPGn$4FHSqqh zYkLinj!X)GGQ~5vOI;RW1|F z@=0V>G!&hpN}8ofxHXPlD_l+KYD!E|Ql~^CHC@!@n_92M>G@0F4;?Bk%!v@a&^T_C3 z?z>?7$Qkpc#Rh_^NYDmmZvyPIN56=ot23q*|V|& zJZzHl{1*0y>&{dJeWOk+uLcLx(5yfaPNA)3g(RYtsa(h4vixw6o#u$XW>jy~L|G9G zs#uX3Q71*YN}S$cnL=0-Nf31_Xw;=n-QFpB8s8h~?0cCgiXec`PC={ftSQ@B6yent zcr3IKxDocU``dGI5pOfQ7xavHoB6#c6FIgyYle?*yIbM2?eJMMe72e04ZXQ}(G0zL zcVb&_g(lje2{Sa&oY_sB*t%#YPHfXh7aqUUN)+0Of|)2ZukM18>t^KG_VB|`9$#xk z_;!RhBYbmqclh|$m^plWJJ}i@Zx4@~!{f~>yU7zwD}JdRzhuTQH9zh)!aU*=?f8TlpJ;x($GJUYd(0ss$a>y@1N#bLpAOqQ zW$;d~^oZ-<(9};`0NmVqx1S+i$pz27P~UM6(2n2M4|FX9QM-3M19XAZ#I1*VI$p`Q z;~&ro+d7e+PGBe44?d-+t$`qB7b&z89?%%FDLw)eA04nBmtsIM!_pAYOWX=C$#tU0 zHNxwpo(>~w^O-_!sn|#sRGr9FO^u~^K$49csz@d1_hlCInJg%TGHR_%>UwIL>d@|= z&gT}Ui@6NcYJkzYT*lUg#hL8YTz;+*UcmeTpu3v-^$hd`irMAjwE}b*$gmhZ29+D) z58warHx=Jg$j!|`FI418MXptFOy?boc>^Qgeot55e>FEZUqo|A={d!y%C(*`*X*)^ z;KR#RLvdPD@6Il#(Pkl=p8@{t%%ebR5>V*=JVKepg{4J4*E5Z@r)qNdy}s;>(>DV4 zvy#(}PE%`Y9Z*`AMZk3Mu6EyLg(M8RqiuRAlc~5;Rsp;g-N)y*FbdP24FdPWb5Ll zAAin}W$5lB281b_80MkUPYmnb*)!ijLVTOK+aqF7?UjDA{f7D04XbkH8}8J5skGbj zb%5G|@u3RQ9b%AV4Yp>3roqqwvawONk?eCxhi!g?nn*9Otl^O_&zi$0Td|Mezn%O! z{lQP^58CM|Gd<c>{{fZ#UEFgGMZL}0z2i(QwYh3WNALO`RvwT1_*N^r+>S1r(dFh` zk2UDSi>=UPJ2YvACV@3#r#Ek!vC|LVZ%r+?Vk_;~iWysJ&hIA1kWI$6jaK49J8{8G zTmUBNkiY=m{{o^vMW}zikM~~IlVK7650lPHaeaO9(M9%WCiEPPkCNNQ*KYs+f&75` zaDESb+&H+u&kbJS2HyZO;|B@1zW+gjA2$6~@PmX~-?tL9ksl)Cz$a2v0@N?Xq$or} z%<^X{^0cNA=lg-n%ug4b^hPY}gaZ6w;=crvs&#mBXY<#sP_}jxfWKCSl-u$`o=J3# zE`X0HLMV-+z(}XR1yQ60kWVBK0QLy+HdH%EhQM@qz)wL>f53ObychPM&?|#sF1fzt z5WeyaSL)ptEWkL$ble)j2)8F}r)I({<9w*=nr=pU6-*q6@pLQpA^gAAe;%FuX>_tZ zdf6Pk?6jfuf7prfp}`mrP4j%VDA)<6olw%>gJmZ<`vhyf=yqlu+@CSMfy==7gaeY&)Jc<5|edy1}cr5)?&2Io?`p+{m#orSwx+~<<`Y7FXMm=iz9k^mm@5?(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xLi8T)Z diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a69659f6c6e0ae848e54157af197c543a09315f..f74125d424b7afe8d71771b2bd5050ba3fe5022b 100644 GIT binary patch literal 453 zcmZurJx{|h5Ix6E=!XgtVnk#_l~A)WpsG_vHx`&8B$URcA0%<)#1xo1c4mQ*354KJ z@DEa{LzR`OTcvKDuuB<0oX_Vwz2|%HrBW$@iu3k;??b(xdiV)z-7H+yJOBlX0tk_d z5Kx2SzzDI6L*fzy1~5bk!_<7Yo-x3iy5F%vHW;CWzevY$OjgOobIpysklpR9VW*x1vU8+M!x7r}N!7~BwC_b7UXvn7 zgm#ph*F82!Ry$U#ysR*#nlce3udq-YSROc9+L3J;rP5(H%$F$_&VY-nB=&sf_*^Jh zEv?13%R)WmR0gaew$x{BKDkt7juApr*v)?D6!x?Ka&CcH95zSWqq9dVBleis6Jk$E fVc5)y_S0T=c$|^en6xIOH8=5=F)ZsNDoW}L!ohdH delta 253 zcmX@ge4D9$IWI340}xbw%g@XL(vLwL7+{4mKHC5p(-~42QW$d>av7r-85vTTQkZj? za+#x;85x)uQW;ZNQkhd&*RU;PW?)zi#1N3q7{!vp9?YQ0@e(AU$#{#UAh9IlB_ouR zA)23?dW)e5WD!U*FEKaOPm^`xUAak&zA=12QIN`FFCg)OnURt427}B6RP=yB`~oWa nz{bGJ+2GP4)Dbd+?E;JZMHcxhEb1EHxOZDda$aid3{0g2JJa4_Ib*fTg=$cXkXE z8P$g#d#IvFv=wSOw6qmD@DqB>(Y7qv8mU#Ks)zJs3H6dw->k8LK-8$ShA7B&^}&$Wd1H8^d~pk&3C4pu7I+S3}grvO1IuZS^(Q;`D`&Q3EU@Iep^n< zwvtvnTe1RnFdYQlZ^%}c9ZHAna5`*vr@O(Ye1XytBLGr0gk_WrKI4lmCIuE+$27Br ziEBE!q>sr2=L}3(l)IhPO{~LX6j7Lq2iySskamjc%EE+a1q;#w3m=LolCLxcdY|3H_z^ zeffD^O;y#@iBeJT*3`Rob-JofSJauBI#c?vDWkrj{gp>6mEN&h?^tQE5g++}_}k$V z`Rn0Ie5w|os>knD0w1Tsy^w5WRrg?C6IbdhuB8 zW(bDw2r$PTTv32Bxa8UM0l|Hno#MK_94`|c@O+0}dlkGP9f*4(RoipC!tfWxD}^EN zPF*Mr1JkT&VMEKGU2xi(L$s{s=CN+BnYwn)?r{=^;7rc)o6m((kzA{=&Tq-HlJLgK z2!M9`J@TCSGp$8hbPo`I7kQi~yind(SmdojtawJoUWNML2X#ptp`amPv z|9G$-9j!)3E73$PnrOu0kH_n=L^YPE#BSDNH=ByYDFy;4)^$d)_fEDeq1jpps5?uB zVa;R@^Eocu8c@2BNt?;WW;VC(5KbNzX&LSRBi7Th$K4HwP^drGJGqx37Csv*P}6c- z^)B0vfx+Mx1_^S(Ytbu8@8rKAZx3E-o(HA@U9j*BxeXxBZudJ7O;Hep1`3wEr-9Ux t_xyn-%9ncsO_s0g4Kz}|+#BfK^2>Wu?h&S%s3Q_VVNPhG>!r8Gr! literal 1364 zcmZ`(&1)M+6ra_{dS%J>I&SM!uH%hUh$T{~CE!96oTjQ1oHkCdQ$lozPf-Q6#oM~=1-7}AYwoe=&3h>36z}rW~~)fO5P4{-h1=r&HMPV zzfVm~BA|nRhVUX&zZ=1NEJDd#(kRMro?7~GlVKiARAFbK7y={g8`rq_)Wa;XDEltUWCmB zkq~sth&3ZeP{;A878u54V{Oaty2i>_vx<&kIwj51DaMXgGg(=)ND+pj!HI^Q9g`Br z#tzdA%!;PvWg3a1>()Z2BR!#4DWHiJ1dw>FOuS)~xge&2p-9tZ06jh%7)=`o)~k%rY>m)oo?Fy$ z*3WOp#5FJD)_FvD(?z&0py>SutcBjF^RHFyMAbU#a#vk`t*)G?D;+i6Rnx7Fo|by~ z_(Z$b)~@ZR_tUQyT0itB&pp5LYvy^Tl^e+D)6aYJ%l+g^CzEdC%omzVp>MZ5DOS%5y(&3}__Iu^u65wb8VLfw(IWG6*mW zP_ft^eCVOaOnaz~noh@^PI&N9ha7Uu5uCw6gHvXD@{Jz*luP^Xf|RX?XOe)#kKKR& z{U6`|?@#dG0|OBbuJZQZ)Mx!1_g^~cU47lb>nsfZ!66Ru8n?y6Q_zH(Z_8KnZ~1vn z;FdY$`wNHs*tgr;!#($L+*fdW*H$0mOI)h&C7rIN1UFJs6(U=zp_^`?W+1GYm98v% z#JZE$5kIw!ncXb`@moHH+wuz>?%NIYHXs4{fD_yeop5->BR}eE1)jtHui*Bs9RUTI zWVpvcp;q`g4>E9{$V8Y7Lx%D|7vJiCE`Su=-UXVXr!^@Y8u%xV2GONf>~!=X8$TyI z1hSVelpSWWkPYtw+au>ZyuxInZ)MPE>w|M1CYaQ~TdCIAIZfl|WG2qaDB;%RY2C2r zUHq^92>g@G-UpqAPezwdM#H@knngESzdW09C4g=spTetrYwq+K*m)Pb^iRj`!rGl@ zalDJ~Ex`BE1^C`RgB*VWa(7N^LwC`Kt&h&-;HP8vtBbKaTW^YQYXmJo2f62lS9_hK z>;^Z8v5PB~E2t>%3WaRS??&Z@Wk?l*WeX#>zfRPeO!lQGc;5}1n5eR*HnAJs!(`hq zv82m2?DkozrQw(VgOsLt=uPrdNyEBgRb9WSH5BMqecPI>KXC&MUH!ZP+v}cT$=a{u zl#dFmu5T7{&1fF%HV78;s#XJbpp+{Xa;0XtyeXEzIyR|nX=S}wZbnK~gIG+GjDYEv zwBe+DZm?1{)CxA;Ai_IxL$e62N;hCypxR9NL4$9jm}?Gh5PTC5K#dA*q`>xX6xXwE zCqSl#4p3pPk4p`MjZCjUBO==LW zIr+HwNVE)5774BsY+@Z8Q}?h4NGmucc$>mitkoq8KegOQHye^{0lZ#WF5_TMMz|!5R&Qr6#bWVhx#YbVIFUP1SM90;4I4R1k!Mnf0|yZll~B&KPLJ`7Yv@p$3IwZiIRxv;+G zh8J}Rr;BUoQDJ$dOqC2gQkAL&(qJe5dr%WD=GL;1V^9<>VjV$_nfm_B`s&7dsX%wR z{S;)wRO!Z-v~d7P33zyk4M8y}fTKz1uS@d^q>oL-9b(kPc?$Kd`FYqfMz>r8;zm_d zs`L_<;@OHD1U>9D^qGK>*^E{Ug6FzSsH?D{OAtQf+Km#dG1M8xf@QcNgLHlOF?7i+ zwG%X0A((C`qo|9fi6NOXeY`Dve`aN|2xU~2iCnQT0ZeEaZU7}l9cI4V+NRr|)Av+j z=rt%7<~^KGO*JjG;to_AgaBKD`c^O`tec~k2t4RT?VSK-+FVOraYGV2xsv2YBnjRh z8XAUiRFXb#$Qlg_WHtwi8S3#FCR(vSXR!c+#G_b$G>@ zy4B&h2P?uES`F^)obemL`0x)@@LjqiJfWT!J1PTo1#bCP$y8Mc%8b~5iI^LA|codpOrxztWBIY}C7=W=9tu+ujX zj=bW4yrHBs@fP6Z4*>WCNAUYj)_;b6>Mv2&SlJID0)-HP(hwi}kK^O^u0spa%}f*Pgfqg%hXFI*-!QwLPAhZ+7O}**Tn?lo6~W{EhZSgnn^j zv=T$5zXHlW!Uzi{vV^u^iEU9pA}S*+enB`!gl=rK=>W9jvDJ>@coQj!3l1w{C|lHU zHJ>uu3nhzTVtV>$C;z90M*lr1`-q^nfKgk-f+4hHA|mnbh!m8@+#_|9!#&7AIR0J0 zi4*Anj&cm&V4WoYCIz`tI0dxQVY)iv1LWd5b4i$4US58tQk(izGsBES9b!_Ocs_B$ zxUE@4$v~{sEHoXn5`4X&*ohp{Hc7c zQq8w21<-72K`V6bt=5aBwMwnLld1BiXa=#eFN%PqTcwTGn+8C^9XL&kZ25spceK;P z(;tl2X;jK(KtZ8~L2ZNY8P=%R0)Dwsol$&htx|r~;^{H~Rm{Mm_Bffix)Dr)yGgCU z9C)*fs~ZZ>*(lYDr7@2Nu`#*HW1>*6uGgEDaq0rI9Oltc-DIga!0to-5+3+@)0oX1 zQ}dwN7c&6yBk3JRb>hLWXj`gDY{Ty;F|c@NRDJ_4KUSFdK#7TKaEmE5a;s`6t15&A zCILO8s-FVQ`XO(!`%KDj>wo`XSpu4=r7dUJ{*u1n6gD?!#saK-aL z?2ezFgwl_CF>yxPUF*px{qU=NmU?hLJAZz6_I!G7Z{ciuu7}XmchWzyE1BGN&yp@9 zc@@cCGM<(%5r``;dNFBQ+I`I*cVWb$ro_WE?rOHdmhfiOqNptcp7T5`ihTmwb!uhM t=a;SmrU0M!7DO*52m){yl%Htv_S=&(0 - - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}CGI Studio{% endblock %} + + + + + + + + + + {% block extra_head %}{% endblock %} - - {% block content %}{% endblock %} - + +
+ {% block content %}{% endblock %} +
+ +
+
+

© 2026 CGI Virtual Studio. Powered by AI Pipeline.

+
+
+ + + + {% block extra_js %}{% endblock %} + diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..d224271 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,181 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Command Center | Studio CGI Virtual{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+
+ NEXT-GEN CGI PIPELINE +
+

Studio de Cinema Virtual

+

+ A fábrica digital para super-produções. Gerencie do roteiro à renderização em um fluxo de produção rigoroso e colaborativo. +

+
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
+ + +
+
+
+
+
+ Total de Projetos + {{ total_projects }} +
+
+
+
+ Produções Ativas + {{ active_productions }} +
+
+
+
+ Obras Finalizadas + {{ completed_projects }} +
+
+
+ +
+
+

Produções em Andamento

+

Status em tempo real do pipeline CGI

+
+
+ +
+ {% for project in projects %} +
+
+
+ {{ project.get_status_display }} + {{ project.get_project_type_display }} +
+ +

+ + {{ project.title }} + +

+ +

+ {{ project.description|default:"Sem descrição definida para esta super-produção."|truncatewords:20 }} +

+ +
+
+ Progresso do Pipeline + {% with last_step=project.steps.last %} + {{ last_step.progress|default:0 }}% + {% endwith %} +
+
+ {% with last_step=project.steps.last %} +
+ {% endwith %} +
+ +
+ {% for step in project.steps.all|slice:":4" %} + + {{ step.get_name_display }} + + {% endfor %} + {% if project.steps.count > 4 %} + +{{ project.steps.count|add:"-4" }} + {% endif %} +
+
+ + +
+
+ {% empty %} +
+
+ + + + +
+

Nenhuma produção ativa

+

Comece sua primeira super-produção 3D agora.

+ Iniciar Projeto +
+ {% endfor %} +
+
+
+ +
+
+
+
+

Pipeline CGI Profissional

+

Nosso estúdio segue o fluxo de trabalho dos maiores estúdios de Hollywood, garantindo qualidade em cada quadro.

+
+
+
+

Pré-produção

+

Roteiro, Concept Art e Animatic para definir a alma do filme.

+
+
+
+
+

Produção

+

Modelagem, Rigging e Animação com personagens realistas.

+
+
+
+
+

Iluminação & FX

+

Simulação de partículas, fluidos e luzes cinematográficas.

+
+
+
+
+

Pós-produção

+

Renderização em render farm e composição final.

+
+
+
+
+
+
+
+
+
+
+
+
+

Status da Render Farm

+
+
+ Nodes Ativos + 128 / 128 +
+
+ CPU Load + 94% +
+
+ Tempo Estimado + 04:12:33 +
+
+
+
+
+
+
+
+
+
{% endblock %} \ No newline at end of file diff --git a/core/templates/core/project_detail.html b/core/templates/core/project_detail.html new file mode 100644 index 0000000..2d25240 --- /dev/null +++ b/core/templates/core/project_detail.html @@ -0,0 +1,103 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}{{ project.title }} | Pipeline Detail{% endblock %} + +{% block content %} +
+
+ + +
+
+ {{ project.get_status_display }} +

{{ project.title }}

+

{{ project.description }}

+
+
+
+ Global Delivery + + {% with last_step=project.steps.last %}{{ last_step.progress|default:0 }}{% endwith %}% + +
+
+
+
+
+ +
+
+
+
+

CGI Production Pipeline

+ +
+ {% for step in steps %} +
+
+
+
+ {{ forloop.counter }} +
+

{{ step.get_name_display }}

+
+ {% if step.is_completed %} + COMPLETO + {% else %} + {{ step.progress }}% + {% endif %} +
+ +
+
+
+
+ {% empty %} +
+

Pipeline não inicializado. Configure as etapas no Admin.

+ Adicionar Etapa + +
+ {% endfor %} +
+
+ +
+
+

Assets Digitais

+
+ {% for asset in assets %} +
+
+ {{ asset.name }} + {{ asset.get_asset_type_display }} • {{ asset.current_stage }} +
+ {% if asset.is_realistic %} + REALISTA + {% endif %} +
+ {% empty %} +

Nenhum asset (personagens/cenários) vinculado.

+ {% endfor %} +
+ +
+
Diretrizes de Qualidade
+
    +
  • ✓ Topologia limpa para rigging
  • +
  • ✓ Texturas 4K/8K PBR
  • +
  • ✓ Iluminação física (PBR)
  • +
  • ✓ Renderização em EXR Multi-camada
  • +
+
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index 6299e3d..b9e0a07 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,7 @@ from django.urls import path - -from .views import home +from .views import home, project_detail urlpatterns = [ path("", home, name="home"), -] + path("project//", project_detail, name="project_detail"), +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..9e5fe2c 100644 --- a/core/views.py +++ b/core/views.py @@ -2,24 +2,36 @@ import os import platform from django import get_version as django_version -from django.shortcuts import render +from django.shortcuts import render, get_object_or_404 from django.utils import timezone +from .models import Project, PipelineStep, CgiAsset def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() + """Render the CGI Studio Command Center.""" + projects = Project.objects.prefetch_related('steps').all() + + # Simple statistics for the dashboard + total_projects = projects.count() + active_productions = projects.filter(status='PROD').count() + completed_projects = projects.filter(status='DONE').count() context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), + "projects": projects, + "total_projects": total_projects, + "active_productions": active_productions, + "completed_projects": completed_projects, + "current_time": timezone.now(), } return render(request, "core/index.html", context) + +def project_detail(request, slug): + """Render the detailed pipeline for a specific production.""" + project = get_object_or_404(Project.objects.prefetch_related('steps', 'assets'), slug=slug) + + context = { + "project": project, + "steps": project.steps.all(), + "assets": project.assets.all(), + } + return render(request, "core/project_detail.html", context) \ No newline at end of file diff --git a/populate_demo.py b/populate_demo.py new file mode 100644 index 0000000..dfc6141 --- /dev/null +++ b/populate_demo.py @@ -0,0 +1,54 @@ +from core.models import Project, PipelineStep, CgiAsset + +def run(): + # Clear existing data + PipelineStep.objects.all().delete() + CgiAsset.objects.all().delete() + Project.objects.all().delete() + + # Create a Movie Project + p1 = Project.objects.create( + title="O Último Guardião", + project_type="MOVIE", + status="PROD", + description="Um épico de ficção científica sobre o último protetor de uma civilização esquecida. Foco em CGI fotorrealista e ambientes vastos." + ) + + steps = [ + ('SCRIPT', 100, True), + ('CONCEPT', 100, True), + ('ANIMATIC', 100, True), + ('MODELING', 85, False), + ('TEXTURING', 60, False), + ('RIGGING', 40, False), + ('ANIMATION', 20, False), + ('LIGHTING', 10, False), + ('FX', 5, False), + ] + + for name, progress, completed in steps: + PipelineStep.objects.create( + project=p1, + name=name, + progress=progress, + is_completed=completed + ) + + CgiAsset.objects.create(project=p1, name="Kaelen (Herói)", asset_type="CHAR", is_realistic=True, current_stage="Rigging") + CgiAsset.objects.create(project=p1, name="Cidade Flutuante", asset_type="ENV", is_realistic=True, current_stage="Texturing") + + # Create a Series Project + p2 = Project.objects.create( + title="Crônicas de Cyber-Rio", + project_type="SERIES", + status="PRE", + description="Série de animação estilizada ambientada em um Rio de Janeiro futurista. Mistura de 2D e 3D." + ) + + PipelineStep.objects.create(project=p2, name="SCRIPT", progress=100, is_completed=True) + PipelineStep.objects.create(project=p2, name="CONCEPT", progress=40, is_completed=False) + + print("Demo data created successfully!") + +if __name__ == "__main__": + run() diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..9c3283c 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,116 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +/* CGI Studio Custom Styling */ +:root { + --bg-deep: #0a0a0c; + --bg-card: #141417; + --accent-cyan: #00e5ff; + --accent-purple: #7000ff; + --text-muted: #888891; + --glass-bg: rgba(10, 10, 12, 0.8); +} + +body { + background-color: var(--bg-deep); + color: #f8f9fa; + line-height: 1.6; +} + +.text-cyan { color: var(--accent-cyan); } +.text-purple { color: var(--accent-purple); } + +.studio-navbar { + background: var(--glass-bg); + backdrop-filter: blur(20px); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + padding: 1rem 0; +} + +.hero-section { + padding: 140px 0 100px; + background: + radial-gradient(circle at 10% 20%, rgba(0, 229, 255, 0.05) 0%, transparent 40%), + radial-gradient(circle at 90% 80%, rgba(112, 0, 255, 0.05) 0%, transparent 40%); + position: relative; + overflow: hidden; +} + +.display-3 { + font-weight: 800; + letter-spacing: -2px; +} + +.btn-cyan { + background: var(--accent-cyan); + color: #000; + font-weight: 700; + border: none; + padding: 14px 32px; + border-radius: 12px; + text-transform: uppercase; + font-size: 0.9rem; + letter-spacing: 0.5px; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.btn-cyan:hover { + background: #4df1ff; + box-shadow: 0 0 30px rgba(0, 229, 255, 0.4); + transform: translateY(-2px); + color: #000; +} + +.project-card { + background: var(--bg-card); + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 24px; + padding: 32px; + transition: all 0.4s ease; + height: 100%; + display: flex; + flex-direction: column; + position: relative; +} + +.project-card:hover { + border-color: rgba(0, 229, 255, 0.3); + background: #1a1a1f; + transform: translateY(-8px); + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4); +} + +.stats-card { + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.05); + padding: 28px; + border-radius: 20px; + text-align: center; +} + +.pipeline-badge { + padding: 6px 14px; + border-radius: 30px; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 0.5px; +} + +.badge-pre { background: rgba(136, 136, 145, 0.1); color: #888891; border: 1px solid rgba(136, 136, 145, 0.2); } +.badge-prod { background: rgba(112, 0, 255, 0.1); color: #b780ff; border: 1px solid rgba(112, 0, 255, 0.2); } +.badge-post { background: rgba(0, 229, 255, 0.1); color: #00e5ff; border: 1px solid rgba(0, 229, 255, 0.2); } +.badge-done { background: rgba(0, 255, 149, 0.1); color: #00ff95; border: 1px solid rgba(0, 255, 149, 0.2); } + +.progress { + height: 8px; + background: rgba(255, 255, 255, 0.05); + border-radius: 10px; + overflow: hidden; +} + +.progress-bar { + background: linear-gradient(90deg, var(--accent-cyan), var(--accent-purple)); + border-radius: 10px; +} + +.section-title { + font-weight: 800; + margin-bottom: 2rem; }