@nodaro/sdk 2.29.0 → 2.32.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 +31 -0
- package/dist/chunk-2DZWWIJ4.cjs +32 -0
- package/dist/chunk-2DZWWIJ4.cjs.map +1 -0
- package/dist/chunk-34PU2DAT.cjs +118 -0
- package/dist/chunk-34PU2DAT.cjs.map +1 -0
- package/dist/chunk-37Y5QAVA.js +3 -0
- package/dist/chunk-37Y5QAVA.js.map +1 -0
- package/dist/chunk-37YCKZX4.cjs +4 -0
- package/dist/chunk-37YCKZX4.cjs.map +1 -0
- package/dist/chunk-3B47IHB3.cjs +65 -0
- package/dist/chunk-3B47IHB3.cjs.map +1 -0
- package/dist/chunk-3BELHJBN.cjs +4 -0
- package/dist/chunk-3BELHJBN.cjs.map +1 -0
- package/dist/chunk-3PPSGM5X.js +3 -0
- package/dist/chunk-3PPSGM5X.js.map +1 -0
- package/dist/chunk-3QBH2VE2.cjs +80 -0
- package/dist/chunk-3QBH2VE2.cjs.map +1 -0
- package/dist/chunk-3QFTP5P5.js +102 -0
- package/dist/chunk-3QFTP5P5.js.map +1 -0
- package/dist/chunk-43FVH6LJ.cjs +123 -0
- package/dist/chunk-43FVH6LJ.cjs.map +1 -0
- package/dist/chunk-43NO4SGC.cjs +4 -0
- package/dist/chunk-43NO4SGC.cjs.map +1 -0
- package/dist/chunk-45CK55BH.cjs +4 -0
- package/dist/chunk-45CK55BH.cjs.map +1 -0
- package/dist/chunk-4CXB7RA6.js +104 -0
- package/dist/chunk-4CXB7RA6.js.map +1 -0
- package/dist/chunk-4NLVBYMW.js +280 -0
- package/dist/chunk-4NLVBYMW.js.map +1 -0
- package/dist/chunk-4WRDR4GN.js +102 -0
- package/dist/chunk-4WRDR4GN.js.map +1 -0
- package/dist/chunk-4WWSHV5G.cjs +4 -0
- package/dist/chunk-4WWSHV5G.cjs.map +1 -0
- package/dist/chunk-53SXNN3A.js +80 -0
- package/dist/chunk-53SXNN3A.js.map +1 -0
- package/dist/chunk-5ALNFATQ.cjs +27 -0
- package/dist/chunk-5ALNFATQ.cjs.map +1 -0
- package/dist/chunk-5UQNMNUE.cjs +4 -0
- package/dist/chunk-5UQNMNUE.cjs.map +1 -0
- package/dist/chunk-65E3JBFZ.js +52 -0
- package/dist/chunk-65E3JBFZ.js.map +1 -0
- package/dist/chunk-6ECW23GA.js +214 -0
- package/dist/chunk-6ECW23GA.js.map +1 -0
- package/dist/chunk-6JFNBAKV.js +3 -0
- package/dist/chunk-6JFNBAKV.js.map +1 -0
- package/dist/chunk-6OC6OKLY.cjs +4 -0
- package/dist/chunk-6OC6OKLY.cjs.map +1 -0
- package/dist/chunk-6OGGJQVA.js +25 -0
- package/dist/chunk-6OGGJQVA.js.map +1 -0
- package/dist/chunk-7A7HYFGM.js +3 -0
- package/dist/chunk-7A7HYFGM.js.map +1 -0
- package/dist/chunk-7CK6I4CT.cjs +16 -0
- package/dist/chunk-7CK6I4CT.cjs.map +1 -0
- package/dist/chunk-7LSFG2AF.js +194 -0
- package/dist/chunk-7LSFG2AF.js.map +1 -0
- package/dist/chunk-7MYKT2L4.cjs +4 -0
- package/dist/chunk-7MYKT2L4.cjs.map +1 -0
- package/dist/chunk-7QOCWJKD.cjs +25 -0
- package/dist/chunk-7QOCWJKD.cjs.map +1 -0
- package/dist/chunk-A2ZAFAWC.cjs +4 -0
- package/dist/chunk-A2ZAFAWC.cjs.map +1 -0
- package/dist/chunk-A3S55XGF.cjs +54 -0
- package/dist/chunk-A3S55XGF.cjs.map +1 -0
- package/dist/chunk-A3THLBFG.js +3 -0
- package/dist/chunk-A3THLBFG.js.map +1 -0
- package/dist/chunk-AJVSMNPZ.js +78 -0
- package/dist/chunk-AJVSMNPZ.js.map +1 -0
- package/dist/chunk-ALSLZG3U.js +124 -0
- package/dist/chunk-ALSLZG3U.js.map +1 -0
- package/dist/chunk-ALUUBPDG.cjs +4 -0
- package/dist/chunk-ALUUBPDG.cjs.map +1 -0
- package/dist/chunk-AO3W45LT.cjs +4 -0
- package/dist/chunk-AO3W45LT.cjs.map +1 -0
- package/dist/chunk-AUDHV3OE.js +3 -0
- package/dist/chunk-AUDHV3OE.js.map +1 -0
- package/dist/chunk-B7RG6AUQ.cjs +216 -0
- package/dist/chunk-B7RG6AUQ.cjs.map +1 -0
- package/dist/chunk-BAL576G2.cjs +4 -0
- package/dist/chunk-BAL576G2.cjs.map +1 -0
- package/dist/chunk-BKP6F2IX.js +3 -0
- package/dist/chunk-BKP6F2IX.js.map +1 -0
- package/dist/chunk-BLA44UCM.js +32 -0
- package/dist/chunk-BLA44UCM.js.map +1 -0
- package/dist/chunk-BPWUWUZ3.cjs +20 -0
- package/dist/chunk-BPWUWUZ3.cjs.map +1 -0
- package/dist/chunk-BRV7Z4GD.cjs +17 -0
- package/dist/chunk-BRV7Z4GD.cjs.map +1 -0
- package/dist/chunk-BU5A6K4C.js +122 -0
- package/dist/chunk-BU5A6K4C.js.map +1 -0
- package/dist/chunk-C22RJDW3.js +3 -0
- package/dist/chunk-C22RJDW3.js.map +1 -0
- package/dist/chunk-CGNVHN4V.js +3 -0
- package/dist/chunk-CGNVHN4V.js.map +1 -0
- package/dist/chunk-CJFIOVBA.js +3 -0
- package/dist/chunk-CJFIOVBA.js.map +1 -0
- package/dist/chunk-CJLLIVSB.cjs +4 -0
- package/dist/chunk-CJLLIVSB.cjs.map +1 -0
- package/dist/chunk-CK3AMMSC.js +194 -0
- package/dist/chunk-CK3AMMSC.js.map +1 -0
- package/dist/chunk-COCKKMNP.cjs +205 -0
- package/dist/chunk-COCKKMNP.cjs.map +1 -0
- package/dist/chunk-CR5E2SF3.cjs +212 -0
- package/dist/chunk-CR5E2SF3.cjs.map +1 -0
- package/dist/chunk-CRCPRZFN.js +3 -0
- package/dist/chunk-CRCPRZFN.js.map +1 -0
- package/dist/chunk-CYRFD6KR.cjs +4 -0
- package/dist/chunk-CYRFD6KR.cjs.map +1 -0
- package/dist/chunk-D3PW7AHZ.js +3 -0
- package/dist/chunk-D3PW7AHZ.js.map +1 -0
- package/dist/chunk-DKEYSJCE.cjs +82 -0
- package/dist/chunk-DKEYSJCE.cjs.map +1 -0
- package/dist/chunk-DPSMVOM3.js +15 -0
- package/dist/chunk-DPSMVOM3.js.map +1 -0
- package/dist/chunk-E2ZXHS6E.js +20 -0
- package/dist/chunk-E2ZXHS6E.js.map +1 -0
- package/dist/chunk-E37CVHWW.js +33 -0
- package/dist/chunk-E37CVHWW.js.map +1 -0
- package/dist/chunk-E5BM4BLO.js +78 -0
- package/dist/chunk-E5BM4BLO.js.map +1 -0
- package/dist/chunk-EHRWTYGR.cjs +4 -0
- package/dist/chunk-EHRWTYGR.cjs.map +1 -0
- package/dist/chunk-EJSGJDZY.js +212 -0
- package/dist/chunk-EJSGJDZY.js.map +1 -0
- package/dist/chunk-ELSOVJPF.js +3 -0
- package/dist/chunk-ELSOVJPF.js.map +1 -0
- package/dist/chunk-ERLXU47J.js +29 -0
- package/dist/chunk-ERLXU47J.js.map +1 -0
- package/dist/chunk-ES2E65HT.js +3 -0
- package/dist/chunk-ES2E65HT.js.map +1 -0
- package/dist/chunk-EXLAHZKF.js +3 -0
- package/dist/chunk-EXLAHZKF.js.map +1 -0
- package/dist/chunk-FB3S2FON.cjs +233 -0
- package/dist/chunk-FB3S2FON.cjs.map +1 -0
- package/dist/chunk-FHEYAW5H.js +3 -0
- package/dist/chunk-FHEYAW5H.js.map +1 -0
- package/dist/chunk-GA4LZZKQ.cjs +104 -0
- package/dist/chunk-GA4LZZKQ.cjs.map +1 -0
- package/dist/chunk-GAZJ2PA3.js +3 -0
- package/dist/chunk-GAZJ2PA3.js.map +1 -0
- package/dist/chunk-GB6C5OEZ.cjs +32 -0
- package/dist/chunk-GB6C5OEZ.cjs.map +1 -0
- package/dist/chunk-GB724HW2.cjs +106 -0
- package/dist/chunk-GB724HW2.cjs.map +1 -0
- package/dist/chunk-GD24ZRFD.js +3 -0
- package/dist/chunk-GD24ZRFD.js.map +1 -0
- package/dist/chunk-GI7LROLL.cjs +4 -0
- package/dist/chunk-GI7LROLL.cjs.map +1 -0
- package/dist/chunk-GRFLPEM2.cjs +16 -0
- package/dist/chunk-GRFLPEM2.cjs.map +1 -0
- package/dist/chunk-GVIFLUYZ.cjs +40 -0
- package/dist/chunk-GVIFLUYZ.cjs.map +1 -0
- package/dist/chunk-GWCOKNST.js +228 -0
- package/dist/chunk-GWCOKNST.js.map +1 -0
- package/dist/chunk-H7VQTG4M.js +35 -0
- package/dist/chunk-H7VQTG4M.js.map +1 -0
- package/dist/chunk-HAKYPZLB.cjs +242 -0
- package/dist/chunk-HAKYPZLB.cjs.map +1 -0
- package/dist/chunk-HFBR6G36.js +3 -0
- package/dist/chunk-HFBR6G36.js.map +1 -0
- package/dist/chunk-HGCVWOGK.cjs +209 -0
- package/dist/chunk-HGCVWOGK.cjs.map +1 -0
- package/dist/chunk-HLHR3R4P.js +3 -0
- package/dist/chunk-HLHR3R4P.js.map +1 -0
- package/dist/chunk-HRXXGGSJ.js +3 -0
- package/dist/chunk-HRXXGGSJ.js.map +1 -0
- package/dist/chunk-I3TYBAOX.js +3 -0
- package/dist/chunk-I3TYBAOX.js.map +1 -0
- package/dist/chunk-I4A5VJRL.js +352 -0
- package/dist/chunk-I4A5VJRL.js.map +1 -0
- package/dist/chunk-I6CXC345.js +102 -0
- package/dist/chunk-I6CXC345.js.map +1 -0
- package/dist/chunk-IGOPUMEX.cjs +4 -0
- package/dist/chunk-IGOPUMEX.cjs.map +1 -0
- package/dist/chunk-IHKIYVZQ.js +30 -0
- package/dist/chunk-IHKIYVZQ.js.map +1 -0
- package/dist/chunk-IMC2M5YM.cjs +12 -0
- package/dist/chunk-IMC2M5YM.cjs.map +1 -0
- package/dist/chunk-IQ6KWSXP.js +3 -0
- package/dist/chunk-IQ6KWSXP.js.map +1 -0
- package/dist/chunk-IS26FJO7.cjs +4 -0
- package/dist/chunk-IS26FJO7.cjs.map +1 -0
- package/dist/chunk-J4WFSKY6.js +50 -0
- package/dist/chunk-J4WFSKY6.js.map +1 -0
- package/dist/chunk-J5LGGCAS.cjs +126 -0
- package/dist/chunk-J5LGGCAS.cjs.map +1 -0
- package/dist/chunk-JDEZHITT.js +43 -0
- package/dist/chunk-JDEZHITT.js.map +1 -0
- package/dist/chunk-JGS6YBDW.js +260 -0
- package/dist/chunk-JGS6YBDW.js.map +1 -0
- package/dist/chunk-JMOKD6ZP.js +46 -0
- package/dist/chunk-JMOKD6ZP.js.map +1 -0
- package/dist/chunk-JOX5BJ6K.cjs +4 -0
- package/dist/chunk-JOX5BJ6K.cjs.map +1 -0
- package/dist/chunk-JTAW54UM.js +116 -0
- package/dist/chunk-JTAW54UM.js.map +1 -0
- package/dist/chunk-K4RQOSJH.js +203 -0
- package/dist/chunk-K4RQOSJH.js.map +1 -0
- package/dist/chunk-KAIE6WJB.cjs +4 -0
- package/dist/chunk-KAIE6WJB.cjs.map +1 -0
- package/dist/chunk-KEDPGWIK.cjs +4 -0
- package/dist/chunk-KEDPGWIK.cjs.map +1 -0
- package/dist/chunk-KG4R454Z.js +18 -0
- package/dist/chunk-KG4R454Z.js.map +1 -0
- package/dist/chunk-KGKCAGRD.cjs +22 -0
- package/dist/chunk-KGKCAGRD.cjs.map +1 -0
- package/dist/chunk-KNMW722T.cjs +48 -0
- package/dist/chunk-KNMW722T.cjs.map +1 -0
- package/dist/chunk-KTTL7BND.cjs +4 -0
- package/dist/chunk-KTTL7BND.cjs.map +1 -0
- package/dist/chunk-KXEWTYS4.cjs +80 -0
- package/dist/chunk-KXEWTYS4.cjs.map +1 -0
- package/dist/chunk-KZQKFBRN.js +3 -0
- package/dist/chunk-KZQKFBRN.js.map +1 -0
- package/dist/chunk-LAWYFC4G.cjs +37 -0
- package/dist/chunk-LAWYFC4G.cjs.map +1 -0
- package/dist/chunk-LHRQXWI5.js +3 -0
- package/dist/chunk-LHRQXWI5.js.map +1 -0
- package/dist/chunk-LKH5M44B.cjs +114 -0
- package/dist/chunk-LKH5M44B.cjs.map +1 -0
- package/dist/chunk-LLNNHLCE.cjs +4 -0
- package/dist/chunk-LLNNHLCE.cjs.map +1 -0
- package/dist/chunk-LWZLWSXD.cjs +4 -0
- package/dist/chunk-LWZLWSXD.cjs.map +1 -0
- package/dist/chunk-M6Y5TOYE.js +3 -0
- package/dist/chunk-M6Y5TOYE.js.map +1 -0
- package/dist/chunk-MBFUMWI5.cjs +31 -0
- package/dist/chunk-MBFUMWI5.cjs.map +1 -0
- package/dist/chunk-MEKI37WI.js +3 -0
- package/dist/chunk-MEKI37WI.js.map +1 -0
- package/dist/chunk-MQ74AKA2.cjs +200 -0
- package/dist/chunk-MQ74AKA2.cjs.map +1 -0
- package/dist/chunk-N6GLZOE4.cjs +282 -0
- package/dist/chunk-N6GLZOE4.cjs.map +1 -0
- package/dist/chunk-NBVARNVA.cjs +38 -0
- package/dist/chunk-NBVARNVA.cjs.map +1 -0
- package/dist/chunk-NCCBS6GU.js +42 -0
- package/dist/chunk-NCCBS6GU.js.map +1 -0
- package/dist/chunk-NGKODS3J.cjs +52 -0
- package/dist/chunk-NGKODS3J.cjs.map +1 -0
- package/dist/chunk-NJVSKUL2.cjs +4 -0
- package/dist/chunk-NJVSKUL2.cjs.map +1 -0
- package/dist/chunk-NLQQHJ25.cjs +104 -0
- package/dist/chunk-NLQQHJ25.cjs.map +1 -0
- package/dist/chunk-NNHWH7ER.js +181 -0
- package/dist/chunk-NNHWH7ER.js.map +1 -0
- package/dist/chunk-NX67YIF3.js +3 -0
- package/dist/chunk-NX67YIF3.js.map +1 -0
- package/dist/chunk-OA6FWYZF.cjs +4 -0
- package/dist/chunk-OA6FWYZF.cjs.map +1 -0
- package/dist/chunk-OJDBSKC2.js +3 -0
- package/dist/chunk-OJDBSKC2.js.map +1 -0
- package/dist/chunk-OLPA44QJ.js +3 -0
- package/dist/chunk-OLPA44QJ.js.map +1 -0
- package/dist/chunk-OMH7ATOQ.js +3 -0
- package/dist/chunk-OMH7ATOQ.js.map +1 -0
- package/dist/chunk-OPR4TULG.js +3 -0
- package/dist/chunk-OPR4TULG.js.map +1 -0
- package/dist/chunk-OSX2GVZ2.cjs +34 -0
- package/dist/chunk-OSX2GVZ2.cjs.map +1 -0
- package/dist/chunk-OXQKE5EG.cjs +282 -0
- package/dist/chunk-OXQKE5EG.cjs.map +1 -0
- package/dist/chunk-P6E4QDJN.js +30 -0
- package/dist/chunk-P6E4QDJN.js.map +1 -0
- package/dist/chunk-PEMLIAPZ.cjs +64 -0
- package/dist/chunk-PEMLIAPZ.cjs.map +1 -0
- package/dist/chunk-PGYQ754I.js +3 -0
- package/dist/chunk-PGYQ754I.js.map +1 -0
- package/dist/chunk-PHEA6FVQ.js +184 -0
- package/dist/chunk-PHEA6FVQ.js.map +1 -0
- package/dist/chunk-PMTM26LL.js +3 -0
- package/dist/chunk-PMTM26LL.js.map +1 -0
- package/dist/chunk-PY4OEKNX.cjs +4 -0
- package/dist/chunk-PY4OEKNX.cjs.map +1 -0
- package/dist/chunk-PZS2EXDR.cjs +4 -0
- package/dist/chunk-PZS2EXDR.cjs.map +1 -0
- package/dist/chunk-QRHJEITQ.cjs +4 -0
- package/dist/chunk-QRHJEITQ.cjs.map +1 -0
- package/dist/chunk-QUFU5RJ7.cjs +4 -0
- package/dist/chunk-QUFU5RJ7.cjs.map +1 -0
- package/dist/chunk-QVQCKOBM.js +3 -0
- package/dist/chunk-QVQCKOBM.js.map +1 -0
- package/dist/chunk-R63TTR35.cjs +200 -0
- package/dist/chunk-R63TTR35.cjs.map +1 -0
- package/dist/chunk-RA42NMWV.cjs +4 -0
- package/dist/chunk-RA42NMWV.cjs.map +1 -0
- package/dist/chunk-RAZN6C5R.cjs +12 -0
- package/dist/chunk-RAZN6C5R.cjs.map +1 -0
- package/dist/chunk-RHETJOUM.cjs +4 -0
- package/dist/chunk-RHETJOUM.cjs.map +1 -0
- package/dist/chunk-RJIJVVXS.js +3 -0
- package/dist/chunk-RJIJVVXS.js.map +1 -0
- package/dist/chunk-RKVRCNMB.js +3 -0
- package/dist/chunk-RKVRCNMB.js.map +1 -0
- package/dist/chunk-S7JQKNVT.cjs +187 -0
- package/dist/chunk-S7JQKNVT.cjs.map +1 -0
- package/dist/chunk-SBV5MWEL.cjs +53 -0
- package/dist/chunk-SBV5MWEL.cjs.map +1 -0
- package/dist/chunk-SFB4YLCS.js +121 -0
- package/dist/chunk-SFB4YLCS.js.map +1 -0
- package/dist/chunk-SLPD47SR.js +3 -0
- package/dist/chunk-SLPD47SR.js.map +1 -0
- package/dist/chunk-SS3B6PHT.cjs +35 -0
- package/dist/chunk-SS3B6PHT.cjs.map +1 -0
- package/dist/chunk-SUCHGNYT.js +3 -0
- package/dist/chunk-SUCHGNYT.js.map +1 -0
- package/dist/chunk-SYVNY3AH.cjs +44 -0
- package/dist/chunk-SYVNY3AH.cjs.map +1 -0
- package/dist/chunk-T3SYREY4.js +29 -0
- package/dist/chunk-T3SYREY4.js.map +1 -0
- package/dist/chunk-T7N7DFQJ.js +198 -0
- package/dist/chunk-T7N7DFQJ.js.map +1 -0
- package/dist/chunk-TRCENAIY.cjs +4 -0
- package/dist/chunk-TRCENAIY.cjs.map +1 -0
- package/dist/chunk-TVENC6PH.js +186 -0
- package/dist/chunk-TVENC6PH.js.map +1 -0
- package/dist/chunk-U4T3Z3K7.cjs +325 -0
- package/dist/chunk-U4T3Z3K7.cjs.map +1 -0
- package/dist/chunk-UIFFNTUX.js +3 -0
- package/dist/chunk-UIFFNTUX.js.map +1 -0
- package/dist/chunk-V4GPQ6Y2.js +3 -0
- package/dist/chunk-V4GPQ6Y2.js.map +1 -0
- package/dist/chunk-VGTRKXF2.js +93 -0
- package/dist/chunk-VGTRKXF2.js.map +1 -0
- package/dist/chunk-VGWOIWRQ.cjs +202 -0
- package/dist/chunk-VGWOIWRQ.cjs.map +1 -0
- package/dist/chunk-VLCNNA76.cjs +4 -0
- package/dist/chunk-VLCNNA76.cjs.map +1 -0
- package/dist/chunk-VPAUN75Q.js +3 -0
- package/dist/chunk-VPAUN75Q.js.map +1 -0
- package/dist/chunk-VT237QF2.js +3 -0
- package/dist/chunk-VT237QF2.js.map +1 -0
- package/dist/chunk-VV4TZG5S.js +321 -0
- package/dist/chunk-VV4TZG5S.js.map +1 -0
- package/dist/chunk-VYK6MBL4.cjs +4 -0
- package/dist/chunk-VYK6MBL4.cjs.map +1 -0
- package/dist/chunk-W33CKW6Q.cjs +4 -0
- package/dist/chunk-W33CKW6Q.cjs.map +1 -0
- package/dist/chunk-W5VHATSR.cjs +31 -0
- package/dist/chunk-W5VHATSR.cjs.map +1 -0
- package/dist/chunk-WEQWU2IC.js +34 -0
- package/dist/chunk-WEQWU2IC.js.map +1 -0
- package/dist/chunk-WK4VXPPZ.cjs +104 -0
- package/dist/chunk-WK4VXPPZ.cjs.map +1 -0
- package/dist/chunk-WSA4LMWR.cjs +96 -0
- package/dist/chunk-WSA4LMWR.cjs.map +1 -0
- package/dist/chunk-WUIEZ6Z4.cjs +360 -0
- package/dist/chunk-WUIEZ6Z4.cjs.map +1 -0
- package/dist/chunk-WUKIJJG2.cjs +45 -0
- package/dist/chunk-WUKIJJG2.cjs.map +1 -0
- package/dist/chunk-WVFAQBS7.js +29 -0
- package/dist/chunk-WVFAQBS7.js.map +1 -0
- package/dist/chunk-X7RDNMN7.js +3 -0
- package/dist/chunk-X7RDNMN7.js.map +1 -0
- package/dist/chunk-X7XP5WBP.cjs +4 -0
- package/dist/chunk-X7XP5WBP.cjs.map +1 -0
- package/dist/chunk-XWKNE6DH.cjs +4 -0
- package/dist/chunk-XWKNE6DH.cjs.map +1 -0
- package/dist/chunk-Y6V6CBY5.js +23 -0
- package/dist/chunk-Y6V6CBY5.js.map +1 -0
- package/dist/chunk-Y6VDCZPB.js +62 -0
- package/dist/chunk-Y6VDCZPB.js.map +1 -0
- package/dist/chunk-YDRXBRW2.cjs +184 -0
- package/dist/chunk-YDRXBRW2.cjs.map +1 -0
- package/dist/chunk-YFS2LMG4.cjs +124 -0
- package/dist/chunk-YFS2LMG4.cjs.map +1 -0
- package/dist/chunk-YN6CBIIB.js +63 -0
- package/dist/chunk-YN6CBIIB.js.map +1 -0
- package/dist/chunk-YOJ2XNQX.cjs +4 -0
- package/dist/chunk-YOJ2XNQX.cjs.map +1 -0
- package/dist/chunk-YOOZB4RL.js +3 -0
- package/dist/chunk-YOOZB4RL.js.map +1 -0
- package/dist/chunk-YVU2M7MI.js +34 -0
- package/dist/chunk-YVU2M7MI.js.map +1 -0
- package/dist/chunk-YXBZRB5H.cjs +4 -0
- package/dist/chunk-YXBZRB5H.cjs.map +1 -0
- package/dist/chunk-Z3ZKFI2M.js +43 -0
- package/dist/chunk-Z3ZKFI2M.js.map +1 -0
- package/dist/chunk-Z5GLY4R3.js +112 -0
- package/dist/chunk-Z5GLY4R3.js.map +1 -0
- package/dist/chunk-Z5OMWAQX.js +3 -0
- package/dist/chunk-Z5OMWAQX.js.map +1 -0
- package/dist/chunk-Z7LGWNI7.js +38 -0
- package/dist/chunk-Z7LGWNI7.js.map +1 -0
- package/dist/chunk-ZCWKX4V6.cjs +38 -0
- package/dist/chunk-ZCWKX4V6.cjs.map +1 -0
- package/dist/chunk-ZE5RISBZ.cjs +4 -0
- package/dist/chunk-ZE5RISBZ.cjs.map +1 -0
- package/dist/chunk-ZH4F2P2G.js +3 -0
- package/dist/chunk-ZH4F2P2G.js.map +1 -0
- package/dist/chunk-ZJGFLJ2Z.cjs +4 -0
- package/dist/chunk-ZJGFLJ2Z.cjs.map +1 -0
- package/dist/chunk-ZKBHD27K.cjs +4 -0
- package/dist/chunk-ZKBHD27K.cjs.map +1 -0
- package/dist/chunk-ZQPLRNKX.cjs +4 -0
- package/dist/chunk-ZQPLRNKX.cjs.map +1 -0
- package/dist/chunk-ZQQABQMH.cjs +31 -0
- package/dist/chunk-ZQQABQMH.cjs.map +1 -0
- package/dist/chunk-ZXJQSFIA.js +200 -0
- package/dist/chunk-ZXJQSFIA.js.map +1 -0
- package/dist/chunk-ZYPH2FPT.js +3 -0
- package/dist/chunk-ZYPH2FPT.js.map +1 -0
- package/dist/developer-apps-zSQXWmEG.d.cts +294 -0
- package/dist/developer-apps-zSQXWmEG.d.ts +294 -0
- package/dist/entries/apps.cjs +13 -0
- package/dist/entries/apps.cjs.map +1 -0
- package/dist/entries/apps.d.cts +300 -0
- package/dist/entries/apps.d.ts +300 -0
- package/dist/entries/apps.js +4 -0
- package/dist/entries/apps.js.map +1 -0
- package/dist/entries/audio.cjs +13 -0
- package/dist/entries/audio.cjs.map +1 -0
- package/dist/entries/audio.d.cts +200 -0
- package/dist/entries/audio.d.ts +200 -0
- package/dist/entries/audio.js +4 -0
- package/dist/entries/audio.js.map +1 -0
- package/dist/entries/billing.cjs +13 -0
- package/dist/entries/billing.cjs.map +1 -0
- package/dist/entries/billing.d.cts +208 -0
- package/dist/entries/billing.d.ts +208 -0
- package/dist/entries/billing.js +4 -0
- package/dist/entries/billing.js.map +1 -0
- package/dist/entries/catalogs.cjs +13 -0
- package/dist/entries/catalogs.cjs.map +1 -0
- package/dist/entries/catalogs.d.cts +82 -0
- package/dist/entries/catalogs.d.ts +82 -0
- package/dist/entries/catalogs.js +4 -0
- package/dist/entries/catalogs.js.map +1 -0
- package/dist/entries/characters.cjs +45 -0
- package/dist/entries/characters.cjs.map +1 -0
- package/dist/entries/characters.d.cts +741 -0
- package/dist/entries/characters.d.ts +741 -0
- package/dist/entries/characters.js +4 -0
- package/dist/entries/characters.js.map +1 -0
- package/dist/entries/client.cjs +78 -0
- package/dist/entries/client.cjs.map +1 -0
- package/dist/entries/client.d.cts +147 -0
- package/dist/entries/client.d.ts +147 -0
- package/dist/entries/client.js +53 -0
- package/dist/entries/client.js.map +1 -0
- package/dist/entries/collections.cjs +13 -0
- package/dist/entries/collections.cjs.map +1 -0
- package/dist/entries/collections.d.cts +77 -0
- package/dist/entries/collections.d.ts +77 -0
- package/dist/entries/collections.js +4 -0
- package/dist/entries/collections.js.map +1 -0
- package/dist/entries/community.cjs +13 -0
- package/dist/entries/community.cjs.map +1 -0
- package/dist/entries/community.d.cts +87 -0
- package/dist/entries/community.d.ts +87 -0
- package/dist/entries/community.js +4 -0
- package/dist/entries/community.js.map +1 -0
- package/dist/entries/competitors.cjs +13 -0
- package/dist/entries/competitors.cjs.map +1 -0
- package/dist/entries/competitors.d.cts +96 -0
- package/dist/entries/competitors.d.ts +96 -0
- package/dist/entries/competitors.js +4 -0
- package/dist/entries/competitors.js.map +1 -0
- package/dist/entries/copilot.cjs +15 -0
- package/dist/entries/copilot.cjs.map +1 -0
- package/dist/entries/copilot.d.cts +296 -0
- package/dist/entries/copilot.d.ts +296 -0
- package/dist/entries/copilot.js +6 -0
- package/dist/entries/copilot.js.map +1 -0
- package/dist/entries/core.cjs +26 -0
- package/dist/entries/core.cjs.map +1 -0
- package/dist/entries/core.d.cts +3 -0
- package/dist/entries/core.d.ts +3 -0
- package/dist/entries/core.js +5 -0
- package/dist/entries/core.js.map +1 -0
- package/dist/entries/creatures.cjs +29 -0
- package/dist/entries/creatures.cjs.map +1 -0
- package/dist/entries/creatures.d.cts +594 -0
- package/dist/entries/creatures.d.ts +594 -0
- package/dist/entries/creatures.js +4 -0
- package/dist/entries/creatures.js.map +1 -0
- package/dist/entries/credits.cjs +13 -0
- package/dist/entries/credits.cjs.map +1 -0
- package/dist/entries/credits.d.cts +237 -0
- package/dist/entries/credits.d.ts +237 -0
- package/dist/entries/credits.js +4 -0
- package/dist/entries/credits.js.map +1 -0
- package/dist/entries/developer-apps.cjs +13 -0
- package/dist/entries/developer-apps.cjs.map +1 -0
- package/dist/entries/developer-apps.d.cts +3 -0
- package/dist/entries/developer-apps.d.ts +3 -0
- package/dist/entries/developer-apps.js +4 -0
- package/dist/entries/developer-apps.js.map +1 -0
- package/dist/entries/edit.cjs +34 -0
- package/dist/entries/edit.cjs.map +1 -0
- package/dist/entries/edit.d.cts +705 -0
- package/dist/entries/edit.d.ts +705 -0
- package/dist/entries/edit.js +5 -0
- package/dist/entries/edit.js.map +1 -0
- package/dist/entries/errors.cjs +93 -0
- package/dist/entries/errors.cjs.map +1 -0
- package/dist/entries/errors.d.cts +338 -0
- package/dist/entries/errors.d.ts +338 -0
- package/dist/entries/errors.js +4 -0
- package/dist/entries/errors.js.map +1 -0
- package/dist/entries/executions.cjs +21 -0
- package/dist/entries/executions.cjs.map +1 -0
- package/dist/entries/executions.d.cts +120 -0
- package/dist/entries/executions.d.ts +120 -0
- package/dist/entries/executions.js +4 -0
- package/dist/entries/executions.js.map +1 -0
- package/dist/entries/gallery.cjs +13 -0
- package/dist/entries/gallery.cjs.map +1 -0
- package/dist/entries/gallery.d.cts +85 -0
- package/dist/entries/gallery.d.ts +85 -0
- package/dist/entries/gallery.js +4 -0
- package/dist/entries/gallery.js.map +1 -0
- package/dist/entries/jobs.cjs +13 -0
- package/dist/entries/jobs.cjs.map +1 -0
- package/dist/entries/jobs.d.cts +252 -0
- package/dist/entries/jobs.d.ts +252 -0
- package/dist/entries/jobs.js +4 -0
- package/dist/entries/jobs.js.map +1 -0
- package/dist/entries/library.cjs +13 -0
- package/dist/entries/library.cjs.map +1 -0
- package/dist/entries/library.d.cts +109 -0
- package/dist/entries/library.d.ts +109 -0
- package/dist/entries/library.js +4 -0
- package/dist/entries/library.js.map +1 -0
- package/dist/entries/llm.cjs +13 -0
- package/dist/entries/llm.cjs.map +1 -0
- package/dist/entries/llm.d.cts +98 -0
- package/dist/entries/llm.d.ts +98 -0
- package/dist/entries/llm.js +4 -0
- package/dist/entries/llm.js.map +1 -0
- package/dist/entries/locations.cjs +25 -0
- package/dist/entries/locations.cjs.map +1 -0
- package/dist/entries/locations.d.cts +573 -0
- package/dist/entries/locations.d.ts +573 -0
- package/dist/entries/locations.js +4 -0
- package/dist/entries/locations.js.map +1 -0
- package/dist/entries/media.cjs +15 -0
- package/dist/entries/media.cjs.map +1 -0
- package/dist/entries/media.d.cts +548 -0
- package/dist/entries/media.d.ts +548 -0
- package/dist/entries/media.js +6 -0
- package/dist/entries/media.js.map +1 -0
- package/dist/entries/models.cjs +13 -0
- package/dist/entries/models.cjs.map +1 -0
- package/dist/entries/models.d.cts +92 -0
- package/dist/entries/models.d.ts +92 -0
- package/dist/entries/models.js +4 -0
- package/dist/entries/models.js.map +1 -0
- package/dist/entries/moodboards.cjs +21 -0
- package/dist/entries/moodboards.cjs.map +1 -0
- package/dist/entries/moodboards.d.cts +77 -0
- package/dist/entries/moodboards.d.ts +77 -0
- package/dist/entries/moodboards.js +4 -0
- package/dist/entries/moodboards.js.map +1 -0
- package/dist/entries/node-presets.cjs +13 -0
- package/dist/entries/node-presets.cjs.map +1 -0
- package/dist/entries/node-presets.d.cts +217 -0
- package/dist/entries/node-presets.d.ts +217 -0
- package/dist/entries/node-presets.js +4 -0
- package/dist/entries/node-presets.js.map +1 -0
- package/dist/entries/nodes.cjs +22 -0
- package/dist/entries/nodes.cjs.map +1 -0
- package/dist/entries/nodes.d.cts +18 -0
- package/dist/entries/nodes.d.ts +18 -0
- package/dist/entries/nodes.js +5 -0
- package/dist/entries/nodes.js.map +1 -0
- package/dist/entries/oauth.cjs +13 -0
- package/dist/entries/oauth.cjs.map +1 -0
- package/dist/entries/oauth.d.cts +69 -0
- package/dist/entries/oauth.d.ts +69 -0
- package/dist/entries/oauth.js +4 -0
- package/dist/entries/oauth.js.map +1 -0
- package/dist/entries/objects.cjs +29 -0
- package/dist/entries/objects.cjs.map +1 -0
- package/dist/entries/objects.d.cts +544 -0
- package/dist/entries/objects.d.ts +544 -0
- package/dist/entries/objects.js +4 -0
- package/dist/entries/objects.js.map +1 -0
- package/dist/entries/organizations.cjs +21 -0
- package/dist/entries/organizations.cjs.map +1 -0
- package/dist/entries/organizations.d.cts +164 -0
- package/dist/entries/organizations.d.ts +164 -0
- package/dist/entries/organizations.js +4 -0
- package/dist/entries/organizations.js.map +1 -0
- package/dist/entries/palettes.cjs +21 -0
- package/dist/entries/palettes.cjs.map +1 -0
- package/dist/entries/palettes.d.cts +69 -0
- package/dist/entries/palettes.d.ts +69 -0
- package/dist/entries/palettes.js +4 -0
- package/dist/entries/palettes.js.map +1 -0
- package/dist/entries/picker-catalogs.cjs +13 -0
- package/dist/entries/picker-catalogs.cjs.map +1 -0
- package/dist/entries/picker-catalogs.d.cts +148 -0
- package/dist/entries/picker-catalogs.d.ts +148 -0
- package/dist/entries/picker-catalogs.js +4 -0
- package/dist/entries/picker-catalogs.js.map +1 -0
- package/dist/entries/pipelines.cjs +13 -0
- package/dist/entries/pipelines.cjs.map +1 -0
- package/dist/entries/pipelines.d.cts +255 -0
- package/dist/entries/pipelines.d.ts +255 -0
- package/dist/entries/pipelines.js +4 -0
- package/dist/entries/pipelines.js.map +1 -0
- package/dist/entries/projects.cjs +13 -0
- package/dist/entries/projects.cjs.map +1 -0
- package/dist/entries/projects.d.cts +49 -0
- package/dist/entries/projects.d.ts +49 -0
- package/dist/entries/projects.js +4 -0
- package/dist/entries/projects.js.map +1 -0
- package/dist/entries/prompt-helper.cjs +13 -0
- package/dist/entries/prompt-helper.cjs.map +1 -0
- package/dist/entries/prompt-helper.d.cts +73 -0
- package/dist/entries/prompt-helper.d.ts +73 -0
- package/dist/entries/prompt-helper.js +4 -0
- package/dist/entries/prompt-helper.js.map +1 -0
- package/dist/entries/recast.cjs +17 -0
- package/dist/entries/recast.cjs.map +1 -0
- package/dist/entries/recast.d.cts +229 -0
- package/dist/entries/recast.d.ts +229 -0
- package/dist/entries/recast.js +4 -0
- package/dist/entries/recast.js.map +1 -0
- package/dist/entries/reduce.cjs +13 -0
- package/dist/entries/reduce.cjs.map +1 -0
- package/dist/entries/reduce.d.cts +56 -0
- package/dist/entries/reduce.d.ts +56 -0
- package/dist/entries/reduce.js +4 -0
- package/dist/entries/reduce.js.map +1 -0
- package/dist/entries/saved-posts.cjs +13 -0
- package/dist/entries/saved-posts.cjs.map +1 -0
- package/dist/entries/saved-posts.d.cts +33 -0
- package/dist/entries/saved-posts.d.ts +33 -0
- package/dist/entries/saved-posts.js +4 -0
- package/dist/entries/saved-posts.js.map +1 -0
- package/dist/entries/scene3d.cjs +17 -0
- package/dist/entries/scene3d.cjs.map +1 -0
- package/dist/entries/scene3d.d.cts +131 -0
- package/dist/entries/scene3d.d.ts +131 -0
- package/dist/entries/scene3d.js +4 -0
- package/dist/entries/scene3d.js.map +1 -0
- package/dist/entries/sessions.cjs +13 -0
- package/dist/entries/sessions.cjs.map +1 -0
- package/dist/entries/sessions.d.cts +122 -0
- package/dist/entries/sessions.d.ts +122 -0
- package/dist/entries/sessions.js +4 -0
- package/dist/entries/sessions.js.map +1 -0
- package/dist/entries/shots.cjs +13 -0
- package/dist/entries/shots.cjs.map +1 -0
- package/dist/entries/shots.d.cts +78 -0
- package/dist/entries/shots.d.ts +78 -0
- package/dist/entries/shots.js +4 -0
- package/dist/entries/shots.js.map +1 -0
- package/dist/entries/studio.cjs +22 -0
- package/dist/entries/studio.cjs.map +1 -0
- package/dist/entries/studio.d.cts +281 -0
- package/dist/entries/studio.d.ts +281 -0
- package/dist/entries/studio.js +5 -0
- package/dist/entries/studio.js.map +1 -0
- package/dist/entries/templates.cjs +13 -0
- package/dist/entries/templates.cjs.map +1 -0
- package/dist/entries/templates.d.cts +110 -0
- package/dist/entries/templates.d.ts +110 -0
- package/dist/entries/templates.js +4 -0
- package/dist/entries/templates.js.map +1 -0
- package/dist/entries/tutorials.cjs +13 -0
- package/dist/entries/tutorials.cjs.map +1 -0
- package/dist/entries/tutorials.d.cts +63 -0
- package/dist/entries/tutorials.d.ts +63 -0
- package/dist/entries/tutorials.js +4 -0
- package/dist/entries/tutorials.js.map +1 -0
- package/dist/entries/uploads.cjs +13 -0
- package/dist/entries/uploads.cjs.map +1 -0
- package/dist/entries/uploads.d.cts +44 -0
- package/dist/entries/uploads.d.ts +44 -0
- package/dist/entries/uploads.js +4 -0
- package/dist/entries/uploads.js.map +1 -0
- package/dist/entries/video-pro.cjs +13 -0
- package/dist/entries/video-pro.cjs.map +1 -0
- package/dist/entries/video-pro.d.cts +60 -0
- package/dist/entries/video-pro.d.ts +60 -0
- package/dist/entries/video-pro.js +4 -0
- package/dist/entries/video-pro.js.map +1 -0
- package/dist/entries/voices.cjs +13 -0
- package/dist/entries/voices.cjs.map +1 -0
- package/dist/entries/voices.d.cts +498 -0
- package/dist/entries/voices.d.ts +498 -0
- package/dist/entries/voices.js +4 -0
- package/dist/entries/voices.js.map +1 -0
- package/dist/entries/webhooks.cjs +21 -0
- package/dist/entries/webhooks.cjs.map +1 -0
- package/dist/entries/webhooks.d.cts +64 -0
- package/dist/entries/webhooks.d.ts +64 -0
- package/dist/entries/webhooks.js +4 -0
- package/dist/entries/webhooks.js.map +1 -0
- package/dist/entries/workflows.cjs +13 -0
- package/dist/entries/workflows.cjs.map +1 -0
- package/dist/entries/workflows.d.cts +393 -0
- package/dist/entries/workflows.d.ts +393 -0
- package/dist/entries/workflows.js +4 -0
- package/dist/entries/workflows.js.map +1 -0
- package/dist/entries/workspaces.cjs +13 -0
- package/dist/entries/workspaces.cjs.map +1 -0
- package/dist/entries/workspaces.d.cts +124 -0
- package/dist/entries/workspaces.d.ts +124 -0
- package/dist/entries/workspaces.js +4 -0
- package/dist/entries/workspaces.js.map +1 -0
- package/dist/index.cjs +501 -5192
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +67 -10895
- package/dist/index.d.ts +67 -10895
- package/dist/index.js +100 -5074
- package/dist/index.js.map +1 -1
- package/dist/nodes-C-wrO6Sg.d.ts +1364 -0
- package/dist/nodes-J8ByUN8z.d.cts +1364 -0
- package/dist/studio-productions-DUHvdSvk.d.cts +572 -0
- package/dist/studio-productions-vbCNSbtf.d.ts +572 -0
- package/dist/webhooks-BJawEIz8.d.ts +198 -0
- package/dist/webhooks-Dn_DtNTD.d.cts +198 -0
- package/package.json +253 -3
|
@@ -0,0 +1,1364 @@
|
|
|
1
|
+
import { ConnectedReference, DescribedReference } from '@nodaro/shared/types';
|
|
2
|
+
import { VideoCharacterReference } from '@nodaro/shared/video';
|
|
3
|
+
import { ImageEditTargetResolution, ImageAspectRatio, TaskChainedEditProvider, ImageEditProvider, ModifyImageProvider, ImageResolution, ImageQuality, ImageRenderingSpeed, VideoToVideoNodeProvider } from '@nodaro/shared/models';
|
|
4
|
+
import '@nodaro/shared/nodes';
|
|
5
|
+
import { SocialSearchParams, SocialPost, SocialPlatform, SocialSearchMode } from '@nodaro/shared/social';
|
|
6
|
+
import { GenerateMaskOutput, GenerateMaskRequest, VideoDepthProvider, VideoDepthModelSize, VideoDepthColormap, VideoDepthResolution } from '@nodaro/shared/media';
|
|
7
|
+
import * as _nodaro_shared_scene3d from '@nodaro/shared/scene3d';
|
|
8
|
+
import { Scene3DPlan, Scene3DEditOperation, Scene3DV2EditOperation, Scene3DReference, Pro3DRenderSource, Pro3DRenderEngine, Pro3DRenderQuality, Pro3DRenderStyle, Scene3DJobOutputAny, Pro3DRenderJobOutput as Pro3DRenderJobOutput$1, Pro3DRenderCapabilities, Scene3DPlanV2, Pro3DRenderQuote as Pro3DRenderQuote$1 } from '@nodaro/shared/scene3d';
|
|
9
|
+
import { TopazUpscaleFactor } from '@nodaro/shared/credits';
|
|
10
|
+
import { ImageToImageAttachColumn } from '@nodaro/shared/entities';
|
|
11
|
+
import { N as NodaroClientCore } from './developer-apps-zSQXWmEG.cjs';
|
|
12
|
+
import { JobsResource, JobStatusResult } from './entries/jobs.cjs';
|
|
13
|
+
import { NodaroError } from './entries/errors.cjs';
|
|
14
|
+
import { ModelInputAdjustment } from '@nodaro/shared/model-catalog';
|
|
15
|
+
import { DirectionFields, SubjectFields } from '@nodaro/prompts/prompt-builder';
|
|
16
|
+
|
|
17
|
+
/** Reuse newRevisionId for transport retries of the same immutable edit. */
|
|
18
|
+
interface RetainedScene3DEditParams {
|
|
19
|
+
newRevisionId: string;
|
|
20
|
+
expectedContentHash: string;
|
|
21
|
+
operations: readonly Scene3DV2EditOperation[];
|
|
22
|
+
lockedObjectIds?: readonly string[];
|
|
23
|
+
}
|
|
24
|
+
interface RetainedScene3DEditResult {
|
|
25
|
+
scenePlan: Scene3DPlanV2;
|
|
26
|
+
changeSummary: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The kind of bytes a delivery descriptor names, and the usage it is pinned under.
|
|
30
|
+
*
|
|
31
|
+
* PAIRED, not two free enums: the platform refuses a pin whose usage is not the one its kind is
|
|
32
|
+
* defined to have, and a client that checks only one of the two would accept a mis-pinned
|
|
33
|
+
* artifact the server would then refuse. {@link SCENE3D_DELIVERY_ASSET_USAGE} is the map both
|
|
34
|
+
* halves are read from.
|
|
35
|
+
*/
|
|
36
|
+
declare const SCENE3D_DELIVERY_ASSET_USAGE: {
|
|
37
|
+
readonly poster: "poster";
|
|
38
|
+
readonly "validation-report": "validation";
|
|
39
|
+
readonly "shot-still": "shot-still";
|
|
40
|
+
/** The recipe a run that never compiled was refused for. See {@link Scene3DDeliveryAsset}. */
|
|
41
|
+
readonly "source-json": "checkpoint";
|
|
42
|
+
};
|
|
43
|
+
type Scene3DDeliveryAssetKind = keyof typeof SCENE3D_DELIVERY_ASSET_USAGE;
|
|
44
|
+
/**
|
|
45
|
+
* One artifact a delivery pins, as a descriptor: opaque ids and digests only.
|
|
46
|
+
*
|
|
47
|
+
* Four kinds, and two of them are conditional:
|
|
48
|
+
*
|
|
49
|
+
* - `poster` and `validation-report` are on every delivery;
|
|
50
|
+
* - `shot-still` appears once per shot on a render that produced a contact sheet, and carries
|
|
51
|
+
* its own shot identity (`shotIndex`, `frame`, and the frame size);
|
|
52
|
+
* - `source-json` appears on ONE shape only — a `refused-authoring` delivery, published by a
|
|
53
|
+
* 3D Render Pro run whose recipe the compiler refused on every pass. It is the planner's last
|
|
54
|
+
* admitted recipe, and it is the only thing such a run leaves that names what was attempted.
|
|
55
|
+
* Reading it needs `edit` on the job's workflow (the same access the `.blend` export costs);
|
|
56
|
+
* a reader with less simply does not see the descriptor.
|
|
57
|
+
*/
|
|
58
|
+
interface Scene3DDeliveryAsset {
|
|
59
|
+
assetId: string;
|
|
60
|
+
kind: Scene3DDeliveryAssetKind;
|
|
61
|
+
usage: (typeof SCENE3D_DELIVERY_ASSET_USAGE)[Scene3DDeliveryAssetKind];
|
|
62
|
+
byteLength: number;
|
|
63
|
+
sha256: string;
|
|
64
|
+
viaRevisionId: string | null;
|
|
65
|
+
/** Set on a `shot-still` and absent on every other kind — never `null`. */
|
|
66
|
+
shotIndex?: number;
|
|
67
|
+
frame?: number;
|
|
68
|
+
width?: number;
|
|
69
|
+
height?: number;
|
|
70
|
+
}
|
|
71
|
+
/** Export evidence is retained separately from the immutable scene it rendered. */
|
|
72
|
+
interface Scene3DDelivery {
|
|
73
|
+
deliveryId: string;
|
|
74
|
+
/**
|
|
75
|
+
* Null on a `refused-authoring` delivery and on that alone.
|
|
76
|
+
*
|
|
77
|
+
* A Pro run whose recipe the compiler refused on every pass still retains the refusal
|
|
78
|
+
* report, but nothing was ever compiled, so no scene revision was published. The field is
|
|
79
|
+
* null rather than absent so the shape stays one shape; read `sourceKind` to tell why.
|
|
80
|
+
*/
|
|
81
|
+
sceneRevisionId: string | null;
|
|
82
|
+
/**
|
|
83
|
+
* What this delivery was made from. Absent when read from a deployment that predates the
|
|
84
|
+
* refused lane, where every delivery necessarily had a scene behind it.
|
|
85
|
+
*/
|
|
86
|
+
sourceKind?: "retained-revision" | "job-output" | "refused-authoring";
|
|
87
|
+
/** Null when there is no plan to hash — see `sceneRevisionId`. */
|
|
88
|
+
sourcePlanSha256: string | null;
|
|
89
|
+
sourceContentHash: string | null;
|
|
90
|
+
sourceJobId: string | null;
|
|
91
|
+
workflowId: string | null;
|
|
92
|
+
mode: "authored" | "render-only";
|
|
93
|
+
createdAt: string;
|
|
94
|
+
access: "view" | "edit" | "own";
|
|
95
|
+
assets: Scene3DDeliveryAsset[];
|
|
96
|
+
}
|
|
97
|
+
type Scene3DAuthoringEngine = "basic" | "blender-cloud" | "blender-local";
|
|
98
|
+
interface Scene3DCapabilities {
|
|
99
|
+
basic: {
|
|
100
|
+
available: boolean;
|
|
101
|
+
sceneSchemaVersions: number[];
|
|
102
|
+
};
|
|
103
|
+
advanced: null | {
|
|
104
|
+
version: string;
|
|
105
|
+
engines: Array<Exclude<Scene3DAuthoringEngine, "basic">>;
|
|
106
|
+
sceneSchemaVersions: number[];
|
|
107
|
+
maxRepairPasses: number;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* What this deployment can serve for `pro-3d-render`, including which
|
|
111
|
+
* quality profiles, engines and aspect ratios a client may OFFER. Optional so
|
|
112
|
+
* a client of this version reads an older backend without throwing; absent
|
|
113
|
+
* means the node is unavailable.
|
|
114
|
+
*/
|
|
115
|
+
pro?: Pro3DRenderCapabilities;
|
|
116
|
+
}
|
|
117
|
+
interface Scene3DEngineParams {
|
|
118
|
+
/** Basic is the default. Discover optional engines through scene3d.capabilities(). */
|
|
119
|
+
engine?: Scene3DAuthoringEngine;
|
|
120
|
+
acceptedSceneSchemaVersions?: readonly number[];
|
|
121
|
+
localConnectionId?: string;
|
|
122
|
+
quoteId?: string;
|
|
123
|
+
maxRepairPasses?: number;
|
|
124
|
+
}
|
|
125
|
+
/** Structured authoring inputs; reference roles are interpreted by the platform. */
|
|
126
|
+
interface GenerateScene3DParams extends Record<string, unknown>, Scene3DEngineParams, GenerationSessionParams {
|
|
127
|
+
/** Existing GLBs selected by immutable revision/artifact IDs. Requires an import-capable advanced engine. */
|
|
128
|
+
inputAssets?: readonly _nodaro_shared_scene3d.Scene3DInputAsset[];
|
|
129
|
+
prompt: string;
|
|
130
|
+
durationSeconds?: number;
|
|
131
|
+
fps?: number;
|
|
132
|
+
aspectRatio?: string;
|
|
133
|
+
references?: readonly Scene3DReference[];
|
|
134
|
+
llmModel?: string;
|
|
135
|
+
reasoningEffort?: string;
|
|
136
|
+
workflowId?: string;
|
|
137
|
+
nodeId?: string;
|
|
138
|
+
}
|
|
139
|
+
/** Editing creates a new revision and never mutates the supplied scene. */
|
|
140
|
+
interface EditScene3DParams extends Record<string, unknown>, Scene3DEngineParams, GenerationSessionParams {
|
|
141
|
+
scenePlan: Scene3DPlan;
|
|
142
|
+
expectedRevisionId: string;
|
|
143
|
+
/** Replace the complete reference set, including clearing it with an empty list. Default: merge by id. */
|
|
144
|
+
replaceReferences?: boolean;
|
|
145
|
+
/** Supply an instruction or deterministic operations, never both. */
|
|
146
|
+
prompt?: string;
|
|
147
|
+
operations?: readonly (Scene3DEditOperation | Scene3DV2EditOperation)[];
|
|
148
|
+
references?: readonly Scene3DReference[];
|
|
149
|
+
lockedObjectIds?: readonly string[];
|
|
150
|
+
selectedObjectIds?: readonly string[];
|
|
151
|
+
llmModel?: string;
|
|
152
|
+
reasoningEffort?: string;
|
|
153
|
+
workflowId?: string;
|
|
154
|
+
nodeId?: string;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 3D Render Pro — ONE durable operation producing a composition and its MP4.
|
|
158
|
+
*
|
|
159
|
+
* `source` is a strict discriminated union, not a bag of optionals:
|
|
160
|
+
* - `{kind:'prompt', prompt, references?}` authors a new scene;
|
|
161
|
+
* - `{kind:'scene', revisionId, sourceJobId}` with NO `editPrompt` is the
|
|
162
|
+
* render-only export — it spends no authoring or build credits, and OMIT
|
|
163
|
+
* the field rather than sending `""`, which would buy an authoring pass;
|
|
164
|
+
* - `{kind:'local-export', exportId, connectionId}` uses a paired desktop.
|
|
165
|
+
*
|
|
166
|
+
* There is no model or effort field: the planner is fixed and server-owned.
|
|
167
|
+
*
|
|
168
|
+
* `durationSeconds` / `fps` / `aspectRatio` on a `scene` source are an EXPLICIT
|
|
169
|
+
* re-time request. Omit them to keep the source's own timing; a conflicting
|
|
170
|
+
* override is rejected rather than silently applied.
|
|
171
|
+
*/
|
|
172
|
+
interface Pro3DRenderParams extends Record<string, unknown> {
|
|
173
|
+
source: Pro3DRenderSource;
|
|
174
|
+
/** Optional. An unknown or unavailable engine is rejected, never downgraded. */
|
|
175
|
+
engine?: Pro3DRenderEngine;
|
|
176
|
+
/** Names a paired desktop for a local run. */
|
|
177
|
+
localConnectionId?: string;
|
|
178
|
+
durationSeconds?: number;
|
|
179
|
+
fps?: number;
|
|
180
|
+
aspectRatio?: string;
|
|
181
|
+
quality?: Pro3DRenderQuality;
|
|
182
|
+
style?: Pro3DRenderStyle;
|
|
183
|
+
/** Correction budget, 0-2. Each pass is paid work. */
|
|
184
|
+
maxRepairPasses?: number;
|
|
185
|
+
/**
|
|
186
|
+
* Which scene-schema versions THIS client can render. A prompt or
|
|
187
|
+
* local-export source mints v2, so omitting 2 is refused for free; a scene
|
|
188
|
+
* source inherits its revision's version and is left to the server.
|
|
189
|
+
*/
|
|
190
|
+
acceptedSceneSchemaVersions?: readonly number[];
|
|
191
|
+
workflowId?: string;
|
|
192
|
+
nodeId?: string;
|
|
193
|
+
/** Keep every artifact of this run out of publicly-readable storage. */
|
|
194
|
+
forcePrivate?: boolean;
|
|
195
|
+
}
|
|
196
|
+
/** A run additionally carries the quote it was priced under. */
|
|
197
|
+
interface Pro3DRenderRunParams extends Pro3DRenderParams {
|
|
198
|
+
quoteId: string;
|
|
199
|
+
}
|
|
200
|
+
/** The quote's answer. `maxCredits` is a ceiling; quoting spends nothing. */
|
|
201
|
+
type Pro3DRenderQuote = Readonly<Pro3DRenderQuote$1> & Readonly<Record<string, unknown>>;
|
|
202
|
+
/** Per-call transport controls for the paid run. */
|
|
203
|
+
interface Pro3DRenderRunOptions {
|
|
204
|
+
/**
|
|
205
|
+
* The `Idempotency-Key` the run is submitted under. Reuse the same value when
|
|
206
|
+
* retrying a call that timed out, so the run is not started twice; the SDK
|
|
207
|
+
* generates a fresh one per call when this is omitted, because two deliberate
|
|
208
|
+
* calls are two runs.
|
|
209
|
+
*/
|
|
210
|
+
idempotencyKey?: string;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Render the exact scene revision through the existing render-video node.
|
|
214
|
+
*
|
|
215
|
+
* The price follows the plan's OWN `width`/`height`, not any node setting: a
|
|
216
|
+
* frame up to 1920 px on its longest side settles under `render-video`, a
|
|
217
|
+
* larger one under `render-video:3d-large` (1.5x) or, above 5.12 megapixels,
|
|
218
|
+
* `render-video:3d-xlarge` (2.5x). Read the current numbers from the
|
|
219
|
+
* model-cost API for those three identifiers.
|
|
220
|
+
*/
|
|
221
|
+
interface RenderScene3DParams extends Record<string, unknown>, GenerationSessionParams {
|
|
222
|
+
planType: "3d-scene";
|
|
223
|
+
plan: Scene3DPlan;
|
|
224
|
+
workflowId?: string;
|
|
225
|
+
nodeId?: string;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Preserve the shared wire contract while allowing additive job metadata.
|
|
229
|
+
*
|
|
230
|
+
* A scene authored by an ADVANCED engine additionally reports what the run knows about its own
|
|
231
|
+
* answer, every field optional and all of them absent on the deterministic Basic lane:
|
|
232
|
+
* `validation.warnings[]` entries coded `SCENE_AUTHORING_ASSUMPTION` (the planner's
|
|
233
|
+
* assumptions), `metadata.summary` (its description of what it authored), `repairPasses`
|
|
234
|
+
* (repairs actually run — `0` when the scene was accepted first time), `admissionRetries`
|
|
235
|
+
* (pre-build planner retries, which spend no repair pass), `mechanicalPasses` (repairs the engine
|
|
236
|
+
* applied from the compiler's own remedy with no planner call, counted APART from `repairPasses`
|
|
237
|
+
* on their own quoted allowance, each with a `REMEDY_AUTO_APPLIED` warning) and
|
|
238
|
+
* `restoredAssertions` (mandatory assertions put back after a planner answer re-shaped one the
|
|
239
|
+
* feedback had not named, each a `ASSERTION_RESTORED` warning).
|
|
240
|
+
*
|
|
241
|
+
* A scene that passed every mandatory assertion but did not get the visual reviewer's approval
|
|
242
|
+
* is delivered anyway, and `metadata.review` carries a verdict saying why. `verdict: "refused"`
|
|
243
|
+
* is the ADVISORY delivery — the reviewer objected once the repair budget was spent — with one
|
|
244
|
+
* `SCENE_REVIEW_REFUSED` warning per objection. `verdict: "unavailable"` is the UNREVIEWED
|
|
245
|
+
* delivery: the review produced no usable verdict after `attempts` asks — `reason: "provider"`
|
|
246
|
+
* when it never reached its provider, `"unusable"` when the provider answered with nothing usable
|
|
247
|
+
* (`Scene3DReviewUnavailableReason` in `@nodaro/shared`) — so nobody judged the scene, and
|
|
248
|
+
* `validation.warnings[]` LEADS with `SCENE_REVIEW_UNAVAILABLE` (any objections under it came from
|
|
249
|
+
* review batches that answered usably first, and are not the whole verdict).
|
|
250
|
+
*
|
|
251
|
+
* `validation.status` stays `"passed"` on both, so `metadata.review` being present is the only
|
|
252
|
+
* reliable test — use `scene3DReviewVerdictOf` from `@nodaro/shared` rather than reading it by
|
|
253
|
+
* hand, and `scene3DReviewNote` rather than writing the sentence yourself: a message that says
|
|
254
|
+
* the reviewer refused a scene nobody reviewed invents an opinion.
|
|
255
|
+
*/
|
|
256
|
+
type Scene3DJobOutput = Readonly<Scene3DJobOutputAny> & Readonly<Record<string, unknown>>;
|
|
257
|
+
/**
|
|
258
|
+
* The settled 3D Render Pro result, plus any additive job metadata.
|
|
259
|
+
*
|
|
260
|
+
* On a run that AUTHORED, the result reports the run's own account of its answer:
|
|
261
|
+
* `validation.warnings[]` entries coded `SCENE_AUTHORING_ASSUMPTION`, `metadata.summary`,
|
|
262
|
+
* `repairPasses` (`0` when accepted first time), `admissionRetries` (pre-build planner retries,
|
|
263
|
+
* which spend no repair pass), `mechanicalPasses` (repairs the engine authored itself from the
|
|
264
|
+
* compiler's own remedy, counted APART from `repairPasses` because they buy their own quoted
|
|
265
|
+
* allowance rather than spending one of your repairs) and `restoredAssertions`. A render-only
|
|
266
|
+
* export authored nothing, so it carries no summary and omits the counts rather than claiming `0`.
|
|
267
|
+
*
|
|
268
|
+
* The one case where `mechanicalPasses` IS a subset of `repairPasses` is a run quoted before that
|
|
269
|
+
* allowance existed — its quote carries no `mechanical` line. The discriminant is the quote, not
|
|
270
|
+
* the result, so read the quote you were given rather than deriving it from the two counts.
|
|
271
|
+
*
|
|
272
|
+
* A completed result may also be published without the visual reviewer's approval, and then
|
|
273
|
+
* `metadata.review` holds a verdict saying which way. `{ verdict: "refused", objections[],
|
|
274
|
+
* observed? }` is the ADVISORY delivery: every mandatory assertion passed, the reviewer still
|
|
275
|
+
* objected, and the scene was published once the repair budget was spent, with one
|
|
276
|
+
* `SCENE_REVIEW_REFUSED` warning per objection. `{ verdict: "unavailable", reason, attempts,
|
|
277
|
+
* objections[], observed? }` is the UNREVIEWED delivery: the review produced no usable verdict in
|
|
278
|
+
* `attempts` asks — `reason: "provider"` when it never reached its provider, `"unusable"` when the
|
|
279
|
+
* provider answered with nothing usable — so the assertion-passing scene was delivered with no
|
|
280
|
+
* verdict on it and `validation.warnings[]` LEADS with `SCENE_REVIEW_UNAVAILABLE`. Objections on
|
|
281
|
+
* that arm are whatever review batches answered usably first — real, but not the whole verdict.
|
|
282
|
+
*
|
|
283
|
+
* `validation.status` is `"passed"` on both, so test for `metadata.review` — via
|
|
284
|
+
* `scene3DReviewVerdictOf` from `@nodaro/shared` — rather than for the status or the warnings,
|
|
285
|
+
* and render it with `scene3DReviewNote` rather than assuming a refusal.
|
|
286
|
+
*/
|
|
287
|
+
type Pro3DRenderJobOutput = Readonly<Pro3DRenderJobOutput$1> & Readonly<Record<string, unknown>>;
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Typed request bodies and results for the image routes beside
|
|
291
|
+
* `generate-image`: `image-to-image`, `edit-image`, `split-image` and
|
|
292
|
+
* `generate-mask` — the overloads live on `NodesResource.run` / `runAndWait`.
|
|
293
|
+
*
|
|
294
|
+
* Every vocabulary is the platform's own (`@nodaro/shared`), never a copy:
|
|
295
|
+
* the route Zod enums are built from the same tuples. The field lists are held
|
|
296
|
+
* to the route bodies by `backend/src/routes/__tests__/sdk-image-params-contract.test.ts`.
|
|
297
|
+
*/
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* What `nodes.run("image-to-image" | "edit-image" | "generate-mask", …)`
|
|
301
|
+
* answers: the job it started. Wait for it with `runAndWait` (or poll
|
|
302
|
+
* `jobs.getStatus(jobId)`).
|
|
303
|
+
*/
|
|
304
|
+
type ImageJobStarted = {
|
|
305
|
+
jobId: string;
|
|
306
|
+
/** Parameters the server corrected for the chosen model (an aspect ratio it does not draw, …); the run used the corrected values. */
|
|
307
|
+
adjustments?: RunNodeAdjustment[];
|
|
308
|
+
[k: string]: unknown;
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* Typed request body for `nodes.run("image-to-image", …)` / `runAndWait` —
|
|
312
|
+
* restyle or edit one image with a prompt (`POST /v1/image-to-image`). The
|
|
313
|
+
* completed job writes `imageUrl`. (`modify-image` runs through this route.)
|
|
314
|
+
*
|
|
315
|
+
* Levers a model does not take are corrected to one it does, and reported in
|
|
316
|
+
* the answer's `adjustments` — never rejected. Any other route field passes
|
|
317
|
+
* through.
|
|
318
|
+
*/
|
|
319
|
+
interface ImageToImageParams extends GenerationSessionParams {
|
|
320
|
+
/** The source image — a public http(s) URL. */
|
|
321
|
+
imageUrl: string;
|
|
322
|
+
prompt: string;
|
|
323
|
+
/** The prompt as your user typed it, when `prompt` is a version your app expanded. Stored on the job; never sent to the model. */
|
|
324
|
+
userPrompt?: string;
|
|
325
|
+
/** Omitted: the platform's default edit model for the requested `aspectRatio`. */
|
|
326
|
+
provider?: ModifyImageProvider;
|
|
327
|
+
/** Extra reference images, up to 13. On models priced per reference, `imageUrl` counts as one. */
|
|
328
|
+
referenceImageUrls?: string[];
|
|
329
|
+
resolution?: ImageResolution;
|
|
330
|
+
quality?: ImageQuality;
|
|
331
|
+
/** 0–1: how far the result may move from the source (taken by the models in `I2I_STRENGTH_SUPPORT`). */
|
|
332
|
+
strength?: number;
|
|
333
|
+
/** `"auto"` on a model without a native auto keeps the source image's shape (the model's nearest ratio). */
|
|
334
|
+
aspectRatio?: ImageAspectRatio;
|
|
335
|
+
/** Up to 5,000 characters. */
|
|
336
|
+
negativePrompt?: string;
|
|
337
|
+
/** A whole number ≥ 0 (taken by the models in `SEED_SUPPORT`). */
|
|
338
|
+
seed?: number;
|
|
339
|
+
/** Ideogram's speed tier (the models in `RENDERING_SPEED_SUPPORT`). */
|
|
340
|
+
renderingSpeed?: ImageRenderingSpeed;
|
|
341
|
+
/** 0–30: prompt adherence (taken by the models in `GUIDANCE_SCALE_SUPPORT`). */
|
|
342
|
+
guidanceScale?: number;
|
|
343
|
+
/**
|
|
344
|
+
* Inpainting mask — white = the area to change, black = keep. Sent to the
|
|
345
|
+
* model as its own mask, so only the mask-capable image-to-image models use
|
|
346
|
+
* it (`I2I_MASK_SUPPORT`: `ideogram-edit`, `flux-fill`); others ignore it.
|
|
347
|
+
* For a mask on any image model, see `GenerateImageParams.maskUrl`.
|
|
348
|
+
*/
|
|
349
|
+
maskUrl?: string;
|
|
350
|
+
/** Character Studio: the asset's one-line description (up to 1,000 characters); drafted for you when omitted on the studio path. */
|
|
351
|
+
description?: string;
|
|
352
|
+
/** Character Studio: real-life reference photos, up to 5. Used on the studio path only. */
|
|
353
|
+
realLifeRefs?: string[];
|
|
354
|
+
/** Character Studio: with `attachToColumn` and `attachName`, the result is added to this character (one of yours). */
|
|
355
|
+
attachToCharacterId?: string;
|
|
356
|
+
attachToColumn?: ImageToImageAttachColumn;
|
|
357
|
+
/** 1–200 characters. */
|
|
358
|
+
attachName?: string;
|
|
359
|
+
/** Append the character's identity description to the prompt (not on the studio path). Default `false`. */
|
|
360
|
+
injectCharacterContext?: boolean;
|
|
361
|
+
[k: string]: unknown;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* The fields both forms of an `edit-image` request take. See
|
|
365
|
+
* {@link EditImageParams}.
|
|
366
|
+
*/
|
|
367
|
+
interface EditImageCommonParams extends GenerationSessionParams {
|
|
368
|
+
/**
|
|
369
|
+
* The edit instruction. REQUIRED for `nano-banana-edit` and `grok-2-edit`
|
|
370
|
+
* (a `400 validation_error` without one); the upscalers and background
|
|
371
|
+
* removal take none.
|
|
372
|
+
*/
|
|
373
|
+
prompt?: string;
|
|
374
|
+
/** The prompt as your user typed it. Stored on the job; never sent to the model. */
|
|
375
|
+
userPrompt?: string;
|
|
376
|
+
/** `topaz-image-upscale`: the factor. Wins over `targetResolution`. */
|
|
377
|
+
upscaleFactor?: TopazUpscaleFactor;
|
|
378
|
+
/** The upscalers' output tier. On `topaz-image-upscale` it maps to a factor (2K → 2, 4K and 8K → 4) when `upscaleFactor` is absent. */
|
|
379
|
+
targetResolution?: ImageEditTargetResolution;
|
|
380
|
+
/** Corrected per model; dropped for the models that take none (the upscalers, background removal, the Grok task ops). */
|
|
381
|
+
aspectRatio?: ImageAspectRatio;
|
|
382
|
+
/** Up to 5,000 characters. */
|
|
383
|
+
negativePrompt?: string;
|
|
384
|
+
/** Up to 500 characters. */
|
|
385
|
+
style?: string;
|
|
386
|
+
/** A whole number ≥ 0. */
|
|
387
|
+
seed?: number;
|
|
388
|
+
/** Up to 13. */
|
|
389
|
+
referenceImageUrls?: string[];
|
|
390
|
+
/** Inpainting mask, passed to the model as its mask; a model that takes none ignores it. */
|
|
391
|
+
maskUrl?: string;
|
|
392
|
+
[k: string]: unknown;
|
|
393
|
+
}
|
|
394
|
+
/** An `edit-image` request on an image URL — every provider but the Grok task ops. */
|
|
395
|
+
interface EditImageFromUrlParams extends EditImageCommonParams {
|
|
396
|
+
/** The image to edit — a public http(s) URL. */
|
|
397
|
+
imageUrl: string;
|
|
398
|
+
/** Default `recraft-upscale`. */
|
|
399
|
+
provider?: Exclude<ImageEditProvider, TaskChainedEditProvider>;
|
|
400
|
+
taskId?: never;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* An `edit-image` request on a prior Grok generation — `grok-upscale`,
|
|
404
|
+
* `grok-2-edit`, `grok-2-segment` take that generation's task id instead of an
|
|
405
|
+
* image URL (`TASK_CHAINED_EDIT_PROVIDER_IDS`).
|
|
406
|
+
*/
|
|
407
|
+
interface EditImageFromTaskParams extends EditImageCommonParams {
|
|
408
|
+
/** The prior Grok generation's task id — its job's `output_data.kieTaskId`. 1–200 characters. */
|
|
409
|
+
taskId: string;
|
|
410
|
+
provider: TaskChainedEditProvider;
|
|
411
|
+
imageUrl?: never;
|
|
412
|
+
/**
|
|
413
|
+
* `grok-2-edit` only: limit the edit to these segments — the `index` values
|
|
414
|
+
* a `grok-2-segment` run returned, passed through as they are. 1–64 whole
|
|
415
|
+
* numbers ≥ 0.
|
|
416
|
+
*/
|
|
417
|
+
maskIndexes?: number[];
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Typed request body for `nodes.run("edit-image", …)` / `runAndWait` —
|
|
421
|
+
* upscale, remove the background, or prompt-edit (`POST /v1/edit-image`).
|
|
422
|
+
* Exactly one source: `imageUrl` for every provider except the Grok task ops,
|
|
423
|
+
* which take `taskId` (and must name their `provider`). The provider defaults
|
|
424
|
+
* to `recraft-upscale`. The completed job writes `imageUrl`.
|
|
425
|
+
*
|
|
426
|
+
* The union is checked when the body is typed as `EditImageParams`
|
|
427
|
+
* (`const params: EditImageParams = …` or `{ … } satisfies EditImageParams`). A
|
|
428
|
+
* body written inline that fails it falls through to the untyped
|
|
429
|
+
* `run(type: string, …)` overload, compiles, and resolves `RunNodeResult`.
|
|
430
|
+
*/
|
|
431
|
+
type EditImageParams = EditImageFromUrlParams | EditImageFromTaskParams;
|
|
432
|
+
/**
|
|
433
|
+
* Typed request body for `nodes.run("split-image", …)` — cut one image into a
|
|
434
|
+
* grid of tiles (`POST /v1/split-image`). Free and SYNCHRONOUS: no job is
|
|
435
|
+
* created, so `runAndWait` does not apply (it would throw: the answer has no
|
|
436
|
+
* `jobId`) and there are no session fields; the answer is the tiles
|
|
437
|
+
* themselves ({@link SplitImageResult}).
|
|
438
|
+
*/
|
|
439
|
+
interface SplitImageParams {
|
|
440
|
+
/** The image to cut — a public http(s) URL. */
|
|
441
|
+
imageUrl: string;
|
|
442
|
+
/** Columns, 1–6. */
|
|
443
|
+
gridCols: number;
|
|
444
|
+
/** Rows, 1–6. */
|
|
445
|
+
gridRows: number;
|
|
446
|
+
/**
|
|
447
|
+
* One name per tile, row by row (1–36). Must hold exactly
|
|
448
|
+
* `gridCols × gridRows` entries (`gridCols` and `gridRows` each 1–6) — a
|
|
449
|
+
* `400 validation_error` otherwise.
|
|
450
|
+
*/
|
|
451
|
+
names: string[];
|
|
452
|
+
[k: string]: unknown;
|
|
453
|
+
}
|
|
454
|
+
/** One tile of a split — see {@link SplitImageResult}. */
|
|
455
|
+
type SplitImageTile = {
|
|
456
|
+
name: string;
|
|
457
|
+
url: string;
|
|
458
|
+
};
|
|
459
|
+
/** What `nodes.run("split-image", …)` answers: every tile as a PNG, in `names` order. */
|
|
460
|
+
type SplitImageResult = {
|
|
461
|
+
images: SplitImageTile[];
|
|
462
|
+
};
|
|
463
|
+
/**
|
|
464
|
+
* Typed request body for `nodes.run("generate-mask", …)` / `runAndWait` — a
|
|
465
|
+
* black-and-white mask of the subject a prompt names (`POST /v1/generate-mask`),
|
|
466
|
+
* ready for `maskUrl` on the inpainting routes. The SDK's one way to start it.
|
|
467
|
+
* The completed job writes {@link GenerateMaskJobOutput}.
|
|
468
|
+
*
|
|
469
|
+
* The fields are `@nodaro/shared`'s {@link GenerateMaskRequest} — the route's
|
|
470
|
+
* one wire contract, bounds in `GENERATE_MASK_LIMITS` — plus the session
|
|
471
|
+
* fields every job-creating request takes. Any other route field passes
|
|
472
|
+
* through.
|
|
473
|
+
*/
|
|
474
|
+
interface GenerateMaskParams extends GenerateMaskRequest, GenerationSessionParams {
|
|
475
|
+
[k: string]: unknown;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* The completed `generate-mask` job's `output_data`: `@nodaro/shared`'s
|
|
479
|
+
* {@link GenerateMaskOutput} — `maskUrl`, the mask PNG (white = the subject),
|
|
480
|
+
* and `imageUrl`, the source passed through unchanged — on top of the common
|
|
481
|
+
* {@link NodeJobOutput} fields.
|
|
482
|
+
*/
|
|
483
|
+
type GenerateMaskJobOutput = NodeJobOutput & GenerateMaskOutput;
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Typed request body for `nodes.run("video-to-video", …)` / `runAndWait` /
|
|
487
|
+
* `quote` — `POST /v1/video-to-video`: change or restyle an existing clip from
|
|
488
|
+
* a prompt. Mirrors the route's body; fields a model does not use are ignored
|
|
489
|
+
* by that model.
|
|
490
|
+
*/
|
|
491
|
+
interface VideoToVideoParams extends GenerationSessionParams {
|
|
492
|
+
/** The clip to change. */
|
|
493
|
+
videoUrl: string;
|
|
494
|
+
/** What to change. On `seedance-2-5` it is an edit instruction ("make it
|
|
495
|
+
* black and white"); the platform frames it as an edit of the clip. */
|
|
496
|
+
prompt?: string;
|
|
497
|
+
/** The person's own words, kept for the record when `prompt` was rewritten. */
|
|
498
|
+
userPrompt?: string;
|
|
499
|
+
/** Default `"wan"`. `seedance-2-5` edits the whole clip and is priced by the
|
|
500
|
+
* clip's length (see `nodes.quote`). */
|
|
501
|
+
provider?: VideoToVideoNodeProvider;
|
|
502
|
+
/** Wan / Wan Flash. A Seedance edit ignores it: the result keeps the source
|
|
503
|
+
* clip's own length. */
|
|
504
|
+
duration?: "5" | "10";
|
|
505
|
+
/** `480p` is Seedance only. */
|
|
506
|
+
resolution?: "480p" | "720p" | "1080p";
|
|
507
|
+
/** Native audio: Wan Flash's audio track, Seedance's generated sound. */
|
|
508
|
+
audio?: boolean;
|
|
509
|
+
/** Wan Flash multi-shot. */
|
|
510
|
+
multiShots?: boolean;
|
|
511
|
+
/** Runway Aleph output ratio. */
|
|
512
|
+
aspectRatio?: "16:9" | "9:16" | "4:3" | "3:4" | "1:1" | "21:9";
|
|
513
|
+
seed?: number;
|
|
514
|
+
/** One image the edit can refer to (Seedance: `@image_1`). */
|
|
515
|
+
referenceImageUrl?: string;
|
|
516
|
+
negativePrompt?: string;
|
|
517
|
+
/** Wan Video Edit: seconds of the source to edit (`"0"` = the whole clip). */
|
|
518
|
+
videoEditDuration?: "0" | "5" | "10";
|
|
519
|
+
/** Wan Video Edit: keep the source audio (`"origin"`) or let the model decide. */
|
|
520
|
+
audioSetting?: "auto" | "origin";
|
|
521
|
+
promptExtend?: boolean;
|
|
522
|
+
/** Seedance 2.5 only: a 480p draft, finalized later with `video-upscale`. */
|
|
523
|
+
draft?: boolean;
|
|
524
|
+
[k: string]: unknown;
|
|
525
|
+
}
|
|
526
|
+
/** One way the platform shaped the price — shown so a client can explain it. */
|
|
527
|
+
interface QuoteAdjustment {
|
|
528
|
+
/** Stable code, e.g. `ref_video_length`, `extra_reference_images`,
|
|
529
|
+
* `loop_trim_addon`, `voiced_audio_addon`, `params_adjusted`. */
|
|
530
|
+
readonly code: string;
|
|
531
|
+
readonly message: string;
|
|
532
|
+
/** Credits this adjustment adds to `reserve`, when it is a separate amount. */
|
|
533
|
+
readonly credits?: number;
|
|
534
|
+
}
|
|
535
|
+
/** Something the caller should know before running. */
|
|
536
|
+
interface QuoteWarning {
|
|
537
|
+
/** Stable code, e.g. `ref_video_unmeasured`, `settles_to_actual`. */
|
|
538
|
+
readonly code: string;
|
|
539
|
+
readonly message: string;
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* The price of a run before it starts — `POST /v1/quote`. Computed by the same
|
|
543
|
+
* code the run route reserves with, on the same body: nothing is started and
|
|
544
|
+
* nothing is charged.
|
|
545
|
+
*/
|
|
546
|
+
interface NodeQuote {
|
|
547
|
+
/** The price id the run is charged under. */
|
|
548
|
+
readonly identifier: string;
|
|
549
|
+
/** Credits the run reserves when it starts. */
|
|
550
|
+
readonly reserve: number;
|
|
551
|
+
/**
|
|
552
|
+
* Credits the run is expected to cost, when that differs from `reserve` and
|
|
553
|
+
* can be worked out from the measured inputs (a Seedance edit renders the
|
|
554
|
+
* source clip's length, not the longest tier). The run settles to what was
|
|
555
|
+
* actually generated and never above `reserve`.
|
|
556
|
+
*/
|
|
557
|
+
readonly expected?: number;
|
|
558
|
+
readonly adjustments: readonly QuoteAdjustment[];
|
|
559
|
+
readonly warnings: readonly QuoteWarning[];
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
type NodeCategory = "input" | "parameter" | "ai-image" | "ai-video" | "ai-audio" | "ai-text" | "processing" | "composition" | "trigger" | "output" | "control" | "entity" | "utility";
|
|
563
|
+
type OutputType = "text" | "image" | "video" | "audio" | "data" | "none";
|
|
564
|
+
/**
|
|
565
|
+
* Field shape inside a node's `inputSchema.fields[]`. Mirrors
|
|
566
|
+
* `backend/src/lib/node-registry.ts`.
|
|
567
|
+
*/
|
|
568
|
+
interface NodeInputField {
|
|
569
|
+
key: string;
|
|
570
|
+
type: string;
|
|
571
|
+
required?: boolean;
|
|
572
|
+
options?: string[];
|
|
573
|
+
}
|
|
574
|
+
interface NodeInputSchema {
|
|
575
|
+
fields: NodeInputField[];
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* A per-unit price on a node descriptor. A run of N units is charged
|
|
579
|
+
* `ceil(N × creditsPerUnit)`, rounded up once — so `GET /v1/credits/model-cost`
|
|
580
|
+
* for `identifier` (one unit, rounded up: the least a run pays) times N can come
|
|
581
|
+
* to more. `<identifier>:<N>u` is the exact price of N units; for a whole run
|
|
582
|
+
* use `POST /v1/credits/estimate-workflow`.
|
|
583
|
+
*/
|
|
584
|
+
interface NodeCreditRate {
|
|
585
|
+
/** The price id the rate is read from. */
|
|
586
|
+
identifier: string;
|
|
587
|
+
/** What one unit is, as a token (`"1000-frames"`: one started block of 1,000 sampled frames). */
|
|
588
|
+
unit: string;
|
|
589
|
+
/** The credits one unit adds to a run's total — exact, not rounded. */
|
|
590
|
+
creditsPerUnit: number;
|
|
591
|
+
/** The fewest units a run is charged for. */
|
|
592
|
+
minUnits: number;
|
|
593
|
+
/** `"ceil-run-total"`: the run's total is rounded up to a whole credit once, never per unit. */
|
|
594
|
+
rounding: "ceil-run-total";
|
|
595
|
+
/** The rule in words. */
|
|
596
|
+
note: string;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Node descriptor returned by `GET /v1/nodes` and `GET /v1/nodes/:type`.
|
|
600
|
+
* Mirrors `backend/src/lib/node-registry.ts#NodeDescriptor`.
|
|
601
|
+
*/
|
|
602
|
+
interface NodeDescriptor {
|
|
603
|
+
type: string;
|
|
604
|
+
label: string;
|
|
605
|
+
category: NodeCategory;
|
|
606
|
+
description: string;
|
|
607
|
+
outputType: OutputType;
|
|
608
|
+
/** The credits a run is charged, the figure on the node's Run button.
|
|
609
|
+
* Number when fixed, string range like "10-80" when model-dependent.
|
|
610
|
+
* Undefined when the node is free — or on editions
|
|
611
|
+
* without a credit system (community/business omit the field entirely;
|
|
612
|
+
* it is meaningful on Cloud only). */
|
|
613
|
+
creditCost?: number | string;
|
|
614
|
+
/** A node charged per unit of its own measure (its `creditCost` is a word
|
|
615
|
+
* such as `"per-1000-frames"`): the charged price of one unit and how a run
|
|
616
|
+
* rounds. Cloud only, like `creditCost`. */
|
|
617
|
+
creditRate?: NodeCreditRate;
|
|
618
|
+
/** Input fields the node exposes for user override (subset of full config). */
|
|
619
|
+
inputSchema?: NodeInputSchema;
|
|
620
|
+
/** For AI nodes: list of provider IDs supported. */
|
|
621
|
+
providers?: string[];
|
|
622
|
+
/** Capability flags such as "supports-reference-image" or "supports-end-frame". */
|
|
623
|
+
capabilities?: string[];
|
|
624
|
+
/** Hard duration ceiling in seconds (e.g. Generate Video Pro's env-configured cap). */
|
|
625
|
+
maxDurationSec?: number;
|
|
626
|
+
/** Providers whose segment-duration menu is sparse (off-menu values snap to the nearest entry). */
|
|
627
|
+
sparseProviders?: string[];
|
|
628
|
+
/** Per-provider resolution tiers, e.g. `{ "minimax-h3": ["2K", "768P"] }`. */
|
|
629
|
+
providerResolutions?: Record<string, string[]>;
|
|
630
|
+
/** Per-provider map of display resolution → the literal wire value the API expects. */
|
|
631
|
+
providerResolutionWire?: Record<string, Record<string, string>>;
|
|
632
|
+
/** Generate Video Pro: the deployed engine accepts the `soundtrack` input (original-audio replay). */
|
|
633
|
+
soundtrack?: boolean;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Result of a direct node execution. Most node types return `{ jobId }` and
|
|
637
|
+
* are processed asynchronously by a worker — the caller polls
|
|
638
|
+
* `client.jobs.get(jobId)` until status is `completed`/`failed`.
|
|
639
|
+
*
|
|
640
|
+
* Some node types (`meta-ads-scrape`, for one) answer synchronously and
|
|
641
|
+
* return their full result body. The shape is route-specific; consumers
|
|
642
|
+
* should branch on the presence of `jobId`.
|
|
643
|
+
*/
|
|
644
|
+
/**
|
|
645
|
+
* One parameter the server corrected because the chosen model does not accept
|
|
646
|
+
* the value you sent (e.g. `gpt-image-2` has no 3:2 aspect ratio). The run
|
|
647
|
+
* proceeds with the corrected value rather than failing — this is how you find
|
|
648
|
+
* out what it actually used.
|
|
649
|
+
*
|
|
650
|
+
* Re-exports `@nodaro/shared`'s `ModelInputAdjustment` — the same shape the
|
|
651
|
+
* server's `normalizeModelInput` / `resolveNormalizedImageGen` populate — under
|
|
652
|
+
* the SDK's naming convention, rather than declaring a second copy of the
|
|
653
|
+
* fields.
|
|
654
|
+
*/
|
|
655
|
+
type RunNodeAdjustment = ModelInputAdjustment;
|
|
656
|
+
/**
|
|
657
|
+
* WHO is in the shot, as picker-catalog option ids — the `subject` field of
|
|
658
|
+
* `generate-image` (and `text-to-video`). The platform writes the wording from
|
|
659
|
+
* the ids you send; you never write prompt text for the subject. It composes
|
|
660
|
+
* with `prompt`: the subject clauses are folded in right after your prompt and
|
|
661
|
+
* ahead of any `direction`.
|
|
662
|
+
*
|
|
663
|
+
* A flat map of field → id(s):
|
|
664
|
+
* - **Keys** are the platform's own picker field names — every Person field
|
|
665
|
+
* (`type`, `age`, `ethnicity`, `hairBase`, `lipState`, …), every Styling
|
|
666
|
+
* field (`makeup`, `jewelry`, `outerwear`, …), and the prop keys `heldProp`,
|
|
667
|
+
* `material` and `animal`. They and their ids come from the picker catalogs:
|
|
668
|
+
* `pickerCatalogs.get("person")` / `get("styling")` list each dimension's
|
|
669
|
+
* `field` with its `options[].id`; `get("held-prop")`, `get("material")` and
|
|
670
|
+
* `get("animal")` write their `options[].id` to the catalog's `valueField`.
|
|
671
|
+
* - **Values** are one id or a list of ids. Ids past a dimension's own cap are
|
|
672
|
+
* dropped, not rejected.
|
|
673
|
+
* - **One number:** `customAge` (years, rounded and clamped to 0–120), read only
|
|
674
|
+
* when `age` is `"age-custom"`. A number on any other key does nothing.
|
|
675
|
+
* - **Bounds** (without `presetId`): at most 128 keys, 64 characters per key,
|
|
676
|
+
* 8 ids per key and 100 characters per id — a map over any of them is a 400
|
|
677
|
+
* `validation_error`. Unknown keys and unknown ids within them are skipped,
|
|
678
|
+
* and the job's `input_data.subject` records the ids that were used.
|
|
679
|
+
* - **With `presetId`** your `subject` replaces the preset's own and is folded
|
|
680
|
+
* into the preset's prompt, as `direction` and `structured` are: an over-long
|
|
681
|
+
* key, id or list is dropped rather than rejected, and `input_data` does not
|
|
682
|
+
* record the subject.
|
|
683
|
+
*
|
|
684
|
+
* Same type as `@nodaro/prompts`' `SubjectFields`, under the SDK's name.
|
|
685
|
+
*/
|
|
686
|
+
type Subject = SubjectFields;
|
|
687
|
+
/**
|
|
688
|
+
* Something you asked for that the run did not send, with why — e.g.
|
|
689
|
+
* `moodboard_images_not_sent`: some of a `moodboard:<id>` direction's images
|
|
690
|
+
* did not fit the model's reference limit after your own references. The run
|
|
691
|
+
* goes ahead; the same warnings are kept on the job's `input_data.warnings`.
|
|
692
|
+
*/
|
|
693
|
+
interface RunNodeWarning {
|
|
694
|
+
code: string;
|
|
695
|
+
message: string;
|
|
696
|
+
}
|
|
697
|
+
type RunNodeResult = {
|
|
698
|
+
jobId: string;
|
|
699
|
+
usageLogId?: string;
|
|
700
|
+
adjustments?: RunNodeAdjustment[];
|
|
701
|
+
warnings?: RunNodeWarning[];
|
|
702
|
+
[k: string]: unknown;
|
|
703
|
+
} | Record<string, unknown>;
|
|
704
|
+
/**
|
|
705
|
+
* Structured references — the editor's wired-reference shape — shared by
|
|
706
|
+
* `generate-image` and `generate-video`. The route assembles them server-side
|
|
707
|
+
* into per-ref `@image_N` directives and resolves `{image:N}` prompt tokens, so
|
|
708
|
+
* a direct SDK run binds inline references exactly like the canvas. Pass the
|
|
709
|
+
* same `ConnectedReference[]` the editor builds; the route dedupes + caps them
|
|
710
|
+
* to the provider's image-reference limit.
|
|
711
|
+
*/
|
|
712
|
+
interface StructuredReferenceParams {
|
|
713
|
+
/** Wired references assembled server-side (deduped + capped per provider). */
|
|
714
|
+
connectedReferences?: ConnectedReference[];
|
|
715
|
+
/**
|
|
716
|
+
* References you can NAME and DESCRIBE but have no media for — a cast role no
|
|
717
|
+
* entity is bound to yet, a character that exists only in the script. They
|
|
718
|
+
* carry no url, so nothing is attached and no `@image_N` seat is used: each
|
|
719
|
+
* becomes a `<Name> — <description>.` line, and a name left in the prompt
|
|
720
|
+
* prose reaches the model as a real, described subject. Up to 10.
|
|
721
|
+
*/
|
|
722
|
+
describedReferences?: DescribedReference[];
|
|
723
|
+
/** Reorder the assembled reference list by stable ref ids; renumbers `@image_N`. */
|
|
724
|
+
referenceOrder?: string[];
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* Captions for a node's video / audio rail references — INDEX-ALIGNED with
|
|
728
|
+
* `referenceVideoUrls` / `referenceAudioUrls`, so `referenceVideoCaptions[0]`
|
|
729
|
+
* describes `referenceVideoUrls[0]`. Each renders as `@video_N: <caption>.` /
|
|
730
|
+
* `@audio_N: <caption>.` in the assembled prompt and is bounded by the number of
|
|
731
|
+
* rail references that actually ship, so a caption can never bind a slot the
|
|
732
|
+
* payload dropped. A blank entry is a hole in the alignment, not a line.
|
|
733
|
+
*/
|
|
734
|
+
interface ReferenceCaptionParams {
|
|
735
|
+
referenceVideoCaptions?: string[];
|
|
736
|
+
referenceAudioCaptions?: string[];
|
|
737
|
+
}
|
|
738
|
+
/**
|
|
739
|
+
* Typed request body for `nodes.run("text-to-speech", …)` / `runAndWait`.
|
|
740
|
+
* Common fields are typed; any other route field passes through.
|
|
741
|
+
*/
|
|
742
|
+
interface TextToSpeechParams extends GenerationSessionParams {
|
|
743
|
+
text: string;
|
|
744
|
+
/** A premade voice NAME (Rachel, George, …) or a library / custom voice id. */
|
|
745
|
+
voice?: string;
|
|
746
|
+
voiceType?: "premade" | "custom" | "library";
|
|
747
|
+
/** `elevenlabs-v4` (the default), `elevenlabs-v3`, `elevenlabs-v4-turbo`, `elevenlabs-turbo`, `elevenlabs-multilingual`. */
|
|
748
|
+
provider?: string;
|
|
749
|
+
stability?: number;
|
|
750
|
+
similarityBoost?: number;
|
|
751
|
+
style?: number;
|
|
752
|
+
speed?: number;
|
|
753
|
+
languageCode?: string;
|
|
754
|
+
/**
|
|
755
|
+
* Continuity across clips: the line spoken just BEFORE this one in the finished piece
|
|
756
|
+
* (the previous clip's text). Context, not spoken — a model that stitches (v4, Turbo, Multilingual; not v3) carries the
|
|
757
|
+
* intonation across the cut; others ignore it. Up to 1,000 characters (a 400 above, on a model that stitches).
|
|
758
|
+
*/
|
|
759
|
+
previousText?: string;
|
|
760
|
+
/** The line spoken just AFTER this one. Same rule as `previousText`. */
|
|
761
|
+
nextText?: string;
|
|
762
|
+
[k: string]: unknown;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Fields every job-creating request accepts beside its own params, on any
|
|
766
|
+
* route: the platform stamps them on the job it creates. Typed on every
|
|
767
|
+
* generation params type.
|
|
768
|
+
*/
|
|
769
|
+
interface GenerationSessionParams {
|
|
770
|
+
/** A session from `client.sessions.create()` — the job is born in it and
|
|
771
|
+
* shows in its feed. Must be one of yours (404 otherwise). */
|
|
772
|
+
sessionId?: string;
|
|
773
|
+
/** Your app's slug (`create-image`, …): stored on the job, and what
|
|
774
|
+
* `jobs.list({ origin })` filters on. Lowercase letters, digits, dashes. */
|
|
775
|
+
origin?: string;
|
|
776
|
+
}
|
|
777
|
+
/**
|
|
778
|
+
* Typed request body for `nodes.run("generate-image", …)` / `runAndWait`.
|
|
779
|
+
* Common fields are typed; any other route field passes through via the index
|
|
780
|
+
* signature (the route Zod-validates the full body).
|
|
781
|
+
*
|
|
782
|
+
* `count` above 1 or `models` makes several jobs in one call: the answer is a
|
|
783
|
+
* {@link GenerateImageBatchResult}, and {@link NodesResource.runBatchAndWait}
|
|
784
|
+
* (not `runAndWait`) waits for it.
|
|
785
|
+
*/
|
|
786
|
+
interface GenerateImageParams extends StructuredReferenceParams, GenerationSessionParams {
|
|
787
|
+
prompt?: string;
|
|
788
|
+
/**
|
|
789
|
+
* Apply a node preset (a factory id like `"generate-image/cinematic-still"`, from
|
|
790
|
+
* `presets.listFactory("generate-image")`, or one of yours) exactly as the editor does:
|
|
791
|
+
* its prompt and pre/post text, placeholder defaults, style, negative prompt and
|
|
792
|
+
* levers. Fields you pass override it; your `prompt` is wrapped in its pre/post text.
|
|
793
|
+
*/
|
|
794
|
+
presetId?: string;
|
|
795
|
+
/** Values for the preset's placeholders that have no default, e.g. `{ BRAND: "Acme" }`.
|
|
796
|
+
* Without them such a preset answers 400 `preset_variables_required`, naming them. */
|
|
797
|
+
presetVariables?: Record<string, string>;
|
|
798
|
+
/** The prompt as your user typed it, when `prompt` is a version your app
|
|
799
|
+
* expanded (filled-in fields, resolved references). Stored on the job as
|
|
800
|
+
* `input_data.userPrompt` to show what the user wrote; never sent to the
|
|
801
|
+
* model. Defaults to `prompt`. */
|
|
802
|
+
userPrompt?: string;
|
|
803
|
+
/** Pre & post text wrapped around `prompt` (a preset's words), joined the
|
|
804
|
+
* same way every AI prompt node joins them. */
|
|
805
|
+
promptPrefix?: string;
|
|
806
|
+
promptSuffix?: string;
|
|
807
|
+
provider?: string;
|
|
808
|
+
/** How many images to make, 1–4 — each its own job, one image each, under
|
|
809
|
+
* its own Idempotency-Key (`<key>:<i>`). With `models`, per model. */
|
|
810
|
+
count?: number;
|
|
811
|
+
/** 2–4 distinct image model ids: the same request runs on each, instead of
|
|
812
|
+
* `provider`. models × count is at most 8. With `presetId`, the preset is
|
|
813
|
+
* applied once per model. */
|
|
814
|
+
models?: string[];
|
|
815
|
+
/** With `count`, image i gets `seed + i` — one seed would draw the same image every time. */
|
|
816
|
+
seed?: number;
|
|
817
|
+
/** Flat reference image URLs — appended after `connectedReferences`. */
|
|
818
|
+
referenceImageUrls?: string[];
|
|
819
|
+
negativePrompt?: string;
|
|
820
|
+
/**
|
|
821
|
+
* Cinematic direction as catalog IDS — the route renders the wording. Two
|
|
822
|
+
* keys also take one of YOUR saved resources:
|
|
823
|
+
* - `colorLook: "palette:<id>"` (`paletteDirectionId(id)`) — the palette's
|
|
824
|
+
* colours, each by an everyday name and its hex, go into the prompt;
|
|
825
|
+
* - `style: "moodboard:<id>"` (`moodboardDirectionId(id)`) — the moodboard's
|
|
826
|
+
* description goes into the prompt and its images go to the model as style
|
|
827
|
+
* references, after your own references and up to the model's reference
|
|
828
|
+
* limit (the answer's `warnings` says when some did not fit). Its images
|
|
829
|
+
* are references, so on models priced per reference the run costs what is
|
|
830
|
+
* sent.
|
|
831
|
+
* A malformed one answers 400; one that is not yours (or was deleted) 404
|
|
832
|
+
* `direction_not_found`. The job keeps the id, so a re-run resolves it again.
|
|
833
|
+
* Not combinable with `presetId` yet (400 `validation_error`).
|
|
834
|
+
*/
|
|
835
|
+
direction?: DirectionFields;
|
|
836
|
+
/**
|
|
837
|
+
* WHO is in the shot — person, styling and props as picker-catalog ids
|
|
838
|
+
* ({@link Subject}). The platform writes the wording and folds it in after
|
|
839
|
+
* `prompt`, ahead of `direction`. With `presetId`, it replaces the preset's own
|
|
840
|
+
* and is folded into the preset's prompt (over-long values dropped, not 400).
|
|
841
|
+
*/
|
|
842
|
+
subject?: Subject;
|
|
843
|
+
/**
|
|
844
|
+
* The image to edit. Alone, the run is image-to-image on it (a text-to-image
|
|
845
|
+
* model runs as its image-to-image sibling); with `maskUrl`, an inpaint.
|
|
846
|
+
*/
|
|
847
|
+
baseImageUrl?: string;
|
|
848
|
+
/**
|
|
849
|
+
* Inpaint mask — white = the area to change, black = keep (what
|
|
850
|
+
* `generate-mask` writes). Needs a base: `baseImageUrl`, else the first
|
|
851
|
+
* `referenceImageUrls` entry. Works on EVERY image model: the result's masked
|
|
852
|
+
* area is composited back over the base, so everything outside the mask is
|
|
853
|
+
* the base's own pixels. On the models whose `IMAGE_MASK_MODE` is `"prompt"`
|
|
854
|
+
* (`@nodaro/shared`) the masked area's position is also described in the
|
|
855
|
+
* prompt; the rest rely on the composite alone. (A model that takes the mask
|
|
856
|
+
* itself is on `image-to-image` — `I2I_MASK_SUPPORT`.)
|
|
857
|
+
*/
|
|
858
|
+
maskUrl?: string;
|
|
859
|
+
/** 0–1: how far the result may move from the base (taken by the models in `I2I_STRENGTH_SUPPORT`). */
|
|
860
|
+
strength?: number;
|
|
861
|
+
/** 0–20: prompt adherence (taken by the models in `GUIDANCE_SCALE_SUPPORT`). */
|
|
862
|
+
guidanceScale?: number;
|
|
863
|
+
[k: string]: unknown;
|
|
864
|
+
}
|
|
865
|
+
/** One model's share of a generate-image batch. */
|
|
866
|
+
interface GenerateImageBatchGroup {
|
|
867
|
+
/** The model id as requested. */
|
|
868
|
+
model: string;
|
|
869
|
+
jobIds: string[];
|
|
870
|
+
/** Credits held for this model's images; absent where nothing is charged. */
|
|
871
|
+
credits?: number;
|
|
872
|
+
/** Parameters corrected for this model, as on a single call. */
|
|
873
|
+
adjustments?: RunNodeAdjustment[];
|
|
874
|
+
/** Something asked for that was not sent on this model (e.g. a moodboard past its reference limit), as on a single call. */
|
|
875
|
+
warnings?: RunNodeWarning[];
|
|
876
|
+
}
|
|
877
|
+
/**
|
|
878
|
+
* What `nodes.run("generate-image", …)` answers when `count` is above 1 or
|
|
879
|
+
* `models` is set: every job, grouped by model. The whole batch was checked
|
|
880
|
+
* against the balance and created, charged and queued together — or not at
|
|
881
|
+
* all (`InsufficientCreditsError`'s `required` is then the batch's total).
|
|
882
|
+
*/
|
|
883
|
+
interface GenerateImageBatchResult {
|
|
884
|
+
/** The first job — so code reading the single-image answer keeps working. */
|
|
885
|
+
jobId: string;
|
|
886
|
+
/** Every job: model by model, then image by image. */
|
|
887
|
+
jobIds: string[];
|
|
888
|
+
/** On every job of the batch as `input_data.batchId`; `jobs.list({ batchId })` lists them. */
|
|
889
|
+
batchId: string;
|
|
890
|
+
groups: GenerateImageBatchGroup[];
|
|
891
|
+
/** The groups' credits summed; absent where nothing is charged. */
|
|
892
|
+
totalCredits?: number;
|
|
893
|
+
/** Every job already existed and this request charged nothing: a repeat of an earlier request with the same Idempotency-Key. */
|
|
894
|
+
deduped?: true;
|
|
895
|
+
}
|
|
896
|
+
/**
|
|
897
|
+
* One job of a batch once {@link NodesResource.runBatchAndWait} stops waiting
|
|
898
|
+
* for it: its output, or the typed error that ended the wait — a
|
|
899
|
+
* `JobFailedError` (failed or cancelled), `JobHeldError` (held for review) or
|
|
900
|
+
* `JobTimeoutError`. One job's error never discards the others' images.
|
|
901
|
+
*/
|
|
902
|
+
type BatchJobOutcome = {
|
|
903
|
+
readonly jobId: string;
|
|
904
|
+
readonly model: string;
|
|
905
|
+
readonly status: "completed";
|
|
906
|
+
readonly output: NodeJobOutput;
|
|
907
|
+
} | {
|
|
908
|
+
readonly jobId: string;
|
|
909
|
+
readonly model: string;
|
|
910
|
+
readonly status: "error";
|
|
911
|
+
readonly error: NodaroError;
|
|
912
|
+
};
|
|
913
|
+
/** What {@link NodesResource.runBatchAndWait} resolves. */
|
|
914
|
+
interface GenerateImageBatchOutput {
|
|
915
|
+
/** The submit's answer: the ids, the groups, the credits. */
|
|
916
|
+
readonly batch: GenerateImageBatchResult;
|
|
917
|
+
/** Every job, in `batch.jobIds` order. */
|
|
918
|
+
readonly results: readonly BatchJobOutcome[];
|
|
919
|
+
}
|
|
920
|
+
/**
|
|
921
|
+
* Typed request body for `nodes.run("generate-video", …)` / `runAndWait`.
|
|
922
|
+
* Common fields are typed; any other route field passes through.
|
|
923
|
+
*/
|
|
924
|
+
interface GenerateVideoParams extends StructuredReferenceParams, ReferenceCaptionParams, GenerationSessionParams {
|
|
925
|
+
prompt?: string;
|
|
926
|
+
provider?: string;
|
|
927
|
+
/** Start-frame image (image-to-video). */
|
|
928
|
+
imageUrl?: string;
|
|
929
|
+
/** Closing frame, paired with `imageUrl` on models that support one. */
|
|
930
|
+
endFrameUrl?: string;
|
|
931
|
+
referenceImageUrls?: string[];
|
|
932
|
+
referenceVideoUrls?: string[];
|
|
933
|
+
referenceAudioUrls?: string[];
|
|
934
|
+
/**
|
|
935
|
+
* Identity inputs that keep a real person's face — a portrait + description
|
|
936
|
+
* per person, up to 3. Only models with a dedicated character channel take
|
|
937
|
+
* them (Gemini Omni: `gemini-omni-video`, `gemini-omni-flash`); any other
|
|
938
|
+
* model answers `400`. Distinct from `referenceImageUrls`, which a multimodal
|
|
939
|
+
* model treats as loose context. Cannot be combined with a start frame
|
|
940
|
+
* (`imageUrl`); each character uses 1 of the model's 7 input units (2 with a
|
|
941
|
+
* `bodyImageUrl`). Adds no credit charge. Give a character a `voice` to pin one
|
|
942
|
+
* voice persona (a Gemini preset + optional description / example line) across
|
|
943
|
+
* clips — up to 3 distinct voices a request.
|
|
944
|
+
*/
|
|
945
|
+
characterReferences?: VideoCharacterReference[];
|
|
946
|
+
/** How a start/end frame is reshaped before the model sees it. Default
|
|
947
|
+
* `"resolution"`: resize it to the pixel size that model actually renders,
|
|
948
|
+
* which is what stops the provider reshaping it mid-clip. `"ratio"` corrects
|
|
949
|
+
* only the aspect; `"original"` sends it untouched. */
|
|
950
|
+
frameFit?: "original" | "ratio" | "resolution";
|
|
951
|
+
/** Whether the frame travels as a real start frame or as a reference image
|
|
952
|
+
* bound in the prompt as the opening frame. Default `"auto"`, which picks per
|
|
953
|
+
* model. Ignored by models that take no reference images. */
|
|
954
|
+
frameDelivery?: "auto" | "frame" | "reference";
|
|
955
|
+
/** Seedance Draft (`seedance-2-5` only; ignored elsewhere): render a 480p
|
|
956
|
+
* DRAFT — it costs the same as a 480p run and any `resolution` is replaced
|
|
957
|
+
* by 480p. Finalize the take you like with `nodes.run("video-upscale",
|
|
958
|
+
* { provider: "seedance-2-5-hd", sourceJobId })`: the same take, frame for
|
|
959
|
+
* frame, at 1080p. Drafts are kept about 7 days. */
|
|
960
|
+
draft?: boolean;
|
|
961
|
+
[k: string]: unknown;
|
|
962
|
+
}
|
|
963
|
+
/**
|
|
964
|
+
* Typed request body for `nodes.run("text-to-video", …)` / `runAndWait` — the
|
|
965
|
+
* PROMPT-ONLY video lane (`POST /v1/text-to-video`).
|
|
966
|
+
*
|
|
967
|
+
* Which lane takes what: `text-to-video` renders from text (plus optional
|
|
968
|
+
* references) and `prompt` is REQUIRED; frames belong to `generate-video`
|
|
969
|
+
* alone, which is the image-to-video lane (`imageUrl` start frame, `endFrameUrl`
|
|
970
|
+
* closing frame) and where a prompt is optional. A model with no text-to-video
|
|
971
|
+
* mode answers this lane with a `400 image_required` naming itself.
|
|
972
|
+
*
|
|
973
|
+
* Common fields are typed; any other route field passes through.
|
|
974
|
+
*/
|
|
975
|
+
interface TextToVideoParams extends StructuredReferenceParams, ReferenceCaptionParams, GenerationSessionParams {
|
|
976
|
+
prompt: string;
|
|
977
|
+
provider?: string;
|
|
978
|
+
duration?: number;
|
|
979
|
+
/** Native audio toggle, on the models that render sound. */
|
|
980
|
+
sound?: boolean;
|
|
981
|
+
negativePrompt?: string;
|
|
982
|
+
aspectRatio?: string;
|
|
983
|
+
resolution?: string;
|
|
984
|
+
seed?: number;
|
|
985
|
+
referenceImageUrls?: string[];
|
|
986
|
+
referenceVideoUrls?: string[];
|
|
987
|
+
referenceAudioUrls?: string[];
|
|
988
|
+
/** Identity inputs that keep a real person's face — see {@link GenerateVideoParams.characterReferences}. */
|
|
989
|
+
characterReferences?: VideoCharacterReference[];
|
|
990
|
+
/** Cinematic direction as catalog IDS — the route renders the wording. */
|
|
991
|
+
direction?: DirectionFields;
|
|
992
|
+
/** WHO is in the shot as picker-catalog ids ({@link Subject}), folded ahead of the direction clauses. */
|
|
993
|
+
subject?: Subject;
|
|
994
|
+
/** Seedance Draft (`seedance-2-5` only; ignored elsewhere): render a 480p
|
|
995
|
+
* DRAFT — it costs the same as a 480p run and any `resolution` is replaced
|
|
996
|
+
* by 480p. Finalize the take you like with `nodes.run("video-upscale",
|
|
997
|
+
* { provider: "seedance-2-5-hd", sourceJobId })`: the same take, frame for
|
|
998
|
+
* frame, at 1080p. Drafts are kept about 7 days. */
|
|
999
|
+
draft?: boolean;
|
|
1000
|
+
[k: string]: unknown;
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* Typed request body for `nodes.run("video-upscale", …)` / `runAndWait`.
|
|
1004
|
+
*
|
|
1005
|
+
* - `topaz` (default): upscale any `videoUrl` by `upscaleFactor`.
|
|
1006
|
+
* - `veo-1080p` / `veo-4k`: re-render a VEO generation by its `taskId`.
|
|
1007
|
+
* - `seedance-2-5-hd`: finalize a Seedance 2.5 DRAFT (a `draft: true` run) —
|
|
1008
|
+
* the same take re-rendered at 1080p at the draft's own length. Name the
|
|
1009
|
+
* draft by `sourceJobId` (its job id) or `taskId` (its providerTaskId). The
|
|
1010
|
+
* price comes from the draft (its length, and whether it used a reference
|
|
1011
|
+
* video), never from this body. A foreign, unfinished or non-draft source is
|
|
1012
|
+
* refused with a 4xx before anything is charged.
|
|
1013
|
+
*
|
|
1014
|
+
* Any other route field passes through.
|
|
1015
|
+
*/
|
|
1016
|
+
interface VideoUpscaleParams extends GenerationSessionParams {
|
|
1017
|
+
provider?: "topaz" | "veo-1080p" | "veo-4k" | "seedance-2-5-hd";
|
|
1018
|
+
videoUrl?: string;
|
|
1019
|
+
upscaleFactor?: "1" | "2" | "4";
|
|
1020
|
+
taskId?: string;
|
|
1021
|
+
sourceJobId?: string;
|
|
1022
|
+
[k: string]: unknown;
|
|
1023
|
+
}
|
|
1024
|
+
/**
|
|
1025
|
+
* Typed request body for `nodes.run("assemble-narrated-video", …)` / `runAndWait`.
|
|
1026
|
+
* Assembles blocks of video with audio narration into a single composed video.
|
|
1027
|
+
*/
|
|
1028
|
+
interface AssembleNarratedVideoParams extends GenerationSessionParams {
|
|
1029
|
+
blocks: {
|
|
1030
|
+
videoUrl: string;
|
|
1031
|
+
audioUrl?: string;
|
|
1032
|
+
}[];
|
|
1033
|
+
voiceVolume?: number;
|
|
1034
|
+
clipAudioVolume?: number;
|
|
1035
|
+
maxSlowdown?: number;
|
|
1036
|
+
trimStartFrames?: number;
|
|
1037
|
+
trimEndFrames?: number;
|
|
1038
|
+
[k: string]: unknown;
|
|
1039
|
+
}
|
|
1040
|
+
/**
|
|
1041
|
+
* Typed request body for `nodes.run("video-depth", …)` / `runAndWait` — turns a
|
|
1042
|
+
* video into a depth video (`POST /v1/video-depth`, near is bright, far is
|
|
1043
|
+
* dark). The completed job writes `videoUrl` (MP4) and `thumbnailUrl`.
|
|
1044
|
+
*
|
|
1045
|
+
* Two providers: `video-depth-anything` (the default, temporally consistent)
|
|
1046
|
+
* honours every lever below; `depth-anything-frames` (Depth Anything per
|
|
1047
|
+
* frame) takes `modelSize` and `colormap` only, and renders only `grayscale` /
|
|
1048
|
+
* `inferno`. A lever the chosen provider does not take is dropped and a
|
|
1049
|
+
* colormap it cannot render becomes `grayscale` — coerced, never rejected (a
|
|
1050
|
+
* value outside the vocabularies below is still a `400 validation_error`).
|
|
1051
|
+
*
|
|
1052
|
+
* The clip is measured before any credits are reserved. Too long answers
|
|
1053
|
+
* `400 video_too_long` (`video-depth-anything`: more than 2,400 frames or
|
|
1054
|
+
* 300 s; `depth-anything-frames`: more than 80 s); a clip that cannot be read
|
|
1055
|
+
* answers `400 video_unreadable`; a provider the deployment has turned off
|
|
1056
|
+
* answers `403 model_not_available`.
|
|
1057
|
+
*
|
|
1058
|
+
* Common fields are typed; any other route field passes through.
|
|
1059
|
+
*/
|
|
1060
|
+
interface VideoDepthParams extends GenerationSessionParams {
|
|
1061
|
+
/** The source video — a public http(s) URL. */
|
|
1062
|
+
videoUrl: string;
|
|
1063
|
+
/** Default `video-depth-anything`. */
|
|
1064
|
+
provider?: VideoDepthProvider;
|
|
1065
|
+
/** `small` / `base` / `large` (the default) — larger is more detailed and slower. */
|
|
1066
|
+
modelSize?: VideoDepthModelSize;
|
|
1067
|
+
/** Default `grayscale`. `depth-anything-frames` renders only `grayscale` / `inferno`. */
|
|
1068
|
+
colormap?: VideoDepthColormap;
|
|
1069
|
+
/** `video-depth-anything` only. Default `auto`. */
|
|
1070
|
+
resolution?: VideoDepthResolution;
|
|
1071
|
+
/** `video-depth-anything` only: render the original and the depth next to each other. */
|
|
1072
|
+
sideBySide?: boolean;
|
|
1073
|
+
[k: string]: unknown;
|
|
1074
|
+
}
|
|
1075
|
+
/**
|
|
1076
|
+
* The `output_data` shape a finalized generation job writes. Every async
|
|
1077
|
+
* generation node persists one (or more) of these media URLs to
|
|
1078
|
+
* `jobs.output_data` on completion — `generate-image` → `imageUrl`,
|
|
1079
|
+
* `generate-video` / `combine-videos` / `merge-video-audio` / `video-upscale` /
|
|
1080
|
+
* `video-depth` → `videoUrl` (+ `thumbnailUrl`), `text-to-speech` / `generate-music` →
|
|
1081
|
+
* `audioUrl` (a `text-to-speech` run with `withTimestamps: true` on a model
|
|
1082
|
+
* that returns timings, and every `text-to-dialogue` run on one, also carries
|
|
1083
|
+
* `transcript`). Resolved by {@link NodesResource.runAndWait}. Extra fields may be
|
|
1084
|
+
* present, so the index signature is open.
|
|
1085
|
+
*/
|
|
1086
|
+
/**
|
|
1087
|
+
* The completed `social-search` job's `output_data`: EVERY post the search
|
|
1088
|
+
* found, in the order it asked for (Social Search, Nodaro Cloud). Picking the
|
|
1089
|
+
* posts a workflow passes on is an editor step; a direct caller gets them all.
|
|
1090
|
+
*/
|
|
1091
|
+
interface SocialSearchJobOutput extends NodeJobOutput {
|
|
1092
|
+
readonly json: readonly SocialPost[];
|
|
1093
|
+
readonly platform: SocialPlatform;
|
|
1094
|
+
readonly mode: SocialSearchMode;
|
|
1095
|
+
readonly query: string;
|
|
1096
|
+
/** Non-fatal notes ("only part of the results could be loaded"). */
|
|
1097
|
+
readonly warnings?: readonly string[];
|
|
1098
|
+
}
|
|
1099
|
+
interface NodeJobOutput {
|
|
1100
|
+
/** `text-to-speech` / `generate-music` / audio nodes write here. For
|
|
1101
|
+
* `audio-separation` this is the primary stem (vocals). */
|
|
1102
|
+
readonly audioUrl?: string;
|
|
1103
|
+
/** `audio-separation` (Demucs) per-stem URLs. `vocalUrl`/`instrumentalUrl`
|
|
1104
|
+
* in vocal/instrumental mode; the rest in full-stems mode. */
|
|
1105
|
+
readonly vocalUrl?: string;
|
|
1106
|
+
readonly instrumentalUrl?: string;
|
|
1107
|
+
readonly drumsUrl?: string;
|
|
1108
|
+
readonly bassUrl?: string;
|
|
1109
|
+
readonly otherUrl?: string;
|
|
1110
|
+
readonly guitarUrl?: string;
|
|
1111
|
+
readonly pianoUrl?: string;
|
|
1112
|
+
/** `generate-video` / `combine-videos` / `merge-video-audio` / `video-upscale` / `video-depth` write here. */
|
|
1113
|
+
readonly videoUrl?: string;
|
|
1114
|
+
/** `generate-image` / `edit-image` / `extract-frame` write here. */
|
|
1115
|
+
readonly imageUrl?: string;
|
|
1116
|
+
/** Every image, when the job made more than one; `imageUrl` is the first. */
|
|
1117
|
+
readonly imageUrls?: readonly string[];
|
|
1118
|
+
/**
|
|
1119
|
+
* The output's pixel size. On an image job: the size of `imageUrl` as it is
|
|
1120
|
+
* stored — what you download, a free-tier watermark included — with EXIF
|
|
1121
|
+
* orientation applied, so the size a browser shows. Lay a grid tile out
|
|
1122
|
+
* before the image loads, or show and sort by size.
|
|
1123
|
+
*
|
|
1124
|
+
* Present on image jobs completed after this release (and on the jobs that
|
|
1125
|
+
* always recorded it: image overlay, video overlay, video mask, mask
|
|
1126
|
+
* composite). Absent when the size could not be read — never half a size.
|
|
1127
|
+
*/
|
|
1128
|
+
readonly width?: number;
|
|
1129
|
+
readonly height?: number;
|
|
1130
|
+
/**
|
|
1131
|
+
* Beside `imageUrls`: each image with its pixel size, index-aligned
|
|
1132
|
+
* (`images[i]` is `imageUrls[i]`). Present on image jobs completed after
|
|
1133
|
+
* this release when at least one size was read; an entry whose size could
|
|
1134
|
+
* not be read has its `url` and no `width` / `height`.
|
|
1135
|
+
*/
|
|
1136
|
+
readonly images?: readonly JobOutputImage[];
|
|
1137
|
+
/** Poster frame for video outputs. */
|
|
1138
|
+
readonly thumbnailUrl?: string;
|
|
1139
|
+
readonly [k: string]: unknown;
|
|
1140
|
+
}
|
|
1141
|
+
/** One image of a job that made several — see {@link NodeJobOutput.images}. */
|
|
1142
|
+
interface JobOutputImage {
|
|
1143
|
+
readonly url: string;
|
|
1144
|
+
/** Pixel size as stored, EXIF orientation applied. Absent when it could not be read. */
|
|
1145
|
+
readonly width?: number;
|
|
1146
|
+
readonly height?: number;
|
|
1147
|
+
}
|
|
1148
|
+
/** Options for {@link NodesResource.runAndWait} and {@link NodesResource.runMany}. */
|
|
1149
|
+
interface RunAndWaitOptions {
|
|
1150
|
+
/**
|
|
1151
|
+
* Abort the run/poll loop. Aborting (or passing an already-aborted signal)
|
|
1152
|
+
* stops polling and rejects with {@link JobAbortedError}, whose `jobId`
|
|
1153
|
+
* names the job once it was submitted. Aborting stops the WAITING only: the
|
|
1154
|
+
* job keeps running and is charged, unless {@link cancelOnAbort} is set.
|
|
1155
|
+
*/
|
|
1156
|
+
readonly signal?: AbortSignal;
|
|
1157
|
+
/**
|
|
1158
|
+
* Also cancel the job when `signal` aborts after it was submitted
|
|
1159
|
+
* (`POST /v1/jobs/:id/cancel`, which refunds its credit hold). Best effort:
|
|
1160
|
+
* a failed cancel still rejects with the {@link JobAbortedError}. Default
|
|
1161
|
+
* `false` — aborting only stops waiting.
|
|
1162
|
+
*/
|
|
1163
|
+
readonly cancelOnAbort?: boolean;
|
|
1164
|
+
/** Called with each lean status the poll loop observes (running → terminal). */
|
|
1165
|
+
readonly onProgress?: (status: JobStatusResult) => void;
|
|
1166
|
+
/** Poll interval in ms. Default 2000. */
|
|
1167
|
+
readonly pollMs?: number;
|
|
1168
|
+
/** Wall-clock cap before giving up, in ms. Default ~15 min (900_000). */
|
|
1169
|
+
readonly maxMs?: number;
|
|
1170
|
+
/**
|
|
1171
|
+
* `Idempotency-Key` for the submit half. Reuse the same value when retrying a
|
|
1172
|
+
* call that timed out, so the run is not started or charged twice. Omitted →
|
|
1173
|
+
* no key, which is the historical behaviour for every node that does not
|
|
1174
|
+
* require one.
|
|
1175
|
+
*/
|
|
1176
|
+
readonly idempotencyKey?: string;
|
|
1177
|
+
}
|
|
1178
|
+
/** Per-call transport controls for {@link NodesResource.run}. */
|
|
1179
|
+
interface RunNodeOptions {
|
|
1180
|
+
/** `Idempotency-Key` header. See {@link RunAndWaitOptions.idempotencyKey}. */
|
|
1181
|
+
readonly idempotencyKey?: string;
|
|
1182
|
+
}
|
|
1183
|
+
/** One settled result from {@link NodesResource.runMany}. */
|
|
1184
|
+
interface RunManyResult {
|
|
1185
|
+
readonly jobId: string;
|
|
1186
|
+
readonly output: NodeJobOutput;
|
|
1187
|
+
}
|
|
1188
|
+
declare class NodesResource {
|
|
1189
|
+
private client;
|
|
1190
|
+
/** Runs poll through `jobs`, so the client must carry that resource too. */
|
|
1191
|
+
constructor(client: NodaroClientCore & {
|
|
1192
|
+
readonly jobs: JobsResource;
|
|
1193
|
+
});
|
|
1194
|
+
/** List all known node descriptors. Server caches publicly for 5 minutes. */
|
|
1195
|
+
list(): Promise<{
|
|
1196
|
+
data: NodeDescriptor[];
|
|
1197
|
+
}>;
|
|
1198
|
+
/** Get a single node descriptor by type slug (e.g. "generate-image"). */
|
|
1199
|
+
get(type: string): Promise<{
|
|
1200
|
+
data: NodeDescriptor;
|
|
1201
|
+
}>;
|
|
1202
|
+
/**
|
|
1203
|
+
* Run a single node directly without wrapping it in a workflow. Posts
|
|
1204
|
+
* `params` as the request body to the node's API route. Most use
|
|
1205
|
+
* `POST /v1/<type>`; the rest are listed in `NODE_RUN_ROUTES` (exported by
|
|
1206
|
+
* `@nodaro/shared`): scene authoring uses `/v1/3d-scene/generate|edit`,
|
|
1207
|
+
* `llm-chat` uses `/v1/llm-chat/generate`, the Suno nodes `/v1/suno/…`, the
|
|
1208
|
+
* social post nodes `/v1/social/publish` (a per-platform node fills in its
|
|
1209
|
+
* `platform` when you leave it out), and render-video with a planType uses
|
|
1210
|
+
* `/v1/render-video/plan`.
|
|
1211
|
+
*
|
|
1212
|
+
* A node type with no route of its own (`NODE_TYPES_WITHOUT_RUN_ROUTE`, e.g.
|
|
1213
|
+
* `modify-image`, which runs through `image-to-image`) rejects with a
|
|
1214
|
+
* {@link NodaroError} of code `node_not_runnable` naming what to run
|
|
1215
|
+
* instead, without calling the API. A type that runs only inside a workflow
|
|
1216
|
+
* (an input, trigger, utility or parameter node such as `upload-image`)
|
|
1217
|
+
* rejects the same way once the API answers that it has no such route; a
|
|
1218
|
+
* 404 about a missing resource stays a `NotFoundError`.
|
|
1219
|
+
*
|
|
1220
|
+
* This is the SDK equivalent of the MCP server's verb tools — and the
|
|
1221
|
+
* path the Nodaro CLI uses for `nodaro nodes run <type>`.
|
|
1222
|
+
*
|
|
1223
|
+
* Most node types are async: the response includes `{ jobId }` and the
|
|
1224
|
+
* actual generation runs on a worker. Poll `client.jobs.get(jobId)` until
|
|
1225
|
+
* completed. Synchronous node types (`meta-ads-scrape`, etc.) return their
|
|
1226
|
+
* full result without a `jobId` field.
|
|
1227
|
+
*
|
|
1228
|
+
* @param type Node type slug — must match an entry in the registry
|
|
1229
|
+
* returned by `list()` (e.g. "generate-image").
|
|
1230
|
+
* @param params Request body. Field names must match the node's
|
|
1231
|
+
* `inputSchema` (see `get(type).inputSchema`).
|
|
1232
|
+
*/
|
|
1233
|
+
run(type: "generate-3d-scene", params: GenerateScene3DParams): Promise<RunNodeResult>;
|
|
1234
|
+
run(type: "edit-3d-scene", params: EditScene3DParams): Promise<RunNodeResult>;
|
|
1235
|
+
run(type: "render-video", params: RenderScene3DParams): Promise<RunNodeResult>;
|
|
1236
|
+
run(type: "pro-3d-render", params: Pro3DRenderRunParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1237
|
+
run(type: "generate-image", params: GenerateImageParams & ({
|
|
1238
|
+
count: 2 | 3 | 4;
|
|
1239
|
+
} | {
|
|
1240
|
+
models: string[];
|
|
1241
|
+
}), options?: RunNodeOptions): Promise<GenerateImageBatchResult>;
|
|
1242
|
+
run(type: "generate-image", params?: GenerateImageParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1243
|
+
run(type: "text-to-speech", params: TextToSpeechParams): Promise<RunNodeResult>;
|
|
1244
|
+
run(type: "generate-video", params?: GenerateVideoParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1245
|
+
run(type: "text-to-video", params: TextToVideoParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1246
|
+
run(type: "video-to-video", params: VideoToVideoParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1247
|
+
run(type: "video-upscale", params: VideoUpscaleParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1248
|
+
run(type: "assemble-narrated-video", params?: AssembleNarratedVideoParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1249
|
+
run(type: "social-search", params: SocialSearchParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1250
|
+
run(type: "video-depth", params: VideoDepthParams, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1251
|
+
run(type: "image-to-image", params: ImageToImageParams, options?: RunNodeOptions): Promise<ImageJobStarted>;
|
|
1252
|
+
run(type: "edit-image", params: EditImageParams, options?: RunNodeOptions): Promise<ImageJobStarted>;
|
|
1253
|
+
run(type: "generate-mask", params: GenerateMaskParams, options?: RunNodeOptions): Promise<ImageJobStarted>;
|
|
1254
|
+
/** Synchronous and free: answers the tiles, no job. */
|
|
1255
|
+
run(type: "split-image", params: SplitImageParams, options?: RunNodeOptions): Promise<SplitImageResult>;
|
|
1256
|
+
run(type: string, params?: Record<string, unknown>, options?: RunNodeOptions): Promise<RunNodeResult>;
|
|
1257
|
+
/**
|
|
1258
|
+
* The price of a run before it starts (`POST /v1/quote`). Send exactly the
|
|
1259
|
+
* body you would send to {@link run}: the platform prices it with the same
|
|
1260
|
+
* code the run route reserves with — validation, measuring reference clips,
|
|
1261
|
+
* the price id and the credit amount — but starts nothing and charges
|
|
1262
|
+
* nothing.
|
|
1263
|
+
*
|
|
1264
|
+
* `reserve` is what the run will hold when it starts; `expected`, when
|
|
1265
|
+
* present, is what it should actually cost (a Seedance edit renders the
|
|
1266
|
+
* source clip's length). A run settles to what was generated, never above
|
|
1267
|
+
* `reserve`. Rejects with the same `400` the run would answer for an
|
|
1268
|
+
* invalid body. Typed for the video lanes; any other node type takes its
|
|
1269
|
+
* run body as-is.
|
|
1270
|
+
*
|
|
1271
|
+
* @param type Node type slug, as for {@link run}.
|
|
1272
|
+
* @param params The run body.
|
|
1273
|
+
*/
|
|
1274
|
+
quote(type: "text-to-video", params: TextToVideoParams): Promise<NodeQuote>;
|
|
1275
|
+
quote(type: "generate-video", params: GenerateVideoParams): Promise<NodeQuote>;
|
|
1276
|
+
quote(type: "video-to-video", params: VideoToVideoParams): Promise<NodeQuote>;
|
|
1277
|
+
quote(type: string, params?: Record<string, unknown>): Promise<NodeQuote>;
|
|
1278
|
+
/**
|
|
1279
|
+
* Run a single async node to completion: {@link run} it, extract the
|
|
1280
|
+
* `{ jobId }`, then client-poll `jobs.getStatus(jobId)` every `pollMs`
|
|
1281
|
+
* (default 2000) until a terminal status, up to `maxMs` (default ~15 min).
|
|
1282
|
+
*
|
|
1283
|
+
* Resolves the job's typed `output_data` ({@link NodeJobOutput}) on
|
|
1284
|
+
* `completed`. Throws (all typed, catchable by `instanceof`):
|
|
1285
|
+
* - {@link InsufficientCreditsError} / {@link StorageExceededError} etc. —
|
|
1286
|
+
* surfaced by the underlying {@link run} on 402/413/… before any poll.
|
|
1287
|
+
* - {@link JobFailedError} — terminal `failed`/`cancelled` (carries the
|
|
1288
|
+
* job's `error_message` + `jobId`).
|
|
1289
|
+
* - {@link JobTimeoutError} — `maxMs` deadline exceeded before terminal.
|
|
1290
|
+
* - {@link JobAbortedError} — `signal` fired (or was already aborted);
|
|
1291
|
+
* polling stops immediately.
|
|
1292
|
+
* - {@link JobHeldError} — the job entered `pending_review` on a deployment
|
|
1293
|
+
* that registers a job policy. Ends the poll on the FIRST held tick (that
|
|
1294
|
+
* status waits on a human, not on the job) and does NOT cancel it.
|
|
1295
|
+
* - {@link JobBlockedError} — a 422 from {@link run} before any poll: the
|
|
1296
|
+
* deployment's job policy refused the request outright.
|
|
1297
|
+
*
|
|
1298
|
+
* Polling is fully client-side (no server function blocks) — the same model
|
|
1299
|
+
* thin clients use, lifted out of their hand-rolled run→poll loops.
|
|
1300
|
+
*
|
|
1301
|
+
* @param type Node type slug (e.g. "generate-video"). See {@link run}.
|
|
1302
|
+
* @param params Request body — field names match the node's `inputSchema`.
|
|
1303
|
+
* @param opts `signal` / `onProgress` / `pollMs` / `maxMs`.
|
|
1304
|
+
*/
|
|
1305
|
+
runAndWait(type: "generate-3d-scene", params: GenerateScene3DParams, options?: RunAndWaitOptions): Promise<Scene3DJobOutput>;
|
|
1306
|
+
runAndWait(type: "edit-3d-scene", params: EditScene3DParams, options?: RunAndWaitOptions): Promise<Scene3DJobOutput>;
|
|
1307
|
+
runAndWait(type: "render-video", params: RenderScene3DParams, options?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1308
|
+
runAndWait(type: "pro-3d-render", params: Pro3DRenderRunParams, options?: RunAndWaitOptions): Promise<Pro3DRenderJobOutput>;
|
|
1309
|
+
runAndWait(type: "generate-image", params?: GenerateImageParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1310
|
+
runAndWait(type: "text-to-speech", params: TextToSpeechParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1311
|
+
runAndWait(type: "generate-video", params?: GenerateVideoParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1312
|
+
runAndWait(type: "text-to-video", params: TextToVideoParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1313
|
+
runAndWait(type: "video-to-video", params: VideoToVideoParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1314
|
+
runAndWait(type: "video-upscale", params: VideoUpscaleParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1315
|
+
runAndWait(type: "assemble-narrated-video", params?: AssembleNarratedVideoParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1316
|
+
runAndWait(type: "social-search", params: SocialSearchParams, opts?: RunAndWaitOptions): Promise<SocialSearchJobOutput>;
|
|
1317
|
+
runAndWait(type: "video-depth", params: VideoDepthParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1318
|
+
runAndWait(type: "image-to-image", params: ImageToImageParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1319
|
+
runAndWait(type: "edit-image", params: EditImageParams, opts?: RunAndWaitOptions): Promise<NodeJobOutput>;
|
|
1320
|
+
runAndWait(type: "generate-mask", params: GenerateMaskParams, opts?: RunAndWaitOptions): Promise<GenerateMaskJobOutput>;
|
|
1321
|
+
runAndWait<T extends string>(type: T, params?: Record<string, unknown>, opts?: RunAndWaitOptions): Promise<T extends "pro-3d-render" ? Pro3DRenderJobOutput : T extends "generate-3d-scene" | "edit-3d-scene" ? Scene3DJobOutput : T extends "generate-mask" ? GenerateMaskJobOutput : NodeJobOutput>;
|
|
1322
|
+
/**
|
|
1323
|
+
* Run a generate-image BATCH — `count` above 1 and/or `models` — to the end:
|
|
1324
|
+
* submit it once ({@link run}, with your `idempotencyKey` if any), then wait
|
|
1325
|
+
* for every job at once, each the way {@link runAndWait} waits.
|
|
1326
|
+
*
|
|
1327
|
+
* Resolves `{ batch, results }`: the submit's answer
|
|
1328
|
+
* ({@link GenerateImageBatchResult} — ids, groups by model, credits) and one
|
|
1329
|
+
* {@link BatchJobOutcome} per job, in `batch.jobIds` order — its output, or the
|
|
1330
|
+
* typed error that ended the wait for it. One image failing never discards the
|
|
1331
|
+
* others. Rejects only before any job exists (the submit's own errors, e.g.
|
|
1332
|
+
* `InsufficientCreditsError` with the batch total as `required`), and on
|
|
1333
|
+
* `signal` ({@link JobAbortedError}; `cancelOnAbort` cancels every job).
|
|
1334
|
+
*
|
|
1335
|
+
* A request for one image is refused before anything is sent (code
|
|
1336
|
+
* `not_a_batch`) — wait for it with {@link runAndWait}.
|
|
1337
|
+
*/
|
|
1338
|
+
runBatchAndWait(type: "generate-image", params: GenerateImageParams, opts?: RunAndWaitOptions): Promise<GenerateImageBatchOutput>;
|
|
1339
|
+
/**
|
|
1340
|
+
* Fan out N async runs of the same node `type` to completion concurrently —
|
|
1341
|
+
* the candidate-grid path (generate N stills/clips in parallel). Each runs
|
|
1342
|
+
* via {@link runAndWait}; resolves once ALL settle, to an array of
|
|
1343
|
+
* `{ jobId, output }` in input order. Rejects (and the rejection wins) if any
|
|
1344
|
+
* single run rejects — same typed errors as {@link runAndWait}, including
|
|
1345
|
+
* {@link JobHeldError} when one candidate is held for review while the
|
|
1346
|
+
* others complete. A shared `signal` aborts the whole batch.
|
|
1347
|
+
*
|
|
1348
|
+
* @param type Node type slug, applied to every entry.
|
|
1349
|
+
* @param paramsList One request body per candidate.
|
|
1350
|
+
* @param opts Shared `signal` / `cancelOnAbort` / `onProgress` / `pollMs` / `maxMs`.
|
|
1351
|
+
*/
|
|
1352
|
+
runMany(type: string, paramsList: Record<string, unknown>[], opts?: RunAndWaitOptions): Promise<RunManyResult[]>;
|
|
1353
|
+
/** {@link pollUntilSettled}, plus what an abort does to the job: it keeps
|
|
1354
|
+
* running unless `cancelOnAbort` asks to cancel it too, and the rejection
|
|
1355
|
+
* always names it (an abort landing mid-sleep carries no id of its own). */
|
|
1356
|
+
private pollJob;
|
|
1357
|
+
/** Poll an already-kicked job id until it stops moving; resolve output_data
|
|
1358
|
+
* or throw. Two non-terminal statuses end the loop: an abort, and
|
|
1359
|
+
* `pending_review` (a job policy held the output for a human — see
|
|
1360
|
+
* {@link JobHeldError}). */
|
|
1361
|
+
private pollUntilSettled;
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
export { type SplitImageParams as $, type AssembleNarratedVideoParams as A, type BatchJobOutcome as B, type RetainedScene3DEditParams as C, type RetainedScene3DEditResult as D, type EditImageCommonParams as E, type RunAndWaitOptions as F, type GenerateImageBatchGroup as G, type RunManyResult as H, type ImageJobStarted as I, type JobOutputImage as J, type RunNodeAdjustment as K, type RunNodeOptions as L, type RunNodeResult as M, type NodeCategory as N, type OutputType as O, type Pro3DRenderJobOutput as P, type QuoteAdjustment as Q, type ReferenceCaptionParams as R, type RunNodeWarning as S, SCENE3D_DELIVERY_ASSET_USAGE as T, type Scene3DAuthoringEngine as U, type Scene3DCapabilities as V, type Scene3DDelivery as W, type Scene3DDeliveryAsset as X, type Scene3DDeliveryAssetKind as Y, type Scene3DJobOutput as Z, type SocialSearchJobOutput as _, type EditImageFromTaskParams as a, type SplitImageResult as a0, type SplitImageTile as a1, type StructuredReferenceParams as a2, type Subject as a3, type TextToSpeechParams as a4, type TextToVideoParams as a5, type VideoDepthParams as a6, type VideoToVideoParams as a7, type VideoUpscaleParams as a8, type EditImageFromUrlParams as b, type EditImageParams as c, type EditScene3DParams as d, type GenerateImageBatchOutput as e, type GenerateImageBatchResult as f, type GenerateImageParams as g, type GenerateMaskJobOutput as h, type GenerateMaskParams as i, type GenerateScene3DParams as j, type GenerateVideoParams as k, type GenerationSessionParams as l, type ImageToImageParams as m, type NodeCreditRate as n, type NodeDescriptor as o, type NodeInputField as p, type NodeInputSchema as q, type NodeJobOutput as r, type NodeQuote as s, NodesResource as t, type Pro3DRenderParams as u, type Pro3DRenderQuote as v, type Pro3DRenderRunOptions as w, type Pro3DRenderRunParams as x, type QuoteWarning as y, type RenderScene3DParams as z };
|