Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
B
blender-addons-contrib
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
blender
blender-addons-contrib
Commits
733285cb
Commit
733285cb
authored
14 years ago
by
Yousef Harfoush
Browse files
Options
Downloads
Patches
Plain Diff
No commit message
No commit message
parent
272a6e9e
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
io_import_lipSync_Importer.py
+229
-86
229 additions, 86 deletions
io_import_lipSync_Importer.py
with
229 additions
and
86 deletions
io_import_lipSync_Importer.py
+
229
−
86
View file @
733285cb
...
@@ -17,52 +17,72 @@
...
@@ -17,52 +17,72 @@
# ##### END GPL LICENSE BLOCK #####
# ##### END GPL LICENSE BLOCK #####
bl_info
=
{
bl_info
=
{
"
name
"
:
"
LipSync Importer
"
,
"
name
"
:
"
LipSync Importer
& Blinker
"
,
"
author
"
:
"
Yousef Harfoush - bat3a ;)
"
,
"
author
"
:
"
Yousef Harfoush - bat3a ;)
"
,
"
version
"
:
(
0
,
2
,
0
),
"
version
"
:
(
0
,
2
,
6
),
"
blender
"
:
(
2
,
5
,
4
),
"
blender
"
:
(
2
,
5
,
6
),
"
api
"
:
3
2077
,
"
api
"
:
3
5816
,
"
location
"
:
"
3D window > Tool Shelf
"
,
"
location
"
:
"
3D window > Tool Shelf
"
,
"
description
"
:
"
Plot Papagayo
'
s voice file to frames
"
,
"
description
"
:
"
Plot Papagayo
'
s
(or Jlipsync)
voice file to frames
and adds automatic blinking
"
,
"
warning
"
:
""
,
"
warning
"
:
""
,
"
wiki_url
"
:
""
,
"
wiki_url
"
:
"
http://wiki.blender.org/index.php?title=Extensions:2.5/Py/Scripts/Import-Export/Lipsync_Importer
"
,
"
tracker_url
"
:
""
,
"
tracker_url
"
:
"
http://projects.blender.org/tracker/index.php?func=detail&aid=24080&group_id=153&atid=468
"
,
"
category
"
:
"
Import-Export
"
}
"
category
"
:
"
Import-Export
"
}
import
bpy
,
re
import
bpy
,
re
from
bpy.props
import
*
# intializing variables
mnulast
=
'
1
'
obj
=
bpy
.
context
.
object
scn
=
bpy
.
context
.
scene
typ
=
bpy
.
types
.
Scene
var
=
bpy
.
props
scn
[
'
offset
'
]
=
0
global
phnmlst
scn
[
'
skscale
'
]
=
0.8
phnmlst
=
"
rest
"
scn
[
'
easeIn
'
]
=
3
scn
[
'
easeOut
'
]
=
3
# truning off relative path - it causes an error if it was true
# truning off relative path - it causes an error if it was true
if
bpy
.
context
.
user_preferences
.
filepaths
.
use_relative_paths
==
True
:
if
bpy
.
context
.
user_preferences
.
filepaths
.
use_relative_paths
==
True
:
bpy
.
context
.
user_preferences
.
filepaths
.
use_relative_paths
=
False
bpy
.
context
.
user_preferences
.
filepaths
.
use_relative_paths
=
False
# add blinking
def
blinker
():
scn
=
bpy
.
context
.
scene
obj
=
bpy
.
context
.
object
global
blink
,
blinkphnm
blink
=
"
off
"
blinkphnm
=
1983
sk
=
len
(
obj
.
data
.
shape_keys
.
key_blocks
)
for
x
in
range
(
sk
):
obj
.
active_shape_key_index
=
x
if
obj
.
active_shape_key
.
name
==
"
blink
"
:
blink
=
"
on
"
;
blinkphnm
=
x
for
y
in
range
(
scn
[
'
blinkNm
'
]):
blinkSpm
=
scn
[
"
blinkSp
"
]
*
y
if
blinkphnm
!=
1983
:
crtkey
(
blinkphnm
,
blinkSpm
)
# mapping shape keys to phonemes vars.
# mapping shape keys to phonemes vars.
def
mapper
():
def
mapper
():
obj
=
bpy
.
context
.
object
global
AI
,
O
,
E
,
U
,
etc
,
L
,
WQ
,
MBP
,
FV
,
rest
global
AI
,
O
,
E
,
U
,
etc
,
L
,
WQ
,
MBP
,
FV
,
rest
global
AIphnm
,
Ophnm
,
Ephnm
,
Uphnm
,
etcphnm
,
Lphnm
global
AIphnm
,
Ophnm
,
Ephnm
,
Uphnm
,
etcphnm
,
Lphnm
global
WQphnm
,
MBPphnm
,
FVphnm
,
restphnm
global
WQphnm
,
MBPphnm
,
FVphnm
,
restphnm
AI
=
"
off
"
;
O
=
"
off
"
;
E
=
"
off
"
;
U
=
"
off
"
;
etc
=
"
off
"
;
L
=
"
off
"
AI
=
"
off
"
;
O
=
"
off
"
;
E
=
"
off
"
;
U
=
"
off
"
;
etc
=
"
off
"
;
L
=
"
off
"
WQ
=
"
off
"
;
MBP
=
"
off
"
;
FV
=
"
off
"
;
rest
=
"
off
"
WQ
=
"
off
"
;
MBP
=
"
off
"
;
FV
=
"
off
"
;
rest
=
"
off
"
sk
=
len
(
obj
.
data
.
shape_keys
.
keys
)
sk
=
len
(
obj
.
data
.
shape_keys
.
key
_block
s
)
for
x
in
range
(
sk
):
for
x
in
range
(
sk
):
obj
.
active_shape_key_index
=
x
obj
.
active_shape_key_index
=
x
if
obj
.
active_shape_key
.
name
==
"
AI
"
:
AI
=
"
on
"
;
AIphnm
=
x
if
obj
.
active_shape_key
.
name
==
"
AI
"
:
AI
=
"
on
"
;
AIphnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
O
"
:
O
=
"
on
"
;
Ophnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
O
"
:
O
=
"
on
"
;
Ophnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
E
"
:
E
=
"
on
"
;
Ephnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
E
"
:
E
=
"
on
"
;
Ephnm
=
x
...
@@ -73,70 +93,117 @@ def mapper():
...
@@ -73,70 +93,117 @@ def mapper():
elif
obj
.
active_shape_key
.
name
==
"
MBP
"
:
MBP
=
"
on
"
;
MBPphnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
MBP
"
:
MBP
=
"
on
"
;
MBPphnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
FV
"
:
FV
=
"
on
"
;
FVphnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
FV
"
:
FV
=
"
on
"
;
FVphnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
rest
"
:
rest
=
"
on
"
;
restphnm
=
x
elif
obj
.
active_shape_key
.
name
==
"
rest
"
:
rest
=
"
on
"
;
restphnm
=
x
# calling file splitter
# calling file splitter
spl
t
r
()
spl
itte
r
()
# reading imported file & creating keys
# reading imported file & creating keys
def
spl
t
r
():
def
spl
itte
r
():
scn
=
bpy
.
context
.
scene
f
=
open
(
scn
.
fpath
)
# importing file
f
=
open
(
scn
.
fpath
)
# importing file
f
.
readline
()
# reading the 1st line that we don"t need
f
.
readline
()
# reading the 1st line that we don"t need
print
(
"
hhhh
"
)
for
line
in
f
:
for
line
in
f
:
# removing new lines
# removing new lines
lsta
=
re
.
split
(
"
\n
+
"
,
line
)
lsta
=
re
.
split
(
"
\n
+
"
,
line
)
# building a list of frames & shapes indexes
# building a list of frames & shapes indexes
lst
=
re
.
split
(
"
:?
"
,
lsta
[
0
])
lst
=
re
.
split
(
"
:?
"
,
lsta
[
0
])
# making a list of a frame number &
frm
=
int
(
lst
[
0
])
frm
=
int
(
lst
[
0
])
# creat
ing
keys
#
passing to
creat
e
keys
if
lst
[
1
]
==
"
AI
"
and
AI
==
"
on
"
:
crtkey
(
AIphnm
,
frm
)
if
lst
[
1
]
==
(
"
AI
"
or
"
A
"
or
"
I
"
)
and
AI
==
"
on
"
:
crtkey
(
AIphnm
,
frm
)
elif
lst
[
1
]
==
"
O
"
and
O
==
"
on
"
:
crtkey
(
Ophnm
,
frm
)
elif
lst
[
1
]
==
"
O
"
and
O
==
"
on
"
:
crtkey
(
Ophnm
,
frm
)
elif
lst
[
1
]
==
"
E
"
and
E
==
"
on
"
:
crtkey
(
Ephnm
,
frm
)
elif
lst
[
1
]
==
"
E
"
and
E
==
"
on
"
:
crtkey
(
Ephnm
,
frm
)
elif
lst
[
1
]
==
"
U
"
and
U
==
"
on
"
:
crtkey
(
Uphnm
,
frm
)
elif
lst
[
1
]
==
"
U
"
and
U
==
"
on
"
:
crtkey
(
Uphnm
,
frm
)
elif
lst
[
1
]
==
"
etc
"
and
etc
==
"
on
"
:
crtkey
(
etcphnm
,
frm
)
elif
lst
[
1
]
==
(
"
etc
"
or
"
C
"
or
"
D
"
or
"
G
"
or
"
K
"
or
"
N
"
or
"
R
"
or
"
S
"
or
"
TH
"
or
"
SH
"
)
and
etc
==
"
on
"
:
crtkey
(
etcphnm
,
frm
)
elif
lst
[
1
]
==
"
L
"
and
L
==
"
on
"
:
crtkey
(
Lphnm
,
frm
)
elif
lst
[
1
]
==
"
L
"
and
L
==
"
on
"
:
crtkey
(
Lphnm
,
frm
)
elif
lst
[
1
]
==
"
WQ
"
and
WQ
==
"
on
"
:
crtkey
(
WQphnm
,
frm
)
elif
lst
[
1
]
==
(
"
WQ
"
or
"
W
"
or
"
Q
"
)
and
WQ
==
"
on
"
:
crtkey
(
WQphnm
,
frm
)
elif
lst
[
1
]
==
"
MBP
"
and
MBP
==
"
on
"
:
crtkey
(
MBPphnm
,
frm
)
elif
lst
[
1
]
==
(
"
MBP
"
or
"
M
"
or
"
P
"
or
"
B
"
)
and
MBP
==
"
on
"
:
crtkey
(
MBPphnm
,
frm
)
elif
lst
[
1
]
==
"
FV
"
and
FV
==
"
on
"
:
crtkey
(
FVphnm
,
frm
)
elif
lst
[
1
]
==
(
"
FV
"
or
"
F
"
or
"
V
"
)
and
FV
==
"
on
"
:
crtkey
(
FVphnm
,
frm
)
elif
lst
[
1
]
==
"
rest
"
and
rest
==
"
on
"
:
crtkey
(
restphnm
,
frm
)
elif
lst
[
1
]
==
(
"
rest
"
or
"
closed
"
)
and
rest
==
"
on
"
:
crtkey
(
restphnm
,
frm
)
# creating keys with offset and eases
# creating keys with offset and eases
def
crtkey
(
phoneme
,
Skey
):
def
crtkey
(
phoneme
,
Skey
):
global
phnmlst
scn
=
bpy
.
context
.
scene
obj
=
bpy
.
context
.
object
objSK
=
obj
.
data
.
shape_keys
objSK
=
obj
.
data
.
shape_keys
obj
.
active_shape_key_index
=
phoneme
obj
.
active_shape_key_index
=
phoneme
offst
=
scn
[
'
offset
'
]
# offset value
skVlu
=
scn
[
'
skscale
'
]
# shape key value
frmIn
=
scn
[
'
easeIn
'
]
# ease in value
frmOut
=
scn
[
'
easeOut
'
]
# ease out value
hldIn
=
scn
[
'
holdGap
'
]
# holding time value
if
bpy
.
context
.
scene
[
'
jlip
'
]
==
1
:
if
phnmlst
!=
phoneme
:
obj
.
active_shape_key
.
value
=
0.0
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
-
1
,
"
Lipsync
"
)
obj
.
active_shape_key
.
value
=
skVlu
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
,
"
Lipsync
"
)
obj
.
active_shape_key
.
value
=
0.0
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
+
1
,
"
Lipsync
"
)
phnmlst
=
phoneme
elif
bpy
.
context
.
scene
[
'
jlip
'
]
!=
1
:
obj
.
active_shape_key
.
value
=
0.0
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
-
frmIn
,
"
Lipsync
"
)
offst
=
scn
[
'
offset
'
]
# offset value
obj
.
active_shape_key
.
value
=
skVlu
skVlu
=
scn
[
'
skscale
'
]
# shape key value
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
frmIn
=
scn
[
'
easeIn
'
]
# ease in value
-
1
,
offst
+
Skey
,
"
Lipsync
"
)
frmOut
=
scn
[
'
easeOut
'
]
# ease out value
obj
.
active_shape_key
.
value
=
0.0
obj
.
active_shape_key
.
value
=
skVlu
objSK
.
keys
[
phoneme
].
keyframe_insert
(
"
value
"
,
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
-
frmIn
,
"
Lipsync
"
)
-
1
,
offst
+
Skey
+
hldIn
,
"
Lipsync
"
)
obj
.
active_shape_key
.
value
=
0.0
objSK
.
key_blocks
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
+
hldIn
+
frmOut
,
"
Lipsync
"
)
obj
.
active_shape_key
.
value
=
skVlu
# clearing vars
objSK
.
keys
[
phoneme
].
keyframe_insert
(
"
value
"
,
def
clear_properties
():
-
1
,
offst
+
Skey
,
"
Lipsync
"
)
obj
.
active_shape_key
.
value
=
0.0
objSK
.
keys
[
phoneme
].
keyframe_insert
(
"
value
"
,
-
1
,
offst
+
Skey
+
frmOut
,
"
Lipsync
"
)
# can happen on reload
if
bpy
.
context
.
scene
is
None
:
return
# creating ui button to running things
props
=
[
"
offset
"
,
"
skscale
"
,
"
easeIn
"
,
"
easeOut
"
,
"
blinkSp
"
,
"
blinkNm
"
,
"
holdGap
"
,
"
jlip
"
]
class
LipSync_go
(
bpy
.
types
.
Operator
):
for
p
in
props
:
bl_idname
=
'
LipSync_go
'
if
p
in
bpy
.
types
.
Scene
.
bl_rna
.
properties
:
exec
(
"
del bpy.types.Scene.
"
+
p
)
if
p
in
bpy
.
context
.
scene
:
del
bpy
.
context
.
scene
[
p
]
# creating ui button to run things
class
Lipsyncer
(
bpy
.
types
.
Operator
):
bl_idname
=
'
lipsync.go
'
bl_label
=
'
Start Processing
'
bl_label
=
'
Start Processing
'
bl_description
=
'
Plots the voice file keys to timeline
'
bl_description
=
'
Plots the voice file keys to timeline
'
def
execute
(
self
,
context
):
def
execute
(
self
,
context
):
scn
=
context
.
scene
obj
=
context
.
object
# testing if a mesh object with shape keys is selected
# testing if a mesh object with shape keys is selected
if
obj
!=
None
and
obj
.
type
==
"
MESH
"
:
if
obj
!=
None
and
obj
.
type
==
"
MESH
"
:
if
obj
.
data
.
shape_keys
!=
None
:
if
obj
.
data
.
shape_keys
!=
None
:
...
@@ -146,63 +213,139 @@ class LipSync_go(bpy.types.Operator):
...
@@ -146,63 +213,139 @@ class LipSync_go(bpy.types.Operator):
else
:
print
(
"
Object is not mesh or not selected
"
)
else
:
print
(
"
Object is not mesh or not selected
"
)
return
{
'
FINISHED
'
}
return
{
'
FINISHED
'
}
# drawing the user intreface
class
Blinker_go
(
bpy
.
types
.
Operator
):
class
LipSync_viewer
(
bpy
.
types
.
Panel
):
bl_idname
=
'
blink.go
'
bl_label
=
'
Start Processing
'
bl_description
=
'
Adds Random or Specifice blinks
'
def
execute
(
self
,
context
):
scn
=
context
.
scene
obj
=
context
.
object
# testing if a mesh object with blink shape keys is selected
if
obj
!=
None
and
obj
.
type
==
"
MESH
"
:
if
obj
.
data
.
shape_keys
!=
None
:
blinker
()
else
:
print
(
"
add shape keys PLEASE
"
)
else
:
print
(
"
Object is not mesh or not selected
"
)
return
{
'
FINISHED
'
}
class
mnuSelect
(
bpy
.
types
.
Operator
):
bl_idname
=
'
view.operator
'
bl_label
=
'
Operator
'
# define possible operations
modes
=
EnumProperty
(
items
=
((
'
1
'
,
'
Lipsyncer
'
,
'
1
'
),
(
'
2
'
,
'
Blinker
'
,
'
2
'
)))
def
execute
(
self
,
context
):
global
mnulast
# store the choosen selection
mnulast
=
self
.
properties
.
modes
return
{
'
FINISHED
'
}
# drawing the user interface
class
LipSyncUI
(
bpy
.
types
.
Panel
):
bl_space_type
=
"
VIEW_3D
"
bl_space_type
=
"
VIEW_3D
"
bl_region_type
=
"
TOOL_PROPS
"
bl_region_type
=
"
TOOL_PROPS
"
bl_label
=
"
LipSync Importer
"
bl_label
=
"
LipSync Importer & Blinker
"
typ
=
bpy
.
types
.
Scene
var
=
bpy
.
props
typ
.
fpath
=
var
.
StringProperty
(
name
=
"
Import File
"
,
description
=
"
Select your voice file
"
,
subtype
=
"
FILE_PATH
"
,
default
=
""
)
typ
.
skscale
=
var
.
FloatProperty
(
description
=
"
Smoothing shape key values
"
,
min
=
0.1
,
max
=
1.0
)
typ
.
offset
=
var
.
IntProperty
(
description
=
"
Offset your frames
"
)
typ
.
easeIn
=
var
.
IntProperty
(
description
=
"
Smoothing In curve
"
,
min
=
1
)
typ
.
easeOut
=
var
.
IntProperty
(
description
=
"
Smoothing Out curve
"
,
min
=
1
)
typ
.
holdGap
=
var
.
IntProperty
(
description
=
"
Holding for slow keys
"
,
min
=
0
)
typ
.
blinkSp
=
var
.
IntProperty
(
description
=
"
Space between blinks
"
,
min
=
1
)
typ
.
blinkNm
=
var
.
IntProperty
(
description
=
"
Number of blinks
"
,
min
=
1
)
typ
.
jlip
=
var
.
BoolProperty
(
description
=
"
Enable Jlipsync file
"
)
def
__init__
(
self
):
# intializing variables
props
=
[(
"
offset
"
,
0
),
(
"
skscale
"
,
0.8
),
(
"
easeIn
"
,
3
),
(
"
easeOut
"
,
3
),
(
"
blinkSp
"
,
100
),
(
"
blinkNm
"
,
10
),
(
"
holdGap
"
,
0
),
(
"
jlip
"
,
0
)]
for
p
,
num
in
props
:
if
not
p
in
bpy
.
context
.
scene
.
keys
():
bpy
.
context
.
scene
[
p
]
=
num
def
draw
(
self
,
context
):
def
draw
(
self
,
context
):
typ
.
fpath
=
var
.
StringProperty
(
name
=
"
Import File
"
,
description
=
"
Select your voice file
"
,
subtype
=
"
FILE_PATH
"
,
default
=
""
)
obj
=
bpy
.
context
.
object
typ
.
skscale
=
var
.
FloatProperty
(
description
=
"
Smoothing shape key values
"
,
min
=
0.1
,
max
=
1.0
)
typ
.
offset
=
var
.
IntProperty
(
description
=
"
Offset your frames
"
)
global
mnulast
typ
.
easeIn
=
var
.
IntProperty
(
description
=
"
Smoothing In curve
"
,
min
=
1
)
typ
.
easeOut
=
var
.
IntProperty
(
description
=
"
Smoothing Out curve
"
,
min
=
1
)
layout
=
self
.
layout
layout
=
self
.
layout
col
=
layout
.
column
()
if
obj
!=
None
:
if
obj
!=
None
:
if
obj
.
type
==
"
MESH
"
:
if
obj
.
type
==
"
MESH
"
:
col
=
layout
.
column
()
split
=
col
.
split
(
align
=
True
)
split
=
col
.
split
(
align
=
True
)
split
.
label
(
text
=
"
Selected object is:
"
,
icon
=
"
OBJECT_DATA
"
)
split
.
label
(
text
=
"
Selected object is:
"
,
icon
=
"
OBJECT_DATA
"
)
split
.
label
(
obj
.
name
,
icon
=
"
EDITMODE_HLT
"
)
split
.
label
(
obj
.
name
,
icon
=
"
EDITMODE_HLT
"
)
elif
obj
.
type
!=
"
MESH
"
:
elif
obj
.
type
!=
"
MESH
"
:
layout
.
row
().
label
(
text
=
"
Object is not a Mesh
"
,
icon
=
"
OBJECT_DATA
"
)
layout
.
row
().
label
(
text
=
"
Object is not a Mesh
"
,
icon
=
"
OBJECT_DATA
"
)
else
:
else
:
layout
.
label
(
text
=
"
No object is selected
"
,
icon
=
"
OBJECT_DATA
"
)
layout
.
label
(
text
=
"
No object is selected
"
,
icon
=
"
OBJECT_DATA
"
)
layout
.
prop
(
context
.
scene
,
"
fpath
"
)
layout
=
self
.
layout
col
=
layout
.
column
()
col
=
layout
.
column
()
col
.
label
(
"
Select Mode :
"
)
if
eval
(
mnulast
)
==
1
:
col
.
operator_menu_enum
(
'
view.operator
'
,
'
modes
'
,
'
Lipsyncer
'
)
col
.
prop
(
context
.
scene
,
"
fpath
"
)
col
.
prop
(
context
.
scene
,
"
jlip
"
,
"
Jlipsync Moho File
"
)
if
eval
(
mnulast
)
==
2
:
col
.
operator_menu_enum
(
'
view.operator
'
,
'
modes
'
,
'
Blinker
'
)
split
=
col
.
split
(
align
=
True
)
split
=
col
.
split
(
align
=
True
)
split
.
label
(
"
Shape
Key Value :
"
)
split
.
label
(
"
Key Value :
"
)
split
.
prop
(
context
.
scene
,
"
skscale
"
)
split
.
prop
(
context
.
scene
,
"
skscale
"
)
col
=
layout
.
column
()
split
=
col
.
split
(
align
=
True
)
split
=
col
.
split
(
align
=
True
)
split
.
label
(
"
Frame Offset :
"
)
split
.
label
(
"
Frame Offset :
"
)
split
.
prop
(
context
.
scene
,
"
offset
"
)
split
.
prop
(
context
.
scene
,
"
offset
"
)
col
=
layout
.
column
()
split
=
col
.
split
(
align
=
True
)
split
.
prop
(
context
.
scene
,
"
easeIn
"
,
"
Ease In
"
)
split
.
prop
(
context
.
scene
,
"
easeOut
"
,
"
Ease Out
"
)
col
=
layout
.
column
()
col
.
separator
()
col
.
operator
(
'
LipSync_go
'
,
text
=
'
Plote Keys PLEASE
'
)
if
bpy
.
context
.
scene
[
'
jlip
'
]
!=
1
:
split
=
col
.
split
(
align
=
True
)
split
.
prop
(
context
.
scene
,
"
easeIn
"
,
"
Ease In
"
)
split
.
prop
(
context
.
scene
,
"
holdGap
"
,
"
Hold Gap
"
)
split
.
prop
(
context
.
scene
,
"
easeOut
"
,
"
Ease Out
"
)
if
eval
(
mnulast
)
==
1
:
col
.
operator
(
'
lipsync.go
'
,
text
=
'
Plote Keys PLEASE
'
)
if
eval
(
mnulast
)
==
2
:
col
.
prop
(
context
.
scene
,
"
blinkSp
"
,
"
Spacing
"
)
col
.
prop
(
context
.
scene
,
"
blinkNm
"
,
"
Times
"
)
col
.
operator
(
'
blink.go
'
,
text
=
'
Blink Keys PLEASE
'
)
col
.
separator
()
col
.
separator
()
col
.
label
(
"
Version 0.21 Updated 27/9/2010
"
)
col
.
label
(
"
Version 0.26
"
)
col
.
label
(
"
Updated 30/03/2011
"
)
col
.
label
(
"
Yousef Harfoush
"
)
col
.
label
(
"
Yousef Harfoush
"
)
# registering the script
# registering the script
def
register
():
def
register
():
pass
bpy
.
utils
.
register_module
(
__name__
)
def
unregister
():
def
unregister
():
pass
bpy
.
utils
.
unregister_module
(
__name__
)
clear_properties
()
if
__name__
==
"
__main__
"
:
if
__name__
==
"
__main__
"
:
register
()
register
()
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment