primocode 10.4.7 → 10.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bin/primocode.js +117 -24
- package/lib/act.js +141 -9
- package/lib/agents-md.js +140 -0
- package/lib/auditoria.js +122 -0
- package/lib/browser.js +48 -1
- package/lib/catalogo.js +29 -5
- package/lib/comandos-extra.js +2 -0
- package/lib/config.js +32 -4
- package/lib/conta.js +9 -3
- package/lib/entrada.js +33 -11
- package/lib/estudio/colecao.js +218 -0
- package/lib/estudio/dados/fluent-3d.json +1 -0
- package/lib/estudio/dados/noto-animado.json +1 -0
- package/lib/estudio/diretor.js +1 -0
- package/lib/estudio/estilo.js +6 -2
- package/lib/estudio/falantes.js +30 -6
- package/lib/estudio/gerativo.js +8 -0
- package/lib/estudio/hibrido.js +144 -8
- package/lib/estudio/index.js +202 -83
- package/lib/estudio/kit/animacao.jsx +41 -0
- package/lib/estudio/kit/gerativo.jsx +21 -1
- package/lib/estudio/kit/index.jsx +3 -1
- package/lib/estudio/kit/mundo.jsx +1060 -0
- package/lib/estudio/kit/voxel.jsx +854 -0
- package/lib/estudio/kit.js +5 -1
- package/lib/estudio/kokoro.js +18 -4
- package/lib/estudio/margem.js +1 -1
- package/lib/estudio/mundo.js +305 -0
- package/lib/estudio/personagem.js +234 -10
- package/lib/estudio/producao.js +107 -17
- package/lib/estudio/projeto.js +77 -22
- package/lib/estudio/remotion.js +2 -0
- package/lib/leitura.js +176 -0
- package/lib/local/cerebro.json +180 -3
- package/lib/local/entrada.js +61 -4
- package/lib/mcp.js +296 -12
- package/lib/memoria-conversa.js +32 -3
- package/lib/mencoes.js +5 -1
- package/lib/nome-curto.js +126 -0
- package/lib/nome-projeto.js +5 -2
- package/lib/outra-pasta.js +161 -0
- package/lib/perigo.js +34 -2
- package/lib/referencia.js +40 -11
- package/lib/repeticao.js +20 -1
- package/lib/tela.js +1 -1
- package/lib/tools.js +76 -6
- package/lib/travado.js +141 -0
- package/lib/ui.js +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[["1f600","smile","smileys and emotions"],["1f603","smile with big eyes","smileys and emotions"],["1f604","grin","smileys and emotions"],["1f601","grinning","smileys and emotions"],["1f606","laughing","smileys and emotions"],["1f605","grin sweat","smileys and emotions"],["1f602","joy","smileys and emotions"],["1f923","rofl","smileys and emotions"],["1f62d","loudly crying","smileys and emotions"],["1f609","wink","smileys and emotions"],["1f617","kissing","smileys and emotions"],["1f619","kissing smiling eyes","smileys and emotions"],["1f61a","kissing closed eyes","smileys and emotions"],["1f618","kissing heart","smileys and emotions"],["1f970","heart face 3 hearts","smileys and emotions"],["1f60d","heart eyes","smileys and emotions"],["1f929","star struck","smileys and emotions"],["1f973","partying face","smileys and emotions"],["1fae0","melting","smileys and emotions"],["1f643","upside down face","smileys and emotions"],["1f642","slightly happy","smileys and emotions"],["1f972","happy cry","smileys and emotions"],["1f979","holding back tears","smileys and emotions"],["1f60a","blush","smileys and emotions"],["263a_fe0f","warm smile","smileys and emotions"],["1f60c","relieved","smileys and emotions"],["1f642_200d_2195_fe0f","head nod","smileys and emotions"],["1f642_200d_2194_fe0f","head shake","smileys and emotions"],["1f60f","smirk","smileys and emotions"],["1f924","drool","smileys and emotions"],["1f60b","yum","smileys and emotions"],["1f61b","stuck out tongue","smileys and emotions"],["1f61d","squinting tongue","smileys and emotions"],["1f61c","winky tongue","smileys and emotions"],["1f92a","zany face","smileys and emotions"],["1faea","distorted face","smileys and emotions"],["1f614","pensive","smileys and emotions"],["1f97a","pleading","smileys and emotions"],["1f62c","grimacing","smileys and emotions"],["1f611","expressionless","smileys and emotions"],["1f610","neutral face","smileys and emotions"],["1f636","mouth none","smileys and emotions"],["1f636_200d_1f32b_fe0f","face in clouds lost","smileys and emotions"],["1fae5","dotted line face invisible","smileys and emotions"],["1f910","zipper face","smileys and emotions"],["1fae1","salute","smileys and emotions"],["1f914","thinking face","smileys and emotions"],["1f92b","shushing face","smileys and emotions"],["1fae2","hand over mouth","smileys and emotions"],["1f92d","smiling eyes with hand over mouth chuckling","smileys and emotions"],["1f971","yawn","smileys and emotions"],["1f917","hug face","smileys and emotions"],["1fae3","peeking","smileys and emotions"],["1f631","screaming","smileys and emotions"],["1f928","raised eyebrow","smileys and emotions"],["1f9d0","monocle","smileys and emotions"],["1f612","unamused","smileys and emotions"],["1f644","rolling eyes","smileys and emotions"],["1f62e_200d_1f4a8","exhale","smileys and emotions"],["1f624","triumph","smileys and emotions"],["1f620","angry","smileys and emotions"],["1f621","rage","smileys and emotions"],["1f92c","cursing","smileys and emotions"],["1f61e","sad","smileys and emotions"],["1f613","sweat downcast","smileys and emotions"],["1f61f","worried","smileys and emotions"],["1f625","concerned","smileys and emotions"],["1f622","cry","smileys and emotions"],["2639_fe0f","big frown","smileys and emotions"],["1f641","frown","smileys and emotions"],["1fae4","diagonal mouth","smileys and emotions"],["1f615","slightly frowning","smileys and emotions"],["1f630","anxious with sweat","smileys and emotions"],["1f628","scared","smileys and emotions"],["1f627","anguished","smileys and emotions"],["1f626","gasp","smileys and emotions"],["1f62e","mouth open","smileys and emotions"],["1f62f","surprised hushed","smileys and emotions"],["1f632","astonished","smileys and emotions"],["1f633","flushed","smileys and emotions"],["1f92f","mind blown exploding head","smileys and emotions"],["1f616","scrunched mouth confounded zigzag mouth","smileys and emotions"],["1f623","scrunched eyes persevering","smileys and emotions"],["1f629","weary","smileys and emotions"],["1f62b","distraught","smileys and emotions"],["1f635","x eyes","smileys and emotions"],["1f635_200d_1f4ab","dizzy face","smileys and emotions"],["1fae8","shaking face","smileys and emotions"],["1f974","woozy","smileys and emotions"],["1f975","hot face sweat face","smileys and emotions"],["1f976","cold face","smileys and emotions"],["1f922","sick nauseated","smileys and emotions"],["1f92e","vomit","smileys and emotions"],["1fae9","tired bags under eyes","smileys and emotions"],["1f634","sleep","smileys and emotions"],["1f62a","sleepy","smileys and emotions"],["1f927","sneeze","smileys and emotions"],["1f912","thermometer face","smileys and emotions"],["1f915","bandage face","smileys and emotions"],["1f637","mask","smileys and emotions"],["1f925","liar","smileys and emotions"],["1f607","halo innocent","smileys and emotions"],["1f920","cowboy","smileys and emotions"],["1f911","money face","smileys and emotions"],["1f913","nerd face","smileys and emotions"],["1f60e","sunglasses face","smileys and emotions"],["1f978","disguise","smileys and emotions"],["1f921","clown","smileys and emotions"],["1f4a9","poop","smileys and emotions"],["1f608","imp smile","smileys and emotions"],["1f47f","imp frown","smileys and emotions"],["1f47b","ghost","smileys and emotions"],["1f480","skull","smileys and emotions"],["1f916","robot","smileys and emotions"],["1f479","ogre","smileys and emotions"],["2603_fe0f","snowman with snow","smileys and emotions"],["26c4","snowman","smileys and emotions"],["1f47d","alien","smileys and emotions"],["1f47e","alien monster","smileys and emotions"],["1f31a","moon face new","smileys and emotions"],["1f31d","moon face full","smileys and emotions"],["1f31e","sun with face","smileys and emotions"],["1f31b","moon face first quarter","smileys and emotions"],["1f31c","moon face last quarter","smileys and emotions"],["1f63a","smiley cat","smileys and emotions"],["1f638","smile cat","smileys and emotions"],["1f639","joy cat","smileys and emotions"],["1f63b","heart eyes cat","smileys and emotions"],["1f63c","smirk cat","smileys and emotions"],["1f63d","kissing cat","smileys and emotions"],["1f640","scream cat","smileys and emotions"],["1f63f","crying cat face","smileys and emotions"],["1f63e","pouting cat","smileys and emotions"],["1f648","see no evil monkey","smileys and emotions"],["1f649","hear no evil monkey","smileys and emotions"],["1f64a","speak no evil monkey","smileys and emotions"],["2b50","star","smileys and emotions"],["1f31f","glowing star","smileys and emotions"],["2728","sparkles","smileys and emotions"],["26a1","electricity zap lightning","smileys and emotions"],["1f4a5","collision","smileys and emotions"],["1faef","fight","smileys and emotions"],["1f573_fe0f","hole","smileys and emotions"],["1f525","fire burn lit","smileys and emotions"],["1f4af","100 one hundred hundred points","smileys and emotions"],["1f389","party popper","smileys and emotions"],["1f38a","confetti ball","smileys and emotions"],["2764_fe0f","red heart","smileys and emotions"],["1f9e1","orange heart","smileys and emotions"],["1f49b","yellow heart","smileys and emotions"],["1f49a","green heart","smileys and emotions"],["1fa75","light blue heart","smileys and emotions"],["1f499","blue heart","smileys and emotions"],["1f49c","purple heart","smileys and emotions"],["1f90e","brown heart","smileys and emotions"],["1f5a4","black heart","smileys and emotions"],["1fa76","grey heart","smileys and emotions"],["1f90d","white heart","smileys and emotions"],["1fa77","pink heart","smileys and emotions"],["1f498","cupid","smileys and emotions"],["1f49d","gift heart","smileys and emotions"],["1f496","sparkling heart","smileys and emotions"],["1f497","heart grow","smileys and emotions"],["1f493","beating heart","smileys and emotions"],["1f49e","revolving hearts","smileys and emotions"],["1f495","two hearts","smileys and emotions"],["1f48c","love letter","smileys and emotions"],["1f49f","heart box","smileys and emotions"],["2665_fe0f","heart","smileys and emotions"],["2763_fe0f","heart exclamation point","smileys and emotions"],["2764_fe0f_200d_1fa79","bandaged heart","smileys and emotions"],["1f494","broken heart","smileys and emotions"],["2764_fe0f_200d_1f525","fire heart","smileys and emotions"],["1f48b","kiss","smileys and emotions"],["1fac2","hugging","smileys and emotions"],["1f5e3_fe0f","speaking head","smileys and emotions"],["1f463","footprints","smileys and emotions"],["1fac6","fingerprint","smileys and emotions"],["1f9e0","brain","smileys and emotions"],["1fac0","anatomical heart","smileys and emotions"],["1fa78","blood","smileys and emotions"],["1f9a0","microbe virus","smileys and emotions"],["1f9b4","bone","smileys and emotions"],["1f440","eyes","smileys and emotions"],["1f441_fe0f","eye","smileys and emotions"],["1fae6","biting lip","smileys and emotions"],["1f443","nose","smileys and emotions"],["1f443_1f3fb","nose","smileys and emotions"],["1f443_1f3fc","nose","smileys and emotions"],["1f443_1f3fd","nose","smileys and emotions"],["1f443_1f3fe","nose","smileys and emotions"],["1f443_1f3ff","nose","smileys and emotions"],["1f442","ear","smileys and emotions"],["1f442_1f3fb","ear","smileys and emotions"],["1f442_1f3fc","ear","smileys and emotions"],["1f442_1f3fd","ear","smileys and emotions"],["1f442_1f3fe","ear","smileys and emotions"],["1f442_1f3ff","ear","smileys and emotions"],["1f9bb","hearing aid","smileys and emotions"],["1f9bb_1f3fb","hearing aid","smileys and emotions"],["1f9bb_1f3fc","hearing aid","smileys and emotions"],["1f9bb_1f3fd","hearing aid","smileys and emotions"],["1f9bb_1f3fe","hearing aid","smileys and emotions"],["1f9bb_1f3ff","hearing aid","smileys and emotions"],["1f9b6","foot","smileys and emotions"],["1f9b6_1f3fb","foot","smileys and emotions"],["1f9b6_1f3fc","foot","smileys and emotions"],["1f9b6_1f3fd","foot","smileys and emotions"],["1f9b6_1f3fe","foot","smileys and emotions"],["1f9b6_1f3ff","foot","smileys and emotions"],["1f9b5","leg","smileys and emotions"],["1f9b5_1f3fb","leg","smileys and emotions"],["1f9b5_1f3fc","leg","smileys and emotions"],["1f9b5_1f3fd","leg","smileys and emotions"],["1f9b5_1f3fe","leg","smileys and emotions"],["1f9b5_1f3ff","leg","smileys and emotions"],["1f9bf","leg mechanical","smileys and emotions"],["1f9be","arm mechanical","smileys and emotions"],["1f4aa","muscle flex bicep strong","smileys and emotions"],["1f4aa_1f3fb","muscle flex bicep strong","smileys and emotions"],["1f4aa_1f3fc","muscle flex bicep strong","smileys and emotions"],["1f4aa_1f3fd","muscle flex bicep strong","smileys and emotions"],["1f4aa_1f3fe","muscle flex bicep strong","smileys and emotions"],["1f4aa_1f3ff","muscle flex bicep strong","smileys and emotions"],["1f44f","clap","smileys and emotions"],["1f44f_1f3fb","clap","smileys and emotions"],["1f44f_1f3fc","clap","smileys and emotions"],["1f44f_1f3fd","clap","smileys and emotions"],["1f44f_1f3fe","clap","smileys and emotions"],["1f44f_1f3ff","clap","smileys and emotions"],["1f44d","thumbs up +1","smileys and emotions"],["1f44d_1f3fb","thumbs up +1","smileys and emotions"],["1f44d_1f3fc","thumbs up +1","smileys and emotions"],["1f44d_1f3fd","thumbs up +1","smileys and emotions"],["1f44d_1f3fe","thumbs up +1","smileys and emotions"],["1f44d_1f3ff","thumbs up +1","smileys and emotions"],["1f44e","thumbs down","smileys and emotions"],["1f44e_1f3fb","thumbs down","smileys and emotions"],["1f44e_1f3fc","thumbs down","smileys and emotions"],["1f44e_1f3fd","thumbs down","smileys and emotions"],["1f44e_1f3fe","thumbs down","smileys and emotions"],["1f44e_1f3ff","thumbs down","smileys and emotions"],["1faf6","heart hands","smileys and emotions"],["1faf6_1f3fb","heart hands","smileys and emotions"],["1faf6_1f3fc","heart hands","smileys and emotions"],["1faf6_1f3fd","heart hands","smileys and emotions"],["1faf6_1f3fe","heart hands","smileys and emotions"],["1faf6_1f3ff","heart hands","smileys and emotions"],["1f64c","raising hands hooray","smileys and emotions"],["1f64c_1f3fb","raising hands hooray","smileys and emotions"],["1f64c_1f3fc","raising hands hooray","smileys and emotions"],["1f64c_1f3fd","raising hands hooray","smileys and emotions"],["1f64c_1f3fe","raising hands hooray","smileys and emotions"],["1f64c_1f3ff","raising hands hooray","smileys and emotions"],["1f450","open hands","smileys and emotions"],["1f450_1f3fb","open hands","smileys and emotions"],["1f450_1f3fc","open hands","smileys and emotions"],["1f450_1f3fd","open hands","smileys and emotions"],["1f450_1f3fe","open hands","smileys and emotions"],["1f450_1f3ff","open hands","smileys and emotions"],["1f932","palms up","smileys and emotions"],["1f932_1f3fb","palms up","smileys and emotions"],["1f932_1f3fc","palms up","smileys and emotions"],["1f932_1f3fd","palms up","smileys and emotions"],["1f932_1f3fe","palms up","smileys and emotions"],["1f932_1f3ff","palms up","smileys and emotions"],["1f91c","fist rightwards","smileys and emotions"],["1f91c_1f3fb","fist rightwards","smileys and emotions"],["1f91c_1f3fc","fist rightwards","smileys and emotions"],["1f91c_1f3fd","fist rightwards","smileys and emotions"],["1f91c_1f3fe","fist rightwards","smileys and emotions"],["1f91c_1f3ff","fist rightwards","smileys and emotions"],["1f91b","fist leftwards","smileys and emotions"],["1f91b_1f3fb","fist leftwards","smileys and emotions"],["1f91b_1f3fc","fist leftwards","smileys and emotions"],["1f91b_1f3fd","fist leftwards","smileys and emotions"],["1f91b_1f3fe","fist leftwards","smileys and emotions"],["1f91b_1f3ff","fist leftwards","smileys and emotions"],["270a","raised fist","smileys and emotions"],["270a_1f3fb","raised fist","smileys and emotions"],["270a_1f3fc","raised fist","smileys and emotions"],["270a_1f3fd","raised fist","smileys and emotions"],["270a_1f3fe","raised fist","smileys and emotions"],["270a_1f3ff","raised fist","smileys and emotions"],["1f44a","fist bump","smileys and emotions"],["1f44a_1f3fb","fist bump","smileys and emotions"],["1f44a_1f3fc","fist bump","smileys and emotions"],["1f44a_1f3fd","fist bump","smileys and emotions"],["1f44a_1f3fe","fist bump","smileys and emotions"],["1f44a_1f3ff","fist bump","smileys and emotions"],["1faf3","palm down drop","smileys and emotions"],["1faf3_1f3fb","palm down drop","smileys and emotions"],["1faf3_1f3fc","palm down drop","smileys and emotions"],["1faf3_1f3fd","palm down drop","smileys and emotions"],["1faf3_1f3fe","palm down drop","smileys and emotions"],["1faf3_1f3ff","palm down drop","smileys and emotions"],["1faf4","palm up throw","smileys and emotions"],["1faf4_1f3fb","palm up throw","smileys and emotions"],["1faf4_1f3fc","palm up throw","smileys and emotions"],["1faf4_1f3fd","palm up throw","smileys and emotions"],["1faf4_1f3fe","palm up throw","smileys and emotions"],["1faf4_1f3ff","palm up throw","smileys and emotions"],["1faf1","rightwards hand","smileys and emotions"],["1faf1_1f3fb","rightwards hand","smileys and emotions"],["1faf1_1f3fc","rightwards hand","smileys and emotions"],["1faf1_1f3fd","rightwards hand","smileys and emotions"],["1faf1_1f3fe","rightwards hand","smileys and emotions"],["1faf1_1f3ff","rightwards hand","smileys and emotions"],["1faf2","leftwards hand","smileys and emotions"],["1faf2_1f3fb","leftwards hand","smileys and emotions"],["1faf2_1f3fc","leftwards hand","smileys and emotions"],["1faf2_1f3fd","leftwards hand","smileys and emotions"],["1faf2_1f3fe","leftwards hand","smileys and emotions"],["1faf2_1f3ff","leftwards hand","smileys and emotions"],["1faf8","push rightwards","smileys and emotions"],["1faf8_1f3fb","push rightwards","smileys and emotions"],["1faf8_1f3fc","push rightwards","smileys and emotions"],["1faf8_1f3fd","push rightwards","smileys and emotions"],["1faf8_1f3fe","push rightwards","smileys and emotions"],["1faf8_1f3ff","push rightwards","smileys and emotions"],["1faf7","push leftwards","smileys and emotions"],["1faf7_1f3fb","push leftwards","smileys and emotions"],["1faf7_1f3fc","push leftwards","smileys and emotions"],["1faf7_1f3fd","push leftwards","smileys and emotions"],["1faf7_1f3fe","push leftwards","smileys and emotions"],["1faf7_1f3ff","push leftwards","smileys and emotions"],["1f44b","wave","smileys and emotions"],["1f44b_1f3fb","wave","smileys and emotions"],["1f44b_1f3fc","wave","smileys and emotions"],["1f44b_1f3fd","wave","smileys and emotions"],["1f44b_1f3fe","wave","smileys and emotions"],["1f44b_1f3ff","wave","smileys and emotions"],["1f91a","back hand","smileys and emotions"],["1f91a_1f3fb","back hand","smileys and emotions"],["1f91a_1f3fc","back hand","smileys and emotions"],["1f91a_1f3fd","back hand","smileys and emotions"],["1f91a_1f3fe","back hand","smileys and emotions"],["1f91a_1f3ff","back hand","smileys and emotions"],["1f590_fe0f","palm","smileys and emotions"],["1f590_1f3fb","palm","smileys and emotions"],["1f590_1f3fc","palm","smileys and emotions"],["1f590_1f3fd","palm","smileys and emotions"],["1f590_1f3fe","palm","smileys and emotions"],["1f590_1f3ff","palm","smileys and emotions"],["270b","raised hand","smileys and emotions"],["270b_1f3fb","raised hand","smileys and emotions"],["270b_1f3fc","raised hand","smileys and emotions"],["270b_1f3fd","raised hand","smileys and emotions"],["270b_1f3fe","raised hand","smileys and emotions"],["270b_1f3ff","raised hand","smileys and emotions"],["1f596","vulcan prosper spock","smileys and emotions"],["1f596_1f3fb","vulcan prosper spock","smileys and emotions"],["1f596_1f3fc","vulcan prosper spock","smileys and emotions"],["1f596_1f3fd","vulcan prosper spock","smileys and emotions"],["1f596_1f3fe","vulcan prosper spock","smileys and emotions"],["1f596_1f3ff","vulcan prosper spock","smileys and emotions"],["1f91f","love you gesture","smileys and emotions"],["1f91f_1f3fb","love you gesture","smileys and emotions"],["1f91f_1f3fc","love you gesture","smileys and emotions"],["1f91f_1f3fd","love you gesture","smileys and emotions"],["1f91f_1f3fe","love you gesture","smileys and emotions"],["1f91f_1f3ff","love you gesture","smileys and emotions"],["1f918","metal horns","smileys and emotions"],["1f918_1f3fb","metal horns","smileys and emotions"],["1f918_1f3fc","metal horns","smileys and emotions"],["1f918_1f3fd","metal horns","smileys and emotions"],["1f918_1f3fe","metal horns","smileys and emotions"],["1f918_1f3ff","metal horns","smileys and emotions"],["270c_fe0f","victory v peace hand","smileys and emotions"],["270c_1f3fb","victory v peace hand","smileys and emotions"],["270c_1f3fc","victory v peace hand","smileys and emotions"],["270c_1f3fd","victory v peace hand","smileys and emotions"],["270c_1f3fe","victory v peace hand","smileys and emotions"],["270c_1f3ff","victory v peace hand","smileys and emotions"],["1f91e","crossed fingers","smileys and emotions"],["1f91e_1f3fb","crossed fingers","smileys and emotions"],["1f91e_1f3fc","crossed fingers","smileys and emotions"],["1f91e_1f3fd","crossed fingers","smileys and emotions"],["1f91e_1f3fe","crossed fingers","smileys and emotions"],["1f91e_1f3ff","crossed fingers","smileys and emotions"],["1faf0","hand with index finger and thumb crossed snap finger heart","smileys and emotions"],["1faf0_1f3fb","hand with index finger and thumb crossed snap finger heart","smileys and emotions"],["1faf0_1f3fc","hand with index finger and thumb crossed snap finger heart","smileys and emotions"],["1faf0_1f3fd","hand with index finger and thumb crossed snap finger heart","smileys and emotions"],["1faf0_1f3fe","hand with index finger and thumb crossed snap finger heart","smileys and emotions"],["1faf0_1f3ff","hand with index finger and thumb crossed snap finger heart","smileys and emotions"],["1f919","call me hand","smileys and emotions"],["1f919_1f3fb","call me hand","smileys and emotions"],["1f919_1f3fc","call me hand","smileys and emotions"],["1f919_1f3fd","call me hand","smileys and emotions"],["1f919_1f3fe","call me hand","smileys and emotions"],["1f919_1f3ff","call me hand","smileys and emotions"],["1f90c","pinched fingers","smileys and emotions"],["1f90c_1f3fb","pinched fingers","smileys and emotions"],["1f90c_1f3fc","pinched fingers","smileys and emotions"],["1f90c_1f3fd","pinched fingers","smileys and emotions"],["1f90c_1f3fe","pinched fingers","smileys and emotions"],["1f90c_1f3ff","pinched fingers","smileys and emotions"],["1f90f","pinch","smileys and emotions"],["1f90f_1f3fb","pinch","smileys and emotions"],["1f90f_1f3fc","pinch","smileys and emotions"],["1f90f_1f3fd","pinch","smileys and emotions"],["1f90f_1f3fe","pinch","smileys and emotions"],["1f90f_1f3ff","pinch","smileys and emotions"],["1f44c","ok","smileys and emotions"],["1f44c_1f3fb","ok","smileys and emotions"],["1f44c_1f3fc","ok","smileys and emotions"],["1f44c_1f3fd","ok","smileys and emotions"],["1f44c_1f3fe","ok","smileys and emotions"],["1f44c_1f3ff","ok","smileys and emotions"],["1faf5","pointing","smileys and emotions"],["1faf5_1f3fb","pointing","smileys and emotions"],["1faf5_1f3fc","pointing","smileys and emotions"],["1faf5_1f3fd","pointing","smileys and emotions"],["1faf5_1f3fe","pointing","smileys and emotions"],["1faf5_1f3ff","pointing","smileys and emotions"],["1f449","point right","smileys and emotions"],["1f449_1f3fb","point right","smileys and emotions"],["1f449_1f3fc","point right","smileys and emotions"],["1f449_1f3fd","point right","smileys and emotions"],["1f449_1f3fe","point right","smileys and emotions"],["1f449_1f3ff","point right","smileys and emotions"],["1f448","point left","smileys and emotions"],["1f448_1f3fb","point left","smileys and emotions"],["1f448_1f3fc","point left","smileys and emotions"],["1f448_1f3fd","point left","smileys and emotions"],["1f448_1f3fe","point left","smileys and emotions"],["1f448_1f3ff","point left","smileys and emotions"],["261d_fe0f","index finger","smileys and emotions"],["261d_1f3fb","index finger","smileys and emotions"],["261d_1f3fc","index finger","smileys and emotions"],["261d_1f3fd","index finger","smileys and emotions"],["261d_1f3fe","index finger","smileys and emotions"],["261d_1f3ff","index finger","smileys and emotions"],["1f446","point up","smileys and emotions"],["1f446_1f3fb","point up","smileys and emotions"],["1f446_1f3fc","point up","smileys and emotions"],["1f446_1f3fd","point up","smileys and emotions"],["1f446_1f3fe","point up","smileys and emotions"],["1f446_1f3ff","point up","smileys and emotions"],["1f447","point down","smileys and emotions"],["1f447_1f3fb","point down","smileys and emotions"],["1f447_1f3fc","point down","smileys and emotions"],["1f447_1f3fd","point down","smileys and emotions"],["1f447_1f3fe","point down","smileys and emotions"],["1f447_1f3ff","point down","smileys and emotions"],["1f595","middle finger","smileys and emotions"],["1f595_1f3fb","middle finger","smileys and emotions"],["1f595_1f3fc","middle finger","smileys and emotions"],["1f595_1f3fd","middle finger","smileys and emotions"],["1f595_1f3fe","middle finger","smileys and emotions"],["1f595_1f3ff","middle finger","smileys and emotions"],["270d_fe0f","writing hand","smileys and emotions"],["270d_1f3fb","writing hand","smileys and emotions"],["270d_1f3fc","writing hand","smileys and emotions"],["270d_1f3fd","writing hand","smileys and emotions"],["270d_1f3fe","writing hand","smileys and emotions"],["270d_1f3ff","writing hand","smileys and emotions"],["1f933","selfie","smileys and emotions"],["1f933_1f3fb","selfie","smileys and emotions"],["1f933_1f3fc","selfie","smileys and emotions"],["1f933_1f3fd","selfie","smileys and emotions"],["1f933_1f3fe","selfie","smileys and emotions"],["1f933_1f3ff","selfie","smileys and emotions"],["1f64f","folded hands please pray hope wish thank you high five","smileys and emotions"],["1f64f_1f3fb","folded hands please pray hope wish thank you high five","smileys and emotions"],["1f64f_1f3fc","folded hands please pray hope wish thank you high five","smileys and emotions"],["1f64f_1f3fd","folded hands please pray hope wish thank you high five","smileys and emotions"],["1f64f_1f3fe","folded hands please pray hope wish thank you high five","smileys and emotions"],["1f64f_1f3ff","folded hands please pray hope wish thank you high five","smileys and emotions"],["1f485","nail care","smileys and emotions"],["1f485_1f3fb","nail care","smileys and emotions"],["1f485_1f3fc","nail care","smileys and emotions"],["1f485_1f3fd","nail care","smileys and emotions"],["1f485_1f3fe","nail care","smileys and emotions"],["1f485_1f3ff","nail care","smileys and emotions"],["1f91d","handshake","smileys and emotions"],["1f91d_1f3fb","handshake","smileys and emotions"],["1faf1_1f3fb_200d_1faf2_1f3fc","handshake","smileys and emotions"],["1faf1_1f3fb_200d_1faf2_1f3fd","handshake","smileys and emotions"],["1faf1_1f3fb_200d_1faf2_1f3fe","handshake","smileys and emotions"],["1faf1_1f3fb_200d_1faf2_1f3ff","handshake","smileys and emotions"],["1faf1_1f3fc_200d_1faf2_1f3fb","handshake","smileys and emotions"],["1f91d_1f3fc","handshake","smileys and emotions"],["1faf1_1f3fc_200d_1faf2_1f3fd","handshake","smileys and emotions"],["1faf1_1f3fc_200d_1faf2_1f3fe","handshake","smileys and emotions"],["1faf1_1f3fc_200d_1faf2_1f3ff","handshake","smileys and emotions"],["1faf1_1f3fd_200d_1faf2_1f3fb","handshake","smileys and emotions"],["1faf1_1f3fd_200d_1faf2_1f3fc","handshake","smileys and emotions"],["1f91d_1f3fd","handshake","smileys and emotions"],["1faf1_1f3fd_200d_1faf2_1f3fe","handshake","smileys and emotions"],["1faf1_1f3fd_200d_1faf2_1f3ff","handshake","smileys and emotions"],["1faf1_1f3fe_200d_1faf2_1f3fb","handshake","smileys and emotions"],["1faf1_1f3fe_200d_1faf2_1f3fc","handshake","smileys and emotions"],["1faf1_1f3fe_200d_1faf2_1f3fd","handshake","smileys and emotions"],["1f91d_1f3fe","handshake","smileys and emotions"],["1faf1_1f3fe_200d_1faf2_1f3ff","handshake","smileys and emotions"],["1faf1_1f3ff_200d_1faf2_1f3fb","handshake","smileys and emotions"],["1faf1_1f3ff_200d_1faf2_1f3fc","handshake","smileys and emotions"],["1faf1_1f3ff_200d_1faf2_1f3fd","handshake","smileys and emotions"],["1faf1_1f3ff_200d_1faf2_1f3fe","handshake","smileys and emotions"],["1f91d_1f3ff","handshake","smileys and emotions"],["1fa82","parachute","people"],["1fac8","hairy creature","people"],["1f483","dancer woman","people"],["1f483_1f3fb","dancer woman","people"],["1f483_1f3fc","dancer woman","people"],["1f483_1f3fd","dancer woman","people"],["1f483_1f3fe","dancer woman","people"],["1f483_1f3ff","dancer woman","people"],["1f490","bouquet flowers","animals and nature"],["1f339","rose","animals and nature"],["1f940","wilted flower","animals and nature"],["1f337","tulip","animals and nature"],["1fab7","lotus","animals and nature"],["1f338","cherry blossom","animals and nature"],["1fabb","hyacinth","animals and nature"],["1f33c","blossom","animals and nature"],["1f342","fallen leaf","animals and nature"],["1f341","maple leaf","animals and nature"],["1f344","mushroom","animals and nature"],["1f33f","herb","animals and nature"],["1f331","plant seed","animals and nature"],["1f343","leaves","animals and nature"],["1f340","luck four leaf clover","animals and nature"],["1f335","cactus","animals and nature"],["1fabe","leafless tree","animals and nature"],["1f332","evergreen tree","animals and nature"],["1faa8","rock","animals and nature"],["1f6d8","debris landslide","animals and nature"],["1f30b","volcano","animals and nature"],["1f3de_fe0f","national park","animals and nature"],["1f305","sunrise","animals and nature"],["1f304","sunrise over mountains","animals and nature"],["1f30a","ocean","animals and nature"],["1f32c_fe0f","wind face","animals and nature"],["2744_fe0f","snowflake winter cold","animals and nature"],["1f300","cyclone","animals and nature"],["1f32a_fe0f","tornado","animals and nature"],["1f308","rainbow","animals and nature"],["1f4a7","droplet","animals and nature"],["2601_fe0f","cloud","animals and nature"],["1f327_fe0f","rain cloud","animals and nature"],["1f329_fe0f","cloud with lightning","animals and nature"],["26c5","partly sunny","animals and nature"],["1fa90","ringed planet","animals and nature"],["1f30d","globe showing Europe Africa","animals and nature"],["1f30e","globe showing Americas","animals and nature"],["1f30f","globe showing Asia Australia","animals and nature"],["1f30c","milky way","animals and nature"],["2604_fe0f","comet","animals and nature"],["1f981","lion face","animals and nature"],["1f43a","wolf","animals and nature"],["1f43b","bear face","animals and nature"],["1f43c","panda","animals and nature"],["1f98a","fox face","animals and nature"],["1f42e","cow face","animals and nature"],["1f984","unicorn","animals and nature"],["1f98e","lizard","animals and nature"],["1f409","dragon","animals and nature"],["1f996","t rex","animals and nature"],["1f995","dinosaur","animals and nature"],["1f422","turtle","animals and nature"],["1f40a","crocodile","animals and nature"],["1f40d","snake","animals and nature"],["1f438","frog","animals and nature"],["1f407","rabbit","animals and nature"],["1f400","rat","animals and nature"],["1f429","poodle","animals and nature"],["1f415","dog","animals and nature"],["1f9ae","guide dog","animals and nature"],["1f415_200d_1f9ba","service dog","animals and nature"],["1f416","pig","animals and nature"],["1f40e","racehorse","animals and nature"],["1facf","donkey","animals and nature"],["1f402","ox","animals and nature"],["1f410","goat","animals and nature"],["1f9a5","sloth","animals and nature"],["1f998","kangaroo","animals and nature"],["1f405","tiger","animals and nature"],["1f412","monkey","animals and nature"],["1f98d","gorilla","animals and nature"],["1f9a7","orangutan","animals and nature"],["1f43f_fe0f","chipmunk","animals and nature"],["1f99d","raccoon","animals and nature"],["1f994","hedgehog","animals and nature"],["1f9a6","otter","animals and nature"],["1f987","bat","animals and nature"],["1f426","bird","animals and nature"],["1f426_200d_2b1b","black bird","animals and nature"],["1f413","rooster","animals and nature"],["1f423","hatching chick","animals and nature"],["1f424","baby chick","animals and nature"],["1f425","hatched chick","animals and nature"],["1f985","eagle","animals and nature"],["1f989","owl","animals and nature"],["1f54a_fe0f","peace dove","animals and nature"],["1fabf","goose","animals and nature"],["1f9a9","flamingo","animals and nature"],["1f99a","peacock","animals and nature"],["1f426_200d_1f525","phoenix","animals and nature"],["1f427","penguin","animals and nature"],["1f9ad","seal","animals and nature"],["1f988","shark","animals and nature"],["1facd","orca","animals and nature"],["1f42c","dolphin","animals and nature"],["1f433","whale","animals and nature"],["1f41f","fish","animals and nature"],["1f421","blowfish","animals and nature"],["1f99e","lobster","animals and nature"],["1f980","crab","animals and nature"],["1f419","octopus","animals and nature"],["1fabc","jellyfish","animals and nature"],["1fae7","bubbles","animals and nature"],["1f982","scorpion","animals and nature"],["1f577_fe0f","spider","animals and nature"],["1f40c","snail","animals and nature"],["1f41c","ant","animals and nature"],["1f997","cricket","animals and nature"],["1f99f","mosquito","animals and nature"],["1fab3","cockroach","animals and nature"],["1fab0","fly","animals and nature"],["1f41d","bee","animals and nature"],["1f41e","lady bug","animals and nature"],["1f98b","butterfly","animals and nature"],["1f41b","bug","animals and nature"],["1fab1","worm","animals and nature"],["1f43e","paw prints","animals and nature"],["1f353","strawberry","food and drink"],["1f352","cherries","food and drink"],["1f34e","red apple","food and drink"],["1f345","tomato","food and drink"],["1f349","watermelon","food and drink"],["1f34a","tangerine orange mandarin","food and drink"],["1f955","carrot","food and drink"],["1f96d","mango","food and drink"],["1f34d","pineapple","food and drink"],["1f33d","ear of corn","food and drink"],["1f34b","lemon","food and drink"],["1f348","melon","food and drink"],["1f350","pear","food and drink"],["1fadb","pea pod","food and drink"],["1f96c","leafy green","food and drink"],["1fad1","bell pepper","food and drink"],["1f95d","kiwi fruit","food and drink"],["1f951","avocado","food and drink"],["1f966","broccoli","food and drink"],["1f952","cucumber","food and drink"],["1fad0","blueberries","food and drink"],["1f347","grapes","food and drink"],["1fadc","root vegetable beet turnip","food and drink"],["1f954","potato","food and drink"],["1f9c5","onion","food and drink"],["1fada","ginger","food and drink"],["1f9c4","garlic","food and drink"],["1fad8","beans","food and drink"],["1f35e","bread","food and drink"],["1f95e","pancakes","food and drink"],["1f373","cooking","food and drink"],["1f9c0","cheese wedge","food and drink"],["1f953","bacon","food and drink"],["1f357","poultry leg","food and drink"],["1f354","hamburger","food and drink"],["1f32d","hot dog","food and drink"],["1f968","pretzel","food and drink"],["1f355","pizza","food and drink"],["1f32e","taco","food and drink"],["1f32f","burrito","food and drink"],["1f35d","spaghetti","food and drink"],["1f957","green salad","food and drink"],["1f35c","steaming bowl","food and drink"],["1f362","oden","food and drink"],["1f361","dango","food and drink"],["1f368","ice cream","food and drink"],["1f366","soft ice cream","food and drink"],["1f967","pie","food and drink"],["1f369","doughnut","food and drink"],["1f36a","cookie","food and drink"],["1f9c2","salt","food and drink"],["1f37f","popcorn","food and drink"],["1f9cb","bubble tea milk tea","food and drink"],["1f9c3","beverage box","food and drink"],["1f37c","baby bottle","food and drink"],["1f375","teacup without handle","food and drink"],["2615","hot beverage","food and drink"],["1fad6","teapot","food and drink"],["1f9c9","mate","food and drink"],["1f37b","clinking beer mugs","food and drink"],["1f942","clinking glasses","food and drink"],["1f37e","bottle with popping cork","food and drink"],["1f377","wine glass","food and drink"],["1fad7","pour","food and drink"],["1f379","tropical drink","food and drink"],["1f962","chopsticks","food and drink"],["1f37d_fe0f","fork and knife with plate","food and drink"],["1f6d1","stop sign","travel and places"],["1f6a7","construction","travel and places"],["1f6a8","police car light","travel and places"],["26fd","fuel pump","travel and places"],["1f6df","ring buoy","travel and places"],["2693","anchor","travel and places"],["1f6a6","vertical traffic light","travel and places"],["1f6b2","bicycle","travel and places"],["1f3cd_fe0f","motorcycle","travel and places"],["1f697","automobile","travel and places"],["1f69a","delivery truck","travel and places"],["1f69c","tractor","travel and places"],["1f3ce_fe0f","racing car","travel and places"],["1f695","taxi","travel and places"],["1f68c","bus","travel and places"],["1f682","locomotive","travel and places"],["26f5","sailboat","travel and places"],["1f6f6","canoe","travel and places"],["1f6f8","flying saucer","travel and places"],["1f680","rocket","travel and places"],["2708_fe0f","airplane","travel and places"],["1f6eb","airplane departure","travel and places"],["1f6ec","airplane arrival","travel and places"],["1f3a2","roller coaster","travel and places"],["1f3a1","ferris wheel","travel and places"],["1f3a0","carousel horse","travel and places"],["1f5ff","moai","travel and places"],["1f3da_fe0f","derelict house","travel and places"],["1f3e0","house","travel and places"],["1f3d5_fe0f","camping","travel and places"],["1f307","sunset","travel and places"],["1f388","balloon","activities and events"],["1f382","birthday cake","activities and events"],["1f381","wrapped gift","activities and events"],["1f386","fireworks","activities and events"],["1fa94","diya lamp","activities and events"],["1fa85","piñata","activities and events"],["1faa9","mirror ball disco ball","activities and events"],["1f947","gold medal 1st place medal","activities and events"],["1f948","silver medal 2nd place medal","activities and events"],["1f949","bronze medal 3rd place medal","activities and events"],["1f3c6","trophy","activities and events"],["26bd","soccer ball","activities and events"],["26be","baseball","activities and events"],["1f94e","softball","activities and events"],["1f3c0","basketball","activities and events"],["1f3c9","rugby football","activities and events"],["1f3be","tennis","activities and events"],["1f3f8","badminton","activities and events"],["1f94d","lacrosse","activities and events"],["1f3cf","cricket game","activities and events"],["1f3d1","field hockey","activities and events"],["1f3d2","ice hockey","activities and events"],["1f3bf","skis","activities and events"],["26f8_fe0f","ice skate","activities and events"],["1f6fc","roller skates","activities and events"],["1fa70","ballet shoes","activities and events"],["1f6f9","skateboard","activities and events"],["26f3","flag in hole","activities and events"],["1f3af","direct hit target","activities and events"],["1f94f","flying disc","activities and events"],["1fa83","boomerang","activities and events"],["1fa81","kite","activities and events"],["1f3a3","fishing pole","activities and events"],["1f94b","martial arts uniform","activities and events"],["1f3b1","8 ball","activities and events"],["1f3d3","ping pong","activities and events"],["1f3b3","bowling","activities and events"],["265f_fe0f","chess pawn","activities and events"],["1f3b2","die","activities and events"],["1f3b0","slot machine","activities and events"],["1fa84","wand","activities and events"],["1f4f7","camera","activities and events"],["1f4f8","camera flash","activities and events"],["1fadf","splatter","activities and events"],["1f3b7","saxophone","activities and events"],["1f3ba","trumpet","activities and events"],["1fa8a","trombone","activities and events"],["1f3b8","guitar","activities and events"],["1fa95","banjo","activities and events"],["1f3bb","violin","activities and events"],["1fa89","harp","activities and events"],["1f941","drum","activities and events"],["1fa87","maracas","activities and events"],["1f4fa","television","activities and events"],["1f39e_fe0f","film","activities and events"],["1f3ac","clapper","activities and events"],["1f3ad","performing arts","activities and events"],["1f39f_fe0f","admission tickets","activities and events"],["1f4df","pager","objects"],["1f50c","electric plug","objects"],["1f50b","battery full","objects"],["1faab","battery low","objects"],["1f4bf","optical disk","objects"],["1f4bb","laptop computer","objects"],["1f5a8_fe0f","printer","objects"],["1fa8e","treasure","objects"],["1fa99","coin","objects"],["1f48e","gem stone","objects"],["1f4b8","money with wings","objects"],["2696_fe0f","balance scale","objects"],["1f6d2","shopping cart","objects"],["1f4a1","light bulb","objects"],["1f9f9","broom","objects"],["1f9e6","socks","objects"],["1f393","graduation cap","objects"],["1f451","crown","objects"],["1f48d","ring","objects"],["1faad","fan","objects"],["2602_fe0f","umbrella","objects"],["1f460","high heeled shoe","objects"],["1f45f","running shoe","objects"],["1f321_fe0f","thermometer","objects"],["1fa7a","stethoscope","objects"],["1f6e0_fe0f","hammer and wrench","objects"],["1fa8f","shovel dig","objects"],["2699_fe0f","gear","objects"],["26d3_fe0f_200d_1f4a5","broken chain","objects"],["26d3_fe0f","chains","objects"],["1f587_fe0f","linked paperclips","objects"],["2702_fe0f","scissors","objects"],["270f_fe0f","pencil","objects"],["1f4da","books","objects"],["1f4ca","bar chart","objects"],["1f4c8","chart increasing","objects"],["1f4c9","chart decreasing","objects"],["1f5d1_fe0f","wastebasket","objects"],["1f4e6","package","objects"],["1f5f3_fe0f","ballot box","objects"],["23f0","alarm clock","objects"],["231b","hourglass done","objects"],["23f3","hourglass not done","objects"],["1f6ce_fe0f","bellhop bell","objects"],["1f514","bell","objects"],["1f4e3","megaphone","objects"],["1f50e","magnifying glass tilted right","objects"],["1f52e","crystal ball","objects"],["1f4a3","bomb","objects"],["1faa4","mouse trap","objects"],["1f512","locked","objects"],["2660_fe0f","spade","symbols"],["2648","Aries","symbols"],["2649","Taurus","symbols"],["264a","Gemini","symbols"],["264b","Cancer","symbols"],["264c","Leo","symbols"],["264d","Virgo","symbols"],["264e","Libra","symbols"],["264f","Scorpio","symbols"],["2650","Sagittarius","symbols"],["2651","Capricorn","symbols"],["2652","Aquarius","symbols"],["2653","Pisces","symbols"],["26ce","Ophiuchus","symbols"],["1f5ef_fe0f","anger bubble","symbols"],["1f4ac","speech bubble","symbols"],["2757","exclamation exclamation mark","symbols"],["2753","question question mark ?","symbols"],["2049_fe0f","exclamation question mark !?","symbols"],["203c_fe0f","exclamation double !!","symbols"],["274c","cross mark x","symbols"],["1f198","sos","symbols"],["2668_fe0f","hot springs","symbols"],["1f4f4","phone off","symbols"],["2622_fe0f","radioactive","symbols"],["2623_fe0f","biohazard","symbols"],["26a0_fe0f","warning","symbols"],["2705","check mark check mark green","symbols"],["1f195","new","symbols"],["1f193","free","symbols"],["1f199","up!","symbols"],["1f197","ok button","symbols"],["1f192","cool","symbols"],["1f6ae","litter","symbols"],["262e_fe0f","peace symbol","symbols"],["262f_fe0f","yin yang","symbols"],["267e_fe0f","infinity","symbols"],["1f3b6","musical notes","symbols"],["2795","plus sign +","symbols"],["a9_fe0f","copyright","symbols"],["ae_fe0f","registered","symbols"],["2122_fe0f","trade mark","symbols"],["1f3c1","chequered flag","flags"],["1f6a9","triangular flag","flags"],["1f3f4","black flag","flags"],["1f3f3_fe0f","white flag","flags"]]
|
package/lib/estudio/diretor.js
CHANGED
|
@@ -288,6 +288,7 @@ REGRAS QUE SEPARAM UM VÍDEO BOM DE UM GENÉRICO:
|
|
|
288
288
|
5. RITMO VARIADO. Cenas de durações diferentes e transições diferentes. Tudo em fade parece slide.
|
|
289
289
|
5b. NADA DE GAVETA. Não existe tema pronto, layout pronto nem fundo pronto: é você que decide a cor, a tipografia e a composição DESTE vídeo. Dois vídeos seus sobre assuntos diferentes não podem sair parecidos.
|
|
290
290
|
6. MÍDIA COM PROPÓSITO. Só peça imagem ou logo quando ela PROVA algo. Diga o termo de busca de verdade ("painel solar em telhado residencial", não "imagem legal").
|
|
291
|
+
6b. CADA FRASE PEDE UMA ROTA DE IMAGEM, nesta ordem: número ou citação → nenhuma (a tipografia é a imagem); fala do produto → a tela ou a logo dele; coisa concreta → o vídeo DELA, com a busca no substantivo ("espresso cup", não a frase inteira); ideia abstrata → textura que se move. A imagem entra logo DEPOIS da palavra que a nomeia, nunca antes.
|
|
291
292
|
7. MOVIMENTO. Em cada cena diga em "chaves" o movimento principal — é ele que tira a cara de apresentação parada.
|
|
292
293
|
8. CÂMERA COM PARCIMÔNIA. Movimento de quadro em UMA cena a cada duas ou três ("camera": "nenhuma" nas outras): o que dá ritmo é alternar cena parada e cena que se move. Em cena com foto de fundo, prefira "aproximar" ou "empurrar".
|
|
293
294
|
9. UMA VOZ OU DUAS. Se o pedido fala em dois narradores, duas vozes, diálogo, conversa ou entrevista, escreva como DIÁLOGO: dê nome a cada um em "vozes" (com vozes diferentes) e diga em cada cena quem fala ("falante"). Com uma voz só, deixe "vozes" e "falante" de fora.
|
package/lib/estudio/estilo.js
CHANGED
|
@@ -33,7 +33,8 @@ const APELIDOS = { motion: 'gerativo', generativo: 'gerativo', kinetic: 'gerativ
|
|
|
33
33
|
tipografico: 'gerativo', 'tipográfico': 'gerativo', animacao: 'gerativo', 'animação': 'gerativo',
|
|
34
34
|
classico: 'motion', 'clássico': 'motion', 'motion-classico': 'motion', motion3d: 'motion',
|
|
35
35
|
absurdo: 'hibrido', misto: 'hibrido', mix: 'hibrido', 'híbrido': 'hibrido', limpo: 'motion', explainer: 'vox', editorial: 'vox', brand: 'marca', branding: 'marca', 'brand-reveal': 'marca', minimalista: 'fluido', minimal: 'fluido', clean: 'fluido', apple: 'fluido', launch: 'lancamento', 'lançamento': 'lancamento', produto: 'lancamento',
|
|
36
|
-
personagens: 'personagem', boneco: 'personagem', bonecos: 'personagem', conversa: 'personagem', dialogo: 'personagem', 'diálogo': 'personagem', podcast: 'personagem', gravado: 'personagem'
|
|
36
|
+
personagens: 'personagem', boneco: 'personagem', bonecos: 'personagem', conversa: 'personagem', dialogo: 'personagem', 'diálogo': 'personagem', podcast: 'personagem', gravado: 'personagem',
|
|
37
|
+
voxel: 'personagem', '3d': 'personagem', animacao3d: 'personagem', 'animação3d': 'personagem', mascote: 'personagem' };
|
|
37
38
|
|
|
38
39
|
const PEDE_FLUIDO = /\bfluid[oa]\b|minimalista|\bminimal\b|\bclean\b|\bapple\b/i;
|
|
39
40
|
const PEDE_MOTION = /\bmotion\b|anima[çc][ãa]o|animad[oa]/i;
|
|
@@ -43,7 +44,10 @@ const PEDE_LANCAMENTO = /lan[çc]amento|\blaunch|\bsaas\b|produto novo|apresenta
|
|
|
43
44
|
/* "Uma animação em 3D do Claude falando com o usuário... como se fosse gravado"
|
|
44
45
|
(10/10): personagem, boneco, avatar, conversa ou podcast em 3D vira o vídeo
|
|
45
46
|
GRAVADO em 3D (personagem.js). O 3D de produto continua no gerativo. */
|
|
46
|
-
|
|
47
|
+
/* "Animação 3D" sem objeto é o personagem em blocos (11/10, a referência do
|
|
48
|
+
Joel: bonecos voxel com render de cinema). O 3D de PRODUTO ("o fone
|
|
49
|
+
girando em 3D") continua no gerativo. */
|
|
50
|
+
const PEDE_PERSONAGEM = /anima[çc][ãa]o (em )?3\s?d|\b3\s?d animad|\bvoxel|minecraft|estilo (de )?blocos?|personage(m|ns)|\bbonec[oa]s?\b|\bavatar|mascote falando|\bpodcast\b|entrevista|(conversa|di[aá]logo|falando|explicando)[^.]{0,60}\b3\s?d\b|\b3\s?d\b[^.]{0,60}(conversa|di[aá]logo|falando|explicando|pessoa|gente)/i;
|
|
47
51
|
const PEDE_IMPACTO = /an[uú]nci|reels?|divulg|promo|lan[çc]a|vend|campanha|convite|inscri/i;
|
|
48
52
|
|
|
49
53
|
const normal = (e) => {
|
package/lib/estudio/falantes.js
CHANGED
|
@@ -35,22 +35,46 @@ function normalizar(roteiro) {
|
|
|
35
35
|
return r;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
/* A VOZ PELO GÊNERO (11/10, "os personagens falam com vozes diferentes em
|
|
39
|
+
cada cena"): o par antigo dava a primeira voz livre a quem falasse
|
|
40
|
+
primeiro — a Ana saía com a voz do Antonio. Agora o NOME decide o gênero e
|
|
41
|
+
cada falante ganha uma voz do Gemini só dele, do começo ao fim do vídeo.
|
|
42
|
+
O que a IA disse (roteiro.vozes, personagens.x.genero) manda. */
|
|
43
|
+
const MASCULINAS = ['Charon', 'Puck', 'Orus', 'Fenrir'];
|
|
44
|
+
const FEMININAS = ['Kore', 'Aoede', 'Leda', 'Zephyr'];
|
|
45
|
+
const ROBO = /\b(ia|ai|assistente|robo|robô|bot|claude|gpt|chatgpt|gemini|primo|primocode|copilot|agente|mascote)\b/i;
|
|
46
|
+
const NOMES_FEMININOS = /^(beatriz|raquel|isabel|carmen|ester|ines|inês|alice|ruth|nicole|lis|luz|rose|ingrid|kelly|jennifer|michelle|rachel|karen|manu|gabi|bel|mel|vitoria|vitória|yasmin|jasmin|carol|isis|ísis|iris|íris|liz|mirian|miriam|ellen|helen|lourdes|mercedes|dolores|socorro|aline|daiane|tais|taís|thais|thaís|lilian|vivian|suellen|jaqueline|simone|rosangela|rosângela|irene|lucimar|nair|jussara|joice|joyce|cris|dani|fer|ju|lu|bia|mãe|mae|vó|vo|avó|avo|tia|dona|senhora|professora|menina|garota|mulher|rainha|princesa|moça|moca)$/;
|
|
47
|
+
const NOMES_MASCULINOS_EM_A = /^(luca|lucca|joshua|nicola|andrea|elias|matias|tobias|jonas|lucas|thomas|tomas|tomás|bruna?x|zuma)$/;
|
|
48
|
+
function generoDe(nome, pedido = {}) {
|
|
49
|
+
const g = String((pedido && pedido.genero) || '').toLowerCase();
|
|
50
|
+
if (/^(f|fem|feminin|mulher)/.test(g)) return 'f';
|
|
51
|
+
if (/^(m|masc|homem)/.test(g)) return 'm';
|
|
52
|
+
const n = String(nome || '').trim().toLowerCase().split(/\s+/)[0];
|
|
53
|
+
if (ROBO.test(n)) return 'robo';
|
|
54
|
+
if (NOMES_FEMININOS.test(n)) return 'f';
|
|
55
|
+
if (NOMES_MASCULINOS_EM_A.test(n)) return 'm';
|
|
56
|
+
return /a$/.test(n) ? 'f' : 'm';
|
|
57
|
+
}
|
|
58
|
+
|
|
38
59
|
/**
|
|
39
60
|
* A voz de cada parte, na ordem. Com falante e voz no mapa, a do mapa; com
|
|
40
|
-
* falante FORA do mapa
|
|
41
|
-
*
|
|
42
|
-
* sem falante, a `padrao` (roteiro.voz).
|
|
61
|
+
* falante FORA do mapa, uma voz do Gemini do gênero do nome que ainda não
|
|
62
|
+
* fala neste vídeo; sem falante, a `padrao` (roteiro.voz).
|
|
43
63
|
*/
|
|
44
64
|
function vozesDasPartes(partes, roteiro = {}, padrao = '') {
|
|
45
65
|
const mapa = { ...((roteiro && roteiro.vozes) || {}) };
|
|
46
66
|
const ocupadas = new Set(Object.values(mapa).map((v) => String(v).toLowerCase()));
|
|
47
67
|
if (padrao) ocupadas.add(String(padrao).toLowerCase());
|
|
68
|
+
const pedidos = (roteiro && roteiro.personagens) || {};
|
|
69
|
+
const livre = (lista, k) => lista.find((v) => !ocupadas.has(v.toLowerCase())) || lista[k % lista.length];
|
|
48
70
|
return (partes || []).map((pt) => {
|
|
49
71
|
const f = nomeFalante(pt && pt.falante);
|
|
50
72
|
if (!f) return padrao || '';
|
|
51
73
|
if (!mapa[f]) {
|
|
52
|
-
|
|
53
|
-
|
|
74
|
+
const g = generoDe(f, pedidos[f] || pedidos[Object.keys(pedidos).find((k) => k.toLowerCase() === f)] || {});
|
|
75
|
+
// O mascote tem a voz mais leve das masculinas (Puck), se estiver livre.
|
|
76
|
+
mapa[f] = g === 'f' ? livre(FEMININAS, Object.keys(mapa).length) : g === 'robo' && !ocupadas.has('puck') ? 'Puck' : livre(MASCULINAS, Object.keys(mapa).length);
|
|
77
|
+
ocupadas.add(mapa[f].toLowerCase());
|
|
54
78
|
}
|
|
55
79
|
return mapa[f];
|
|
56
80
|
});
|
|
@@ -94,4 +118,4 @@ async function narrarPorFalante(lista, mp3, { narrarUm, juntar }) {
|
|
|
94
118
|
return { ok: true, voz: [...new Set(feitos.map((x) => x.v.voz).filter(Boolean))].join(' + '), segundos: Math.round(antes * 1000) / 1000, partes, falantes: grupos.length };
|
|
95
119
|
}
|
|
96
120
|
|
|
97
|
-
module.exports = { normalizar, vozesDasPartes, narrarPorFalante, PAR };
|
|
121
|
+
module.exports = { generoDe, MASCULINAS, FEMININAS, normalizar, vozesDasPartes, narrarPorFalante, PAR };
|
package/lib/estudio/gerativo.js
CHANGED
|
@@ -1180,6 +1180,14 @@ function partituraDe({ roteiro, largura = 1920, altura = 1080, tempos = [], icon
|
|
|
1180
1180
|
if (/^(nenhum|nenhuma|nada|none)$/i.test(pedido)) continue;
|
|
1181
1181
|
if (ABSTRATOS.includes(pedido)) { b.heroiPedido = pedido; continue; }
|
|
1182
1182
|
if (ICONES3D.has(pedido)) { porIcone(b, pedido); ultimoIcone = bi; continue; }
|
|
1183
|
+
/* Da BIBLIOTECA (colecao.js, 11/10): o ícone 3D renderizado do Fluent
|
|
1184
|
+
("fluent3d:hot beverage") ou a animação pronta do Noto ("noto:1f525").
|
|
1185
|
+
O arquivo já desceu (index.js); chega aqui como {png} ou {lottie}. */
|
|
1186
|
+
if (/^(fluent3d|noto):/i.test(pedido) && icones[pedido] && typeof icones[pedido] === 'object') {
|
|
1187
|
+
porIcone(b, pedido, { ...icones[pedido] });
|
|
1188
|
+
ultimoIcone = bi;
|
|
1189
|
+
continue;
|
|
1190
|
+
}
|
|
1183
1191
|
if (/^[a-z0-9-]+:[a-z0-9-]+$/i.test(pedido) && icones[pedido]) {
|
|
1184
1192
|
porIcone(b, pedido, { svg: svgLimpo(icones[pedido]), cor: b.cores.acento, cor2: b.cores.texto });
|
|
1185
1193
|
ultimoIcone = bi;
|
package/lib/estudio/hibrido.js
CHANGED
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
* traduzir(roteiro) qualquer roteiro (vox, motion, composição) vira os
|
|
22
22
|
* tipos do cinema; o que o cinema não usa (a fonte, o
|
|
23
23
|
* destaque) fica guardado por parte.
|
|
24
|
+
* rotaDaParte(parte, …) qual imagem a frase pede (4 rotas) e em que palavra
|
|
25
|
+
* o corte se ancora (b-roll-finder, Arthur 17/09).
|
|
24
26
|
* termosDeBusca(roteiro) o que procurar de b-roll para cada parte.
|
|
25
27
|
* enfeitar(plano, …) o kit por cima do plano que o cinema montou.
|
|
26
28
|
*/
|
|
@@ -36,6 +38,65 @@ const limpo = (x) => String(x || '').replace(/\s+/g, ' ').trim();
|
|
|
36
38
|
const BUSCA_PADRAO = ['technology abstract light', 'people working on laptop', 'hands typing keyboard close up',
|
|
37
39
|
'data center servers', 'city night timelapse', 'team meeting office', 'developer code screen', 'futuristic digital network'];
|
|
38
40
|
|
|
41
|
+
/* AS 4 ROTAS DO B-ROLL (do b-roll-finder): a frase diz qual imagem pede, e
|
|
42
|
+
a primeira regra que casa decide. O roteiro manda: `rota` e `busca` na parte.
|
|
43
|
+
tipografia número, gráfico, citação → sem imagem: o texto é a imagem
|
|
44
|
+
produto a frase fala da marca/produto → a tela/foto da marca
|
|
45
|
+
literal uma coisa concreta ("café") → o vídeo de banco DELA
|
|
46
|
+
abstrato ideia que teria de ser desenhada → textura que se move
|
|
47
|
+
O termo sai da PALAVRA-ÂNCORA, não da frase inteira; e o clipe troca 0,2 s
|
|
48
|
+
DEPOIS dela — "atrasado parece intenção, adiantado parece erro". */
|
|
49
|
+
const ROTAS = ['tipografia', 'produto', 'literal', 'abstrato'];
|
|
50
|
+
const ATRASO_ANCORA = require('./edicao.js').DEPOIS_DA_PALAVRA;
|
|
51
|
+
const PRODUTO = /^(app|aplicativ|ferrament|painel|dashboard|plataform|site|terminal|cli|sistema|interface|software|agente)/;
|
|
52
|
+
/* As COISAS que se filmam: substantivo concreto → o termo do banco, em inglês.
|
|
53
|
+
O ícone da edição (edicao.iconeDe) casa verbo também ("começa" → foguete),
|
|
54
|
+
bom para emoji, ruim para b-roll literal; aqui só entra o que tem cara. */
|
|
55
|
+
const COISAS = [
|
|
56
|
+
[['cafe'], 'coffee cup morning'], [['cachorro', 'cao'], 'dog'], [['gato'], 'cat'], [['casa', 'lar'], 'modern house'],
|
|
57
|
+
[['carro'], 'car driving road'], [['cidade', 'rua'], 'city street people'], [['mar', 'praia', 'oceano'], 'ocean waves'],
|
|
58
|
+
[['escritorio', 'reuniao'], 'team meeting office'], [['mao', 'maos'], 'hands close up'], [['teclado', 'digit'], 'hands typing keyboard close up'],
|
|
59
|
+
[['computador', 'notebook', 'laptop'], 'laptop on desk'], [['codigo', 'programa'], 'developer code screen'], [['celular', 'telefone'], 'smartphone in hand'],
|
|
60
|
+
[['livro', 'aula', 'escola'], 'library books'], [['musica'], 'music concert'], [['pessoa', 'equipe', 'cliente', 'gente'], 'people working together'],
|
|
61
|
+
[['servidor', 'nuvem'], 'data center servers'], [['dinheiro'], 'money cash'], [['relogio'], 'clock ticking'],
|
|
62
|
+
];
|
|
63
|
+
const coisaDe = (limpo) => { for (const [raizes, termo] of COISAS) if (raizes.some((r) => (r.length <= 3 ? limpo === r : limpo.startsWith(r)))) return termo; return null; };
|
|
64
|
+
const ABSTRATO = ['abstract light texture', 'ink in water slow motion', 'bokeh lights dark background', 'smoke texture dark'];
|
|
65
|
+
|
|
66
|
+
/** A rota e a âncora de uma parte. `palavras`: [{texto, de, ate}] da voz (ou só o texto). */
|
|
67
|
+
function rotaDaParte(parte, palavras, { marca = null, i = 0 } = {}) {
|
|
68
|
+
const p = parte || {};
|
|
69
|
+
const ed = require('./edicao.js');
|
|
70
|
+
const ws = (palavras && palavras.length ? palavras : String(p.fala || p.texto || p.titulo || '').split(/\s+/).filter(Boolean).map((texto) => ({ texto })));
|
|
71
|
+
const limpa = (x) => String(x || '').normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
72
|
+
const achar = (alvo) => { const a = limpa(String(alvo || '').split(/\s+/)[0]); return a ? ws.find((w) => limpa(w.texto) === a) || null : null; };
|
|
73
|
+
// A palavra que carrega a frase: a mais longa que não é vazia ("confiança", não "um").
|
|
74
|
+
const forte = () => ws.reduce((f, w) => (ed.peso(w.texto) && limpa(w.texto).length > (f ? limpa(f.texto).length : 0) ? w : f), null);
|
|
75
|
+
const tipo = p.tipoOriginal || p.tipo || '';
|
|
76
|
+
let r;
|
|
77
|
+
if (ROTAS.includes(p.rota)) r = { rota: p.rota, palavra: null };
|
|
78
|
+
else if (['numero', 'grafico', 'citacao', 'numeros'].includes(tipo)) r = { rota: 'tipografia', palavra: null };
|
|
79
|
+
else {
|
|
80
|
+
const e = ed.rotaDeApoio(ws, { marca });
|
|
81
|
+
const prod = ws.find((w) => ed.peso(w.texto) && PRODUTO.test(limpa(w.texto)));
|
|
82
|
+
const coisa = ws.find((w) => ed.peso(w.texto) && coisaDe(limpa(w.texto)));
|
|
83
|
+
if (e.rota === 'marca' || prod) r = { rota: 'produto', palavra: e.rota === 'marca' ? e.palavra : prod, termo: 'software interface on laptop screen' };
|
|
84
|
+
else if (e.rota === 'numero') r = { rota: 'tipografia', palavra: e.palavra };
|
|
85
|
+
else if (coisa) r = { rota: 'literal', palavra: coisa, termo: coisaDe(limpa(coisa.texto)) };
|
|
86
|
+
else r = { rota: p.busca ? 'literal' : 'abstrato', palavra: forte(), termo: ABSTRATO[i % ABSTRATO.length] };
|
|
87
|
+
}
|
|
88
|
+
// A âncora: a do roteiro, a palavra-tese, ou a que a regra achou.
|
|
89
|
+
r.palavra = achar(p.ancora) || r.palavra || achar(p.destaque) || forte();
|
|
90
|
+
if (r.rota === 'tipografia') r.termo = null;
|
|
91
|
+
else if (p.busca) r.termo = String(p.busca);
|
|
92
|
+
return r;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Quando o clipe troca, no tempo da voz: 0,2 s depois da âncora. null sem tempo. */
|
|
96
|
+
function tempoDaAncora(palavra) {
|
|
97
|
+
return palavra && Number.isFinite(palavra.de) ? r2(palavra.de + ATRASO_ANCORA) : null;
|
|
98
|
+
}
|
|
99
|
+
|
|
39
100
|
/** O roteiro de qualquer estilo → o roteiro do cinema. Devolve {roteiro, extras}. */
|
|
40
101
|
function traduzir(roteiro) {
|
|
41
102
|
const partes = (roteiro && roteiro.partes) || [];
|
|
@@ -71,12 +132,16 @@ function traduzir(roteiro) {
|
|
|
71
132
|
else if (tipo === 'cta' || tipo === 'logo' || tipo === 'fim') q = { tipo: 'final', linhas: [p.titulo || p.texto, p.link].filter(Boolean).map(limpo), ...base };
|
|
72
133
|
else q = { tipo: 'montagem', linhas: [p.titulo || p.texto || p.fala].filter(Boolean).map(limpo), ...base };
|
|
73
134
|
saida.push(q);
|
|
74
|
-
extras.push({ tipoOriginal: tipo, fonte: tipo === 'abertura' && p.sub ? p.sub : (p.fonte || (tipo === 'citacao' ? p.autor : '')), autor: p.autor || '', busca: p.busca || ''
|
|
135
|
+
extras.push({ tipoOriginal: tipo, fonte: tipo === 'abertura' && p.sub ? p.sub : (p.fonte || (tipo === 'citacao' ? p.autor : '')), autor: p.autor || '', busca: p.busca || '',
|
|
136
|
+
...(p.rota ? { rota: p.rota } : {}), ...(p.ancora ? { ancora: p.ancora } : {}) });
|
|
75
137
|
});
|
|
76
138
|
return { roteiro: { ...roteiro, partes: saida, estilo: 'hibrido' }, extras };
|
|
77
139
|
}
|
|
78
140
|
|
|
79
|
-
|
|
141
|
+
/* A parte com o que o roteiro original disse dela (o tipo, a busca, a rota). */
|
|
142
|
+
const comExtras = (p, ex) => ({ ...p, ...(ex ? { tipoOriginal: ex.tipoOriginal, busca: ex.busca || p.busca, rota: ex.rota || p.rota, ancora: ex.ancora || p.ancora } : {}) });
|
|
143
|
+
|
|
144
|
+
/** O que procurar de b-roll para cada parte: o termo da rota dela, a busca do roteiro, ou o padrão. */
|
|
80
145
|
function termosDeBusca(roteiro, extras = []) {
|
|
81
146
|
const global = [].concat(roteiro.busca || []).filter(Boolean);
|
|
82
147
|
// Escopo fechado: só os termos da pessoa, nunca o padrão genérico.
|
|
@@ -84,11 +149,20 @@ function termosDeBusca(roteiro, extras = []) {
|
|
|
84
149
|
const lista = global.length ? global : fechado ? [] : BUSCA_PADRAO;
|
|
85
150
|
const termos = new Set();
|
|
86
151
|
(roteiro.partes || []).forEach((p, i) => {
|
|
87
|
-
const
|
|
88
|
-
|
|
152
|
+
const q = comExtras(p, extras[i]);
|
|
153
|
+
const r = rotaDaParte(q, null, { marca: roteiro.marca && roteiro.marca.nome, i });
|
|
154
|
+
/* Escopo fechado: só a busca que o roteiro deu à parte. O termo da rota sai
|
|
155
|
+
do dicionário (textura, tela de app, e o literal: "cachorro" → "dog") e
|
|
156
|
+
furava o escopo da pessoa (revisão do #99). */
|
|
157
|
+
if (r.termo && (!fechado || q.busca)) termos.add(r.termo);
|
|
89
158
|
});
|
|
90
|
-
|
|
91
|
-
|
|
159
|
+
/* O corte em 8 guarda lugar para a busca global do roteiro (no fechado, é o
|
|
160
|
+
escopo da pessoa): as frases vinham antes e a empurravam para fora
|
|
161
|
+
(revisão do #99). O padrão genérico é só enchimento, esse pode cair. */
|
|
162
|
+
const fixos = global.slice(0, 8);
|
|
163
|
+
const frases = [...termos].filter((t) => !fixos.includes(t)).slice(0, 8 - fixos.length);
|
|
164
|
+
const resto = global.length ? [] : lista.filter((t) => !termos.has(t));
|
|
165
|
+
return [...frases, ...fixos, ...resto].slice(0, 8);
|
|
92
166
|
}
|
|
93
167
|
|
|
94
168
|
/* A câmera de cada cena do cinema: empurra e desliza, alternando o lado. A
|
|
@@ -109,7 +183,7 @@ function camera(d, i, deitado, forte) {
|
|
|
109
183
|
/* SEM CARA DE IA (05/10): o HUD (cantos, timecode, fps, rótulos nas bordas)
|
|
110
184
|
e as partículas eram exatamente a lista do "ruim" que o Joel juntou. Agora
|
|
111
185
|
só entram quando o roteiro pede: roteiro.hud === true, roteiro.particulas === true. */
|
|
112
|
-
function enfeitar(plano, { extras = [], partes = [], marca = {}, largura, altura, hud = false, particulas = false } = {}) {
|
|
186
|
+
function enfeitar(plano, { extras = [], partes = [], marca = {}, largura, altura, hud = false, particulas = false, tempos = null, fortes = {}, fotos = [] } = {}) {
|
|
113
187
|
if (!plano || !Array.isArray(plano.cenas)) return plano;
|
|
114
188
|
const W = largura || (plano.formato && plano.formato.largura) || 1920;
|
|
115
189
|
const H = altura || (plano.formato && plano.formato.altura) || 1080;
|
|
@@ -126,6 +200,7 @@ function enfeitar(plano, { extras = [], partes = [], marca = {}, largura, altura
|
|
|
126
200
|
const n = p.tipo === 'depoimento' ? Math.max(1, (p.clipes || []).length) : 1;
|
|
127
201
|
for (let q = 0; q < n; q++) parteDaCena.push(i);
|
|
128
202
|
});
|
|
203
|
+
if (tempos) ancorar(plano, { extras, partes, marca, tempos, fortes, fotos, parteDaCena });
|
|
129
204
|
plano.cenas.forEach((cena, c) => {
|
|
130
205
|
const iParte = parteDaCena[c] != null ? parteDaCena[c] : c;
|
|
131
206
|
const ex = extras[iParte] || {};
|
|
@@ -166,4 +241,65 @@ function enfeitar(plano, { extras = [], partes = [], marca = {}, largura, altura
|
|
|
166
241
|
return plano;
|
|
167
242
|
}
|
|
168
243
|
|
|
169
|
-
|
|
244
|
+
/* O B-ROLL NA PALAVRA: a cena de montagem (ou de frase) troca para o clipe da
|
|
245
|
+
rota dela 0,2 s depois da âncora — antes, segue a montagem do cinema. Rota
|
|
246
|
+
tipografia tira as fotos: o número já é a imagem. O tempo da cena é o do
|
|
247
|
+
cinema: a voz entra 0,2 s depois do corte (off). */
|
|
248
|
+
function ancorar(plano, { extras, partes, marca, tempos, fortes, fotos, parteDaCena }) {
|
|
249
|
+
const cinema = require('./cinema.js');
|
|
250
|
+
const off = 0.2;
|
|
251
|
+
let narrI = 0;
|
|
252
|
+
const tempoDe = partes.map((p, i) => (p.tipo !== 'depoimento' && cinema.falaDe(p) !== '' && !(p.falaForte && fortes[i]) ? tempos[narrI++] || null : null));
|
|
253
|
+
const ehFoto = (e) => (e.tipo === 'imagem' || e.tipo === 'video' || (e.tipo === 'forma' && e.fundo && e.fundo.tipo === 'gradiente')) && e.largura === '100%';
|
|
254
|
+
const plan = [], vez = [];
|
|
255
|
+
plano.cenas.forEach((cena, c) => {
|
|
256
|
+
const i = parteDaCena[c] != null ? parteDaCena[c] : c;
|
|
257
|
+
const p = partes[i], tp = tempoDe[i];
|
|
258
|
+
if (!p || !['montagem', 'frase', 'numeros'].includes(p.tipo) || (parteDaCena.indexOf(i) !== c)) return;
|
|
259
|
+
const r = rotaDaParte(comExtras(p, extras[i]), tp && tp.palavras, { marca: marca.nome, i });
|
|
260
|
+
plan.push({ parte: i, rota: r.rota, ancora: r.palavra ? r.palavra.texto : null, termo: r.termo || null });
|
|
261
|
+
/* Produto: a tela DA MARCA (o print do acervo) antes do vídeo de banco. Antes
|
|
262
|
+
a regra perguntava se o alt não era termo de busca, mas o conjunto tinha o
|
|
263
|
+
alt de todas as fotos: nunca casava, e o painel ficava de fora (revisão do #99). */
|
|
264
|
+
const f = r.rota === 'tipografia' ? null : r.rota === 'produto' ? fotos.find((x) => x.cat === 'tela' && !x.banco) || fotos.find((x) => x.alt === r.termo)
|
|
265
|
+
: fotos.find((x) => x.alt === r.termo && x.tipo === 'video') || fotos.find((x) => x.alt === r.termo);
|
|
266
|
+
const ta = tp ? tempoDaAncora(r.palavra) : null;
|
|
267
|
+
const de = ta == null ? null : r2(off + ta - tp.de);
|
|
268
|
+
vez.push({ cena, r, f: f && de != null && (cena.duracao || 2) - de >= 0.8 ? f : null, de }); // sem 0,8 s para ver, fica a montagem
|
|
269
|
+
});
|
|
270
|
+
/* O clipe de uma frase não aparece ANTES da palavra dela (nem na montagem
|
|
271
|
+
de outra cena): quem vê o café antes de ouvir "café" sente o erro. */
|
|
272
|
+
const reservado = new Set(vez.filter((x) => x.f).map((x) => x.f.src));
|
|
273
|
+
const livres = fotos.filter((x) => !reservado.has(x.src));
|
|
274
|
+
let n = 0;
|
|
275
|
+
for (const { cena, r, f, de } of vez) {
|
|
276
|
+
let els = cena.elementos || [];
|
|
277
|
+
if (r.rota === 'tipografia') { cena.elementos = els.filter((e) => !ehFoto(e)); continue; }
|
|
278
|
+
for (const e of els) if ((e.tipo === 'imagem' || e.tipo === 'video') && reservado.has(e.src) && livres.length) {
|
|
279
|
+
const g = livres[n++ % livres.length];
|
|
280
|
+
Object.assign(e, { tipo: g.tipo === 'video' ? 'video' : 'imagem', src: g.src, ...(g.tipo === 'video' ? { volume: 0 } : {}) });
|
|
281
|
+
}
|
|
282
|
+
if (!f) continue;
|
|
283
|
+
const d = cena.duracao || 2;
|
|
284
|
+
els = els.filter((e) => !(ehFoto(e) && e.de >= de));
|
|
285
|
+
for (const e of els) if (ehFoto(e) && (e.ate == null || e.ate > de)) e.ate = de;
|
|
286
|
+
// Um resto de foto de um instante vira um piscar: a foto de antes cobre o buraco.
|
|
287
|
+
for (const e of els.filter((x) => ehFoto(x) && x.ate - (x.de || 0) < 0.25)) {
|
|
288
|
+
for (const x of els) if (x !== e && ehFoto(x) && x.ate === e.de && x.tipo === e.tipo) x.ate = e.ate;
|
|
289
|
+
els = els.filter((x) => x !== e);
|
|
290
|
+
}
|
|
291
|
+
const v = f.tipo === 'video';
|
|
292
|
+
const vida = r2(d - de);
|
|
293
|
+
const novo = [{ tipo: v ? 'video' : 'imagem', src: f.src, ...(v ? { volume: 0 } : {}), x: 0, y: 0, largura: '100%', altura: '100%', ajuste: 'cover', de, ate: r2(d), broll: r.rota,
|
|
294
|
+
anima: { escala: [{ t: 0, v: 1.12 }, { t: vida, v: 1.02, e: 'linear' }] } },
|
|
295
|
+
{ tipo: 'forma', forma: 'retangulo', x: 0, y: 0, largura: '100%', altura: '100%', de, ate: r2(d),
|
|
296
|
+
fundo: { tipo: 'gradiente', cores: ['rgba(7,7,10,0.35)', 'rgba(7,7,10,0.5)', 'rgba(7,7,10,0.75)'], angulo: 180 } }];
|
|
297
|
+
const k = els.findIndex((e) => e.tipo === 'texto' || e.tipo === 'kit');
|
|
298
|
+
els.splice(k < 0 ? els.length : k, 0, ...novo);
|
|
299
|
+
cena.elementos = els;
|
|
300
|
+
}
|
|
301
|
+
plano.broll = plan;
|
|
302
|
+
return plan;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
module.exports = { traduzir, termosDeBusca, enfeitar, rotaDaParte, tempoDaAncora, ancorar, ROTAS, ATRASO_ANCORA, BUSCA_PADRAO };
|